Fermi
Enables local browser automation and system interactions through a macOS bridge, providing tools that require a real hardware fingerprint and authenticated state.
Provides a Slack channel with its own inference loop, allowing users to interact with the agent via Slack webhooks.
Provides a Telegram channel with its own inference loop, allowing users to interact with the agent via Telegram webhooks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Fermiremember that I prefer dark mode in all my editors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Fermi
A portable AI control plane built as a single MCP server on Cloudflare Workers. Connect it to Claude.ai, Claude Desktop, Claude Code, Cursor, or ChatGPT and they share the same memory, the same permission model, and the same skills. For unattended channels (Telegram, Slack) it runs its own inference loop against the Anthropic API.
One server, one memory, one permission spine — the host changes, the agent doesn't.
Architecture in depth:
docs/ARCHITECTURE.md. Setup and day-to-day usage:docs/USAGE.md.
What it does
Cross-host memory — facts, preferences, and events in D1, recalled from any connected host. A nightly job summarizes sessions, de-duplicates near-identical memories by embedding similarity, and decays stale ones.
Skills — procedures stored as versioned
SKILL.mddocuments in R2 with metadata in D1. You can author them directly or promote them from a memory; a weekly job proposes draft skills from recent session summaries for you to refine.Permission spine — every tool declares a scope and a risk level. High-risk tools require a two-phase approval token. Mutating tools are blocked in plan mode. Shell code is screened against a blocklist. Every call is audited to D1.
Hooks — declarative, glob-matched deny-gates that run before a tool, evaluated with
deny > ask > allowprecedence (todaydenyis the enforced decision).Unified search — Reciprocal Rank Fusion (k=60) over capabilities, skills, memories, and message history, blending keyword, FTS5, and Vectorize semantic lanes.
Code mode — the
executetool runs JavaScript in an isolated Worker sandbox where capabilities are reachable ascodemode.<name>(...). Outbound HTTP goes through a gateway that injects secrets and enforces per-secret host allow-lists.Dual-lane browser — a headless cloud lane (Cloudflare Browser Rendering) for scraping and a headed local lane (a macOS bridge over Cloudflare Tunnel) for sites that need a real hardware fingerprint and authenticated state.
Channels & subagents — Telegram and Slack webhooks with their own inference loop;
team_spawnruns role-prompted subagents.Live Canvas — agent-driven UI over a Durable Object + WebSocket, persistent across turns and hosts.
Related MCP server: Memclaw
Architecture at a glance
MCP Hosts ─┐
Channels ──┼──► Cloudflare Worker ──► D1 · R2 · KV · Workers AI · Vectorize
Cron ──────┘ (FermiMCP + 3 DOs)Worker (
src/index.ts) routes MCP (/mcp,/sse), channels, OAuth, the/apps/*host, the canvas WebSocket, and cron dispatch. WhenFERMI_AUTH_ENABLEDistrue, an OAuth provider gates the MCP transports; otherwise they are open.Durable Objects:
FermiMCP(the agent, SQLite-backed),LiveCanvasDO,SandboxStorageDO,BrowserSessionDO.Storage: D1 (memory, sessions/messages + FTS5, audit, hooks, skills metadata, secrets metadata, oauth), R2 (skills, files, apps), KV (config, approval tokens), Workers AI (embeddings + summaries), Vectorize (semantic index).
See docs/ARCHITECTURE.md for the full diagram and data flow.
Two tool surfaces
Fermi exposes tools at two layers, and they are deliberately not identical:
Surface | Caller | Count |
MCP tools | connected hosts and channels | ~60 by default, ~85 with the macOS bridge enabled |
Sandbox capabilities | code passed to | 39 ( |
MCP tools by group (host-facing):
Group | Tools |
Memory |
|
Skills |
|
Search |
|
Code mode |
|
Filesystem |
|
Browser (cloud) |
|
Browser sessions |
|
Canvas |
|
Plan mode |
|
Team |
|
Hooks |
|
Secrets |
|
Meta |
|
Connectors |
|
Packages |
|
Retrievers |
|
OAuth |
|
macOS bridge (optional) | 25 |
Quick start
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⚠️ Deploy with
FERMI_AUTH_ENABLED:true(or set it inwrangler.jsoncvars). Without it the MCP transports are completely unauthenticated on a publicworkers.devURL — anyone who finds it can read your memories, resolve your stored secrets, and run code. Open mode is forwrangler devonly.
Then seed the bundled skills and confirm the capability registry:
curl -X POST https://<worker>/admin/seed-skills -H "Authorization: Bearer $FERMI_BEARER_TOKEN"
curl https://<worker>/capabilities -H "Authorization: Bearer $FERMI_BEARER_TOKEN"Full instructions, including auth modes and channel setup, are in
docs/USAGE.md.
Prerequisites
Wrangler (
bun add -g wrangler)A Cloudflare account on the Workers Paid plan ($5/mo) — required for Durable Objects, Browser Rendering, and Vectorize
Development
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)Configuration
Secrets are set with wrangler secret put (values entered interactively):
Secret | Required | Purpose |
| yes | Encryption key for the secrets store |
| when | Owner password for the OAuth consent screen and |
| for admin HTTP endpoints | Gates |
| for channels / | Inference loop for unattended use |
| optional | Telegram channel |
| optional | Slack channel |
| optional | Local macOS bridge (enables the |
Auth mode is controlled by the FERMI_AUTH_ENABLED var. Set it to true to put the
MCP transports behind OAuth — recommended for every deployed instance. Leaving it
unset serves /mcp and /sse with no authentication, which is only appropriate for
local wrangler dev.
In OAuth mode, connecting hosts self-register and land on Fermi's consent screen,
which validates your owner secret and (once enrolled via totp_setup) a TOTP code:

Connecting a host
Claude.ai (web)
Settings → Connectors → add a custom connector, 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>/mcpCost
Single-user, expect ~$8–20/month: the Workers Paid plan ($5) plus variable Browser
Rendering and Anthropic API usage. D1/R2/KV/Vectorize stay near the free tier at this
volume. MCP hosts pay for their own inference; Fermi only spends on model calls in
unattended channels and team_spawn.
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP memory and agent control plane for durable conversations, jobs, and operations.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Manage portable AI agent playbooks, Agent Skills, MCP configurations, personas, and memory.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceShared memory for any MCP-compatible AI, enabling cross-platform knowledge persistence and retrieval so users' context, preferences, and project info follow them everywhere.3AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceGoverned shared memory platform for AI agents and agent fleets. Provides persistent memory, cross-agent knowledge sharing, permissions, audit trails, and multi-tenant isolation through a Model Context Protocol (MCP) server.4470Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA portable MCP server providing a shared intelligent memory system for any MCP-compatible AI tool, enabling storage, retrieval, extraction, and governance of memories across sessions.10MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that provides AI agents with persistent memory, cross-agent sharing, and context management, enabling them to remember conversations, track complex tasks, and evolve skills across tools.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/abel30567/fermi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server