Skip to content

Connect your MCP client

This page is the client-side companion to the MCP server feature overview: how to connect the three MCP clients most self-hosters reach for — Claude Desktop, Cursor, and Zed — to your own TruePPM instance. Each connects the same way: it spawns trueppm-mcp as a local subprocess (stdio) and passes your instance URL and a read-only token through the environment. Pick your client below, paste the snippet, restart, and ask.

For the operator’s reference — transports, Docker, and the security posture — see the MCP server administration guide.

The server authenticates with a personal access token (tppm_<64-hex>) carrying the mcp:read scope. The read surface accepts only owner-scoped (personal) tokens — so the credential acts as you and reads only what your role permits, never beyond it. The project and program Settings → Integrations pages mint inbound-sync tokens and do not offer this scope; asking for it there is a 400 naming this path instead.

  1. Open Personal Settings → API tokens → Create token.
  2. Choose the “Read-only for AI assistants” scope (mcp:read) and set an expiry (required for mcp:read). This grants safe-method (GET) access only and is rejected at every write path, so it is the correct least-privilege credential for an assistant — and it cannot outlive its expiry.
  3. The reveal dialog shows the raw token once — copy it immediately. Only its SHA-256 digest is stored server-side, so a lost token cannot be recovered, only revoked and re-minted.

The token acts as you and can read only what your own role permits across the projects and programs you belong to. The reveal dialog also offers the two steps below in copy-paste form — the pip install trueppm-mcp command and a claude_desktop_config.json snippet built from the token — so if you use Claude Desktop, that is the fastest path and you can skip the manual assembly.

Every snippet below points trueppm-mcp at your instance with two environment variables:

VariableDescription
TRUEPPM_API_URLBase URL of your instance, e.g. https://ppm.example.com. The /api/v1 suffix is appended automatically if you omit it.
TRUEPPM_API_TOKENThe tppm_<64-hex> token from Step 1, with the mcp:read scope.

Install the server first (or use the Docker image):

Terminal window
pip install trueppm-mcp # or: uv tool install trueppm-mcp

Edit claude_desktop_config.json (Claude Desktop → Settings → Developer → Edit Config) and add a trueppm entry under mcpServers:

{
"mcpServers": {
"trueppm": {
"command": "trueppm-mcp",
"env": {
"TRUEPPM_API_URL": "https://ppm.example.com",
"TRUEPPM_API_TOKEN": "tppm_your_token_here"
}
}
}
}

Restart Claude Desktop; it spawns trueppm-mcp on demand and the TruePPM tools appear in the tools menu.

Create or edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (per project). Cursor uses the same mcpServers shape as Claude Desktop:

{
"mcpServers": {
"trueppm": {
"command": "trueppm-mcp",
"env": {
"TRUEPPM_API_URL": "https://ppm.example.com",
"TRUEPPM_API_TOKEN": "tppm_your_token_here"
}
}
}
}

Reload Cursor, then confirm the server shows as connected under Settings → MCP.

Add a custom context server to Zed’s settings.json (Zed → Settings, or cmd/ctrl + ,):

{
"context_servers": {
"trueppm": {
"source": "custom",
"command": "trueppm-mcp",
"args": [],
"env": {
"TRUEPPM_API_URL": "https://ppm.example.com",
"TRUEPPM_API_TOKEN": "tppm_your_token_here"
}
}
}
}

Zed launches the server for the Agent Panel; the TruePPM tools become available to the assistant there.

Ask your assistant to run the whoami tool (or just ask “who am I in TruePPM?”). It returns the identity behind your token — a quick confirmation that the URL, token, and scope are all correct. On startup the server also calls GET /api/v1/auth/me/ once, so a bad token fails the launch immediately with a clear message rather than letting every later query fail.

The server exposes 19 read-only tools, each mapping to one existing REST endpoint and returning only what your role permits:

  • Projects & programslist_projects, get_project, list_programs, get_program_health (single-program only; cross-program rollups are Enterprise), list_program_backlog.
  • Tasks & worklist_tasks (filterable by status, assignee, sprint, criticality, type, and updated_after), get_task, get_board_state, list_my_work.
  • Schedule & riskget_schedule_summary, get_monte_carlo_forecast (latest persisted run; read-only, never triggers a new simulation), get_release_forecast, whatif (perturb one task’s duration and recompute CPM + Monte Carlo in memory — persists nothing — for “what breaks if this task slips?”), get_schedule_derivation (the server-computed why behind a CPM value or Monte Carlo percentile — the driving constraint, lag, and calendar contribution), list_risks.
  • Sprintslist_sprints, get_sprint (aggregates and health bands only), get_sprint_close_request (why a sprint asked to close is still open).
  • Identitywhoami.

For the full per-tool argument reference and example prompts, see the MCP server feature page.

Some questions to try once connected:

  • “Which of my projects are behind their P80 forecast?”
  • “Show me the critical path for the Apollo project.”
  • “What’s on my plate this sprint?”
  • “List the open high-impact risks for the Mercury program.”
SymptomLikely cause
Client reports the server exited immediatelyTRUEPPM_API_URL or TRUEPPM_API_TOKEN is unset or blank. Check the env block.
Launch fails with “the TruePPM API rejected the configured token (HTTP 401)“The token is missing, malformed, or revoked. Mint a fresh mcp:read token.
A tool returns a 404 for something you expect to seeYour role on that project or program does not permit reading it — 404 is the deliberate existence oracle, identical to the web client.
The trueppm-mcp command is not foundThe install landed outside your client’s PATH. Use an absolute path in command, or point it at the Docker image.