MCP server for Claude and ChatGPT

The Program Manager is program management software with a built-in Model Context Protocol (MCP) server. Your AI client can read your programs, dependencies, milestones and blockers, and can propose changes that a person approves.

Server URL and transport

The server speaks Streamable HTTP with JSON-RPC (initialize, tools/list and tools/call). It runs as a Supabase Edge Function of the product backend, so the URL is the function URL of the project that serves the app:

https://kydznghxlhavdzjmzfxy.supabase.co/functions/v1/mcp

Send requests with POST. A request without a valid token receives HTTP 401, and a workspace without an active subscription receives HTTP 402.

Authentication

Create a token in the app under Settings, AI clients. Tokens start with tpm_, belong to one workspace and act with the role of the person who created them. The full token is shown once, and only its SHA-256 hash is stored. Send it as Authorization: Bearer <token>. You can revoke a token at any time.

Set up your client

Claude Code. Run this command in a terminal:

claude mcp add --transport http the-program-manager https://kydznghxlhavdzjmzfxy.supabase.co/functions/v1/mcp --header "Authorization: Bearer <YOUR_MCP_TOKEN>"

Cursor. Add this to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "the-program-manager": {
      "url": "https://kydznghxlhavdzjmzfxy.supabase.co/functions/v1/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_MCP_TOKEN>"
      }
    }
  }
}

Claude Desktop and others. Use a client that can send a custom Authorization header, for example through the mcp-remote bridge. The app shows ready-made snippets for each client, and a test button, under Settings, AI clients. ChatGPT works where your plan allows custom headers on remote MCP servers.

Tools

The server exposes ten tools. Seven are read only, and three create or run approved changes.

list_programs
Programs with readiness, open and critical blocker counts, milestones at risk and source freshness.
get_program_status
Milestones, open blockers, risks and source projects of one program, with stale-data warnings.
get_dependency_graph
Confirmed, manually asserted and suggested dependencies of a program, with provenance.
analyze_milestone_impact
A date-based what-if for a delay. Preview only, it never writes.
list_critical_blockers
Open blockers with owner, due date, escalation path and source evidence.
get_weekly_program_brief
Changes this week, blockers, milestones due in 14 days, overdue decisions and unverified dependencies.
get_program_changes
Status and due date changes synced from Jira and Asana since a timestamp.
propose_dependency_link
Proposes a dependency. It creates an approval request and changes nothing until a person approves.
propose_escalation
Drafts a Slack escalation for a blocker. Nothing is sent until a person approves the exact text.
execute_approved_action
Runs an action that a person approved in the web app, once, after checking expiry and payload hash.

How writes are approved

An agent can only propose a change. The proposal appears in the approvals queue of the web app with the exact payload, a payload hash and an expiry. After a person approves it, execute_approved_action runs it once and records the result in the audit log. Text from Jira and Asana is treated as untrusted data and never as instructions.

Operated by Max Benz, Dresden, Germany. Questions: team@theprogrammanager.com.