Skip to main content
Glama

Fermi

Портативный ИИ-контроллер, реализованный как единый MCP сервер на Cloudflare Workers. Подключите его к Claude.ai, Claude Desktop, Claude Code, Cursor или ChatGPT — и они будут использовать общую память, общую модель разрешений и общие навыки. Для неавтоматизированных каналов (Telegram, Slack) он запускает собственный цикл вывода через Anthropic API.

Один сервер, одна память, один каркас разрешений — хост меняется, агент остаётся.

Подробная архитектура: docs/ARCHITECTURE.md. Настройка и повседневное использование: docs/USAGE.md.

Что он делает

  • Кросс-хостовая память — факты, предпочтения и события в D1, доступные с любого подключённого хоста. Ночное задание обобщает сессии, дедуплицирует почти идентичные воспоминания по схожести эмбеддингов и удаляет устаревшие.

  • Навыки — процедуры, хранящиеся как версионированные документы SKILL.md в R2 с метаданными в D1. Вы можете создавать их напрямую или продвигать из памяти; еженедельное задание предлагает черновики навыков из недавних сводок сессий для доработки.

  • Каркас разрешений — каждый инструмент объявляет область действия и уровень риска. Инструменты с высоким риском требуют двухфазный токен одобрения. Изменяющие инструменты блокируются в режиме планирования. Код оболочки проверяется по блок-листу. Каждый вызов аудируется в D1.

  • Хуки — декларативные deny-гейты с glob-сопоставлением, выполняемые перед инструментом, с приоритетом deny > ask > allow (сейчас применяется только deny).

  • Единый поиск — Reciprocal Rank Fusion (k=60) по возможностям, навыкам, воспоминаниям и истории сообщений, объединяющий ключевые слова, FTS5 и семантические каналы Vectorize.

  • Режим кода — инструмент execute запускает JavaScript в изолированной песочнице Worker, где возможности доступны как codemode.<name>(...). Исходящий HTTP проходит через шлюз, который внедряет секреты и применяет списки разрешённых хостов для каждого секрета.

  • Двухполосный браузер — безголовое облачное направление (Cloudflare Browser Rendering) для скрейпинга и видимое локальное направление (macOS-мост через Cloudflare Tunnel) для сайтов, требующих реального аппаратного отпечатка и аутентифицированного состояния.

  • Каналы и субагенты — вебхуки Telegram и Slack с собственным циклом вывода; team_spawn запускает субагентов с ролевыми промптами.

  • Живой Canvas — управляемый агентом интерфейс на Durable Object + WebSocket, сохраняющийся между ходами и хостами.

Related MCP server: Nouva MCP Server

Архитектура вкратце

 MCP Hosts ─┐
 Channels ──┼──► Cloudflare Worker ──► D1 · R2 · KV · Workers AI · Vectorize
 Cron ──────┘     (FermiMCP + 3 DOs)
  • Worker (src/index.ts) маршрутизирует MCP (/mcp, /sse), каналы, OAuth, хост /apps/*, WebSocket канваса и cron-диспетчеризацию. Когда FERMI_AUTH_ENABLED равно true, OAuth-провайдер ограничивает MCP-транспорты; в противном случае они открыты.

  • Durable Objects: FermiMCP (агент, на SQLite), LiveCanvasDO, SandboxStorageDO, BrowserSessionDO.

  • Хранилище: D1 (память, сессии/сообщения + FTS5, аудит, хуки, метаданные навыков, метаданные секретов, oauth), R2 (навыки, файлы, приложения), KV (конфигурация, токены одобрения), Workers AI (эмбеддинги + сводки), Vectorize (семантический индекс).

Полная диаграмма и потоки данных — в docs/ARCHITECTURE.md.

Два уровня инструментов

Fermi предоставляет инструменты на двух уровнях, и они намеренно не идентичны:

Уровень

Вызывающий

Количество

MCP-инструменты

подключённые хосты и каналы

~60 по умолчанию, ~85 с включённым macOS-мостом

Возможности песочницы

код, передаваемый в execute, как codemode.<name>(...)

39 (meta_list_capabilities)

MCP-инструменты по группам (для хостов):

Группа

Инструменты

Память

memory_recall, memory_write, memory_update, memory_delete, memory_list_recent

Навыки

skill_search, skill_load, skill_set, skill_delete

Поиск

search (unified RRF), session_search

Режим кода

execute

Файловая система

fs_read, fs_write, fs_list (R2, scope-checked)

Браузер (облако)

browser_navigate, browser_screenshot, browser_extract, browser_action

Сессии браузера

browser_session_launch, browser_session_action, browser_session_close, browser_session_list, browser_session_request_human, browser_session_resume

Канвас

open_generated_ui, canvas_update

Режим планирования

session_set_mode, plan_draft, plan_approve

Команда

team_spawn

Хуки

hooks_register, hooks_list, hooks_test

Секреты

secret_set, secret_list, secret_delete, secret_resolve, secret_approve_host

Мета

meta_list_capabilities, usage_stats

Коннекторы

connector_set, connector_get, connector_list, connector_delete

Пакеты

package_set, package_get, package_list, package_delete

Ретриверы

retriever_set, retriever_run, retriever_get, retriever_list, retriever_delete

OAuth

oauth_register_client, oauth_get_client, oauth_list_clients, oauth_delete_client, oauth_authorize_url, totp_setup

macOS-мост (опционально)

25 mac_* инструментов, регистрируются только при установленном MACOS_MCP_URL

Быстрый старт

git clone <repo-url> fermi && cd fermi
bun install
wrangler login

chmod +x bootstrap.sh
./bootstrap.sh my-instance-name        # provisions D1, R2, KV, Vectorize; writes wrangler.jsonc

cd packages/worker
wrangler secret put FERMI_SECRETS_KEY   # required: encrypts stored secrets
wrangler secret put FERMI_OWNER_SECRET  # owner password for the OAuth consent screen
wrangler secret put FERMI_BEARER_TOKEN  # gates the admin HTTP endpoints
bun run migrate:remote
wrangler deploy --var FERMI_AUTH_ENABLED:true

⚠️ Разворачивайте с FERMI_AUTH_ENABLED:true (или установите его в vars в wrangler.jsonc). Без него MCP-транспорты полностью не аутентифицированы на публичном URL workers.dev — любой, кто его найдёт, сможет читать ваши воспоминания, получать сохранённые секреты и выполнять код. Открытый режим предназначен только для wrangler dev.

Затем загрузите встроенные навыки и проверьте реестр возможностей:

curl -X POST https://<worker>/admin/seed-skills -H "Authorization: Bearer $FERMI_BEARER_TOKEN"
curl https://<worker>/capabilities             -H "Authorization: Bearer $FERMI_BEARER_TOKEN"

Полные инструкции, включая режимы аутентификации и настройку каналов, — в docs/USAGE.md.

Предварительные требования

  • Bun

  • Wrangler (bun add -g wrangler)

  • Аккаунт Cloudflare на платном тарифе Workers ($5/мес) — требуется для Durable Objects, Browser Rendering и Vectorize

Разработка

bun run dev            # wrangler dev --local
bun run check          # Biome lint + format check
bun run format         # auto-format
bun run migrate:local  # apply D1 migrations locally
bun run test           # vitest (worker package)

Конфигурация

Секреты задаются командой wrangler secret put (значения вводятся интерактивно):

Секрет

Обязателен

Назначение

FERMI_SECRETS_KEY

да

Ключ шифрования для хранилища секретов

FERMI_OWNER_SECRET

когда FERMI_AUTH_ENABLED=true

Пароль владельца для экрана согласия OAuth и входа в /apps/*

FERMI_BEARER_TOKEN

для административных HTTP-эндпоинтов

Ограничивает /capabilities, /cron/capability-reindex, /admin/seed-skills

ANTHROPIC_API_KEY

для каналов / team_spawn

Цикл вывода для неавтоматизированного использования

TELEGRAM_BOT_TOKEN

необязательно

Канал Telegram

SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET

необязательно

Канал Slack

MACOS_MCP_URL, MACOS_MCP_TOKEN

необязательно

Локальный macOS-мост (включает инструменты mac_*)

Режим аутентификации управляется переменной FERMI_AUTH_ENABLED. Установите её в true, чтобы поместить MCP-транспорты за OAuth — рекомендуется для каждого развёрнутого экземпляра. Если она не задана, /mcp и /sse работают без аутентификации, что допустимо только для локального wrangler dev.

В режиме OAuth подключающиеся хосты саморегистрируются и попадают на экран согласия Fermi, который проверяет ваш секрет владельца и (после включения через totp_setup) код TOTP:

Fermi OAuth consent screen

Подключение хоста

Claude.ai (веб)

Настройки → Connectors → добавьте пользовательский коннектор, URL https://<worker>/sse.

Claude Desktop / Cursor / VS Code

{ "mcpServers": { "fermi": { "url": "https://<worker>/mcp" } } }

Claude Code

claude mcp add fermi --transport http https://<worker>/mcp

Стоимость

Для одного пользователя ожидайте ~$8–20 в месяц: платный тариф Workers ($5) плюс переменные расходы на Browser Rendering и использование Anthropic API. D1/R2/KV/Vectorize при таком объёме остаются вблизи бесплатного уровня. MCP-хосты оплачивают собственный вывод; Fermi тратит средства только на вызовы моделей в неавтоматизированных каналах и team_spawn.

Лицензия

MIT

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to share a unified profile—skills and memory—across different agent tools via a single MCP server, so they maintain context and recall preferences everywhere.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to maintain a persistent identity and structured memory—including reasoning patterns, episodic history, and knowledge—while exposing procedures for managing that memory over MCP.
    Apache 2.0