Skip to main content
Glama
Planning System MCP Server

Planning System MCP Server

by TAgents

AgentPlanner MCP Server

npm MCP MIT

MCP server for AgentPlanner — AI agent orchestration with planning, dependencies, knowledge graphs, and human oversight. Works with Claude Desktop, Claude Code, ChatGPT, Cursor, Windsurf, Cline, and any MCP-compatible client.

Prerequisites

  • An AgentPlanner account at agentplanner.io

  • An API token (Settings > API Tokens in the AgentPlanner UI)

Related MCP server: JJ Planner MCP Server

Setup

Claude Desktop — one-click install (.mcpb)

The fastest path. Download agent-planner.mcpb from the latest release, double-click it, and Claude Desktop will install the extension and prompt for your AgentPlanner API token. No Node.js setup, no JSON editing.

To build the bundle yourself:

npm run build:mcpb        # produces agent-planner.mcpb
npm run validate:mcpb     # schema-check manifest.json

Manual config (Claude Desktop, Claude Code, Cursor, etc.)

Add to your MCP client config (claude_desktop_config.json, .cursor/mcp.json, etc.):

{
  "mcpServers": {
    "agentplanner": {
      "command": "npx",
      "args": ["-y", "agent-planner-mcp"],
      "env": {
        "API_URL": "https://agentplanner.io/api",
        "USER_API_TOKEN": "your_token_here"
      }
    }
  }
}

Thin local client (v1)

A lightweight CLI loop for task-driven workflows. No MCP client required — useful when an agent (Claude Code, OpenClaw, a script) just needs to read its current task as files and write status back.

Mental model

  • AgentPlanner (the API) is the source of truth.

  • .agentplanner/ files are a regeneratable cache, written by the CLI for the agent to read.

  • The agent works in the real repo. Status changes flow back via explicit writeback commands. There is no live sync.

Running locally? See agent-planner/LOCAL_QUICKSTART.md for the 5-minute path to a full local stack you can point this CLI at. Use --api-url http://localhost:3000 in the login step below.

The loop

# 1. Login — saves credentials and auto-selects a default plan
#    (pass --plan-id to pick one, or it auto-selects if you have exactly one plan)
npx agent-planner-mcp login --token <token> --api-url https://agentplanner.io/api [--plan-id <id>]
#    Localhost variant (after `docker compose -f docker-compose.local.yml up`):
npx agent-planner-mcp login --token <token> --api-url http://localhost:3000

# 2. See your task queue
npx agent-planner-mcp tasks [--plan-id <id>]

# 3. Pick the next task and pull context (claims it for 30 minutes)
npx agent-planner-mcp next [--plan-id <id>]
#    Force a fresh recommendation even if you have active work:
npx agent-planner-mcp next --fresh

# 4. Or pull context for a specific plan/node (no claim, no status change)
npx agent-planner-mcp context --plan-id <plan-id> --node-id <node-id>
#    If a default plan is set, --plan-id can be omitted:
npx agent-planner-mcp context --node-id <node-id>

# 5. Explicit writeback. No live sync.
npx agent-planner-mcp start                          # claim + mark in_progress
npx agent-planner-mcp blocked --message "Waiting on API decision"
npx agent-planner-mcp done    --message "Implemented and verified"

next resolution order

next is a smart picker. It resolves in this order:

  1. Resume — if any task in scope is in_progress, pick it. (Source: resume_in_progress.)

  2. Recommend — call suggest_next_tasks (dependency- and RPI-aware) for a fresh pick. (Source: suggest_next_tasks.)

  3. Fallback — first not_started task in your queue. (Source: my_tasks_fallback.)

tasks is the queue view; next is the smart picker; next --fresh skips step 1 and forces a fresh recommendation even when active work exists.

What start, blocked, done actually do

Command

Status

Claim

Log entry

Learning written to Graphiti

start

in_progress

claim (30m TTL)

—

—

blocked --message ...

blocked

release

challenge

—

done --message ...

completed

release

progress

yes (entry_type: learning)

All hooks are best-effort: claim/release/learning failures do not block the status update. Claim collisions (another agent already holds the lease) are reported but not fatal.

What current-task.md surfaces

Beyond title, description, agent_instructions, and acceptance criteria, the generated current-task.md includes BDI signals from the API responses already being fetched:

  • Plan health — quality_score, rationale, coherence_checked_at (or "never")

  • Coherence warning — flagged when node.coherence_status is contradiction_detected or stale_beliefs, with concrete next-step pointers (check_contradictions, recall_knowledge)

  • Detected contradictions — listed when present in the node context

  • Task mode — shown when not free (RPI awareness for research/plan/implement)

  • Linked goals, relevant knowledge (top 5), plan progress snapshot

When to use CLI vs MCP vs API skill

You want…

Use

Zero-setup local task context for any coding agent (Claude Code, OpenClaw, scripts)

CLI (this thin client)

Rich, structured tool access from inside an MCP-aware agent (Claude Desktop, Cursor, etc.)

MCP (run npx agent-planner-mcp as an MCP server)

Direct programmatic integration from your own service

API (REST endpoints; same routes the MCP and CLI use)

The CLI is intentionally thin: it covers the read context + writeback loop and nothing else. For decomposition, dependency creation, knowledge graph queries, RPI chains, coherence runs, and goal management, use the MCP server (or the API directly).

Agent Loop Facade

AgentPlanner API now exposes a narrow /agent/* facade for the main autonomous loop. MCP uses this facade when available and falls back to older domain endpoints for self-hosted older APIs.

Primary mappings:

MCP tool

Preferred API endpoint

briefing

GET /agent/briefing

claim_next_task

POST /agent/work-sessions

update_task with session_id + completed

POST /agent/work-sessions/:id/complete

update_task with session_id + blocked

POST /agent/work-sessions/:id/block

form_intention

POST /agent/intentions when available, with domain-endpoint fallback

Validation:

npm run validate:mcp-loop

This checks that the MCP tools route through the facade for briefing, task claim/start, and session completion/blocking.

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "agent-planner": {
      "command": "npx",
      "args": ["-y", "agent-planner-mcp"],
      "env": {
        "USER_API_TOKEN": "your-token",
        "API_URL": "https://agentplanner.io/api"
      }
    }
  }
}

Config location: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) | %APPDATA%\Claude\claude_desktop_config.json (Windows)

Claude Code

claude mcp add agent-planner -- npx -y agent-planner-mcp

Then set the env vars USER_API_TOKEN and API_URL=https://agentplanner.io/api.

ChatGPT

  1. Settings > Apps > Advanced > Developer mode

  2. Add MCP Server > URL: https://agentplanner.io/mcp

  3. Auth type: API Key > enter your token from agentplanner.io Settings

Cursor

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "agent-planner": {
      "command": "npx",
      "args": ["-y", "agent-planner-mcp"],
      "env": {
        "USER_API_TOKEN": "your-token",
        "API_URL": "https://agentplanner.io/api"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "agent-planner": {
      "command": "npx",
      "args": ["-y", "agent-planner-mcp"],
      "env": {
        "USER_API_TOKEN": "your-token",
        "API_URL": "https://agentplanner.io/api"
      }
    }
  }
}

Cline (VS Code)

Add the same JSON config to your Cline MCP settings in VS Code.

Any HTTP MCP Client

  • Endpoint: https://agentplanner.io/mcp

  • Discovery: https://agentplanner.io/.well-known/mcp.json

  • Auth header: Authorization: ApiKey <your-token>

  • Transport: Streamable HTTP (MCP 2025-03-26)

Key Features

  • 39 BDI-aligned tools for state, goals, committed actions, and workspace/blueprint management — no CRUD shapes, every tool answers a whole agentic question

  • Full mutation surface — agents and humans-via-agents can manage every plan/node/org property, plus workspaces and reusable blueprints, without leaving the conversation; UI is optional inspection

  • Draft-status seam — autonomous agent creation lands as drafts surfacing in the dashboard pending queue; human-directed creation defaults to active

  • Dependency graph — cycle detection, impact analysis, critical path

  • Progressive context — 4-layer context assembly with token budgeting

  • Knowledge graph — temporal knowledge via Graphiti (entities, facts, contradictions)

  • RPI chains — Research → Plan → Implement task decomposition (one-call shortcut)

  • Task claims — TTL-based locking for multi-agent coordination

  • Organizations — multi-tenant isolation with member management

Available Tools (v1.5)

Beliefs (read state)

  • briefing — bundled mission control state in one call

  • list_plans — list plans with optional status/visibility/text filters; returns ids, status, last update, and link counts so you can pick a plan without round-tripping briefing

  • task_context — single task at progressive depth 1-4

  • goal_state — single goal deep-dive (details + quality + progress + bottlenecks + gaps)

  • recall_knowledge — knowledge graph query (facts, entities, episodes, contradictions)

  • search — text search across plans/nodes

  • plan_analysis — impact, critical path, bottlenecks, coherence

Desires (goals)

  • list_goals — goals with health rollup

  • update_goal — atomic goal update (subsumes link/unlink/achievers)

  • create_goal — create a new top-level goal (no parent)

  • derive_subgoal — create a sub-goal under an existing parent

  • record_criterion_progress — record the latest observed value of a goal's success criterion (e.g. a metric moved 40→72); the write that makes goal attainment real

Intentions — execution

  • claim_next_task — pick + claim + load context (one call)

  • update_task — atomic status + log + claim release + learning

  • release_task — explicit handoff

  • queue_decision — escalate to human (real decision queue)

  • resolve_decision — pick up human's answer (atomically materializes any proposed_subtasks)

  • add_learning — record knowledge episode

Intentions — creation

  • form_intention — create plan + initial tree under a goal, atomically

  • extend_intention — add children under an existing parent (lightweight)

  • propose_research_chain — RPI triple with 2 blocking edges, in one call

Intentions — structural mutation

  • update_plan — edit any plan property

  • update_node — edit any node property except status

  • move_node — reparent within plan; cycle-safe

  • link_intentions / unlink_intentions — manage dependency edges

  • delete_plan / delete_node — soft-delete via status='archived' (recoverable)

Intentions — sharing & collaboration

  • share_plan — atomic visibility + add/remove collaborators

  • invite_member — add user to org (by user_id or email)

  • update_member_role — owner-only role change

  • remove_member — owner/admin removes non-owner member

Workspaces & Blueprints

  • list_workspaces — list workspaces (goal/plan folders) in an organization

  • create_workspace — create a new workspace inside an organization (slug auto-generated and de-duped)

  • list_blueprints — list blueprints visible to you (owned + public/unlisted), filterable by scope/visibility

  • save_as_blueprint — snapshot a live plan as a reusable plan-scope blueprint (structure + agent_instructions + dependencies; excludes run-state)

  • fork_blueprint — fork a plan-scope blueprint into a target workspace as a new plan (statuses reset, lineage recorded)

  • delete_blueprint — hard-delete a blueprint you own (already-forked plans are unaffected)

Utility

  • get_started — dynamic reference for new agents

See SKILL.md for full descriptions, the human-steering scenarios (A/B/C), and status='draft' vs status='active' guidance.

LLM Skill Reference

See SKILL.md for a complete reference designed to be consumed by LLMs. Include it in system prompts or agent configurations to give any LLM full knowledge of how to use AgentPlanner tools effectively.

See AGENT_GUIDE.md for a quick reference card.

Transport Modes

stdio (default)

For local use with Claude Desktop, Claude Code, Cursor, Windsurf, Cline:

npx agent-planner-mcp

HTTP/SSE

For remote access (ChatGPT, cloud deployments, multi-agent systems):

MCP_TRANSPORT=http npx agent-planner-mcp
# Listens on http://127.0.0.1:3100 (override with PORT)

Transport is Streamable HTTP (MCP 2025-03-26); auth via Authorization: ApiKey <your-token>. Production endpoint: https://agentplanner.io/mcp (discovery at https://agentplanner.io/.well-known/mcp.json).

Local Development

git clone https://github.com/TAgents/agent-planner-mcp.git
cd agent-planner-mcp
npm install
npm run setup    # Interactive setup wizard
npm run dev      # Dev server with hot reload

Environment Variables

Variable

Description

Default

API_URL

AgentPlanner API URL

http://localhost:3000

USER_API_TOKEN

API token (required)

—

MCP_TRANSPORT

stdio or http

stdio

PORT

HTTP mode port

3100

NODE_ENV

Environment

production

License

MIT License - see LICENSE for details.

Support

Available Tools

37 tools
add_learningA

Record a knowledge episode. Use after research, on decisions, or when discovering important context. Graphiti extracts entities/relationships automatically. Surfaces coherence_warnings if the new content contradicts existing facts.

Inputs: content (required), scope, entry_type, source_description.

briefingA

Mission control state in one call. Returns goal health summary, pending decisions, my tasks, recent activity, and a top recommendation. Use this as the single read for Cowork live artifacts and the autopilot's first call.

Inputs: scope, goal_id, plan_id, recent_window_hours.

claim_next_taskA

Pick the next task in scope, claim it, and return its context — all in one call. Resolution order: (1) resume any in_progress task, (2) suggest_next_tasks, (3) my_tasks fallback. Pass fresh:true to skip the resume step.

Inputs: scope (required), ttl_minutes, fresh, context_depth, +1 more.

create_goalA

Create a new top-level goal (no parent). Use this when a human asks you to set up a goal — agents create goals directly, no UI step required. For a goal that contributes to an existing one, use derive_subgoal instead. Defaults to status='active' (live immediately); pass status='draft' only if you want it to sit in the pending queue for review. Lands in the user's active organization's default workspace unless workspace_id is given.

Inputs: title (required), description, type, status, +3 more.

create_workspaceA

Create a new workspace inside an organization. Returns the new workspace row. The slug is auto-generated from the title and de-duplicated within the org.

Inputs: organization_id (required), title (required), description, icon, +1 more.

delete_nodeA

Soft-delete a node by setting status='archived'. Cascades to children by default. Recoverable via update_task({status: 'not_started'}).

Inputs: node_id (required), plan_id, reason, cascade_children.

delete_planA

Soft-delete a plan by setting status='archived'. Recoverable via update_plan({status: 'active', restore: true}). Hard delete is not agent-callable — use REST + admin token if absolutely needed.

Inputs: plan_id (required), reason.

derive_subgoalA

Create a sub-goal under an existing parent goal (parent_goal_id required). For a new top-level goal, use create_goal instead. Defaults to status='active'; pass status='draft' for autonomous loops so a human can review before promotion. Drafts surface in the dashboard pending queue.

Inputs: parent_goal_id (required), title (required), rationale (required), description, +4 more.

extend_intentionA

Add children under an existing phase or task. Use when an agent has implicit authority to decompose work (e.g., a parent task they have claimed). For high-stakes structural proposals, use queue_decision with proposed_subtasks instead. Defaults to status='active'.

Inputs: parent_id (required), rationale (required), children (required), plan_id.

fork_blueprintA

Fork a plan-scope blueprint into a target workspace. Creates a new plan inside that workspace with the blueprint's structure (nodes, dependencies, agent_instructions). All node statuses reset to 'not_started'. The new plan's forked_from_blueprint_id records lineage.

Inputs: blueprint_id (required), workspace_id (required), title.

form_intentionA

Create a plan that achieves a goal, including an initial phase/task tree, in one call. Declare execution order inline: give nodes a ref and list prerequisite refs/titles in depends_on to create 'blocks' edges in the same call — don't ship a bare hierarchy. The response returns a structure summary and warns (created_without_dependencies) when a multi-task plan has no edges. Defaults to status='active' for human-directed creation; pass status='draft' for autonomous loops so a human can review before promotion. Drafts surface in the dashboard pending queue and auto-promote to active when work begins on any node.

Inputs: goal_id (required), title (required), rationale (required), description, +3 more.

get_startedA

Onboarding for new agents. Returns the BDI tool surface map and recommended workflows: mission control loop (Cowork), single-task session (Code/CLI), multi-agent claiming (OpenClaw).

Inputs: user_role.

goal_stateA

Comprehensive single-goal read: details, quality assessment, progress, bottlenecks, knowledge gaps, pending decisions, recent activity. Replaces get_goal + goal_path + goal_progress + goal_knowledge_gaps + assess_goal_quality.

Inputs: goal_id (required).

invite_memberA

Add a user to an organization by user_id or email. Caller must be org owner or admin. If email is provided and the user doesn't exist, the API returns 404 (email-invite flow stays UI-only).

Inputs: organization_id (required), user_id, email, role.

list_blueprintsA

List blueprints visible to the user (owned + public/unlisted). Filter by scope ('plan' or 'workspace'), visibility, or owner_only=true.

Inputs: scope, visibility, owner_only.

list_goalsB

List goals with health rollup. Returns aggregate counts (on_track/at_risk/stale) plus per-goal summary.

Inputs: filter.

list_plansA

List plans with optional filters by status, visibility, or text query. Returns id, title, status, visibility, last update, and link counts so you can pick a plan to operate on without round-tripping briefing.

Inputs: filter.

list_workspacesA

List workspaces in an organization. A workspace is a folder that owns goals + plans. Returns archived workspaces only when include_archived=true.

Inputs: organization_id (required), include_archived.

move_nodeA

Reparent a node within the same plan. Cycle-safe (server rejects moves that would create a tree cycle). Optional position sets the order_index among siblings.

Inputs: node_id (required), new_parent_id (required), plan_id, position.

plan_analysisC

Advanced plan reads: impact analysis (delay/block/remove), critical path, bottleneck list, or coherence check.

Inputs: plan_id (required), type (required), node_id, scenario.

propose_research_chainA

Create a Research → Plan → Implement triple under an existing parent task or phase. The Research task feeds Plan; Plan feeds Implement (via 'blocks' dependency edges). Use when tackling work with significant unknowns. Defaults to status='active'.

Inputs: parent_id (required), research_question (required), implementation_target (required), rationale (required), +1 more.

queue_decisionA

Queue a decision for human review. Writes to the real decisions table (not the knowledge graph). Replaces the autopilot pattern of calling add_learning with entry_type=decision and a 'DECISION NEEDED:' title prefix. Resolves via resolve_decision.

Inputs: title (required), context (required), smallest_input_needed (required), plan_id, +6 more.

recall_knowledgeA

Universal knowledge graph query. Returns facts, entities, recent episodes, and contradictions in one shape. Use result_kind to control payload size. Replaces recall_knowledge legacy + find_entities + get_recent_episodes + check_contradictions.

Inputs: query, scope, since, entry_type, +3 more.

release_taskA

Release a claimed task without changing status. Use for explicit handoff or abandonment.

Inputs: task_id (required), plan_id, message.

remove_memberA

Remove a member from an organization. Caller must be org owner or admin (admins cannot remove other admins). Server rejects removing the org owner.

Inputs: organization_id (required), membership_id (required), reason.

resolve_decisionA

Resolve a pending decision. action is 'approve', 'defer', or 'reject'. Use this from Cowork artifact buttons or after a human responds in chat.

Inputs: decision_id (required), plan_id (required), action (required), message, +1 more.

save_as_blueprintA

Snapshot a live plan as a new plan-scope blueprint. Captures structure, agent_instructions, and dependencies. Excludes run-state (statuses, claims, knowledge episodes, logs, decisions, agent assignments).

Inputs: plan_id (required), title, description, visibility, +1 more.

share_planA

Atomically change a plan's visibility and add/remove collaborators in one call. Collaborators are specified by user_id (email-based invites stay UI-only for now). Caller must be plan owner or admin.

Inputs: plan_id (required), visibility, add_collaborators, remove_collaborators.

task_contextA

Get progressive context for a task. Depth: 1 (task only), 2 (+ neighborhood), 3 (+ knowledge), 4 (+ extended plan/goals/transitive deps). For RPI implement tasks, automatically includes research+plan outputs from the chain.

Inputs: task_id (required), depth, token_budget.

update_goalA

Atomic goal update. Subsumes update_goal + link_plan_to_goal + unlink_plan_from_goal + add_achiever + remove_achiever. All changes apply together.

Inputs: goal_id (required), changes (required).

update_member_roleA

Change a member's role within an organization. Caller must be org owner. Server rejects demoting the last admin.

Inputs: organization_id (required), membership_id (required), new_role (required).

update_nodeA

Edit any node property atomically: title, description, node_type, task_mode, agent_instructions, metadata. Status transitions belong on update_task (which handles claim/log side effects). Rejects node_type changes when the node has children.

Inputs: node_id (required), plan_id, title, description, +4 more.

update_planA

Edit any plan property atomically: title, description, status, visibility, GitHub linkage, metadata. Use status='archived' to soft-delete (recoverable via status='active' + restore=true). Hard delete stays REST-only with admin auth.

Inputs: plan_id (required), title, description, status, +3 more.

update_taskA

Atomic task state transition. Updates status, optionally appends a log entry, optionally releases the claim. Idempotent on identical inputs. Replaces quick_status + add_log + release_task fan-out.

Inputs: task_id (required), plan_id, status, log_message, +5 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 37 tools

    Disambiguation4/5

    Most tools have distinct purposes (e.g., create_goal vs derive_subgoal, update_task vs update_node), but some overlap exists (e.g., add_learning vs queue_decision for recording, briefing vs goal_state for read). Descriptions help differentiate, but with 37 tools, occasional confusion is possible.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern (e.g., create_goal, update_task, list_plans). Even compound verbs like claim_next_task and propose_research_chain fit the pattern. No mixing of conventions.

    Tool Count3/5

    37 tools is quite high for a single server, covering goals, plans, tasks, workspaces, knowledge, decisions, and collaboration. While each tool serves a specific need, the number feels heavy and may overwhelm agents, though it is justified by the broad domain.

    Completeness3/5

    The toolset covers core CRUD for goals, plans, tasks, and workspaces, plus knowledge and decision management. However, gaps exist: no list_members (only invite/remove/update), no update_workspace, and no tool to view all pending decisions. These missing features may cause friction.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers