CAMMUT/MCP

Self-hosted MCP gateway · v0.4.0

One endpoint.
Every agent.
Your server.

Register your MCP servers once. Give each agent its own scoped token. Cammut serves all of it through a single /mcp endpoint, and remembers your projects between sessions.

Four tools. Not four hundred.

An agent connected to ten MCP servers normally loads every tool schema of every server into its context. Cammut's default lazy profile exposes just four tools. The agent finds what it needs, reads one schema, and calls it.

01

cammut_servers

Which upstream servers can this token see, and are they reachable.

02

cammut_search

Find tools across every upstream by keyword. Stale lists are served instantly while one background refresh runs.

03

cammut_describe

Fetch the full schema of one tool, only when the agent is about to use it.

04

cammut_call

Call the tool. The token's scopes, the rate limit and the audit log apply to every call.

Prefer native tool lists for one agent? A token with the direct:UPSTREAM profile lists that upstream's tools directly.

Small on purpose

13 MB

static Go binary (image 24.9 MB)

17 MB

idle memory (RSS), 18 MB after 200 searches

~32 ms

cammut_search including auth and the audit write

1 file

SQLite database. No Redis, no queue, no cluster.

Measured on a 4-vCPU VPS, release 0.1 (2026-10-10). Later releases add features, not a runtime: the Go gate and the test suite run on every change.

What you get in 0.4.0

Scoped tokens

One token per agent. Scopes name the upstream and tool (github/*, hindsight/recall). Revoke one without touching the rest. Only the hash is stored.

Console

Password plus authenticator code, optional GitHub sign-in. Manage tokens and upstreams, read the audit log, write and retract memory notes.

Agent memory

Notes, a deterministic project brief at session start, recall on every prompt, and a handoff between agents. Adapters for Claude Code, Codex CLI and Warp.

Encrypted archive

Full transcripts stored as age ciphertext. The server cannot decrypt them: it has no key and no decrypt code.

Fails open

If Cammut or the network is down, hooks log one line and your agent keeps working. Nothing is deleted until it is proven archived.

Optional vectors

Recall is full-text by default. Point it at a text-embeddings-inference server and notes get vector recall as well.

Cammut or a hosted platform?

Pick Cammut if

  • you run your own MCP servers, or use remote ones with a bearer token;
  • you want agents, memory and transcripts to stay on a machine you control;
  • one operator, a few agents, a small VPS.

Pick a hosted platform if

  • you want a large managed catalogue of app integrations;
  • you want someone else to run OAuth flows for third-party apps;
  • you need multi-user administration at team scale.

Cammut does not try to be a catalogue. It is the part in the middle: one door, your keys, an audit trail, and memory that follows you from one agent to the next.

Honest limits

  • Built for one operator. Token scopes have no per-project dimension yet.
  • HTTP upstreams only; stdio servers are on the roadmap.
  • cammut_search matches English tool descriptions; multilingual search is planned.
  • No managed OAuth for third-party apps.

The full list, with what is verified and what is not, is on the limits page.