Zvessa docs

Capabilities: MCP, your own keys, outside services

The Capabilities engine lets a space reach outside Zvessa, and lets anything outside build it. Three parts, all on the server, all under the same rule as everything else: changes are proposals a person approves, and every approved change is a version that can be undone.

People get the screens by adding the Connections kit (HQ → Library). It adds a Connections page with one system block, hq.connections. The engine itself works without the kit.

1. Build from anywhere (the MCP server) #

Any MCP client (Claude Desktop, Claude Code, Cursor, another app's AI) can build a space with the same tools as the in-app AI.

claude mcp add --transport http zvessa https://your-backend/mcp --header "Authorization: Bearer mbk_…"
ScopeToolsNeeds role permission
readget_space, read_blueprint, describe_library, list_proposals, list_versionsview (proposals, versions: manage)
proposepropose_change, add_kit, remove_kitmanage
approveapprove_proposal, discard_proposal, undo_to_versionmanage
data.readlist_recordsview
data.writeadd_record, update_record, delete_recordadd (others' records: edit)
connectionslist_connections, call_connectionview / manage

New tokens get read + propose: the client proposes, a person approves in the app. Give a token approve only for a client you'd let change the space on its own (it can still be undone; History shows "approved from <token name>"). Kids spaces can't have approving tokens.

The tools are described once in convex/lib/capabilities/tools.ts. The in-app AI gets the same ones (minus the outside-only reads it already has in its prompt, and minus approving). How to build, in words for an AI, is convex/lib/guide.ts: the in-app AI's instructions and the describe_library tool both come from it.

2. Your own keys (the vault) #

3. Outside services (connections) #

A connection is a setting in the blueprint, so the AI can propose one and a person approves it:

"connections": [
  { "id": "github", "name": "GitHub", "kind": "mcp", "url": "https://api.githubcopilot.com/mcp/",
    "auth": { "secret": "github", "as": "bearer" }, "tools": ["search_repositories", "create_issue"] },
  { "id": "weather", "name": "Weather", "kind": "http", "url": "https://api.example.com/v1",
    "auth": { "secret": "weather", "as": "query", "name": "key" } }
]

Files #