GraphQL introspection
GraphQL introspection describes the query, mutation, and subscription fields
available on a schema. graph-tool-call converts each root field into a
contract-rich tool with argument schemas, result schemas, graph evidence, and a
variable-based operation document.
Ingest a schema
from graph_tool_call import ingest_graphql_introspection
result = ingest_graphql_introspection(
introspection_response,
endpoint_url="https://api.example.com/graphql",
)
print(result.ready)
print([tool.name for tool in result.tools])
ingest_source() auto-detects the standard data.__schema and __schema
envelopes as graphql-introspection.
Why the endpoint is separate
The GraphQL introspection schema does not contain the service endpoint. Pass it
explicitly when the catalog must be executable. Without it, tools remain
inspectable but the result contains the graphql_endpoint_required blocker.
The endpoint must be an absolute HTTP(S) URL without userinfo credentials, sensitive query parameters, or fragments. Runtime authorization remains in your application auth adapter.
Generated contract
For a field such as Query.customer(id: ID!): Customer, the adapter creates:
- tool name
query_customer - required
idinput - a stable variable-based operation document
- JSON Schemas for variables and the
data.customerresponse api_contract.produces/consumesevidencemetadata.executionwith endpoint, body template, and result path- read-only MCP annotations
Mutation fields are conservatively marked destructive. Subscription fields are
searchable, but report graphql_subscription_transport_required until the
application supplies its own WebSocket or SSE transport.
Boundaries
The library does not fetch introspection, store credentials, or choose a customer-specific endpoint. XGEN, a browser extension, or another application owns network access, authentication, persistence, and runtime header forwarding.