GraphQL Schema Embedder MCP Server
GraphQL Schema Embedder MCP-Server
Python MCP-Server für LLMs, der ein GraphQL-Schema indiziert, Embeddings pro type->field über einen Embeddings-Endpunkt speichert und schnelles Nachschlagen sowie die Ausführung von run_query ermöglicht, sobald relevante Typen identifiziert wurden, um Daten von Ihrem GraphQL-Endpunkt abzurufen.
Architektur
GraphQL-Schema: Stellen Sie eine Schema-Datei (SDL) bereit, um das Parsen und Indizieren zu testen.
Indexer:
schema_indexer.pyerstellt einen Navigationsindex von GraphQL-Feldknoten, einschließlich Feld-Metadaten, Fuzzy-Search-Aliasen und Query-Root-Koordinaten, bettet dann den generierten Suchtext ein und speichert ihn indata/metadata.json+data/vectors.npz.Server:
server.pystellt die MCP-Toolslist_typesundrun_querybereit. Der Server stellt beim Start sicher, dass der Schema-Index existiert; er ruft den Embeddings-Endpunkt nur bei einer Neuindizierung oder beim Einbetten einer neuen Abfrage auf.Persistenz:
data/ist in.gitignoreenthalten, sodass Sie lokal neu generieren können, ohne das Repo zu verschmutzen.
Einrichtung
Setzen Sie die Umgebungsvariablen. Sie können mit .env.example beginnen.
Umgebungskonfiguration:
GRAPHQL_EMBED_API_KEY(oderOPENAI_API_KEY)GRAPHQL_EMBEDDINGS_URL(vollständige Embeddings-URL)GRAPHQL_EMBED_MODELGRAPHQL_EMBED_API_KEY_HEADER/GRAPHQL_EMBED_API_KEY_PREFIXGRAPHQL_EMBED_HEADERS(JSON-Objekt-String für zusätzliche Header) Endpunkt-Authentifizierung (bei Verwendung vonGRAPHQL_ENDPOINT_URL):GRAPHQL_ENDPOINT_HEADERS(JSON-Objekt-String, zusammengeführt mit allen--header-Flags)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 src/server.pyDen MCP-Server ausführen
python3 src/server.py # SSE on 127.0.0.1:8000/sse by default
python3 src/server.py --transport sse # explicit SSE
python3 src/server.py --transport streamable-http # Streamable HTTP on 127.0.0.1:8000/mcp
# Or: point at a live GraphQL endpoint (requires introspection enabled)
python3 src/server.py --endpoint https://api.example.com/graphql
# Endpoint auth headers (repeat --header)
python3 src/src/server.py --endpoint https://api.example.com/graphql --header "Authorization: Bearer $TOKEN"
# Options: --host 0.0.0.0 --port 9000 --log-level DEBUG --mount-path /myappLokaler Endpunkt-Test (Beispiel-Server im Repo):
# Terminal 1
python3 examples/graphql_test_server/server.py
# Terminal 2
python3 src/server.py --transport sse --endpoint http://127.0.0.1:4000/graphqlTools:
list_types(query, limit=5)– Ähnlichkeitssuche mittels Embeddings über GraphQL-Feldknoten. Die Ergebnisse werden nach Kosinus-Ähnlichkeits-Score zurückgegeben und enthaltencoordinates(Array von Pfadschritten abQuery) sowiequeryfürQuery-Felder undselectfür verschachtelte Objektfelder.run_query(query)– Wenn--endpointgesetzt ist, wird die Abfrage an den Endpunkt weitergeleitet; andernfalls wird sie gegen das lokale Schema validiert/ausgeführt (keine Resolver; primär zur Validierung/Formprüfung, Daten werden als null aufgelöst). Sowohl die Indizierung als auch die Abfrage verwenden dasselbe Embedding-Modell (standardmäßigtext-embedding-3-small, überschreibbar über Konfiguration/Umgebung oder--model).
Ranking (list_types):
Die Ergebnisse werden rein nach der Kosinus-Ähnlichkeit der Embeddings über den indizierten Suchtext der Feldknoten gerankt.
Beispiel für list_types-Ausgabe:
[
{
"field": "users",
"summary": "Query.users(limit: Int) -> [User!]!",
"coordinates": ["Query.users(limit: <Int>)"],
"query": "query { users(limit: <Int>) { id name orders { id total status } } }"
},
{
"type": "Order",
"field": "total",
"summary": "Order.total -> Float!",
"coordinates": ["Query.user(id: <ID!>)", "User.orders", "Order.total"]
},
{
"type": "User",
"field": "orders",
"summary": "User.orders -> [Order!]!",
"coordinates": ["Query.user(id: <ID!>)", "User.orders"],
"select": "orders { id total status }"
}
]Anmerkungen:
python3 src/server.pyverwendet standardmäßig densse-Transport; übergeben Sie--transport streamable-http, wenn Sie stattdessen HTTP wünschen.Sie können auch Umgebungsvariablen mit dem Präfix
FASTMCP_setzen (z. B.FASTMCP_HOST,FASTMCP_PORT,FASTMCP_LOG_LEVEL), um die Standardwerte zu überschreiben.Der Server stellt sicher, dass der Schema-Index beim Start erstellt wird; wenn Embeddings berechnet werden, wird ein einfacher Fortschrittsbalken ausgegeben. Setzen Sie
GRAPHQL_EMBED_BATCH_SIZE, um die Batch-Größe anzupassen.Der Server stellt MCP-
instructionsbereit (überschreibbar mitMCP_INSTRUCTIONS), die den Server als Abstraktionsschicht beschreiben und das LLM anweisen,list_typesund dannrun_querymit minimalen Tool-Aufrufen zu verwenden.
Schnelltest mit dem MCP Inspector
Erfordert npm/npx im PATH.
Verbindung zu einem bereits laufenden SSE-Server herstellen
In einem Terminal (Server starten):
python3 src/server.py --transport sse --port 8000In einem anderen Terminal (Inspector starten und auf /sse verweisen):
npx @modelcontextprotocol/inspector --transport sse --server-url http://127.0.0.1:8000/sseKonfiguration in Claude Desktop / CLI
Wenn Sie diesen Server lokal über SSE (Standard) ausführen, verweisen Sie Claude auf die /sse-URL.
claude mcp add --transport sse graphql-mcp http://127.0.0.1:8000/sseSie können auch über JSON konfigurieren (z. B. Konfigurationsdatei):
{
"mcpServers": {
"graphql-mcp": {
"type": "sse",
"url": "http://127.0.0.1:8000/sse"
}
}
}Wenn Sie diesen Server hinter einer Authentifizierung bereitstellen, übergeben Sie Header:
claude mcp add --transport sse private-graphql http://127.0.0.1:8000/sse \
--header "Authorization: Bearer your-token-here"This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/ThoreKoritzius/graphql-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server