Skip to main content
Glama
stevyf93II

catalog-mcp

by stevyf93II

catalog-mcp

CI

Ein MCP-Server, der jedes JSON-Katalog in ein Abfragetool für KI-Agenten verwandelt.

Richten Sie ihn auf eine Katalog-URL oder -Datei – einen Bestandsfeed, eine Produktliste, die catalog.json, die feedmerge veröffentlicht – und jeder MCP-Client (Claude Desktop, Claude Code, alles, was das Protokoll spricht) erhält strukturierte Filter-, Gruppierungs-, Ranking- und Schemaerkennung über Ihre Datensätze.

Node 18+. Zwei Laufzeitabhängigkeiten: das MCP-SDK und zod.

Warum

Agenten sind schlecht mit großen JSON-Dateien und gut mit Werkzeugen. Geben Sie einem Agenten einen 2 MB großen Katalog und er wird Datensätze abschneiden, überfliegen oder halluzinieren; geben Sie ihm catalog_query mit einer Filtergrammatik und er antwortet „günstigster Datensatz unter $30k mit diesen zwei Eigenschaften“ jedes Mal korrekt, indem er nur die Datensätze liest, die passen.

Dieses Repository ist die verallgemeinerte Version eines MCP-Servers, den ich in Produktion betreibe: ein Verkaufsflächen-KI-Assistent fragt einen Live-Bestandskatalog über genau diese Werkzeuge ab (gleiche Filtersemantik, gleiche Null-Preis-Regel, gleicher TTL-Cache) hunderte Male am Tag. Die Pipeline, zu der es gehört:

vendor feed  ->  feedmerge  ->  catalog.json  ->  catalog-mcp  ->  any agent
             (guarded sync)   (versioned)      (query tools)

Ich betreibe dies gegen meinen eigenen öffentlichen Bestandsfeed; das folgende Beispiel verwendet einen neutralen Katalog, damit das Repository eigenständig ist.

Schnellstart

git clone https://github.com/stevyf93II/catalog-mcp.git
cd catalog-mcp
npm install
npm test                                          # engine, loader, and stdio end-to-end tests

# serve the example catalog
node src/server.js --file examples/telescopes.json --key sku

Binden Sie es in Claude Desktop ein (claude_desktop_config.json):

{
  "mcpServers": {
    "my-catalog": {
      "command": "node",
      "args": ["/path/to/catalog-mcp/src/server.js"],
      "env": {
        "CATALOG_URL": "https://example.com/catalog.json",
        "CATALOG_KEY": "sku"
      }
    }
  }
}

Fragen Sie dann den Agenten Dinge wie „welche Typen sind im Katalog und was kostet jeder am unteren Ende?“ und sehen Sie zu, wie er catalog_schema, catalog_count_by und catalog_top selbstständig zusammensetzt.

Werkzeuge

Tool

Was es tut

catalog_query

Datensätze filtern, sortieren, paginieren und projizieren

catalog_get

Einen Datensatz anhand seines Schlüsselfelds abrufen

catalog_count_by

Nach einem Feld gruppieren und zählen (Array-Felder zählen jedes Element)

catalog_top

Top-N-Datensätze nach einem numerischen Feld, mit optionalem Filter

catalog_values

Unterscheidbare Werte eines Felds mit Zählungen – lernen Sie das Vokabular eines Felds, bevor Sie darauf filtern

catalog_schema

Aus den Datensätzen abgeleitetes Schema: Typen, Abdeckung, numerische Bereiche, Beispielwerte

catalog_stats

Datensatzanzahl, Quelle, Cache-Alter, optionale numerische Zusammenfassungen

Alle Werkzeuge sind schreibgeschützt und idempotent und geben dies in ihren MCP-Anmerkungen an.

Die Filtergrammatik

Eine kleine Spezifikation, verwendet von query, count_by und top:

{
  "eq":       { "type": "reflector", "goto": true },
  "min":      { "aperture_mm": 150 },
  "max":      { "price": 1000 },
  "has":      { "features": ["Parabolic Mirror", "Cooling Fan"] },
  "contains": { "name": "dobsonian" }
}
  • eq – strenge Gleichheit für jeden Wert, einschließlich Booleans und null.

  • min / max – numerische Grenzen. Ein Datensatz ohne reelle Zahl in einem begrenzten Feld wird ausgeschlossen. Diese Regel ist tragend: Im Produktionskatalog bedeutet ein fehlender Preis „Preis auf Anfrage“, und „zeige Einheiten unter $30k“ darf niemals eine Einheit mit unbekanntem Preis anzeigen.

  • has – Array-Mitgliedschaft; jeder aufgeführte Wert muss vorhanden sein.

  • contains – Groß-/Kleinschreibung-unabhängige Teilzeichenkette in einem Zeichenkettenfeld; Feld "*" durchsucht jedes Zeichenkettenfeld im Datensatz.

Bedingungen werden UND-verknüpft. Ein unbekannter Schlüssel der obersten Ebene ist ein Fehler, der die gültigen Schlüssel nennt, denn ein stillschweigend ignorierter Filter ist, wie ein Agent zuversichtlich falsche Antworten meldet.

Sortieren schiebt Datensätze, denen das Sortierfeld fehlt, in beiden Richtungen ans Ende – „nach Preis sortieren“ zeigt zuerst Datensätze mit Preis, nicht eine Wand von Nullen.

Konfiguration

Umgebungsvariable

Flag

Bedeutung

CATALOG_URL

--url

Katalog über HTTP(S) (genau eines von url/datei)

CATALOG_FILE

--file

Katalog auf der Festplatte

CATALOG_RECORDS_PATH

--records-path

Punkt-Pfad zum Datensatz-Array, z. B. data.items

CATALOG_KEY

--key

Feld des Datensatzschlüssels für catalog_get (Standard id)

CATALOG_TTL_SEC

--ttl

Abruf-Cache-TTL in Sekunden (Standard 300)

Wenn CATALOG_RECORDS_PATH nicht gesetzt ist, verwendet der Lader das Dokumentstammverzeichnis, wenn es ein Array ist, oder das einzige Array der obersten Ebene von Objekten, wenn es genau eines gibt ({ "meta": ..., "items": [...] } funktioniert einfach). Wenn das Dokument mehrdeutig ist, lehnt es ab und nennt die Kandidatenschlüssel.

Bei einem fehlgeschlagenen Refresh bedient der Server die letzten guten Daten anstatt einen Fehler zu werfen – ein Agent mitten in einer Aufgabe ist mit fünf Minuten alten Datensätzen besser dran als mit einer Ausnahme – und catalog_stats meldet das Cache-Alter, sodass Veralten nie verborgen bleibt.

Nicht-Ziele

  • Keine Datenbank. Der Katalog ist schreibgeschützt und lebt im Speicher; wenn Ihre Daten nicht bequem in eine JSON-Datei passen, benötigen Sie einen echten Speicher.

  • Keine Schreibvorgänge. Nichts hier verändert den Katalog – das ist die Aufgabe der Synchronisationspipeline (siehe feedmerge).

  • Keine Abfragesprache. Fünf Filtersschlüssel decken ab, was Agenten tatsächlich fragen; alles Ausgefallenere gehört in den Code, nicht in ein Werkzeugschema.

Lizenz

MIT

-
license - not tested
-
quality - not tested
B
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.

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.

  • Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.

View all MCP Connectors

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/stevyf93II/catalog-mcp'

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