Note: Surface B (mcp) is in beta as of v1.0 — production-ready in v1.1.
Model Context Protocol felt experimental a year ago. By spring 2026 it isn't: over 500 public servers, official SDKs in TypeScript, Python, C#, Java, and Swift, first-party support from Anthropic, OpenAI, and Google DeepMind. MCP v1.27 shipped this quarter; the 2026 roadmap is about production-scale concerns (horizontal scaling, enterprise SSO, audit trails, Task lifecycle) rather than the protocol itself.
The hard part isn't the protocol anymore. It's having something useful to expose, and making the install one command.
That's what terso mcp is.
What it exposes
Three tools, each one a thin wrapper around something agents have wanted access to since they could call tools:
terso_get_context— returns the current project'sAGENTS.mdplus any synced files in.terso/generated/. Works fully offline. Surface A.terso_search— searches your Omnus knowledge base from inside an agent session. Surface B, beta.terso_capture— sends a fragment from the session to Omnus. Surface B, beta.
Only terso_get_context is production-ready today. The other two work
against the Omnus development instance and graduate from beta in v1.1.
Wire it up
Each client has its own config shape. terso mcp install --client <name>
prints the right one. Pick yours:
Claude Code
terso mcp install --client claude
Paste the snippet into .mcp.json (project) or ~/.claude.json
(user-wide). Restart Claude Code.
Cursor
terso mcp install --client cursor
Snippet goes in ~/.cursor/mcp.json or .cursor/mcp.json. Restart.
Codex CLI
terso mcp install --client codex
Codex CLI uses TOML — the snippet is a [mcp_servers.terso] block for
~/.codex/config.toml.
What's actually happening under the hood
terso mcp runs an MCP server over stdio. The agent client spawns it
on demand, talks JSON-RPC, and gets back tool definitions plus
tool-call results. The server identifies itself with the same version
string as terso --version, so you can tell at a glance which version
is wired up.
When the agent calls terso_get_context, the server reads AGENTS.md
and the files under .terso/generated/ (synced from Omnus), and
returns them inline. The agent puts them in its working context for
the rest of the session.
A note on trust
Local MCP servers run as you, with your filesystem and network access. That's intentional — it's what makes them useful — but it changes the threat model versus a sandboxed extension. Two practical defaults:
- Pin the version in your client's MCP config (
"args": ["mcp"]with a globally-installed pinnedterso-cli@1rather thannpx-on-each-call). - Don't put long-lived secrets in the same shell that runs the server.
tersoreads its Omnus token from~/.terso/config.jsonor theTERSO_API_TOKENenv var; either is fine, but make the choice consciously rather than by accident.
Prompt-injection risk on tool output applies here as much as anywhere
else: anything terso_search returns is untrusted text that ends up
in the model's context. Treat the returned snippets the way you'd
treat a third-party web page, not the way you'd treat your own commit
log.
The beta line
In v1.0, terso mcp prints a [beta v1.1] notice on first invocation:
[beta] Surface B (Omnus-connected) is in beta. Production-ready in v1.1-omnus-connected.
Set TERSO_SUPPRESS_BETA_NOTICE=1 to quiet it in scripted environments.
The notice goes away in v1.1, alongside the multi-tenant Omnus work.
What you get from five minutes of setup
Adding a custom MCP server used to mean writing one. With terso mcp,
you type one command, paste a snippet, restart your client — and the
session has access to your repo's canonical AGENTS.md plus, if you've
signed into Omnus, search and capture against shared knowledge. No
protocol code, no per-client integration.
The protocol is solved. The plumbing now is, too.
For where this is going next — what an MCP server needs to clear before it stops being a demo — see MCP after the honeymoon: designing for the Tasks primitive.