Apollo MCP Server: GraphQL Tools for Your Agent
Apollo's official server can turn a GraphQL API into controlled MCP tools, but production success depends on limiting the operations an agent may run.

The Apollo MCP Server is Apollo GraphQL's official bridge between an MCP-compatible agent and a GraphQL API. It exposes approved operations as callable tools, or lets an agent inspect a schema and build operations dynamically. For production, we would use persisted, read-only queries first—not unrestricted schema introspection and mutations.
Table of contents
- What Apollo MCP actually is
- What exists today
- How to set it up
- Tools you get
- Permissions and blast radius
- Real limits
- When not to use it
What Apollo MCP actually is
Apollo MCP Server converts GraphQL operations into MCP tools that an agent can discover and call with structured arguments. The server then sends the corresponding query or mutation to your existing GraphQL endpoint, so your schema, resolvers, authentication, and downstream services remain the actual system of record.
That distinction matters. It is not a hosted database, a replacement for Apollo Server, or a general chat interface. It is an adapter placed between an MCP client and any GraphQL API, with local stdio and remote Streamable HTTP transports documented by Apollo. Operations may come from .graphql files, GraphOS collections, persisted-query manifests, or schema introspection. Apollo's architecture overview explains this translation layer.
In concrete terms, an agent could fetch an order with its customer and line items in one call, validate a generated query, or run an approved refund mutation. What it can do is exactly what the exposed operation set and upstream identity permit. If you are comparing broader integrations, browse MCP Directory's best MCP servers rather than assuming every API adapter has the same security model.
What exists today
There is a first-party, open-source Apollo MCP Server; you do not need to bet on an anonymous community wrapper. Apollo publishes its source in the apollographql/apollo-mcp-server repository and release images at ghcr.io/apollographql/apollo-mcp-server.
Do not confuse it with GraphOS MCP Server, Apollo's hosted endpoint at https://mcp.apollographql.com. The hosted service supplies Apollo documentation and graph-development tools, while Apollo MCP Server is software you operate against your own GraphQL API. Apollo's GraphOS installation page shows that separate endpoint and its client configurations.
The self-hosted server has moved beyond the original experimental launch, but deployment ownership still sits with you: version pinning, network exposure, identity-provider configuration, logs, and compatibility testing. We would pin a container release instead of using latest, test the generated tool schemas in the exact MCP client, and stage upgrades. First-party maintenance reduces provenance risk; it does not remove operational risk. See other vendor-backed choices in the official server collection.
How to set it up
Start with a GraphQL endpoint, its schema, a deliberately small operation set, and an MCP client. For a production remote server, also prepare TLS, an OAuth 2.1-compatible identity provider, explicit audiences and scopes, and an upstream account whose permissions match the allowed operations.
- Choose the operation source. Use local operation files for a small trial or a persisted-query manifest/GraphOS collection for governed deployment. Apollo documents all supported sources in its configuration reference.
- Run the official build. Use the standalone container or binary for an existing API; Rover can start the MCP server beside a local graph. Apollo's run guide documents the container ports and Rover requirements.
- Set the endpoint and credentials. Configure the GraphQL URL and only the headers the upstream API requires. Keep secrets out of committed client JSON and shell history.
- Configure client authorization. For HTTP, set the identity-provider URL, exact token audience, and least-privilege scopes. Apollo supports global and per-operation scope requirements;
require_allis the default scope mode. The authorization guide details 401 versus 403 behavior. - Add the server to the client. Point a Streamable HTTP-capable client at the URL you deployed, or launch the binary through the client's
stdioconfiguration. Because the command, path, URL, and header syntax differ by client and deployment, we intentionally do not publish a fake universalmcpServersblock. Use the client's official format or MCP Directory's config generator, then verify the advertised tools before a real call.
Test one harmless query end to end. A successful connection only proves MCP transport works; it does not prove the GraphQL identity, variables, query cost, or tenant boundaries are correct.

Tools you get
The fixed tool names are the optional introspection tools below; operation-backed tool names come from your GraphQL operation names. We prefer named operation tools because their inputs and effects can be reviewed before an agent sees them.
| Tool name | What it does | Our production view |
|---|---|---|
introspect | Returns schema information for a named type and depth | Useful in development; restrict the visible schema |
search | Searches schema types and fields by terms | Better than walking a large schema blindly |
validate | Checks a generated operation against the schema without running it | Enable when dynamic operations are allowed |
execute | Sends a dynamically built operation to the GraphQL endpoint | High risk; disable unless there is a strong need |
| Your operation name | Runs that predefined query or mutation with generated structured inputs | Preferred production interface |
Apollo's tool-definition documentation confirms the four introspection names and explains minified schema results. Predefined operations can also carry descriptions, which matters because agents select tools partly from names and descriptions. Review the broader MCP model of tools, resources, and prompts when deciding what belongs in this server.
Permissions and blast radius
Use read-only operations and a dedicated integration identity first. A human's broad token lets the agent inherit every accidental privilege attached to that person, while a separate identity gives you narrower policy, clearer logs, rotation, and immediate revocation.
For GraphQL, a careless write is not abstract. One mutation can cancel an order, change an account owner, publish content, or trigger resolver-side emails and payments. Nested queries can also become expensive without writing anything. Our baseline would be:
- expose an AI-specific contract variant containing only required fields;
- allowlist named persisted queries;
- omit mutations until each has an approval and rollback story;
- apply per-operation OAuth scopes and upstream authorization;
- enforce GraphQL depth, complexity, timeout, and demand limits;
- log tool name, identity, variables with sensitive values redacted, outcome, and latency.
Apollo itself recommends contract variants for persisted queries and introspection in its best-practices guide. One sharp edge remains: the current server can pass the client's OAuth token through to the upstream API. Apollo warns that this can create confused-deputy and audience problems; its limitations page says the upstream must validate audiences correctly. Treat the MCP boundary and GraphQL boundary as separate authorization decisions.
Real limits
Apollo MCP Server does not remove GraphQL cost, context-window, rate-limit, or API capability limits. It makes operations callable; the client model and upstream services still set the practical ceiling.
A GraphQL response can be valid yet far too large for a useful model turn. Paginate lists, cap first/limit arguments, select only decision-relevant fields, and summarize server-side where possible. Schema introspection also consumes context; Apollo provides minification for introspect and search, but a smaller contract is safer and easier for an agent to navigate.
Rate limits belong to the GraphQL API, gateway, identity provider, and downstream data sources—not to MCP as a guarantee. An agent may retry or chain calls, so budget by user and operation, return clear retry signals, and trace downstream requests. Apollo documents OpenTelemetry spans and an operation counter in its telemetry guide.
Finally, the server cannot perform actions absent from the schema, bypass field-level authorization, make subscriptions useful in a request-response agent flow, or make a non-idempotent mutation safe. Validation only proves an operation matches the schema; it does not prove the result set is small, the request is permitted, or the business action is wise.
When not to use it
Skip Apollo MCP Server when a fixed API call, existing Apollo product feature, or narrow application endpoint solves the job with less machinery. MCP earns its place when multiple compatible clients need discoverable GraphQL tools and agent-driven composition.
Use a plain GraphQL script for a deterministic scheduled export, migration, or single workflow. It is easier to test, retry, and audit, and it avoids asking a model to choose a tool it never needed to choose. Use your existing application backend when you require a carefully designed transaction, human confirmation screen, or strict state machine.
Apollo's own GraphOS MCP Server is the better fit when the agent needs Apollo documentation and graph-building assistance rather than access to your application data. Likewise, conventional GraphOS tooling may be enough for schema checks and developer workflows.
Our verdict: deploy Apollo MCP Server when you already have a useful GraphQL surface and can curate a small allowlist of operations. Avoid exposing an entire production schema merely because introspection makes that convenient. The trade-off is simple—dynamic discovery reduces integration work, while predefined tools give you predictability, smaller context, and a blast radius you can actually explain.