Ejemplos / Desktop MCP

Tu dispositivo, tus datos, tu agente

Un asistente personal de IA que corre 100% en el dispositivo. Sin nube. Sin Python. Tus datos nunca salen de tu máquina.

device_agent.toml

El problema

Siri envía tu voz a Apple. Google Assistant envía tus consultas a Google. Alexa envía todo a Amazon. Cada asistente "inteligente" requiere un salto a la nube. Tu calendario, contactos, mensajes y ubicación salen del dispositivo.

¿Y si pudieras tener un asistente capaz que nunca envía ni un byte fuera de tu máquina?

La config

device_agent.toml define un asistente completo en el dispositivo con inferencia LLM local y acceso a todos tus datos de Apple mediante iMCP: todo en 82 líneas de TOML.

Inferencia LLM local

[agent]
provider = "llama_cpp"
model = "unsloth/Qwen3-VL-8B-Instruct-GGUF:UD-Q6_K_XL"
assume_mutating = false
tools = [
  "create_task", "todowrite", "todoread",
  "question", "mdq",
  # All Apple data tools come from iMCP
  "iMCP.*",
]
Patrón wildcard de tools

"iMCP.*" es un wildcard que coincide con cada tool expuesta por el servidor MCP de iMCP. A medida que iMCP agrega servicios nuevos (Reminders, Notes, Shortcuts), el agente obtiene acceso automáticamente sin cambios de config.

Parámetros de modelo GPU

[agent.parameters]
n_ctx = 160000        # 160K context window
max_tokens = 8192        # Max response length
top_p = 0.95
top_k = 20
temperature = 0.9        # Creative but grounded
flash_attention = "enabled" # Faster inference
Autodetección de GPU

QueryMT autodetecta tu GPU (Metal en Apple Silicon, CUDA en NVIDIA, Vulkan en otros sistemas) y descarga la variante correcta de la imagen OCI. Sin config de drivers. Sin instalación del toolkit CUDA.

Compactación en tres capas para conversaciones largas

# Layer 1: Tool output truncation
[agent.execution.tool_output]
max_lines = 2000
max_bytes = 51200

# Layer 2: Pruning after every turn
[agent.execution.pruning]
protect_tokens = 40000

# Layer 3: AI summary on context overflow
[agent.execution.compaction]
auto = true

Las consultas de calendario y búsquedas de contactos devuelven datos estructurados. Pero las conversaciones largas con muchas llamadas a tools aun pueden llenar la ventana de contexto de 160K. El sistema de compactación en tres capas lo maneja automáticamente: trunca salidas grandes de tools, poda mensajes antiguos y resume cuando hace falta.

Servidor MCP: iMCP

# iMCP - local Apple data access
[[mcp]]
name = "iMCP"
transport = "stdio"
command = "/Applications/iMCP.app/Contents/MacOS/imcp-server"

Esto le indica a QueryMT que lance localmente el servidor MCP de iMCP. El agente se comunica con él por stdio: sin conexión de red involucrada. iMCP actúa como puente directo a las APIs nativas de Apple.

Arquitectura

Todo queda en el dispositivo. Ningún dato sale de tu máquina en ningún punto del pipeline:

Tu pregunta "¿Tengo tiempo para almorzar con Sarah?"
Agente (llama.cpp) Corre localmente en tu GPU. Decide qué tools llamar.
iMCP (stdio) Hace de puente hacia las APIs de Calendar, Contacts, Messages, Maps y Weather.
APIs de Apple Acceso nativo en el dispositivo. Sin salto de red.
Cero acceso de red

El LLM corre localmente mediante llama.cpp. Las llamadas a tools van a iMCP por stdio. iMCP llama a las APIs locales de Apple. En ningún momento tus datos atraviesan una conexión de red. El agente funciona offline.

Interacción de ejemplo

"¿Tengo tiempo para almorzar con Sarah hoy?"
Agente → Calendar
Lee los eventos de hoy. Encuentra una ventana libre de 12:00 a 13:00.
Agente → Contacts
Busca a Sarah. Encuentra su número de teléfono y ubicación preferida.
Agente → Messages
Revisa mensajes recientes con Sarah. Encuentra un hilo de la semana pasada sobre probar el nuevo restaurante italiano.
Agente → Maps
Estima el tiempo de traslado al área del restaurante preferido de Sarah. 15 minutos a pie.
El agente responde
"Tienes una ventana de 1 hora a las 12:00. Sarah mencionó la semana pasada que quería probar el restaurante italiano de la 5th; queda a 15 minutos a pie desde tu reunión de la tarde. ¿Quieres que agregue un evento al calendario?"

Funciones clave

  • 100% en el dispositivo — inferencia LLM local, acceso local a datos, sin nube
  • Integración con iMCP — Calendar, Contacts, Messages, Maps, Weather vía APIs nativas
  • Patrones wildcard de tools"iMCP.*" incluye automáticamente servicios nuevos
  • Autodetección de GPU — Metal/CUDA/Vulkan, sin config manual
  • Funciona offlinestdio como transporte, sin red necesaria
  • Compactación en tres capas — maneja conversaciones largas con muchas tools

Pruébalo tú mismo

# 1. Install iMCP
brew install --cask mattt/tap/iMCP
# Or download from https://iMCP.app/download

# 2. Open iMCP.app and enable services (Calendar, Contacts, etc.)

# 3. Run the agent
cargo run --example qmtcode --features dashboard --   confs/device_agent.toml --dashboard

# 4. Ask questions in the dashboard:
#   "What does my schedule look like today?"
#   "Do I have any messages from Sarah this week?"
#   "What's the weather like for my commute home?"