M1K3
Memoria privada, documentos, voz y un LLM local para tus agentes de codificación, servidos en el dispositivo por la aplicación M1K3 para Mac. 18 herramientas sobre un servidor HTTP de bucle local protegido por tokens. Código fuente disponible.
Documentación
Tu agente ya conoce la web. M1K3 es el que te conoce a ti. Se ejecuta en tu Mac — tus documentos, tus recuerdos, un cerebro local, una voz — y responde a través de MCP en http://127.0.0.1:4242/mcp mientras la app está abierta. Tres comandos lo ponen frente a Claude Code, Codex, Cursor, VS Code o Zed.
$ brew trust round-tower/tap && brew install --cask round-tower/tap/m1k3
$ m1k3 login
$ m1k3 connect claude
La primera línea es Homebrew: la versión 6 te pide que confíes en un tap de terceros antes de instalar desde uno, y el cask instala la compilación nocturna de Developer ID de M1K3 y crea un enlace simbólico de m1k3 — el pequeño cliente de línea de comandos que viene dentro del paquete de la app — en tu PATH.
La segunda línea entrega a m1k3 el token de acceso del servidor. Cada solicitud al servidor MCP de M1K3 debe llevarlo; una solicitud sin él es rechazada con un 401. Cópialo desde la app (sección siguiente), ejecuta m1k3 login y pégalo. Lee el token con el eco desactivado, o a través de una tubería (pbpaste | m1k3 login), nunca desde la línea de comandos donde tu historial de shell lo conservaría. Cuando la app está en ejecución, verifica el token antes de guardarlo y lo mantiene en tu llavero de inicio de sesión.
La tercera línea escribe la entrada MCP para tu agente, con el token incluido, como un encabezado Authorization: Bearer. Cambia claude por codex, cursor, vscode o zed; añade --print para ver la configuración sin tocar un archivo.
Un interruptor, una vez
El servidor MCP está desactivado por defecto y vive dentro de la app: abre M1K3, luego Ajustes ▸ Privacidad ▸ Servidor MCP, y actívalo. El mismo panel muestra el token de acceso, enmascarado, con Copiar (para m1k3 login) y Nuevo token…. Un token nuevo desconecta a cada agente hasta que ejecutes m1k3 login y m1k3 connect de nuevo. El panel también tiene un selector para los cinco agentes con el fragmento, el token rellenado y un botón Copiar, si prefieres hacer clic en lugar de escribir.
Sin Homebrew
Descarga el M1K3.dmg firmado y notarizado desde GitHub Releases y arrástralo a Aplicaciones. Luego usa el selector en Ajustes ▸ Privacidad ▸ Servidor MCP, o ejecuta el mismo comando desde dentro del paquete:
$ /Applications/M1K3.app/Contents/Helpers/m1k3 login
$ /Applications/M1K3.app/Contents/Helpers/m1k3 connect claude
M1K3 necesita un Mac con Apple Silicon en macOS 26. No necesita una cuenta.
Por agente
Cinco clientes, y realmente difieren — así que connect hace lo seguro para cada uno y te dice qué hizo. Estos son los fragmentos que produce m1k3 connect <client> --print, con tu token donde estos muestran m1k3_…:
| Cliente | Qué hace connect | Dónde aterriza |
|---|---|---|
| Claude Code | Ejecuta el comando por ti | El registro propio de Claude Code |
| Cursor | Edita el archivo por ti | ~/.cursor/mcp.json |
| VS Code | Edita el archivo por ti | ~/Library/Application Support/Code/User/mcp.json |
| Codex | Lo imprime para pegar | ~/.codex/config.toml |
| Zed | Lo imprime para pegar | ~/.config/zed/settings.json |
los dos que edita conservan todos los demás servidores en el archivo y obtienen un .bak al lado la primera vez
Claude Code
$ claude mcp add --transport http -s user m1k3 http://127.0.0.1:4242/mcp --header "Authorization: Bearer m1k3_…"
-s user lo registra una vez para cada proyecto, que es el propósito de un residente. Si ya hay una entrada m1k3, connect la elimina y la añade de nuevo, para que una entrada anterior al token reciba el encabezado.
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_…" }
}
}
El esquema de ajustes de Zed se ha movido más de una vez — verifica la forma contra tu versión de Zed. Eso, y el TOML de Codex viviendo en un archivo lleno de tus propios ajustes, es por lo que esos dos imprimen en lugar de escribir.
Dile a tu agente que está ahí
Un servidor conectado que tu agente nunca piensa en llamar es un servidor desperdiciado. m1k3 agent-notes --write pliega este bloque en el AGENTS.md del proyecto — o CLAUDE.md, o cualquier ruta que nombres. Está delimitado por marcadores, así que ejecutarlo de nuevo reemplaza el bloque en lugar de apilar copias:
<!-- 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 -->
Cuatro líneas que un agente realmente obedecerá superan a un párrafo que hojea. Ejecuta m1k3 agent-notes sin argumentos para imprimirlo en su lugar.
Lo que tu agente obtiene
Dieciocho herramientas. La versión corta: puede preguntar a un cerebro local, buscar en tus propios documentos, guardar y recordar hechos entre sesiones, hablar y escuchar, y poner algo en tu lista de tareas sin quitarlo nunca.
| Herramienta | Qué hace |
|---|---|
| ask_m1k3 | Pregunta al cerebro local de M1K3, fundamentado en tus documentos y recuerdos |
| get_answer / list_jobs | Recoge una pregunta larga por id de trabajo; lista los trabajos en cola y terminados |
| search_knowledge | Busca en el conocimiento almacenado de M1K3 — documentos, llamadas, notas; recuperación híbrida (vectorial + texto completo) |
| list_documents | Lista elementos indexados con ids, tipos y títulos |
| get_document | Obtiene el texto de un elemento indexado por id |
| remember | Almacena texto en la memoria de M1K3, buscable en cada conversación futura |
| recall_memory | Recuerda hechos atómicos del grafo de memoria temporal |
| related_memory | El hecho que mejor coincide, más un paso hacia sus vecinos enlazados o reemplazados |
| forget_memory | Olvida permanentemente un hecho — la primitiva de consentimiento, la contraparte de remember |
| memory_stats | Cuántos hechos vivos recuerda actualmente M1K3 |
| speak / stop_speaking | Habla texto en voz alta a través de la voz de M1K3 (y anima el avatar); detente inmediatamente |
| listen | Escucha en el micrófono y devuelve la transcripción cuando el hablante hace una pausa |
| list_todos | Lee la lista de tareas del usuario — qué está abierto, qué está propuesto y aún no aceptado |
| propose_todo | Propone una tarea, sellada con el nombre de tu cliente. Solo el usuario puede aceptarla |
| get_status | Nivel de cerebro activo, estado de voz y banderas de ocupado |
| open_link | Abre una URL en el panel de revisión de M1K3, junto a la conversación |
Las puertas de consentimiento son deliberadas y asimétricas: un agente puede remember y puede forget_memory, pero solo puede proponer una tarea — aceptar, completar y descartar permanecen con la persona.
Lo que no hará
- No responderá a otra máquina. El oyente está fijado a
127.0.0.1en el socket, nunca a una dirección de interfaz, así que nada en tu red puede alcanzarlo. - No responderá a una página web. Las solicitudes cuyo encabezado
Hostno sea una dirección de bucle local son rechazadas, y unOriginque no sea una página de bucle local también es rechazado — la defensa estándar contra un sitio que usa tu navegador para alcanzar un servidor en tu propia máquina. - No se ejecutará mientras M1K3 esté cerrado. El servidor es parte de la app. Un servidor MCP "desconectado" casi siempre significa que la app no está abierta — por eso el bloque residente anterior le dice a tu agente que nunca se bloquee en él. El comando
m1k3abre la app misma y espera el puerto. - No responderá sin su token. Cada solicitud debe llevar el token de acceso como un encabezado
Authorization: Bearer; una sin él recibe un 401 antes de llegar a una sesión. El token mantiene fuera a scripts sueltos que encuentran el puerto abierto, y evita que un llamador sin él derribe a tu agente. No es una defensa contra malware que se ejecuta como tú, que puede leer el archivo de configuración de cualquier cliente. Los interruptores por herramienta en Ajustes (escuchar, eliminar recuerdos, abrir enlaces) cubren eso para cada llamador. - No escribirá tu configuración desde la compilación de App Store (TestFlight hoy). Esa copia de
m1k3está en sandbox, así que no puede ni leer~/.cursor/mcp.jsonni ejecutarclaudepor ti. Allí,connectimprime la configuración y lo dice. La compilación de Developer ID — el DMG y el cask de Homebrew — hace la escritura. - No servirá a dos agentes a la vez. Un cliente MCP a la vez, en esta versión: un segundo cliente que se conecta termina la sesión del primero.
- No enviará tus documentos o recuerdos a ningún lado. La recuperación, los embeddings, la inferencia y la voz se ejecutan en el Mac. Los cruces de red documentados de M1K3 no cambian al conectar un agente: una descarga de modelo única en la que optas, búsqueda web (activada por defecto, un interruptor en Ajustes para apagarla) y actualizaciones.
Preguntas frecuentes
¿La app M1K3 necesita estar en ejecución?
Sí, y el servidor tiene que estar activado. El servidor MCP vive dentro de la app, sirve en http://127.0.0.1:4242/mcp solo mientras M1K3 está abierto y está desactivado por defecto — actívalo una vez en Ajustes, Privacidad, Servidor MCP. Un servidor que tu agente reporta como desconectado casi siempre significa que la app está cerrada. El comando m1k3 abre la app por ti y espera hasta veinte segundos a que el puerto responda.
¿Qué agentes puede conectar m1k3 por mí?
Cinco, de dos maneras. Para Claude Code ejecuta el comando de registro propio de ese cliente; para Cursor y VS Code edita el único archivo JSON, conservando todos los demás servidores y dejando una copia .bak al lado la primera vez. Para Codex y Zed imprime el fragmento para que lo pegues, porque reescribir todo el archivo de ajustes de un editor por corazonada es lo incorrecto que una herramienta debería hacer.
¿Es seguro dejar el servidor MCP activado?
Se vincula a 127.0.0.1 y nada más, así que ninguna otra máquina puede alcanzarlo, y rechaza cualquier solicitud cuyo encabezado Host no sea una dirección de bucle local o cuyo Origin sea cualquier cosa menos una página de bucle local — la defensa contra una página web engañada para llamarlo. También quiere su token de acceso en cada solicitud, así que un script suelto que encuentra el puerto abierto recibe un 401. El token no es una defensa contra malware que se ejecuta como tú, que puede leer el archivo de configuración de cualquier cliente; los interruptores por herramienta para escuchar, eliminar recuerdos y abrir enlaces cubren eso. Déjalo activado mientras trabajas y trátalo como tratas a un shell.
¿Qué llega a la nube cuando mi agente usa M1K3?
No tus documentos o recuerdos: la recuperación, los embeddings, la inferencia y la voz se ejecutan en tu Mac. Las advertencias honestas: lo que tu agente lea a través de M1K3 se convierte en parte del contexto propio de ese agente, y un agente alojado en la nube envía su contexto a donde vayan sus conversaciones. Servidor local, reglas del cliente. Y los cruces de red propios de M1K3 no cambian — una descarga de modelo única en la que optas, búsqueda web (activada por defecto, así que una pregunta que M1K3 busca envía esa búsqueda a la web; un interruptor en Ajustes la apaga) y actualizaciones.
¿Cuánto cuesta?
Nada. M1K3 es gratuito para humanos — sin cuenta, sin suscripción, sin telemetría. El código fuente es público bajo la Licencia de Fuente Funcional (FSL-1.1-ALv2). Las organizaciones que quieren un cerebro compartido servido a muchas personas en su propio hardware tienen una licencia separada, M1K3 para Equipos.