Exemplos / Desktop MCP

Seu dispositivo, seus dados, seu agente

Um assistente pessoal de IA que roda 100% no dispositivo. Sem nuvem. Sem Python. Seus dados nunca saem da sua máquina.

device_agent.toml

O problema

Siri envia sua voz para a Apple. Google Assistant envia suas consultas para o Google. Alexa envia tudo para a Amazon. Todo assistente "inteligente" exige um salto para a nuvem. Seu calendário, contatos, mensagens e localização saem do dispositivo.

E se você pudesse ter um assistente capaz que nunca envie nem um byte para fora da sua máquina?

A config

device_agent.toml define um assistente completo no dispositivo com inferência LLM local e acesso a todos os seus dados da Apple via iMCP: tudo em 82 linhas de TOML.

Inferência 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.*",
]
Padrão wildcard de tools

"iMCP.*" é um wildcard que corresponde a cada tool exposta pelo servidor MCP do iMCP. À medida que o iMCP adiciona novos serviços (Reminders, Notes, Shortcuts), o agente obtém acesso automaticamente sem mudanças 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
Autodetecção de GPU

QueryMT autodetecta sua GPU (Metal em Apple Silicon, CUDA em NVIDIA, Vulkan em outros sistemas) e baixa a variante correta da imagem OCI. Sem config de drivers. Sem instalação do toolkit CUDA.

Compactação em três camadas para conversas longas

# 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

Consultas de calendário e buscas de contatos retornam dados estruturados. Mas conversas longas com muitas chamadas de tools ainda podem preencher a janela de contexto de 160K. O sistema de compactação em três camadas lida com isso automaticamente: trunca saídas grandes de tools, poda mensagens antigas e resume quando necessário.

Servidor MCP: iMCP

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

Isso indica ao QueryMT que inicie localmente o servidor MCP do iMCP. O agente se comunica com ele por stdio: sem conexão de rede envolvida. O iMCP atua como ponte direta para as APIs nativas da Apple.

Arquitetura

Tudo fica no dispositivo. Nenhum dado sai da sua máquina em nenhum ponto do pipeline:

Sua pérgunta "Tenho tempo para almoçar com Sarah?"
Agente (llama.cpp) Roda localmente na sua GPU. Decide quais tools chamar.
iMCP (stdio) Faz a ponte para as APIs de Calendar, Contacts, Messages, Maps e Weather.
APIs da Apple Acesso nativo no dispositivo. Sem salto de rede.
Zero acesso à rede

O LLM roda localmente via llama.cpp. As chamadas de tools vao para o iMCP por stdio. O iMCP chama as APIs locais da Apple. Em nenhum momento seus dados atravessam uma conexão de rede. O agente funciona offline.

Interação de exemplo

Você
"Tenho tempo para almoçar com Sarah hoje?"
Agente → Calendar
Lê os eventos de hoje. Encontra uma janela livre das 12:00 às 13:00.
Agente → Contacts
Busca a Sarah. Encontra o número de telefone e a localização preferida dela.
Agente → Messages
Revisa mensagens recentes com Sarah. Encontra uma conversa da semana passada sobre experimentar o novo restaurante italiano.
Agente → Maps
Estima o tempo de deslocamento até a área do restaurante preferido de Sarah. 15 minutos a pé.
O agente responde
"Você tem uma janela de 1 hora às 12:00. Sarah mencionou na semana passada que queria experimentar o restaurante italiano da 5th; fica a 15 minutos a pé da sua reunião da tarde. Quer que eu adicione um evento ao calendário?"

Recursos-chave

  • 100% no dispositivo — inferência LLM local, acesso local a dados, sem nuvem
  • Integração com iMCP — Calendar, Contacts, Messages, Maps, Weather via APIs nativas
  • Padrões wildcard de tools"iMCP.*" inclui automaticamente novos serviços
  • Autodetecção de GPU — Metal/CUDA/Vulkan, sem config manual
  • Funciona offlinestdio como transporte, sem rede necessária
  • Compactação em três camadas — lida com conversas longas com muitas tools

Teste você mesmo

# 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?"