mcp-graphql-enhanced
mcp-graphql-enhanced
LLM과 GraphQL API 간의 실제 상호 운용성 문제를 해결하는 향상된 GraphQL용 MCP(Model Context Protocol) 서버입니다.
mcp-graphql을 완벽하게 대체하며, 동적 헤더, 강력한 변수 파싱 기능을 제공하고 기존 기능과의 호환성을 유지합니다.
💬 커뮤니티 및 지원
대화에 참여하세요! 이 브리지를 Neo4j, Discord 데이터 그래프 또는 일반적인 GraphQL과 함께 사용하는 것에 대해 궁금한 점이 있다면 저희와 함께 이야기해 보세요:
Discord 채널: #mcp-graphql-enhanced
서버: 공식 GraphQL Discord
이곳은 피드백을 공유하거나, 문제를 보고하거나, 브리지를 위한 새로운 "향상된" 기능을 제안하기에 가장 좋은 장소입니다.
Related MCP server: mcp-graphql-schema
✨ 주요 향상 기능
✅ 내장 GraphiQL IDE — 사전 구성된 헤더와 함께 http://localhost:MCP_PORT/ (또는 /graphiql)에서 시각적 플레이그라운드 제공.
✅ 듀얼 전송 — STDIO(로컬 CLI/클라이언트 도구용) 및 HTTP/JSON-RPC(외부/브라우저 클라이언트용) 모두 지원.
✅ 동적 헤더 — 도구 인수를 통해
Authorization,X-API-Key등을 전달 (구성 재시작 불필요)✅ 강력한 변수 파싱 —
“Query variables must be a null or an object”오류 수정✅ 필터링된 인트로스펙션 — LLM 컨텍스트 노이즈를 줄이기 위해 특정 타입만 요청 (예:
typeNames: ["Query", "User"])✅ 전체 MCP 호환성 — Claude Desktop, Cursor, Glama와 호환
✅ 기본 보안 설정 — 명시적으로 활성화하지 않는 한 뮤테이션(Mutation) 비활성화
✅ 동적 스키마 진화 — Neo4j와 같이 GraphQL 타입을 즉석에서 재생성하는 서버를 위한 스마트 진단 및 간극 분석.
✅ 심층 관찰 가능성 — GraphQL 확장 기능에서 Cypher 자동 추출 및 정리.
🚀 다중 엔드포인트 브로드캐스트 (v3.9.0+에서 실험적 기능)
v3.9.0부터 서버는 여러 GraphQL 엔드포인트를 동시에 쿼리하는 기능을 지원합니다. 이는 원래 서로 다른 환경(예: Node.js 및 Python 백엔드) 간에 뮤테이션을 동기화하기 위해 설계되었지만, 데이터 집계에 강력한 가능성을 열어줍니다.
호환성 유지:
ENDPOINT에 단일 URL을 제공하면 서버는 이전과 동일하게 작동합니다.스마트 집계: 쉼표로 구분된 여러 URL이 제공되면 서버는 모든 URL에 쿼리를 브로드캐스트하고 결과 배열을 병합합니다.
무료 티어 제한 우회: Neo4j Aura와 같은 "무료 티어" 클라우드 데이터베이스 사용자에게 적합합니다. 데이터를 여러 무료 인스턴스에 분할하고 이 브리지를 사용하여 단일 통합 그래프로 쿼리함으로써 엔티티 개수 제한을 효과적으로 우회할 수 있습니다.
중복 제거: 브리지는 AI의 컨텍스트 창을 깨끗하게 유지하기 위해 고유 필드를 기반으로 중복 객체를 자동으로 제거합니다.
⚠️ 주의: 이 기능은 모든 엔드포인트가 동일하거나 매우 유사한 GraphQL 스키마를 공유한다고 가정합니다. 인트로스펙션은 목록의 첫 번째 엔드포인트를 대상으로 수행됩니다.
💡 사용 사례: WSL과 Windows(PowerShell) 연결
Windows 개발자에게 흔한 과제는 Windows Subsystem for Linux(WSL)와 호스트 OS 간의 네트워크 격리입니다. 이 기능을 사용하면 이 두 세계를 "통합 신경계"로 연결할 수 있습니다.
Claude Desktop을 위한 구성 예시:
{
"ENDPOINT": "http://DESKTOP-NAME.local:2311/graphql,http://127.0.0.1:4000/graphql"
}하이브리드 생태계: Windows 네이티브 프로세스(PowerShell)와 Linux 기반 환경(WSL) 전반에서 원활하게 데이터를 쿼리하고 집계합니다.
mDNS 지원: .local 주소를 사용하면 브리지가 WSL 환경 내에서 호스트 머신의 IP를 자동으로 확인합니다.
투명한 집계: AI 어시스턴트는 데이터가 서로 다른 운영 체제에서 동시에 가져오고 있다는 사실을 모른 채 단일 통합 스키마와 상호 작용합니다.
🔍 고급 관찰 가능성 및 Cypher
이 브리지는 LLM이 그래프 데이터베이스와 상호 작용하는 방식에 대한 심층적인 통찰력을 제공합니다.
🕸️ 자동 Cypher 추출
@neo4j/graphql과 같이 쿼리 실행 계획을 반환하는 GraphQL 서버 구현의 경우, 브리지는 자동으로 다음을 수행합니다:
응답에서
extensions.cypher를 감지합니다.내부 헤더(예:
CYPHER 5또는 빈PARAMS)를 제거하여 출력을 정리합니다.AI가 분석할 수 있도록 정리된 Cypher 블록을 도구 출력에 직접 삽입합니다.
참고: 이 기능을 사용하려면 GraphQL 서버가 응답 확장 기능에 디버그 정보를 포함하도록 구성되어 있어야 합니다.
🎨 비주얼 커맨드 센터 (GraphiQL)
표준 MCP 서버와 달리, 이 서버는 인간을 위한 시각적 인터페이스를 제공합니다. ENABLE_HTTP=true로 실행하면 브라우저에서 모든 기능을 갖춘 GraphiQL IDE를 열 수 있습니다.
엔드포인트:
http://localhost:6274/(또는/graphiql)헤더 동기화: 환경에 설정된 모든 헤더(예: GitHub 토큰)는 즉각적인 테스트를 위해 GraphiQL "Headers" 탭에 자동으로 삽입됩니다.
💻 HTTP / 듀얼 전송
이 서버는 이제 듀얼 전송 모드로 실행되며, 표준 STDIO 통신(대부분의 MCP 클라이언트에서 사용)과 포트 6274의 새로운 HTTP JSON-RPC 엔드포인트를 모두 지원합니다.
이를 통해 외부 시스템, 웹 애플리케이션 및 직접적인 curl 명령이 터미널의 실시간 요청 로깅([HTTP-RPC] 로그)과 함께 서버 도구에 액세스할 수 있습니다.
엔드포인트 | 메서드 | 설명 |
|
| 인간 인터페이스: 시각적 GraphQL IDE. |
|
| 도구 실행을 위한 메인 JSON-RPC 2.0 엔드포인트. |
|
| 간단한 상태 확인, |
자동 포트 선택
서버는 기본적으로 포트 6274를 사용합니다. EADDRINUSE 오류가 발생하면 서버는 자동으로 다음 사용 가능한 포트를 찾습니다. 최종 바인딩된 포트는 서버 로그를 확인하세요 (예: [HTTP] Started server on http://localhost:6275).
포트 충돌(EADDRINUSE) 해결 및 자동 포트 선택
서버는 기본적으로 포트 6274를 사용합니다. EADDRINUSE: address already in use :::6274 오류(오래된 프로세스로 인해 로컬 개발 시 흔히 발생)가 발생하면 서버는 자동으로 다음 사용 가능한 포트를 찾습니다(최대 10회 시도, 여러 서버를 생성하지 않음).
이렇게 하면 기본 포트가 차단된 경우에도 서버가 성공적으로 시작됩니다. curl 또는 클라이언트 도구가 기본 6274에서 실패하는 경우 항상 서버 로그에서 최종 바인딩된 포트를 확인하세요 (예: [HTTP] Started server on http://localhost:6275).
특정 포트를 강제하려면(예: 외부 방화벽 설정을 보장하기 위해), 여전히 MCP_PORT 환경 변수를 명시적으로 설정할 수 있습니다:
HTTP 엔드포인트 테스트
서버가 실행 중인 경우(예: npm run dev를 통해) curl을 사용하여 엔드포인트를 테스트할 수 있습니다:
# Test the health check (assuming the server bound to the default or found the next available port)
curl http://localhost:6274/health
# Example: Test the query tool via JSON-RPC (using port 6275 if 6274 was busy)
curl -X POST http://localhost:6275/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"query-graphql","params":{"query":"query { __typename }"},"id":1}'
## 🔍 Filtered Introspection
Avoid 50k-line schema dumps. Ask for only what you need:
`@introspect-schema typeNames ["Query", "User"]`
## 🔍 Debug & Inspect
Use the official MCP Inspector to test your server live:
```bash
npx @modelcontextprotocol/inspector \
-e ENDPOINT=https://api.example.com/graphql \
npx @letoribo/mcp-graphql-enhanced환경 변수 (1.0.0 버전의 변경 사항)
참고: 1.0.0 버전부터 명령줄 인수가 환경 변수로 대체되었습니다.
환경 변수 | 설명 | 기본값 |
| GraphQL 엔드포인트 URL |
|
| 요청을 위한 헤더가 포함된 JSON 문자열 |
|
| 뮤테이션 작업 활성화 (기본값 비활성화) |
|
| MCP 서버 이름 |
|
| 로컬 GraphQL 스키마 파일 경로 또는 URL | - |
| HTTP/JSON-RPC 서버용 포트. |
|
| HTTP 전송 활성화: |
|
| 상세 SDK 로그를 위해 | - |
|
auto(기본값): MCP Inspector에서 실행될 때만 자동으로 HTTP를 활성화합니다...true: 항상 HTTP 서버 활성화false: HTTP 서버 완전히 비활성화
예시
# Basic usage
ENDPOINT=http://localhost:3000/graphql npx @letoribo/mcp-graphql-enhanced
# With auth header
ENDPOINT=https://api.example.com/graphql \
HEADERS='{"Authorization":"Bearer xyz"}' \
npx @letoribo/mcp-graphql-enhanced
# Enable mutations
ENDPOINT=http://localhost:3000/graphql \
ALLOW_MUTATIONS=true \
npx @letoribo/mcp-graphql-enhanced
# Use local schema file
ENDPOINT=http://localhost:3000/graphql \
SCHEMA=./schema.graphql \
npx @letoribo/mcp-graphql-enhanced
# Change the HTTP port
MCP_PORT=8080 npx @letoribo/mcp-graphql-enhanced
# Disable HTTP transport (fastest, recommended for Claude Desktop)
ENABLE_HTTP=false npx @letoribo/mcp-graphql-enhanced
# Test the surgical precision and the IDE immediately:
ENDPOINT=https://api.github.com/graphql \
HEADERS='{"Authorization":"Bearer YOUR_GITHUB_TOKEN"}' \
ENABLE_HTTP=true \
npx @letoribo/mcp-graphql-enhanced
# Then visit http://localhost:6274/graphiql🖥️ Claude Desktop 구성 예시
npx 패키지(간편함 권장) 또는 Docker 이미지(재현성 및 격리에 이상적)를 사용하여 Claude Desktop을 GraphQL API에 연결할 수 있습니다.
✅ 옵션 1: npx 사용
{
"mcpServers": {
"mcp-graphql-enhanced": {
"command": "npx",
"args": ["@letoribo/mcp-graphql-enhanced"],
"env": {
"ENDPOINT": "https://your-api.com/graphql"
}
}
}
}🐳 옵션 2: Docker 사용 (자동 풀 지원)
{
"mcpServers": {
"mcp-graphql-enhanced": {
"command": "sh",
"args": [
"-c",
"docker run --rm -i -e ENDPOINT=$ENDPOINT -e HEADERS=$HEADERS -e ALLOW_MUTATIONS=$ALLOW_MUTATIONS ghcr.io/letoribo/mcp-graphql-enhanced:main"
],
"env": {
"ENDPOINT": "https://your-api.com/graphql",
"HEADERS": "{\"Authorization\": \"Bearer YOUR_TOKEN\"}",
"ALLOW_MUTATIONS": "false"
}
}
}
}🧪 옵션 3: 로컬 빌드와 함께 node 사용 (개발용)
리포지토리를 복제하고 프로젝트를 빌드한 경우(npm run build → dist/로 출력):
{
"mcpServers": {
"mcp-graphql-enhanced": {
"command": "node",
"args": ["dist/index.js"],
"env": {
"ENDPOINT": "https://your-api.com/graphql",
"ALLOW_MUTATIONS": "true"
}
}
}
}리소스
graphql-schema: 서버는 클라이언트가 액세스할 수 있는 리소스로 GraphQL 스키마를 노출합니다. 이는 로컬 스키마 파일, URL에서 호스팅되는 스키마 파일 또는 인트로스펙션 쿼리를 기반으로 합니다.
사용 가능한 도구
서버는 두 가지 주요 도구를 제공합니다:
introspect-schema: 이 도구는 GraphQL 스키마 또는 필터링된 하위 집합(typeNames 사용)을 검색합니다. 리소스로서 스키마에 액세스할 수 없는 경우 이 도구를 먼저 사용하세요. 이 도구는 로컬 스키마 파일, URL에서 호스팅되는 스키마 파일 또는 인트로스펙션 쿼리를 사용합니다. 필터링된 인트로스펙션(typeNames)은 라이브 GraphQL 엔드포인트를 사용할 때만 가능합니다(SCHEMA 파일 또는 URL 사용 시 불가).
query-graphql: 엔드포인트에 대해 GraphQL 쿼리를 실행합니다. 기본적으로
ALLOW_MUTATIONS가true로 설정되지 않으면 뮤테이션은 비활성화됩니다.
보안 고려 사항
의도하지 않은 데이터 변경을 방지하기 위해 뮤테이션은 기본적으로 비활성화되어 있습니다. 프로덕션 환경에서는 항상 HEADERS 및 SCHEMA 입력을 검증하세요. 가능한 경우 HTTPS 엔드포인트와 단기 토큰을 사용하세요.
사용자 정의 서버를 위한 커스터마이징
이것은 완전한 인트로스펙션을 허용하고 사용자가 무엇이든(뮤테이션 포함) 할 수 있도록 하는 매우 일반적인 구현입니다. 더 구체적인 구현이 필요한 경우, 자체 MCP를 만들고 클라이언트가 특정 쿼리 필드 및/또는 변수만 입력하도록 도구 호출을 제한하는 것을 권장합니다. 이를 참조로 사용할 수 있습니다.
Available Tools
2 toolsintrospect-schemaA
Retrieve GraphQL schema details or system manifest. READ-ONLY: Non-destructive metadata discovery. Usage: 1. If 'typeNames' is provided: Returns the full SDL (Schema Definition Language) for the requested types, including fields and relations. 2. If 'typeNames' is omitted: Returns a Federated Manifest—a high-level summary of connected nodes, their capabilities, and available domain entities (not the full schema). Use this to navigate the federated graph topology before executing queries.
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | JSON stringified object of extra HTTP headers for the introspection request (e.g. '{"Authorization": "Bearer token"}'). | |
| endpoint | No | Optional target GraphQL HTTP/HTTPS URL to dynamically switch endpoint before execution. | |
| typeDepth | No | Depth of nested fields to retrieve (default: 2) | |
| typeNames | No | List of specific GraphQL type names to introspect. If provided, returns the detailed SDL definitions for these types. If omitted, returns a system-wide Federated Manifest overview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it explicitly declares 'READ-ONLY: Non-destructive metadata discovery.' It also discloses the two distinct behavioral outcomes based on typeNames and clarifies that the manifest is 'not the full schema,' which helps set expectations. It does not mention potential errors or how headers/endpoint affect behavior, but the core safety and conditional behavior are clearly communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear one-line summary, an explicit READ-ONLY safety cue, and a numbered list that front-loads the two usage modes. Every sentence contributes either to behavioral transparency or invocation guidance, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with zero required parameters and no output schema, the description is largely complete: it covers both invocation modes, the manifest vs. SDL distinction, and the read-only nature. It could be more complete by explicitly routing query execution to query-graphql, but this is a minor gap given the clear 'before executing queries' framing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful behavior beyond the schema by explaining the conditional outcome for typeNames and clarifying that results include 'fields and relations.' This gives an agent a better mental model of what each parameter triggers, even though the schema already documents the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving GraphQL schema details or a system manifest, with a specific verb and resource. It distinguishes between two modes—full SDL for requested types versus a Federated Manifest overview—and positions it as metadata discovery before executing queries, differentiating it from the sibling query-graphql tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditional guidance: use typeNames to get full SDL definitions, omit it to get a manifest for navigating the federated graph. It also states to use the manifest 'before executing queries,' providing clear context. However, it does not explicitly name or exclude the sibling tool query-graphql as the alternative for actual query execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query-graphqlA
Execute GraphQL operations (queries and mutations) against the federated system. WARNING: This tool performs remote operations. 'Mutation' operations will modify persistent state; execute these only when a state change is intended. Prerequisites: Verify schema structure using 'introspect-schema' before executing complex queries. Security: Inherits environment-based authentication. Returns: A JSON object containing the execution result ('data') or a list of 'errors' in case of failure.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The GraphQL query or mutation string. Example: 'query { guilds { id name } }'. | |
| headers | No | JSON stringified object of extra HTTP headers for the request. | |
| endpoint | No | Optional target GraphQL HTTP/HTTPS URL to dynamically switch endpoint before execution. | |
| variables | No | JSON stringified object of variables. Example: '{"id": "123"}'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does so well: it discloses that the tool performs remote operations, that mutations modify persistent state, that authentication is inherited from the environment, and that failures return an errors list. These are the key behavioral facts an agent needs beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear warning, prerequisite, security, and return-value statements with no filler. It is slightly longer than a minimal two-sentence description, but each section contributes a distinct piece of operational knowledge.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters and no output schema or annotations, the description covers the essential operating context: when to verify schema, mutation risk, authentication model, and expected return structure. No critical information needed to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value by warning that the required query string may contain operations that mutate persistent state, and by noting the return shape. It does not repeat schema descriptions, but provides meaningful semantic context for the query parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action verb ('Execute') and target ('GraphQL operations ... against the federated system'), distinguishing this as the operation-execution tool while the sibling 'introspect-schema' is referenced only for schema verification. The clarification that it handles both queries and mutations further disambiguates its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the sibling tool as a prerequisite step ('Verify schema structure using introspect-schema before executing complex queries'), and warns to execute mutations only when a state change is intended. This gives the agent clear when-to-use and when-not-to-use guidance for mutation operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v4.15.2- Changed
introspect-schema2 fields changed- added
Input schema / properties / endpointAdded value: +{ + "description": "Optional target GraphQL HTTP/HTTPS URL to dynamically switch endpoint before execution.", + "type": "string" +} - added
Input schema / properties / headersAdded value: +{ + "description": "JSON stringified object of extra HTTP headers for the introspection request (e.g. '{\"Authorization\": \"Bearer token\"}').", + "type": "string" +}
- Changed
query-graphql1 field changed- added
Input schema / properties / endpointAdded value: +{ + "description": "Optional target GraphQL HTTP/HTTPS URL to dynamically switch endpoint before execution.", + "type": "string" +}
1 tool update
v4.13.1- Added
introspect-schema
1 tool update
v4.12.0- Removed
introspect-schema
1 tool update
v4.9.2- Changed
introspect-schema1 field changed- removed
Input schema / properties / typeDepth / defaultRemoved value: -2
2 tool updates
v4.8.0- Changed
introspect-schema2 fields changed- added
Input schema / properties / typeDepthAdded value: +{ + "default": 2, + "description": "Depth of nested fields to retrieve (default: 2)", + "type": "number" +} - changed
Input schema / properties / typeNames / descriptionPrevious value: -"List of specific GraphQL type names to introspect. If omitted, the full schema is returned (use with caution on large APIs)."New value: +"List of specific GraphQL type names to introspect. If provided, returns the detailed SDL definitions for these types. If omitted, returns a system-wide Federated Manifest overview."
- Changed
query-graphql3 fields changed- changed
Input schema / properties / headers / descriptionPrevious value: -"JSON string of extra HTTP headers for the request."New value: +"JSON stringified object of extra HTTP headers for the request." - changed
Input schema / properties / query / descriptionPrevious value: -"The GraphQL query or mutation string."New value: +"The GraphQL query or mutation string. Example: 'query { guilds { id name } }'." - changed
Input schema / properties / variables / descriptionPrevious value: -"JSON string of variables for the operation."New value: +"JSON stringified object of variables. Example: '{\"id\": \"123\"}'."
2 tool updates
v4.2.0- Changed
introspect-schema1 field changed- changed
Input schema / properties / typeNames / descriptionPrevious value: -"List of type names to introspect"New value: +"List of specific GraphQL type names to introspect. If omitted, the full schema is returned (use with caution on large APIs)."
- Changed
query-graphql3 fields changed- changed
Input schema / properties / headers / descriptionPrevious value: -"JSON string of extra headers"New value: +"JSON string of extra HTTP headers for the request." - changed
Input schema / properties / query / descriptionPrevious value: -"The GraphQL query or mutation string"New value: +"The GraphQL query or mutation string." - changed
Input schema / properties / variables / descriptionPrevious value: -"JSON string of variables"New value: +"JSON string of variables for the operation."
2 tool updates
v3.9.3- Added
introspect-schema - Added
query-graphql
2 tool updates
v2.0.7- Removed
introspect-schema - Removed
query-graphql
2 tool updates
v1.0.0- Changed
introspect-schema3 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / typeNames / descriptionPrevious value: -"e.g., [\"Query\", \"User\"]"New value: +"A list of specific type names to filter the introspection."
- Changed
query-graphql2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false
TDQS
Scored across 2 tools
query-graphql handles all execution, including state-changing mutations, while introspect-schema is strictly read-only metadata discovery. Their purposes are sharply separated with no overlap.
Both tools follow the same verb-noun hyphenated pattern: query-graphql and introspect-schema. The naming is predictable and consistent.
Two tools is slightly below the typical 3-15 range, but it is a reasonable and well-scoped count for a GraphQL server: one execution tool and one schema-discovery tool. Each tool earns its place.
For a GraphQL-focused server, the pair covers the full interaction surface: schema/introspection discovery and arbitrary query/mutation execution. There are no obvious missing capabilities.
Maintenance
Related MCP Connectors
The official MCP Server for the Mux API
MCP server for the Seline Analytics API
The official MCP Server from Mia-Platform to interact with Mia-Platform Console
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- MIT
- AlicenseNot gradedqualityDmaintenanceA MCP server that exposes GraphQL schema information to LLMs like Claude. This server allows an LLM to explore and understand large GraphQL schemas through a set of specialized tools, without needing to load the whole schema into the context35 npm46MIT
- AlicenseAqualityDmaintenanceGraphQL MCP Server that acts as a bridge allowing MCP clients (like Cursor or Claude Desktop) to interact with target GraphQL APIs through standard tools for schema introspection and operation execution.213 npm3MIT
- AlicenseNot gradedqualityDmaintenanceMCP that can proxy any GraphQL API and expose graphql operations as mcp tools.13 npm18Apache 2.0