Примеры / Desktop MCP

Ваше устройство, ваши данные, ваш агент

Персональный AI-ассистент, который работает на 100% на устройстве. Без облака. Без Python. Ваши данные не покидают машину.

device_agent.toml

Проблема

Siri отправляет ваш голос в Apple. Google Assistant отправляет ваши запросы в Google. Alexa отправляет все в Amazon. Каждый "умный" ассистент требует прыжка в облако. Ваш календарь, контакты, сообщения и данные о местоположении покидают устройство.

Что, если бы у вас был мощный ассистент, который никогда не отправляет ни одного байта за пределы вашей машины?

Конфиг

device_agent.toml описывает полноценного on-device ассистента с локальным LLM inference и доступом ко всем вашим данным Apple через iMCP - и все это в 82 строках TOML.

Локальный LLM inference

[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",
  # Все инструменты данных Apple приходят из iMCP
  "iMCP.*",
]
Wildcard-паттерн для инструментов

"iMCP.*" - это wildcard, который совпадает с каждым инструментом, который экспортирует iMCP MCP server. Когда в iMCP появляются новые сервисы (Reminders, Notes, Shortcuts), агент автоматически получает к ним доступ без изменений в конфиге.

Параметры GPU-модели

[agent.parameters]
n_ctx = 160000        # Контекстное окно 160K
max_tokens = 8192        # Макс. длина ответа
top_p = 0.95
top_k = 20
temperature = 0.9        # Креативно, но приземленно
flash_attention = "enabled" # Более быстрый inference
Автоопределение GPU

QueryMT автоматически определяет ваш GPU (Metal на Apple Silicon, CUDA на NVIDIA, Vulkan в остальных случаях) и загружает правильный OCI-вариант образа. Без настройки драйверов. Без установки CUDA toolkit.

Трехслойное сжатие для долгих разговоров

# Слой 1: обрезка вывода инструментов
[agent.execution.tool_output]
max_lines = 2000
max_bytes = 51200

# Слой 2: pruning после каждого хода
[agent.execution.pruning]
protect_tokens = 40000

# Слой 3: AI summary при переполнении контекста
[agent.execution.compaction]
auto = true

Запросы к календарю и поиск по контактам возвращают структурированные данные. Но длинные разговоры с большим количеством вызовов инструментов все равно могут заполнить окно в 160K. Трехслойная система сжатия обрабатывает это автоматически: обрезает большие выводы инструментов, отбрасывает старые сообщения и суммирует разговор, когда это нужно.

MCP server: iMCP

# iMCP - локальный доступ к данным Apple
[[mcp]]
name = "iMCP"
transport = "stdio"
command = "/Applications/iMCP.app/Contents/MacOS/imcp-server"

Это указывает QueryMT локально запускать iMCP MCP server. Агент общается с ним через stdio - без какого-либо сетевого соединения. iMCP напрямую мостит к нативным API Apple.

Архитектура

Все остается на устройстве. Данные не покидают вашу машину ни на одном этапе пайплайна:

Ваш вопрос "Есть ли у меня время на обед с Sarah?"
Агент (llama.cpp) Работает локально на вашем GPU. Решает, какие инструменты вызывать.
iMCP (stdio) Мостит к API Calendar, Contacts, Messages, Maps, Weather.
API Apple Нативный доступ на устройстве. Без сетевого прыжка.
Нулевой сетевой доступ

LLM работает локально через llama.cpp. Вызовы инструментов идут к iMCP через stdio. iMCP вызывает локальные API Apple. Ваши данные ни в один момент не проходят через сетевое соединение. Агент работает офлайн.

Пример взаимодействия

Вы
"Есть ли у меня время на обед с Sarah сегодня?"
Агент → Calendar
Читает события на сегодня. Находит свободное окно с 12:00 до 13:00.
Агент → Contacts
Ищет Sarah. Находит ее номер телефона и желаемую локацию.
Агент → Messages
Просматривает недавние сообщения от Sarah. Находит тред с прошлой недели про новый итальянский ресторан.
Агент → Maps
Оценивает время в пути до района, где Sarah хотела поесть. 15 минут пешком.
Ответ агента
"У тебя есть свободный час в 12:00. На прошлой неделе Sarah упоминала, что хочет попробовать итальянское место на 5th - это в 15 минутах пешком от твоей послеобеденной встречи. Хочешь, я добавлю событие в календарь?"

Ключевые возможности

  • 100% on-device — локальный LLM inference, локальный доступ к данным, без облака
  • Интеграция с iMCP — Calendar, Contacts, Messages, Maps, Weather через нативные API
  • Wildcard-паттерны инструментов"iMCP.*" автоматически подхватывает новые сервисы
  • Автоопределение GPU — Metal/CUDA/Vulkan, без ручной настройки конфига
  • Работает офлайнstdio транспорт, сеть не нужна
  • Трехслойное сжатие — выдерживает длинные разговоры с большим количеством инструментов

Попробуйте сами

# 1. Установите iMCP
brew install --cask mattt/tap/iMCP
# Или загрузите с https://iMCP.app/download

# 2. Откройте iMCP.app и включите сервисы (Calendar, Contacts и т.д.)

# 3. Запустите агента
cargo run --example qmtcode --features dashboard --   confs/device_agent.toml --dashboard

# 4. Задавайте вопрос в 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?"