pd-mcp

pd-mcp

Enables agentic interaction with vanilla Pure Data by providing tools for live patch creation, inspection, and manipulation via an MCP server that synchronizes with a Pd bridge patch.

Category
Visit Server

README

pd-mcp

Basic MCP server for agentic interaction with vanilla Pure Data.

This project is intentionally shaped after the Max/MSP MCP workflow described in the ISMIR 2025 late-breaking demo paper and the associated Max reference implementation, but adapted to what is practical in plain vanilla Pd:

  • bundled object docs for in-context lookup
  • live patch creation and rewiring
  • direct object/message/atom creation
  • patch-state inspection
  • runtime bang/message/number injection
  • DSP on/off control

Architecture

The system has two parts:

  1. A Python MCP server that owns an authoritative graph model of the patch.
  2. A vanilla Pd bridge patch that listens on UDP port 5000 and forwards dynamic patching messages into a managed subpatch canvas.

Instead of trying to delete or mutate arbitrary objects inside Pd one-at-a-time, the server updates its graph model and resynchronizes the target canvas by sending:

  1. clear
  2. object creation messages
  3. optional hidden control receivers for explicitly controllable objects
  4. connection messages

That tradeoff is deliberate. It is simpler and more reliable in vanilla Pd, while still feeling agentic from the MCP client side.

Included Tools

  • list_pd_objects
  • search_pd_objects
  • get_pd_object_doc
  • get_patch_state
  • add_pd_object
  • remove_pd_object
  • connect_pd_objects
  • disconnect_pd_objects
  • set_object_text
  • move_pd_object
  • clear_patch
  • sync_patch
  • set_dsp
  • send_bang_to_object
  • send_message_to_object
  • set_number

Project Layout

  • src/pd_mcp/server.py: MCP tool definitions
  • src/pd_mcp/model.py: in-memory patch graph and Pd index layout
  • src/pd_mcp/bridge.py: UDP FUDI bridge to Pd
  • src/pd_mcp/pd_docs.json: small bundled docs set for common vanilla objects
  • pd/pd_mcp_bridge.pd: bridge patch to open in Pure Data

Install

Using uv:

uv venv
source .venv/bin/activate
uv pip install -e .

Or with pip:

python -m venv .venv
source .venv/bin/activate
pip install -e .

Run

  1. Open pd/pd_mcp_bridge.pd in vanilla Pure Data.
  2. Keep the bridge patch open.
  3. Start the MCP server:
python main.py

Environment variables:

  • PD_MCP_HOST defaults to 127.0.0.1
  • PD_MCP_PORT defaults to 5000

Cursor MCP Config

Add something like this to your MCP config:

{
  "mcpServers": {
    "pd-mcp": {
      "command": "/bin/zsh",
      "args": [
        "-lc",
        "cd /Users/chrisdonahue/Code/pd-mcp && source .venv/bin/activate && python main.py"
      ]
    }
  }
}

Typical Workflow

  1. Call add_pd_object a few times to create obj, msg, text, or atom boxes.
  2. Use connect_pd_objects to wire them.
  3. Only set controllable=true on add_pd_object when you want runtime tools like send_message_to_object, send_bang_to_object, or set_number.
  4. Call get_patch_state whenever the agent needs a reliable snapshot.

Example object boxes:

  • box_type="obj", text="osc~ 440"
  • box_type="obj", text="*~ 0.1"
  • box_type="obj", text="dac~"
  • box_type="msg", text="440"
  • box_type="floatatom"
  • box_type="obj", text="line~", controllable=true

Limitations

  • The bundled docs are intentionally small, not a full export of the Pd manual.
  • The server manages only the objects it created in the bridge patch's target subpatch.
  • Selection introspection is not implemented in this first cut.
  • Object attributes in the Max sense do not map cleanly onto vanilla Pd, so the API is text-centric instead.
  • Because sync is graph-based, manual edits inside the managed target subpatch can be overwritten.

Why This Shape

The Max paper emphasizes two ideas:

  • documentation retrieval for in-context learning
  • tool-based direct manipulation instead of raw patch-file generation

This server keeps those properties while using a safer Pd backend than the nascent Pd MCP implementations that mutate Pd more directly.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured