PDDL MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PDDL MCP ServerCreate a plan for robot r2 to move from the warehouse to the office"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PDDL MCP Server
PDDL MCP Server is a personal MCP backend project for turning natural-language planning requests or explicit PDDL files into executable Fast Downward plans.
It is designed as a clean single-version planning service: understand the task, match domain knowledge, generate PDDL, run a planner, validate the result, and return a structured MCP response with artifacts.
Highlights
Natural language to PDDL workflow through
plan_from_text.Direct PDDL planning through
generate_planwithdomain_pathandproblem_path.Configurable LLM semantic parsing with deterministic local fallback.
Fast Downward integration for real planner execution.
Generated artifacts for every run:
domain.pddl,problem.pddl,sas_plan, planner log, andresult.json.Stable MCP tool response shape for downstream agents or clients.
Tests for config loading, semantic fallback, domain matching, PDDL generation, planning, validation, and MCP responses.
Related MCP server: Unitree Go2 MCP Server
Demo
The project can solve the classic farmer, wolf, goat, and cabbage river-crossing puzzle.
The animation shows the end-to-end flow: natural-language input, semantic processing, template matching, PDDL generation, Fast Downward planning, and validated plan output.
Input:
A farmer must take a wolf, a goat, and a cabbage across a river.
The boat must be driven by the farmer and can carry at most one item.
If the farmer is absent, the wolf eats the goat and the goat eats the cabbage.
Plan how to move everything safely to the other side.Output plan:
(cross-with goat left right)
(cross-alone right left)
(cross-with cabbage left right)
(cross-with goat right left)
(cross-with wolf left right)
(cross-alone right left)
(cross-with goat left right)This is a valid 7-step solution: take the goat first, return alone, move the cabbage, bring the goat back, move the wolf, return alone, and take the goat across again.
Architecture
The code is intentionally split into focused modules:
Module | Responsibility |
| Load |
| Convert natural language into a semantic planning representation. |
| Match the task to a domain template. |
| Generate domain/problem PDDL. |
| Build and run the Fast Downward command. |
| Validate declared plan actions and result shape. |
| Orchestrate the full planning pipeline. |
| Expose MCP tools through FastMCP. |
Project Layout
pddl-mcp/
├── pyproject.toml
├── server.py
├── .mcp.json
├── docs/
│ ├── assets/
│ └── releases/
├── src/pddl_mcp/
│ ├── config.py
│ ├── knowledge.py
│ ├── modeling.py
│ ├── planner.py
│ ├── semantic.py
│ ├── server.py
│ ├── validation.py
│ ├── workflow.py
│ └── resources/domain_templates.json
└── tests/Installation
git clone https://github.com/NBNBTM/pddl-mcp-server.git
cd pddl-mcp-server
python -m pip install -e ".[dev]"
cp .env.example .envConfiguration
Edit .env for your local runtime.
Minimal configuration:
OUTPUT_DIR=output
LOG_LEVEL=INFOReal Fast Downward planning:
FAST_DOWNWARD_PATH=/absolute/path/to/fast-downward.py
FAST_DOWNWARD_SEARCH=astar(blind())
MAX_PLANNING_TIME=300Optional LLM semantic parsing:
LLM_API_URL=https://your-llm-endpoint.example/v1/chat/completions
LLM_API_KEY=...
LLM_MODEL=qwen-max
LLM_TIMEOUT=120
LLM_RETRIES=2LLM_API_TOKEN is also supported as a backward-compatible alias when LLM_API_KEY is empty.
Do not commit real .env files or API keys. The repository only includes .env.example.
Fast Downward Setup
One local setup option:
mkdir -p .tools
git clone https://github.com/aibasel/downward.git .tools/downward
cd .tools/downward
python build.pyThen set:
FAST_DOWNWARD_PATH=/absolute/path/to/pddl-mcp-server/.tools/downward/fast-downward.py.tools/ is ignored by Git, so local planner builds are not uploaded.
Run The MCP Server
python server.pyThe root server.py is a compatibility entry point. The actual implementation lives in pddl_mcp.server.
Python Usage
from pddl_mcp.workflow import plan_from_text_response
result = plan_from_text_response(
"Move robot r1 from room1 to room3",
{"task_id": "robot-demo"},
)
print(result["success"])
print(result["plan_content"])River-crossing example:
from pddl_mcp.workflow import plan_from_text_response
text = """
A farmer must take a wolf, a goat, and a cabbage across a river.
The boat must be driven by the farmer and can carry at most one item.
If the farmer is absent, the wolf eats the goat and the goat eats the cabbage.
"""
result = plan_from_text_response(text, {"task_id": "farmer-river-demo"})
print(result["plan_content"])MCP Tools
plan_from_text
plan_from_text(text: str, options: dict | None = None)Runs the complete natural-language workflow:
text -> semantic parsing -> knowledge match -> PDDL generation -> planning -> validationgenerate_plan
generate_plan(task: dict)Supports two modes:
{
"description": "Move robot r1 from room1 to room3"
}or:
{
"domain_path": "/path/to/domain.pddl",
"problem_path": "/path/to/problem.pddl"
}validate_config
Checks whether Fast Downward and LLM settings are configured correctly.
get_system_info
Returns server capabilities, Python version, platform, project root, and output directory.
Response Shape
Every planning response follows the same structure:
{
"success": true,
"task_id": "farmer-river-demo",
"plan_content": "...",
"explanation": "...",
"artifacts": {
"domain_path": "...",
"problem_path": "...",
"plan_path": "...",
"log_path": "...",
"result_path": "..."
},
"workflow_steps": [
{
"name": "planning",
"success": true,
"duration_sec": 0.136,
"message": ""
}
],
"warnings": [],
"error": ""
}MCP Client Configuration
The repository includes .mcp.json:
{
"mcpServers": {
"pddl-planner": {
"command": "python",
"args": ["server.py"],
"cwd": "."
}
}
}For desktop MCP clients, use the absolute project path in cwd if relative paths are not supported by your client.
Testing
python -m compileall -q src tests server.py
python -m pytest -q -p no:cacheprovider
python -m ruff check . --no-cacheExpected local result:
13 passed
All checks passedIf FAST_DOWNWARD_PATH is not configured, real planner execution reports a clear configuration warning. Mock workflow tests still run.
Release Notes
The current release draft is available at:
The project documentation site is available at:
Security Notes
Do not commit
.env, API keys, model tokens, or private planner outputs.Keep local Fast Downward builds under
.tools/.Generated outputs belong under
output/.Both
.tools/andoutput/are ignored by Git.
License
This project is released under the MIT License.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NBNBTM/pddl-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server