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.