M1K3
Memória privada, documentos, voz e um LLM local para seus agentes de codificação, servidos no dispositivo pelo aplicativo M1K3 para Mac. 18 ferramentas em um servidor HTTP de loopback protegido por token. Código-fonte disponível.
Documentação
Seu agente já conhece a web. M1K3 é o que conhece você. Ele roda no seu Mac — seus documentos, suas memórias, um cérebro local, uma voz — e responde via MCP em http://127.0.0.1:4242/mcp enquanto o app está aberto. Três comandos o colocam na frente do Claude Code, Codex, Cursor, VS Code ou Zed.
$ brew trust round-tower/tap && brew install --cask round-tower/tap/m1k3
$ m1k3 login
$ m1k3 connect claude
A primeira linha é o Homebrew: a versão 6 pede que você confie em um tap de terceiros antes de instalar a partir dele, e o cask então instala o build noturno de Developer ID do M1K3 e cria um symlink de m1k3 — o pequeno cliente de linha de comando que vem dentro do bundle do app — no seu PATH.
A segunda linha entrega a m1k3 o token de acesso do servidor. Toda requisição ao servidor MCP do M1K3 precisa carregá-lo; uma requisição sem ele é recusada com um 401. Copie-o do app (próxima seção), execute m1k3 login e cole. Ele lê o token com o echo desligado, ou via pipe (pbpaste | m1k3 login), nunca pela linha de comando onde o histórico do seu shell o manteria. Quando o app está rodando, ele verifica o token antes de salvá-lo e o mantém no seu chaveiro de login.
A terceira linha escreve a entrada MCP para o seu agente, com o token incluído, como um cabeçalho Authorization: Bearer. Troque claude por codex, cursor, vscode ou zed; adicione --print para ver a configuração sem tocar em nenhum arquivo.
Um interruptor, uma vez
O servidor MCP está desligado por padrão e vive dentro do app: abra o M1K3, depois Configurações ▸ Privacidade ▸ Servidor MCP, e ligue-o. O mesmo painel mostra o token de acesso, mascarado, com Copiar (para m1k3 login) e Novo Token…. Um novo token desconecta todos os agentes até você executar m1k3 login e m1k3 connect novamente. O painel também tem um seletor para todos os cinco agentes com o trecho, token preenchido, e um botão Copiar, se você preferir clicar a digitar.
Sem Homebrew
Baixe o M1K3.dmg assinado e notarizado dos Releases do GitHub e arraste-o para Aplicativos. Depois, use o seletor em Configurações ▸ Privacidade ▸ Servidor MCP, ou execute o mesmo comando de dentro do bundle:
$ /Applications/M1K3.app/Contents/Helpers/m1k3 login
$ /Applications/M1K3.app/Contents/Helpers/m1k3 connect claude
O M1K3 precisa de um Mac com Apple Silicon rodando macOS 26. Ele não precisa de uma conta.
Por agente
Cinco clientes, e eles realmente diferem — então connect faz a coisa segura para cada um e diz qual fez. Estes são os trechos que m1k3 connect <client> --print produz, com o seu token onde estes mostram m1k3_…:
| Cliente | O que connect faz | Onde ele vai parar |
|---|---|---|
| Claude Code | Executa o comando para você | Registro próprio do Claude Code |
| Cursor | Edita o arquivo para você | ~/.cursor/mcp.json |
| VS Code | Edita o arquivo para você | ~/Library/Application Support/Code/User/mcp.json |
| Codex | Imprime para colar | ~/.codex/config.toml |
| Zed | Imprime para colar | ~/.config/zed/settings.json |
os dois que ele edita mantêm todos os outros servidores no arquivo e ganham um .bak ao lado na primeira vez
Claude Code
$ claude mcp add --transport http -s user m1k3 http://127.0.0.1:4242/mcp --header "Authorization: Bearer m1k3_…"
-s user o registra uma vez para cada projeto, que é o objetivo de um residente. Se uma entrada m1k3 já estiver lá, connect a remove e a adiciona novamente, então uma entrada de antes do token ganha o cabeçalho.
Cursor — ~/.cursor/mcp.json
{
"mcpServers": {
"m1k3": {
"url": "http://127.0.0.1:4242/mcp",
"headers": { "Authorization": "Bearer m1k3_…" }
}
}
}
VS Code — ~/Library/Application Support/Code/User/mcp.json
{
"servers": {
"m1k3": {
"type": "http",
"url": "http://127.0.0.1:4242/mcp",
"headers": { "Authorization": "Bearer m1k3_…" }
}
}
}
Codex — ~/.codex/config.toml
[mcp_servers.m1k3]
url = "http://127.0.0.1:4242/mcp"
http_headers = { "Authorization" = "Bearer m1k3_…" }
Zed — ~/.config/zed/settings.json
"context_servers": {
"m1k3": {
"url": "http://127.0.0.1:4242/mcp",
"headers": { "Authorization": "Bearer m1k3_…" }
}
}
O esquema de configurações do Zed mudou mais de uma vez — verifique a forma contra a sua versão do Zed. Isso, e o TOML do Codex vivendo em um arquivo cheio das suas próprias configurações, é por que esses dois imprimem em vez de escrever.
Diga ao seu agente que ele está lá
Um servidor conectado que seu agente nunca pensa em chamar é um servidor desperdiçado. m1k3 agent-notes --write dobra este bloco no AGENTS.md do projeto — ou CLAUDE.md, ou qualquer caminho que você nomear. Ele é delimitado por marcadores, então executá-lo novamente substitui o bloco em vez de empilhar cópias:
<!-- m1k3:begin -->
## M1K3 is the resident
M1K3 is a local, private assistant running on this Mac, reachable over MCP. It
holds the user's own documents and memories — so before you search the web, ask
it: \`ask_m1k3\` for a grounded answer, \`search_knowledge\` for the sources behind
one. Persist a durable fact with \`remember\` and it is there next session too.
\`speak\` narrates aloud, which is often kinder than a wall of text.
M1K3 can be down — a "disconnected" MCP server just means the app is closed.
Never block on it; carry on without it.
<!-- m1k3:end -->
Quatro linhas que um agente realmente obedece vencem um parágrafo que ele apenas folheia. Execute m1k3 agent-notes sem argumentos para imprimi-lo em vez disso.
O que seu agente recebe
Dezoito ferramentas. A versão curta: ele pode perguntar a um cérebro local, pesquisar seus próprios documentos, manter e recordar fatos entre sessões, falar e ouvir, e colocar algo na sua lista de tarefas sem nunca tirá-lo dela.
| Ferramenta | O que ela faz |
|---|---|
| ask_m1k3 | Pergunta ao cérebro local do M1K3 uma questão, fundamentada nos seus documentos e memórias |
| get_answer / list_jobs | Coleta uma pergunta longa por id de job; lista os jobs enfileirados e concluídos |
| search_knowledge | Pesquisa o conhecimento armazenado do M1K3 — documentos, chamadas, notas; recuperação híbrida (vetorial + texto completo) |
| list_documents | Lista itens indexados com ids, tipos e títulos |
| get_document | Busca o texto de um item indexado por id |
| remember | Armazena texto na memória do M1K3, pesquisável em toda conversa futura |
| recall_memory | Recorda fatos atômicos do grafo de memória temporal |
| related_memory | Fato de melhor correspondência, mais um passo para seus vizinhos vinculados ou substituídos |
| forget_memory | Esquece permanentemente um fato — o primitivo de consentimento, o contraponto ao remember |
| memory_stats | Quantos fatos vivos o M1K3 lembra atualmente |
| speak / stop_speaking | Fala texto em voz alta através da voz do M1K3 (e anima o avatar); para imediatamente |
| listen | Escuta no microfone e retorna a transcrição quando o falante pausa |
| list_todos | Lê a lista de tarefas do usuário — o que está aberto, o que é proposto e ainda não aceito |
| propose_todo | Propõe uma tarefa, carimbada com o nome do seu cliente. Apenas o usuário pode aceitá-la |
| get_status | Nível ativo do cérebro, status da voz e flags de ocupado |
| open_link | Abre uma URL no painel de revisão do M1K3, ao lado da conversa |
Os portões de consentimento são deliberados e assimétricos: um agente pode remember e pode forget_memory, mas só pode propor uma tarefa — aceitar, concluir e dispensar permanecem com a pessoa.
O que ele não fará
- Ele não responderá a outra máquina. O ouvinte está fixado em
127.0.0.1no socket, nunca em um endereço de interface, então nada na sua rede pode alcançá-lo. - Ele não responderá a uma página web. Requisições cujo cabeçalho
Hostnão seja um endereço de loopback são recusadas, e umOriginque não seja uma página de loopback também é recusado — a defesa padrão contra um site usando seu navegador para alcançar um servidor na sua própria máquina. - Ele não rodará enquanto o M1K3 estiver fechado. O servidor faz parte do app. Um servidor MCP "desconectado" quase sempre significa que o app não está aberto — que é por que o bloco residente acima diz ao seu agente para nunca bloquear nele. O comando
m1k3abre o app em si e espera pela porta. - Ele não responderá sem seu token. Toda requisição tem que carregar o token de acesso como um cabeçalho
Authorization: Bearer; uma sem ele recebe um 401 antes de alcançar uma sessão. O token mantém fora scripts perdidos que encontram a porta aberta e impede um chamador sem ele de derrubar seu agente. Ele não é uma defesa contra malware rodando como você, que pode ler o arquivo de configuração de qualquer cliente. Os interruptores por ferramenta nas Configurações (ouvir, deletar memórias, abrir links) cobrem isso para todo chamador. - Ele não escreverá sua configuração a partir do build da App Store (TestFlight hoje). Essa cópia de
m1k3é sandboxed, então ela não pode nem ler~/.cursor/mcp.jsonnem executarclaudepara você. Lá,connectimprime a configuração e diz isso. O build de Developer ID — o DMG e o cask do Homebrew — faz a escrita. - Ele não atenderá dois agentes ao mesmo tempo. Um cliente MCP por vez, nesta versão: um segundo cliente conectando encerra a sessão do primeiro.
- Ele não enviará seus documentos ou memórias para lugar nenhum. Recuperação, embeddings, inferência e voz rodam no Mac. As travessias de rede documentadas do M1K3 não mudam ao conectar um agente: um download de modelo único que você opta por fazer, busca web (ligada por padrão, um interruptor nas Configurações para desligá-la) e atualizações.
Perguntas frequentes
O app M1K3 precisa estar rodando?
Sim, e o servidor tem que estar ligado. O servidor MCP vive dentro do app, atende em http://127.0.0.1:4242/mcp apenas enquanto o M1K3 está aberto e está desligado por padrão — ligue-o uma vez em Configurações, Privacidade, Servidor MCP. Um servidor que seu agente reporta como desconectado quase sempre significa que o app está fechado. O comando m1k3 abre o app para você e espera até vinte segundos pela porta responder.
Quais agentes o m1k3 pode conectar para mim?
Cinco, de duas maneiras. Para o Claude Code, ele executa o comando de registro próprio do cliente; para Cursor e VS Code, ele edita o único arquivo JSON, mantendo todos os outros servidores nele e deixando uma cópia .bak ao lado na primeira vez. Para Codex e Zed, ele imprime o trecho para você colar, porque reescrever o arquivo de configurações inteiro de um editor por palpite é a coisa errada para uma ferramenta fazer.
É seguro deixar o servidor MCP ligado?
Ele se liga a 127.0.0.1 e nada mais, então nenhuma outra máquina pode alcançá-lo, e ele recusa qualquer requisição cujo cabeçalho Host não seja um endereço de loopback ou cujo Origin seja qualquer coisa menos uma página de loopback — a defesa contra uma página web ser enganada para chamá-lo. Ele também quer seu token de acesso em toda requisição, então um script perdido que encontra a porta aberta recebe um 401. O token não é uma defesa contra malware rodando como você, que pode ler o arquivo de configuração de qualquer cliente; os interruptores por ferramenta para ouvir, deletar memórias e abrir links cobrem isso. Deixe-o ligado enquanto você trabalha e trate-o como trata um shell.
O que chega à nuvem quando meu agente usa o M1K3?
Não seus documentos ou memórias: recuperação, embeddings, inferência e voz rodam todas no seu Mac. As ressalvas honestas: o que seu agente lê através do M1K3 se torna parte do contexto do próprio agente, e um agente hospedado na nuvem envia seu contexto para onde suas conversas vão. Servidor local, regras do cliente. E as travessias de rede próprias do M1K3 não mudam — um download de modelo único que você opta por fazer, busca web (ligada por padrão, então uma pergunta que o M1K3 pesquisa envia essa busca para a web; um interruptor nas Configurações a desliga) e atualizações.
Quanto custa?
Nada. O M1K3 é gratuito para humanos — sem conta, sem assinatura, sem telemetria. O código-fonte é público sob a Licença de Fonte Funcional (FSL-1.1-ALv2). Organizações que querem um cérebro compartilhado servido a muitas pessoas no próprio hardware têm uma licença separada, M1K3 para Times.