MCP server for GraphQL schema introspection
This MCP server provides 14 well-structured GraphQL introspection and query-building tools. Tool naming is consistently verb-first and descriptive (getQueryDetails, listQueries, buildQuerySkeleton, etc.). Descriptions are substantive and context-rich, typically 100-250 chars, providing clear use cases and prerequisites. Input schemas are properly defined with JSON Schema types for all parameters. Output is implicitly structured (based on code analysis showing method returns array types). However, several critical gaps prevent a higher score: (1) Parameter descriptions lack detail on format constraints, ranges, and allowed values, most describe the semantic role but not validation rules; (2) Output schemas are not formally documented in the tool metadata; (3) Error handling responses are generic Java exception types rather than recovery-oriented messages with actionable guidance; (4) STDIO transport is a hard protocol ceiling. Strengths: strong naming consistency, clear descriptions, complete parameter schemas with sensible defaults (operationType='query', offset=0, limit=20), risk annotations (READ_ONLY, WRITE), and a coherent tool taxonomy split across logical concerns (SchemaExplorer, QueryBuilder, TypeInspector).
Generate a GraphQL query/mutation skeleton string ready to adapt. Includes required variables, scalar fields expanded, and object fields marked with "{ ... }" for manual expansion. The operation type defaults to "query".
Reload schema from the GraphQL endpoint or local file
List all connection/pagination fields on a type (Shopify uses the Relay Connection pattern). Detects fields whose return type ends with "Connection" and resolves the node type inside. For Shopify, the root query type is "QueryRoot" (not "Query").
Get all values of a GraphQL ENUM type. Returns name, description, and deprecation info for each value.
Get full details of a specific field on a type, including arguments with readable type strings. Use this when you need argument details for a field.
clearCache has minimal description ('Reload schema from the GraphQL endpoint or local file') that does not explicitly state it is a WRITE operation with side effects. LLM may not understand irreversibility or potential for stale agent state during reload.
Parameter descriptions lack explicit constraints and validation rules. E.g., 'limit' and 'offset' parameters describe pagination role but do not state min/max bounds (observed: limit defaults to 20-30). 'operationType' accepts 'query' or 'mutation' but constraint is buried in description text rather than as enum or explicit validation guidance.
Output schemas are not formally documented in tool metadata. Code analysis shows methods return structured arrays/objects (e.g., getQueryDetails returns array with 'name', 'description', 'args', 'returnType', 'returnTypeFields'), but LLM cannot see this schema and must infer structure. No documented field types or examples.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
Get all fields of a GraphQL INPUT_OBJECT type. Returns name, type (readable string), description, and default value.
Get full details of a specific mutation by name, including all arguments with types and the return type fields (1 level). Use this before building a mutation to know exactly what arguments are needed and what data is returned.
Get full details of a specific query by name, including all arguments with types and the return type fields (1 level). Use this before building a query to know exactly what arguments are needed and what data is available.
List only the required (non-null) arguments for a query or mutation. Useful to know the minimum needed to call an operation. The operation type defaults to "query".
Get full type definition by name. Fields and input fields have readable type strings (e.g. "[Product!]!" instead of nested objects). Use this to inspect any OBJECT, ENUM, INPUT_OBJECT, INTERFACE, SCALAR, or UNION. For Shopify, the root query type is "QueryRoot" and the root mutation type is "Mutation".
List available GraphQL mutations with pagination and optional name filter. Returns name, description (truncated), and return type as readable string. Use getMutationDetails() for full details of a specific mutation.
List available GraphQL queries with pagination and optional name filter. Returns name, description (truncated), and return type as readable string. Use getQueryDetails() for full details of a specific query.
List GraphQL types with optional kind filter (OBJECT, ENUM, INPUT_OBJECT, INTERFACE, SCALAR, UNION) and pagination. Internal types (__Type, etc.) are excluded. Use getType() for full details. For Shopify, the root query type is "QueryRoot" and the root mutation type is "Mutation".
Search types and fields by term (matches names and descriptions, case-insensitive). Returns up to 50 results per category. Internal types (__Type, __Schema, etc.) are excluded.
Error handling in source code raises generic exceptions (InvalidArgumentException, RuntimeException) without recovery guidance. LLM receives exception class name but no actionable next step (e.g., 'Operation name is required' does not suggest what names are valid or how to discover them).
STDIO transport limits protocol readiness to hard cap of 50. Server is not remotely accessible and cannot be used by hosted MCP clients. Requires local stdio process management.