query
Execute GraphQL queries with specified variables to retrieve or modify data from GraphQL APIs through the MCP server.
Instructions
Query a GraphQL endpoint with the given query and variables
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| variables | No |
Implementation Reference
- src/index.ts:122-212 (handler)The main execution logic for the 'query' tool: validates and parses the GraphQL query, blocks mutations unless allowed, performs a POST fetch to the GraphQL endpoint, handles parsing/network/GraphQL errors, and returns formatted JSON response or error messages.async ({ query, variables }) => { try { const parsedQuery = parse(query); // Check if the query is a mutation const isMutation = parsedQuery.definitions.some( (def) => def.kind === "OperationDefinition" && def.operation === "mutation" ); if (isMutation && !env.ALLOW_MUTATIONS) { return { isError: true, content: [ { type: "text", text: "Mutations are not allowed unless you enable them in the configuration. Please use a query operation instead.", }, ], }; } } catch (error) { return { isError: true, content: [ { type: "text", text: `Invalid GraphQL query: ${error}`, }, ], }; } try { const response = await fetch(env.ENDPOINT, { method: "POST", headers: { "Content-Type": "application/json", ...env.HEADERS, }, body: JSON.stringify({ query, variables, }), }); if (!response.ok) { const responseText = await response.text(); return { isError: true, content: [ { type: "text", text: `GraphQL request failed: ${response.statusText}\n${responseText}`, }, ], }; } const data = (await response.json()) as any; if (data.errors && data.errors.length > 0) { // Contains GraphQL errors return { isError: true, content: [ { type: "text", text: `The GraphQL response has errors, please fix the query: ${JSON.stringify( data, null, 2 )}`, }, ], }; } return { content: [ { type: "text", text: JSON.stringify(data, null, 2), }, ], }; } catch (error) { throw new Error(`Failed to execute GraphQL query: ${error}`); } }
- src/index.ts:118-121 (schema)Zod input schema defining 'query' as a required string and 'variables' as an optional string.{ query: z.string(), variables: z.string().optional(), },
- src/index.ts:115-117 (registration)Registers the 'query' tool on the MCP server with its name, description, input schema, and handler function.server.tool( "query", "Query a GraphQL endpoint with the given query and variables",