About ptpge
ptpge is a read-only MCP server that gives AI agents access to an open vocabulary, product templates, and specifications for print. It also validates configurations and creates or expands configuration fingerprints, refreshing data when the dataset version changes.
Key features
- 01Search and read terms
- 02Browse the term hierarchy
- 03Read product templates and variables
- 04Validate product configurations
- 05Resolve color notation
- 06Compute and expand configuration fingerprints
Use cases
- 01Look up print terms and definitions
- 02Check print configurations against a template
- 03Convert color notation to vocabulary terms
- 04Create fingerprints to identify print specifications
MCP support
It provides a Streamable HTTP MCP server with tools for searching vocabulary, reading product templates, validating configurations, and handling fingerprints. The server caches vocabulary data and reloads it when the dataset version changes.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.ptpge.org/mcpclaude mcp add --transport http org-ptpge https://mcp.ptpge.org/mcp{"mcpServers":{"org-ptpge":{"type":"http","url":"https://mcp.ptpge.org/mcp"}}}Open in Cursor{"servers":{"org-ptpge":{"type":"http","url":"https://mcp.ptpge.org/mcp"}}}Open in VS Code{"mcpServers":{"org-ptpge":{"type":"http","url":"https://mcp.ptpge.org/mcp"}}}{"mcpServers":{"org-ptpge":{"serverUrl":"https://mcp.ptpge.org/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
11| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Maximum number of results to return. |
| query | string | Yes | Free-text query. Matched against notation, label, altLabels, and definition. |
| groups | array | No | Optional filter by group code(s), e.g. ["substrates", "configurations"]. Omit for all groups. |
| language | string | No | ISO 639-1 language code for label and definition matching. |
| query_language | string | No | ISO 639-1 code for the language the QUERY is written in — not the language of the labels you want back (that is `language`). Optional, and it never changes the results: search always looks across every language. It is used only so that a phrase we cannot resolve is recorded against the right market, which is how missing synonyms get found and added. Send it if you know it; omit it if you do not. |
| include_deprecated | boolean | No | Also return deprecated terms (they still resolve by URI but are no longer vocabulary). Default false: a brand name resolves to its register entry (kind=supplier) instead of the retired term. |
Details
From the project READMEPTPGE MCP Server
A read-only Model Context Protocol server that exposes the PTPGE specification — the open vocabulary of print — to AI agents.
The vocabulary (terms with permanent URIs, product templates, variables, schemas and registers) is
published under CC BY 4.0 at https://api.ptpge.org/v1/. This server loads it, keeps it in memory,
reloads when the dataset version changes, and offers it to agents as a small set of MCP tools:
search a term, read a term, read a product envelope, validate a configuration, resolve a colour
notation, compute and expand a configuration fingerprint (ptpge-cfs/1).
Live, open, no key: https://mcp.ptpge.org/mcp (Streamable HTTP). open.mcp.ptpge.org is an alias.
Add it to your assistant
- Claude (web or desktop): Settings → Connectors → Add custom connector →
https://mcp.ptpge.org/mcp - ChatGPT: Settings → Connectors → Add (developer mode) → same URL
- Claude Code:
claude mcp add ptpge --transport http https://mcp.ptpge.org/mcp
Then ask, in any language: «What is a roll fold?» or «Fingerprint an A4 tri-fold brochure, 170 g silk, 4/4».
Tools
| Tool | What it does |
|---|---|
ptpge_search_terms | Free-text search over the vocabulary, tokenised and language-independent. Hits carry URI, label, level, group, kind (term · supplier · vendor · schema) and score. Deprecated terms are skipped unless asked for. |
ptpge_get_term | One term in full: definition, relations (broader / narrower / related), mappings, properties, notation. Accepts a full URI or a relative path. |
ptpge_get_version | Dataset version, term counts, licence, scheme URL, server version. |
ptpge_browse | Walk the hierarchy from a node. |
ptpge_get_product_envelope | For a product template: which variables apply, which are required for an identity, which values are allowed. |
ptpge_validate_config | Check a configuration (bindings on vocabulary URIs) against its envelope: membership, cardinality, scope, numeric bands, cross-variable rules. |
ptpge_resolve_color_notation | 4/4, 4/1, 1/0 … → ink counts per face in vocabulary terms. |
ptpge_fingerprint | Canonicalise a validated configuration and compute its ptpge-cfs/1 fingerprint (spec and offer). |
ptpge_expand_fingerprint | A fingerprint back to its configuration, from the register at ptpge.org/f/. |
Responses are plain JSON. The /playground page lets you watch an agent run the loop from a free-text
order to a fingerprint, every tool call in the transcript.
Endpoints
| Path | Purpose |
|---|---|
POST /mcp | MCP over Streamable HTTP (also GET for the event stream, DELETE to end a session) |
GET /health, /healthz | Liveness + dataset version |
GET /playground | The Playground |
GET /sse | Retired — answers 410 with a pointer to /mcp |
Run it yourself
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python -m ptpge_mcp.server # http://0.0.0.0:8000/mcp
Test with the MCP Inspector: npx @modelcontextprotocol/inspector, transport Streamable HTTP, URL
http://localhost:8000/mcp.
pytest -q
Configuration
| Variable | Default | Purpose |
|---|---|---|
PTPGE_API_BASE | https://api.ptpge.org/v1 | Where the vocabulary is fetched from |
PTPGE_REFRESH_SECONDS | 900 | How often to check version.json for a new dataset |
PTPGE_LOG_LEVEL | INFO | Python logging level |
PTPGE_MCP_AUTH_USERS | — | Optional Basic Auth on the server, comma-separated user:pass pairs. Leave unset for an open server. |
PTPGE_MCP_HTPASSWD | — | Optional path to an Apache htpasswd file used instead of the variable above |
PTPGE_MCP_TOKENS / _TOKENS_FILE | — | Optional per-recipient tokens (?t=), same purpose |
The public server at mcp.ptpge.org runs with none of the auth variables set.
Layout
ptpge_mcp/
├── server.py # tools, handlers, Streamable HTTP, Playground route
├── data.py # fetch, cache, index, search
├── config.py # environment-based runtime config
├── cfs_resolution.py # canonicalisation + ptpge-cfs/1
├── fingerprint.py, fingermark.py # hash and mark
├── completeness.py # required variables / unspecified axes
├── colornotation.py # 4/4-style notation → terms
├── semantic.py # embedding search (term_embeddings.npz)
├── registerclient.py # ptpge.org/f/ register client
├── playground.py, learningpage.py, missreport.py
└── _frame.py # ptpge.org site frame (generated; do not edit)
tests/
passenger_wsgi.py # cPanel/Passenger entry point for the hosted instance
.cpanel.yml # deploy script for the hosted instance
CHANGELOG.md # semver; one entry per release
Versioning
Semver for the server; the dataset has its own date version (ptpge_get_version). The fingerprint
algorithm is a separate contract, ptpge-cfs/1, and does not change with server releases.
Licence
Code: Apache License 2.0. Vocabulary and data: CC BY 4.0, held by PTPGE, a non-profit association (being formed). See ptpge.org/governance.
Registry
Listed in the official MCP Registry as org.ptpge/mcp-server (server.json in this repository; published with
mcp-publisher, namespace verified by a DNS record on ptpge.org).
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.