Skip to main content
Glama

pypddlengine

A Python PDDL engine and MCP (Model Context Protocol) server that enables AI agents to interactively explore PDDL planning problems.

Features

  • Standalone PDDL engine — parse, validate, and execute PDDL domains and problems

  • Interactive plan exploration — step through plans, query reachable actions, inspect world state

  • MCP server — expose the engine as tools to any MCP-compatible AI agent (Claude Desktop, VS Code, etc.)

  • Python API — direct programmatic access with structured JSON responses

  • Session logging — record agent interactions to CSV/JSON for analysis

Supported PDDL Features

Feature

Requirement

Notes

STRIPS

:strips

Basic actions, positive/negative preconditions & effects

Typing

:typing

Typed objects/parameters, type hierarchies

Equality

:equality

(= ?x ?y) in preconditions

Negative preconditions

:negative-preconditions

(not ...) in preconditions and goals

Disjunctive preconditions

:disjunctive-preconditions

(or ...) in preconditions

Existential preconditions

:existential-preconditions

(exists (?x - type) ...)

Universal preconditions

:universal-preconditions

(forall (?x - type) ...) in preconditions

Conditional effects

:conditional-effects

(when ...) and (forall ... effect)

Implication

:adl

(imply ...) in preconditions

Numeric fluents

:numeric-fluents

increase, decrease, assign, scale-up, scale-down

Action costs / metric

:action-costs

(total-cost) with (:metric minimize ...)

Constants

:constants in domain

Unsupported PDDL Features

Feature

Notes

Durative actions (:durative-actions)

Raises an explicit error with a descriptive message

Derived predicates (:derived)

Not parsed; will fail on load

Maximize metric

Only minimize is supported

Arithmetic in conditions

Numeric expressions like (+ ?x ?y) in preconditions are not supported

Related MCP server: LLMMO Game Server

Installation

git clone https://github.com/kgoe-ait/pypddlengine
cd pypddlengine
uv sync

Or install from PyPI (once published):

pip install pypddlengine

Usage

Python API — Simulator

from pypddlengine.engine import Simulator

sim = Simulator(domain_str, problem_str, plan_str)
sim.step_all()
print(sim.is_goal_reached())

Step through manually:

sim = Simulator(domain_str, problem_str)
sim.step(("move", ("loc1", "loc2")))
print(sim.get_executable_actions())
print(sim.is_goal_reached())

Python API — Exploration API

Higher-level API with structured JSON responses, designed for AI agent tool use:

from pypddlengine.api import PDDLExplorationAPI

api = PDDLExplorationAPI(domain_str, problem_str)
actions = api.get_available_actions()        # {"count": 4, "actions": [...]}
result  = api.execute_action("move", ("a", "b"))  # {"success": true, ...}
api.is_goal_reached()                        # {"goal_reached": false, ...}
api.reset()

Session Logger

Wraps the exploration API and logs every interaction to CSV/JSON:

from pypddlengine.session_logger import PDDLSessionLogger

session = PDDLSessionLogger(domain_str, problem_str, session_id="experiment_1")
session.execute_action("move", ["loc1", "loc2"])
session.export_to_csv("session.csv")
session.export_to_json("session.json")
session.print_summary()

MCP Server (Claude Desktop)

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "pddl-engine": {
      "command": "uv",
      "args": ["run", "python", "-m", "pypddlengine.server"],
      "cwd": "/path/to/pypddlengine"
    }
  }
}

MCP Server (VS Code)

Already configured in .vscode/mcp.json — works out of the box when opening this project.

MCP Tools

Once connected, the AI agent can use these tools:

Tool

Description

pddl_init

Initialize session with domain and problem PDDL strings

pddl_init_from_files

Initialize session from domain and problem file paths

pddl_get_available_actions

Get all executable actions in current state

pddl_execute_action

Execute an action by name and arguments

pddl_get_current_state

View all true predicates and fluents

pddl_is_goal_reached

Check if goal conditions are met

pddl_reset

Reset to initial state

pddl_get_action_history

Review actions taken so far

pddl_get_domain

Re-read the PDDL domain definition

pddl_get_problem

Re-read the PDDL problem definition

Running Tests

uv run pytest

Project Structure

pypddlengine/
├── server.py            # MCP server
├── api.py               # Exploration API (structured JSON responses)
├── session_logger.py    # Session logging wrapper
└── engine/              # Core PDDL engine
    ├── simulator.py     # Plan simulation
    ├── parser/          # PDDL lexer & parser
    ├── interpreter/     # Domain/problem interpretation
    └── execution/       # State management & action execution

License

Apache 2.0 — see LICENSE.

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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/AIT-Complex-Dynamical-Systems/pypddlengine'

If you have feedback or need assistance with the MCP directory API, please join our Discord server