GraphQL Schema Embedder MCP Server
MCP-сервер для встраивания GraphQL-схем
Python MCP-сервер для LLM, который индексирует GraphQL-схему, сохраняет эмбеддинги для каждого type->field через эндпоинт эмбеддингов и обеспечивает быстрый поиск, а также выполнение run_query после идентификации соответствующих типов для получения данных из вашего GraphQL-эндпоинта.
Архитектура
GraphQL-схема: предоставьте файл схемы (SDL) для выполнения парсинга и индексации.
Индексатор:
schema_indexer.pyстроит индекс навигации по узлам полей GraphQL, включая метаданные полей, псевдонимы для нечеткого поиска и координаты корня запроса (Query-root), затем встраивает сгенерированный поисковый текст и сохраняет его вdata/metadata.json+data/vectors.npz.Сервер:
server.pyпредоставляет MCP-инструментыlist_typesиrun_query. Сервер гарантирует наличие индекса схемы при запуске; он вызывает эндпоинт эмбеддингов только при переиндексации или встраивании нового запроса.Персистентность:
data/добавлена в.gitignore, поэтому вы можете пересоздавать данные локально, не засоряя репозиторий.
Настройка
Установите переменные окружения. Вы можете начать с .env.example.
Конфигурация окружения:
GRAPHQL_EMBED_API_KEY(илиOPENAI_API_KEY)GRAPHQL_EMBEDDINGS_URL(полный URL для эмбеддингов)GRAPHQL_EMBED_MODELGRAPHQL_EMBED_API_KEY_HEADER/GRAPHQL_EMBED_API_KEY_PREFIXGRAPHQL_EMBED_HEADERS(строка JSON-объекта для дополнительных заголовков) Авторизация эндпоинта (при использованииGRAPHQL_ENDPOINT_URL):GRAPHQL_ENDPOINT_HEADERS(строка JSON-объекта, объединяется с любыми флагами--header)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 src/server.pyЗапуск MCP-сервера
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 /myappТест локального эндпоинта (пример сервера в репозитории):
# Terminal 1
python3 examples/graphql_test_server/server.py
# Terminal 2
python3 src/server.py --transport sse --endpoint http://127.0.0.1:4000/graphqlИнструменты:
list_types(query, limit=5)— поиск по сходству эмбеддингов среди узлов полей GraphQL. Результаты возвращаются по оценке косинусного сходства и включаютcoordinates(массив шагов пути отQuery), а такжеqueryдля полейQueryиselectдля вложенных полей объектов.run_query(query)— если установлен--endpoint, проксирует запрос к эндпоинту; в противном случае проверяет/выполняет его относительно локальной схемы (без резолверов; в основном для проверки валидации/структуры, данные возвращаются как null). И индексация, и выполнение запросов используют одну и ту же модель эмбеддингов (по умолчаниюtext-embedding-3-small, можно переопределить через конфиг/окружение или--model).
Ранжирование (list_types):
Результаты ранжируются исключительно по косинусному сходству эмбеддингов поискового текста индексированных узлов полей.
Пример вывода list_types:
[
{
"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 }"
}
]Примечания:
python3 src/server.pyпо умолчанию использует транспортsse; передайте--transport streamable-http, если хотите использовать HTTP.Вы также можете установить переменные окружения с префиксом
FASTMCP_(например,FASTMCP_HOST,FASTMCP_PORT,FASTMCP_LOG_LEVEL) для переопределения значений по умолчанию.Сервер гарантирует, что индекс схемы построен при запуске; если вычисляются эмбеддинги, выводится простой индикатор выполнения. Установите
GRAPHQL_EMBED_BATCH_SIZEдля настройки размера пакета.Сервер предоставляет MCP-инструкции (переопределяются через
MCP_INSTRUCTIONS), которые описывают сервер как уровень абстракции и указывают LLM использоватьlist_types, а затемrun_queryс минимальным количеством вызовов инструментов.
Быстрый тест с помощью MCP Inspector
Требуется наличие npm/npx в PATH.
Подключение к уже запущенному SSE-серверу
В одном терминале (запуск сервера):
python3 src/server.py --transport sse --port 8000В другом терминале (запуск Inspector и указание на /sse):
npx @modelcontextprotocol/inspector --transport sse --server-url http://127.0.0.1:8000/sseНастройка в Claude Desktop / CLI
Если вы запускаете этот сервер локально через SSE (по умолчанию), укажите Claude URL /sse.
claude mcp add --transport sse graphql-mcp http://127.0.0.1:8000/sseВы также можете настроить его через JSON (например, файл конфигурации):
{
"mcpServers": {
"graphql-mcp": {
"type": "sse",
"url": "http://127.0.0.1:8000/sse"
}
}
}Если вы выставляете этот сервер за авторизацией, передайте заголовки:
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