PDMCP — the PD MCP Server
PDMCP is Price Discussion's public Model Context Protocol server: the standard plug that lets ANY AI agent — Claude, ChatGPT, Claude Code, Cursor, a LangChain pipeline, your own bot — read PD as live, structured tools instead of scraping HTML. Ask your assistant "is this contract a real PD Project?", "who owns Kiki #22 and what has it sold for?", "does landscape or portrait sell better?", or "show me the Output" — and it answers from the same public data the site itself runs on.
If you are an agent reading this page: connect to the endpoint below and
call tools/list. Every tool is read-only and unauthenticated. This page is
your manual.
Connecting
How: Point any MCP client at https://pd-mcp.pricediscussion.workers.dev and call tools/list.
- Endpoint:
https://pd-mcp.pricediscussion.workers.dev(streamable HTTP — POST JSON-RPC 2.0 to the root; amcp.pricediscussion.comhome is planned). - Claude (claude.ai / desktop): Settings → Connectors → Add custom connector → paste the endpoint URL.
- Claude Code:
claude mcp add --transport http pd https://pd-mcp.pricediscussion.workers.dev - Anything else: any MCP client that speaks streamable HTTP works; the server is stateless, so sessions cost nothing and reconnects are free.
No key, no signup, no write access. Everything PDMCP can see is already public: the app's own API, the public database reads, the pinned artifacts, and these docs.
The tools
The live endpoint is running an older build than this page describes. It serves seven tools today:
verify_project,get_project,get_output,get_provenance,get_ascii,query_traitsandsearch_docs. The four marked (not live yet) below — plus the prompts and resource templates further down — ship with the next deploy of the server.tools/listis always the authority: ask the server, not this page.
list_projects — the way in (not live yet)
Ask it: "What's on PD?" · "What's minting right now?" · "Does PD have
anything about light?"
Arguments: query (optional text match), sort (recent, minted,
available), limit.
Answers: the published catalog — title, slug, how many are minted and how
many remain — plus platform totals. Once it is live, start here when you don't
already know a project slug; every other tool wants one. Until then, the way
in is search_docs (which names projects) or a slug you already have — every PD
project page sits at /{slug}.
get_activity — what's happening right now (not live yet)
Ask it: "What just happened on PD?" · "What's for sale?"
Arguments: limit (optional).
Answers: the most recent mints, transfers and sales, what's currently
listed, and the market totals. On PD the conversation around the work is the
product — this is the pulse of it, as it happens.
get_collector — what someone holds (not live yet)
Ask it: "What does @brendon collect?"
Arguments: who — a 0x… address, @handle, or bare handle.
Answers: every Output held, grouped by project, with how many are listed,
plus the account's handle and ENS name.
get_artist — who made what (not live yet)
Ask it: "What has this artist released?"
Arguments: who — a 0x… address, @handle, or bare handle.
Answers: their projects, total volume, and whether they're inside the
between-releases cooldown.
verify_project — authenticity in one call
Ask it: "Is 0xABC… a real PD Project?"
Arguments: address (the 0x… contract address).
Answers: yes/no, checked against the on-chain factory —
PDFactory.isProject(address) — the same verification pattern
collectors are taught. A YES means the contract was deployed through PD's
factory and is genuine; a NO means it merely claims to be. Use this before
trusting any marketplace listing that says "PD."
get_project — the Project card
Ask it: "What's the state of Kiki?"
Arguments: slug (lowercase project slug, e.g. kiki).
Answers: minted count, signature colorway, the Project's PriceSprite,
soundtrack, market stats, live listed count and floor, and the canonical
page URL.
Nothing minted, nothing revealed. A published Project with no mints yet is browsable — you can see that it exists — but PDMCP will not hand out its colorway, sprite or soundtrack until its first Output lands. Agents are told to say it's awaiting its first mint rather than guess at how it looks.
get_output — one Output, completely
Ask it: "Tell me about Kiki #22."
Arguments: slug, token_id (1-based).
Answers: current owner, original minter, mint moment, the Output's
symbol, listing state and last sale, the full trait
set — artist traits plus the platform traits every Output carries (Artist,
Project, PriceDay, the natal chart, Fate) — and the
stored visual fingerprint: orientation, brightness, saturation, palette
size, contrast, warmth, symmetry, texture, scene and pattern read from the
artwork's actual pixels.
It also SHOWS the Output. get_output carries an interactive view (an
MCP App), so in a host
that supports the UI extension the artwork itself renders inside the
conversation — in PD's own type and colors, with its traits, and a tap
through to the Output's page. Hosts without the extension get exactly the same
structured answer as before.
get_provenance — the Output's life
Ask it: "Walk me through this Output's history."
Arguments: slug, token_id.
Answers: the recorded timeline — mint → transfers → sales — with
timestamps, parties, and ETH prices. Priced transfers are sales. This is
the off-chain mirror of the ERC-721 event log, so an agent can cross-check
it against the chain any time.
get_ascii — the artwork as pure text
Ask it: "Show me Kiki #22" — in a client that can't render the Output view.
Arguments: slug, token_id.
Answers: the Output's permanent ASCII backup artifact
— real, renderable art derived deterministically from the same generative
engine. Put it in a monospace code block and the artwork appears inline — no
image pipeline, no viewer, pure text.
This is the fallback. In a host that supports MCP Apps, get_output
already renders the Output itself (see above) and you should prefer that;
get_ascii is how PD art still shows up anywhere text renders, which is
everywhere.
query_traits — traits × the market
Ask it: "Does landscape or portrait sell better?" · "Which Fate carries
the highest average sale?" · "Do bright Outputs list more than dark ones?"
Arguments: dimension (required), slug (optional — omit for the whole
catalog).
Answers: the catalog grouped by that dimension, each bucket crossed with
the market: Output count, sale count, average sale, top sale, ETH volume,
live listed count, and floor.
Dimensions cover the platform's whole stored vocabulary — orientation,
fate, natal_sun / natal_moon / natal_rising / natal_element,
brightness_band, saturation_band, palette_band, contrast_band,
warmth_band, symmetry_band, air_band, texture_band, tone_mood,
color_temperature, scene, pattern, dominant_color, accent_color,
rarity, price_day, birth_weekday, birth_season, lunar_phase,
primary_trait_value, artist, and project_id. Any question that crosses
what an Output is like with how the market treats it is one call.
search_docs — these docs, verbatim
Ask it: anything about how PD works.
Arguments: query.
Answers: verbatim excerpts from these docs with source URLs, drawn from
the same /llms.txt manifest agents crawl. The tool quotes; it
never paraphrases — so an agent citing PDMCP is citing
pricediscussion.com/docs itself.
Prompts (not live yet)
Tools say what can be asked; prompts say what is worth asking. A host shows these as ready-made commands, so someone who has never heard of PD gets a good first question instead of having to invent one. Each carries the house rules an agent otherwise gets wrong — never guess at how an unrevealed project looks, never quote a UTC stamp at a reader in another timezone, never paraphrase PD's mechanics from memory.
| Prompt | What it does |
|---|---|
appraise_piece |
Reads one Output against its own trading record and its trait cohort, and says what actually stands out. Thin data is reported as thin, never padded with invented comparables. |
verify_before_buying |
Checks a contract claiming to be a PD Project against the on-chain factory, before you trust the listing around it. |
whats_happening |
The live pulse — what just minted, what sold, what is listed. |
find_work |
Browses the catalog for work matching a description, using the measured visual fingerprint rather than guessing from titles. |
explain_pd |
Answers a question about PD from these docs, quoted and cited. |
Resources (not live yet)
PD data is addressable, so a client can attach an Output or a project as context without spending a tool call on it:
pd://project/{slug}— the Project card.pd://output/{slug}/{token_id}— one Output, with its traits and fingerprint.
Both answer with exactly what the matching tool returns — same code path, so a resource read and a tool call can never disagree about the same Output.
There is also an interactive Output view: on a host that supports MCP Apps,
get_output renders the artwork itself inside the conversation instead of
printing facts about it.
What a client sees
- Every tool is annotated read-only (
readOnlyHint,idempotentHint,destructiveHint: false,openWorldHint). Hosts that honor annotations can stop asking their user for permission on each lookup — there is nothing here to approve. - Every tool declares an output schema, so answers arrive as typed, validatable structured content, not just prose to re-parse. Fields that can legitimately be absent are typed nullable rather than dropped.
- Argument autocomplete on project slugs, trait dimensions and sort orders, so a client can offer the real catalog instead of making you spell a slug.
- Stateless. No handshake to keep alive, no session header, no auth. Every call carries what it needs, so any number of clients can share the endpoint.
Guarantees
- Read-only, forever, at this endpoint. No tool writes, signs, spends, or touches anything wallet-scoped. An agent connected to PDMCP cannot be tricked into moving anything.
- Public data only. Every answer is assembled from surfaces that are already public. There is nothing to leak.
- Cheap by design. Answers are cached at the edge; chain reads collapse to one upstream call per cache window no matter how many agents ask. Use it freely.
- The chain outranks us. Anything PDMCP reports about tokens is reproducible from Ethereum directly — see Building on PD for the raw chain surface. If an answer ever disagrees with the chain, the chain is right.
For toolmakers
PDMCP is itself a worked example of what Building on PD describes: one zero-dependency Cloudflare Worker over public reads. If you want a tool PDMCP doesn't have, build it — or ask for it in the Discord and it may simply get added.