Skip to content

MCP API Reference

The desktop app's Rust backend ships a working local Model Context Protocol server in v0.6.0-beta: a real, compiled, loopback-only JSON-RPC 2.0 implementation. It has no button in the shipped app yet: the current interface (src-leptos) does not call it, so today it starts only via its Tauri commands directly (start_mcp_server, stop_mcp_server, mcp_server_status), not by clicking anything in the cockpit.

No UI toggle yet

An earlier draft of the app's frontend (a root-level index.html/main.ts, not part of the current build) sketched a Settings checkbox for this. That frontend was superseded by src-leptos (the one tauri.conf.json actually builds), which has no MCP UI at all. The backend commands are real and shipped; the button to reach them is not.

Reaching it today

Once started (via the Tauri commands above, default port 3456), the wire protocol matches this reference exactly. A Goose-compatible client config:

json
{ "mcpServers": { "loci": { "url": "http://localhost:3456" } } }

Compatible with Goose, Claude Code, and Continue.dev, or any MCP client that speaks HTTP JSON-RPC.

Resources

Three read templates under the loci:// URI scheme:

URIReturns
loci://locus/{id}A single locus
loci://room/{roomId}/lociEvery locus in a room
loci://search?q={query}Keyword search over locus titles and content

Tools

Two write tools, deliberately narrow:

  • create_locus(title, content, tags?, room_id?)
  • tag_locus(id, tags)

Nothing else is exposed. No delete, no room creation, no arbitrary file access.

Security model

  • Loopback-only. The listener binds 127.0.0.1 only; the bind is enforced before the port opens, requested port must fall in 1024–65535.
  • expose_rooms allowlist. ~/.loci/config.json carries an mcp.expose_rooms list. Empty means every room is exposed; a non-empty list scopes every resource and tool to just those rooms.
  • X-Loci-Content-Trust: user-authored is attached to every response: an attestation to the consuming agent that the content came from your own authored palace, not from an untrusted foreign source.
  • X-Loci-Threat-Gate: THREAT-01:enforced marks the standing rule that no conversation data (chat transcripts, session logs) is ever served through this path, only palace content you wrote.

See Architecture for where this sits in the stack, Security for the full inbound-surface picture, and the repo's desktop/README.md for the implementation-level MCP section.

Built by Hux × Vesper · Apache 2.0