Skip to main content

Waze for AI agents planning — MCP server that improves cost estimates by learning from every project

Project description

OpenPlan

AI-native state space planner. MCP server. Python. 4 tools.

OpenPlan is an MCP server that gives AI agents a structured planning and memory system. Instead of tasks and milestones, everything is a state in a directed graph with probabilistic edges, auto-calibrating costs, and A* pathfinding that tells the agent where to go next.

Tools (4)

init — Create a new project context (idempotent). Accepts project_type for cost baselines and goal for tracked achievement markers.

act — The only mutation tool. Traverses edges, creates branches (auto-sequenced by default, parallel=True for fan-out), sets status, attaches evidence (with filesystem verification), prunes subtrees, reverts, and verifies goal satisfaction.

recommend — Returns the best next target with an A* path, confidence intervals, effective costs, project health, goal progress, cross-project estimation by type, and self-tuning bandit state.

export — Export the full graph as JSON, GraphML, or adjacency matrix.

Quick Start

pip install -e ".[dev]"

# Start the MCP server
openplan-server

Configure MCP in your opencode.json / claude_desktop_config.json:

{
  "mcp": {
    "openplan": {
      "type": "local",
      "command": ["/path/to/.venv/bin/python", "-m", "openplan.server"],
      "cwd": "/path/to/openplan"
    }
  }
}

Architecture

  MCP transport (stdio)
       │
  server.py (dispatch)
  ┌──────┴──────┐
  core/         db/
  ├─ state.py   ├─ connection.py
  ├─ graph.py   ├─ schema.py
  ├─ planner.py ├─ ...
  ├─ activation.py
  ├─ embedding.py
  ├─ export.py
  ├─ recommend.py
  ├─ telemetry.py
  └─ maintenance.py

Shell imports core. Core never imports shell. SQLite with WAL mode, foreign keys, savepoints. RW lock for concurrency.

Data Model

nodes:    id, label, activation, frontier, project, props, parent_id, status, project_type
edges:    source_id, target_id, action, cost_tokens, cost_risk, prob, weight_history
events:   id, project, node_id, event_type, payload, version, idempotency_key, session_id
goal_markers: project, criterion, achieved, achieved_by
evidence: id, project, state_id, evidence_type, uri, status, metadata (size, mtime)

Testing

pip install -e ".[dev]"
pytest tests/ -v

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openplan_mcp-0.8.2.tar.gz (105.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openplan_mcp-0.8.2-py3-none-any.whl (95.0 kB view details)

Uploaded Python 3

File details

Details for the file openplan_mcp-0.8.2.tar.gz.

File metadata

  • Download URL: openplan_mcp-0.8.2.tar.gz
  • Upload date:
  • Size: 105.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for openplan_mcp-0.8.2.tar.gz
Algorithm Hash digest
SHA256 7f24040d7adfe1d9397c5abe8daf6ce48dbaa9bf62d81a4c456017aac87394df
MD5 667fdb081704dfa9cc5ce9b9572df0e9
BLAKE2b-256 136634c87cac18f29980a6dea17da4c14c661edc3bc837a57a326f36b2b06425

See more details on using hashes here.

File details

Details for the file openplan_mcp-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: openplan_mcp-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 95.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for openplan_mcp-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 17ffb015d3ab49f9e2f9324532656150491e455dd9651315424a9afde5b0dac2
MD5 cc9046dd8081dc186c5af35484b9d14d
BLAKE2b-256 53ff7955cb25bd9843ea228a58b198ea50850d4d271c43fc9f0085f2f9f5cc26

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page