LABSCO SUMMARY
Read-only, no tools, and honest about the gotcha.
This is a narrow projection rather than a general server, and the narrowness is the point: nothing here can write, and the parts of presence that must not be tampered with are excluded by design. The limitation worth reading before you configure it is the working-directory one — the repo is resolved per request from the current directory, which is a known constraint the author documents rather than a bug you get to discover.
What it is
The MCP projection of presence, a Claude Code plugin that accumulates a per-repository project model and tracks what was committed and whether it stuck. This server makes that accumulated context readable by any MCP-aware client — Claude Desktop, Cursor, Continue, a custom agent — without going through Claude Code's hook plumbing. It is a resources-only server: it exposes no tools and writes nothing.
What you get
- Two read-only resources per repository you have worked in:
presence://<repo_id>/model, the living project notes as Markdown, andpresence://<repo_id>/telemetry, recent commit, revert and verification claims as JSON - The project model itself — notes each session builds and reuses about a repo, so the architecture is not re-derived from scratch every time
- Outcome telemetry rather than just history: what was committed, and then whether it was reverted, amended or closed, so a future session can see that the last three changes in this area did not survive
- A vanilla MCP
2024-11-05implementation over stdin and stdout, answeringinitialize,resources/listandresources/read; anything else returns a method-not-found error - A deliberate exclusion list: the tamper-evident audit log, the pending events queue, settings and the manifest lock are all not exposed, so an MCP client cannot read or disturb them
Requirements
No account, no key, no network — the transport is stdin and stdout, and the server reads only files under the presence state directory. It needs presence itself installed, which is a one-line installer, and Python 3.12 or newer. Start it with the plugin's CLI and the mcp subcommand, or install the presence-mcp launcher from PyPI so every client config can name one command. The working directory matters: the repository is resolved from the current directory at request time, so a desktop client that launches the server from a fixed directory only ever sees that one repo — run a separate instance per project, or set the working directory in the client's per-server config. Under the zerotrust preset, encrypted state is decrypted on read and the client receives plaintext over the local pipe, so choose which clients get access accordingly. Apache 2.0 licensed.
Setup effort
Follow the published steps
USE CASES
01
Giving another editor the context Claude Code built up
Read the living project model from Cursor or Claude Desktop instead of re-explaining the architecture.
02
Checking whether past changes here actually held
Read the telemetry resource for recent commits alongside reverts and verification claims.
03
Wiring it into several projects
Launch one instance per project with its working directory set, since the repo is resolved from that directory at request time.
04
Keeping the sensitive parts out of reach
The audit log, the events queue and the settings are not exposed at all, so an MCP client cannot read or race them.
INSTALLATION
Connect your client
Server setup
Install presence itself first — it is a Claude Code plugin, and the MCP server is a projection of its local state: curl -fsSL https://raw.githubusercontent.com/sara-star-quant/presence/main/install.sh | bash (append -s -- --bootstrap if you do not have Python 3.12+; alternatives: git clone + ~/code/presence/install.sh, or /plugin marketplace add github.com/sara-star-quant/presence then /plugin install presence)
Verify: ~/.claude/plugins/presence/install.sh --verify (exit 0 means ready)
Restart Claude Code and run /presence-status to confirm
Start the MCP server: python3 ~/.claude/plugins/presence/lib/cli.py mcp — or install the thin PyPI launcher (pip install presence-mcp, or pipx/uv tool install) and use the single command name presence-mcp
Add the mcpServers block to your client: Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json), Cursor (.cursor/mcp.json), or Continue (~/.continue/config.json — note Continue uses an ARRAY of {name, command, args}, not the usual object map)
Restart the client; the two presence resources appear in the resource picker
MCP Clients
Claude Desktop
CLAUDE DESKTOP · JSON
{
"mcpServers": {
"presence": {
"command": "python3",
"args": [
"/Users/<YOUR_USERNAME>/.claude/plugins/presence/lib/cli.py",
"mcp"
]
}
}
}<YOUR_USERNAME> is your macOS username — the installer puts presence at ~/.claude/plugins/presence.
Cursor
CURSOR · JSON
{
"mcpServers": {
"presence": {
"command": "python3",
"args": [
"~/.claude/plugins/presence/lib/cli.py",
"mcp"
]
}
}
}Cursor expands ~ itself; if yours does not, use the absolute path /Users/<YOUR_USERNAME>/.claude/plugins/presence/lib/cli.py.
Continue
CONTINUE · JSON
{
"mcpServers": [
{
"name": "presence",
"command": "python3",
"args": [
"<YOUR_PATH_TO_PRESENCE>/lib/cli.py",
"mcp"
]
}
]
}<YOUR_PATH_TO_PRESENCE>/lib/cli.py is the full path to the installed plugin, /Users/<YOUR_USERNAME>/.claude/plugins/presence/lib/cli.py — Continue starts the command without a shell, so ~ is not expanded.
Custom JSON-RPC client
CUSTOM JSON-RPC CLIENT · TERMINAL
python3 ~/.claude/plugins/presence/lib/cli.py mcp