CatalogMCP
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., "@CatalogMCPadd a Weight attribute in kg, required for all Industrial-line products"
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.
CatalogMCP
Setting up a digital product catalog today is either slow (click through a UI for every attribute and rule) or expensive (script it against an API, which turns labor cost into engineering cost for every future change). This is a spike proving a third option: an agent talking to a governed MCP tool surface can replace both. A catalog admin describes what they want in plain language ā "add a Weight attribute in kg, required for all Industrial-line products" ā and an agent executes it through tools that preview, log, and gate every change. Setup becomes a conversation instead of a UI marathon or an engineering ticket.
Demo
š„ Watch the recorded demo ā screen recording of the exact run described below.
The scripted client in demo/client.ts drives this server through
a real Claude tool-use loop (Anthropic Messages API, no mocking) and walks through:
Browsing the empty catalog.
A natural-language request to set up the catalog from an attached file of products and their attribute values ā including the schema (attributes, a required-for-industrial-line rule) the import depends on.
A dry-run preview surfacing two rows that fail validation, a back-and-forth to fix them, then a real commit of all five products.
Reading the audit log the commit produced.
Browsing the catalog again, now populated ā closing the loop the same way it opened, via the agent, not a human refreshing a UI.
A destructive request ā delete the
materialattribute ā held for confirmation with a data-aware blast-radius disclosure (5 affected products, by name), then confirmed.A closing beat: the same request attempted against a read-only instance, cleanly refused.
The full text transcript of that same run is in
demo/transcript.txt ā reproducible yourself by running
npm run demo.
Related MCP server: Product MCP Server
What makes this MCP (not just an API)
MCP is a wire protocol ā JSON-RPC 2.0 messages
over a transport (stdio here; HTTP/SSE elsewhere) ā not a coding convention. A
small, fixed set of method names is standardized by the spec itself, so any
compliant client (Claude Desktop, this repo's own demo/client.ts, any other agent
framework) can talk to this server without knowing anything about catalogs,
attributes, or rules ahead of time.
The protocol methods
Method | Direction | Purpose |
| client ā server | Handshake: exchange protocol versions, negotiate capabilities |
| client ā server | Client confirms it's ready |
| client ā server | Discovery ā "what can you do?" Returns every tool's name, description, and JSON Schema input shape |
| client ā server | Invocation ā "do this one, with these arguments" |
That's the entire surface an agent needs to know in advance. There's no
POST /create_attribute endpoint ā an agent calls tools/call with
{"name": "create_attribute", "arguments": {...}}. A trimmed real exchange with
this server:
// ā client
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05", ...}}
// ā server
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"catalog-mcp","version":"0.1.0"}}}
// ā client
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
// ā server ā every tool below, as name + description + JSON Schema
{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"list_attributes", ...}, ...]}}How it works in this codebase
We never wrote a tools/list or tools/call handler. Every call to
server.registerTool(name, config, handler) in src/tools/ appends
to an internal registry inside @modelcontextprotocol/sdk's McpServer. The SDK
answers tools/list by dumping that registry (converting our Zod schemas to JSON
Schema along the way) and answers tools/call by looking the requested name up in
the same registry and invoking its handler ā none of that is our code. It's also
why the governance layer (src/governance/governed-registration.ts)
wraps registerTool itself rather than hooking into some HTTP middleware layer:
that single call is the only seam every tool invocation is guaranteed to pass
through.
The tools
12 tools, grouped by what they operate on. Every mutating tool accepts
dryRun: true for a no-persist preview; full argument shapes are in
src/tools/.
Schema (catalog structure ā attributes, rules)
Tool | Args | Mutating? |
| ā | no |
|
| no |
|
| yes |
|
| yes |
|
| yes ā destructive, two-phase |
| ā | no |
|
| yes |
Content (actual products)
Tool | Args | Mutating? |
| ā | no |
|
| no |
|
| yes ā bulk, upsert, partial-commit |
|
| yes |
Governance
Tool | Args | Mutating? |
| ā | no |
Why the guardrails aren't optional
Nobody hands an ungoverned agent write access to a live product catalog. The preview/audit/approval layer isn't a safety feature bolted on afterward ā it's the precondition that makes "just describe what you want" viable for something you can't afford to get wrong. Concretely, this server never lets a mutation happen blind:
Dry-run preview ā every mutating tool accepts
dryRun: trueand returns the exact outcome without persisting anything.Audit log ā every tool call is recorded (timestamp, tool, args, actor, outcome) and readable via its own tool, not just claimed to exist.
Two-phase confirm on destructive ops ā deleting an attribute first returns a blast-radius disclosure (a count and a sample of affected products) and a token; only a second call with that token executes, and if the catalog changed in between, the stale token is refused rather than honored.
Policy mode ā the server can run fully read-only, refusing every mutating tool at the gate, for a locked-down deployment.
See CONTEXT.md for the domain glossary and CLAUDE.md
for the full scope, tool surface, and explicit non-goals.
Setup
npm install
npm test # domain, tool, and governance tests, plus the 6-step demo acceptance test
npm run dev # start the MCP server over stdio (add --read-only to lock it down)
npm run demo # run the scripted Claude-driven demo client (needs ANTHROPIC_API_KEY)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.
Related MCP Servers
- Alicense-qualityFmaintenanceEnables intelligent ecommerce tools for agents and applications, including product catalog access, product addition, and shopping policies.Last updated1Apache 2.0
- Flicense-qualityDmaintenanceEnables natural language product management (CRUD) with multiple classification methods, including LLM-based and fast ML classifiers, for product creation, listing, updating, and deletion via a chat interface.Last updated1
- Flicense-qualityDmaintenanceEnables natural language management of apps, services, resources, attributes, and data via the Dimetrics API with full CRUD operations and advanced filtering.Last updated
- Alicense-qualityFmaintenanceEnables AI assistants to manage Deriva catalogs and execute ML workflows, including dataset versioning, controlled vocabularies, and feature management.Last updatedApache 2.0
Related MCP Connectors
Manage products, EU Digital Product Passports, operator parties, and GS1 EPCIS supply-chain events.
The grounded data layer for any LLM: governed SQL, metrics, lineage and catalog over your data.
Manage your Savanto store from your AI: catalog, content, prompts, and analytics, by chat.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Surferdude-AF/CatalogMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server