Turn any GraphQL API into Claude Code tools with zero coding
A generic Model Context Protocol (MCP) server that automatically converts your .graphql query files into tools Claude can use. Works with any GraphQL API - GitHub, Shopify, Hasura, or your own.
- Point it at any GraphQL endpoint (GitHub, Shopify, Hasura, etc.)
- Drop
.graphqlquery files in a folder - Automatically exposes them as Claude Code tools
No MCP coding required - just write GraphQL queries and configure the endpoint.
GraphQL lets you request only the fields you need, dramatically reducing response size:
| API Type | Response Size | Tokens Used | Savings |
|---|---|---|---|
| REST | 168 KB | ~42,000 | - |
| GraphQL (minimal) | 500 bytes | ~125 | 99.7% |
| GraphQL (targeted) | 5 KB | ~1,250 | 97% |
Instead of writing custom MCP server code for each API, just:
- Configure the endpoint
- Write GraphQL queries
- Done
Clone and build from source:
git clone https://github.com/Chakit22/graphql-mcp-server.git
cd graphql-mcp-server
npm install
npm run buildmkdir my-graphql-mcp
cd my-graphql-mcp
mkdir operations{
"endpoint": "https://api.github.com/graphql",
"operationsDir": "./operations",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
},
"name": "my-mcp-server",
"version": "1.0.0"
}Create operations/GetRepository.graphql:
# @description Get repository information
query GetRepository($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
name
description
stargazerCount
url
}
}Add to ~/.config/claude-code/mcp_settings.json:
{
"mcpServers": {
"my-graphql-mcp": {
"command": "node",
"args": ["/path/to/graphql-mcp-server/dist/index.js"],
"env": {
"GRAPHQL_MCP_CONFIG": "/path/to/my-graphql-mcp/config.json"
}
}
}
}The MCP server will automatically load your GraphQL operations as tools.
| Field | Type | Required | Description |
|---|---|---|---|
endpoint |
string | Yes | GraphQL API endpoint URL |
operationsDir |
string | Yes | Path to directory containing .graphql files |
headers |
object | No | HTTP headers (e.g., Authorization) |
name |
string | No | MCP server name (default: "graphql-mcp-server") |
version |
string | No | MCP server version (default: "1.0.0") |
GRAPHQL_MCP_CONFIG: Path to config file (default:./config.json)
# @description Brief description shown in Claude
query OperationName($param1: String!, $param2: Int) {
field1
field2
}@descriptioncomment: Appears in Claude's tool list- Variables: Automatically become tool parameters
- Type support: String, Int, Float, Boolean, ID, arrays
- Required params: Variables ending with
!are required
# @description Search repositories by keyword
query SearchRepos($query: String!, $limit: Int!) {
search(query: $query, type: REPOSITORY, first: $limit) {
repositoryCount
edges {
node {
... on Repository {
name
url
stargazerCount
}
}
}
}
}Perfect for testing - works immediately without API keys.
Config:
{
"endpoint": "https://spacex-production.up.railway.app/",
"operationsDir": "./operations",
"name": "spacex-mcp"
}Available Operations:
GetRockets- Get all SpaceX rocketsGetLaunches- Get recent launches
π Full example: examples/spacex/
Config:
{
"endpoint": "https://api.github.com/graphql",
"operationsDir": "./operations",
"headers": {
"Authorization": "Bearer ghp_YOUR_TOKEN"
}
}Available Operations:
GetRepository- Get repo detailsSearchRepositories- Search repos by keyword
π Full example: examples/github/
Config:
{
"endpoint": "https://YOUR_STORE.myshopify.com/admin/api/2024-01/graphql.json",
"operationsDir": "./operations",
"headers": {
"X-Shopify-Access-Token": "YOUR_TOKEN"
}
}Available Operations:
GetProducts- Get products with pagination
π Full example: examples/shopify/
Config:
{
"endpoint": "http://localhost:8080/v1/graphql",
"operationsDir": "./operations",
"headers": {
"x-hasura-admin-secret": "YOUR_SECRET"
}
}ββββββββββββ ββββββββββββββββ ββββββββββββββββββ
β Claude ββββββΆβ MCP Server ββββββΆβ GraphQL API β
β Code β β (this tool) β β (any endpoint) β
ββββββββββββ ββββββββββββββββ ββββββββββββββββββ
β
βΌ
Loads *.graphql
from operations/
- MCP server reads all
.graphqlfiles fromoperationsDir - Registers each as a Claude Code tool
- When Claude calls a tool:
- Sends GraphQL query to configured endpoint
- Passes variables from Claude
- Returns response to Claude
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run in dev mode (with auto-reload)
npm run dev
# Run built version
npm start- Check
GRAPHQL_MCP_CONFIGenvironment variable - Ensure
config.jsonexists in current directory or specified path
- Check
operationsDirpath in config - Ensure
.graphqlor.gqlfiles exist in that directory
- Check
headers.Authorizationin config - Verify your API token is valid
- Test your query directly against the API first
- Check variable types match the schema
- Verify required fields are present
- Node.js 16+
- A GraphQL API endpoint
- Valid authentication credentials (if required by API)
MIT
Contributions welcome! Please open an issue or PR.