Skip to content

GraphQL MCPTurn any GraphQL schema into MCP tools

A Python package that reads your schema and generates AI-ready tools automatically. Every query becomes a read tool. Every mutation becomes a write tool.

Install graphql-mcp, point it at a graphql-core schema or a remote endpoint, and get a running MCP server. Works with Strawberry, Ariadne, Graphene, graphql-api, or any GraphQL API over HTTP.

Your schema becomes AI tools

Your GraphQL schema

graphql
type Query {
  tasks(status: Status, priority: Priority): [Task!]!
  task(id: UUID!): Task
}

type Mutation {
  createTask(title: String!, priority: Priority): Task!
  deleteTask(id: UUID!): Boolean!
}

enum Status { TODO, IN_PROGRESS, DONE }
enum Priority { LOW, MEDIUM, HIGH, CRITICAL }

Generated MCP tools

text
tasks(status?, priority?) → [Task]
  List all tasks, filtered by status or priority.

task(id) → Task
  Get a single task by ID.

create_task(title, priority?) → Task
  Create a new task.

delete_task(id) → bool
  Delete a task by ID.

Types, descriptions, enums, and optionality are all preserved automatically.

Wrap a Python schema

Import your existing Python GraphQL schema and serve it as MCP tools directly — no network hop, no separate server. graphql-mcp reads the graphql-core schema object and generates tools in the same process.

python
from graphql_mcp import GraphQLMCP

api = ...  # your Python GraphQL schema
server = GraphQLMCP.from_api(api, name="My API")
app = server.http_app()

Compatible with any library that produces a graphql-core schema: Strawberry, Ariadne, Graphene, graphql-api.

Python library guide →

Proxy a remote GraphQL API

Point at any GraphQL endpoint — in any language, on any host — and graphql-mcp introspects the schema over HTTP and generates tools automatically. Queries and mutations are forwarded to the remote server at call time.

python
from graphql_mcp import GraphQLMCP

server = GraphQLMCP.from_remote_url(
    "https://api.example.com/graphql"
)
app = server.http_app()

Requires the remote API to have introspection enabled.

Remote API guide →