presence-mcp

PyPI launcher that exposes the presence Claude Code plugin's living project model and outcome telemetry as MCP resources for Claude Desktop, Cursor, and Continue.

presence-mcp

PyPI Python versions License: MIT CI MCP Registry

PyPI launcher that exposes presence's living project model and outcome telemetry as MCP resources for Claude Desktop, Cursor, Continue, and other MCP-aware clients.

presence is a Claude Code plugin. It already ships a stdio MCP server at lib/cli.py mcp and exposes two read-only resources per repository (see What you get). This package is the PyPI shim that lets that server be listed in the official MCP Registry and invoked with a single command name in every per-client config, instead of an absolute path that varies per machine.

The launcher itself speaks no MCP. It locates a local presence install and forwards stdio to python lib/cli.py mcp. About 40 lines of Python, stdlib only.

Quick start

pip install presence-mcp

Then point any MCP client at the presence-mcp command. For Claude Desktop, that's:

{
  "mcpServers": {
    "presence": {
      "command": "presence-mcp"
    }
  }
}

Full per-client config for Cursor and Continue below. Requires Python 3.12+ and a local presence install.

What you get

Two read-only MCP resources, one per repository you've worked on:

URIContentMIME type
presence://<repo_id>/modelLiving model.md (Markdown)text/markdown
presence://<repo_id>/telemetryRecent commit / revert / verification claims (JSON array)application/json

<repo_id> is a 12-char SHA-256 prefix of the repo. The server resolves the current repo from the launcher's working directory; see Working-directory caveat. Resource schema and protocol details: presence's docs/mcp.md.

Per-client configuration

The same presence-mcp command works in every client.

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS), or the equivalent on Windows / Linux:

{
  "mcpServers": {
    "presence": {
      "command": "presence-mcp"
    }
  }
}

Cursor

.cursor/mcp.json in the project root, or the global Cursor MCP settings:

{
  "mcpServers": {
    "presence": {
      "command": "presence-mcp"
    }
  }
}

Continue

~/.continue/config.json:

{
  "mcpServers": [
    {
      "name": "presence",
      "command": "presence-mcp"
    }
  ]
}

Verify the install

The launcher accepts JSON-RPC on stdin. Pasting {"jsonrpc":"2.0","id":1,"method":"initialize"} and pressing Enter should yield an initialize response. You can also invoke it as python -m presence_mcp if a console script isn't convenient.

Environment variables

VariablePurpose
PRESENCE_MCP_CLIAbsolute path to presence's lib/cli.py. Overrides the default ~/.claude/plugins/presence/lib/cli.py lookup. If set but the path is missing, the launcher errors out instead of falling back, so typos surface.
PRESENCE_MCP_PYTHONPython interpreter to run presence with. Defaults to sys.executable of the launcher itself. Useful when presence is installed under a different Python (for example, a project venv).

If presence-mcp reports it could not locate presence, install presence at the standard Claude Code plugin path, or set PRESENCE_MCP_CLI.

Working-directory caveat

presence's MCP server resolves the current repo from the launcher's working directory via git rev-parse --show-toplevel. MCP clients that launch the server from a fixed directory will only see one repo. To switch repos, either launch a separate instance per project (set cwd in the client's per-server config), or restart the server from the target project root.

Compatibility

  • Python: 3.12 or newer. CI matrix covers 3.12 / 3.13 / 3.14.
  • presence: tested with >= 0.6.0. Older versions back to v0.4.1 (where the MCP server first shipped) may still work but are not exercised by CI.
  • Platforms: Linux and macOS exercised in CI. Windows is untested in v0.1.0. The launcher uses subprocess.run which is cross-platform, but the default presence install path (~/.claude/plugins/presence/lib/cli.py) needs a real Windows install to confirm. Report issues if you try it.

This launcher is protocol-agnostic: it does not rev when presence ships new MCP resources. It only revs when its own resolution logic, CLI surface, or server.json content changes.

Where to file issues

  • Launcher bugs (path detection, install errors, CLI argument forwarding): issues on this repo.
  • Resource-content bugs (what presence://*/model returns, telemetry schema, working-directory behavior, anything about the protocol itself): issues on the presence repo.

Disambiguation

presence's MCP server advertises serverInfo.name = "presence-mcp" in its initialize response. That's the server's MCP identity. This package is the PyPI launcher. The names match by intent.

Links

License

MIT. See LICENSE.

Related Servers