Text-to-GraphQL MCP Server
Transforms natural language queries into valid GraphQL queries, with support for schema introspection, query validation, query execution against GraphQL endpoints, and query history tracking.
Uses OpenAI's language models to power the natural language to GraphQL query conversion through an AI agent built with LangGraph.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Text-to-GraphQL MCP Servershow me the top 5 users by activity from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Text-to-GraphQL MCP Server
Transform natural language queries into GraphQL queries using an MCP (Model Context Protocol) server that integrates seamlessly with AI assistants like Claude Desktop and Cursor.

๐ Overview
The Text-to-GraphQL MCP Server converts natural language descriptions into valid GraphQL queries using an AI agent built with LangGraph. It provides a bridge between human language and GraphQL APIs, making database and API interactions more intuitive for developers and non-technical users alike.
Related MCP server: mcp-graphql-tools
โจ Features
Natural Language to GraphQL: Convert plain English queries to valid GraphQL
Schema Management: Load and introspect GraphQL schemas automatically
Query Validation: Validate generated queries against loaded schemas
Query Execution: Execute queries against GraphQL endpoints with authentication
Query History: Track and manage query history across sessions
MCP Protocol: Full compatibility with Claude Desktop, Cursor, and other MCP clients
Error Handling: Graceful error handling with detailed debugging information
Caching: Built-in caching for schemas and frequently used queries
๐ Installation
Prerequisites: Install UV (Recommended)
UV is a fast Python package installer and resolver. Install it first:
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"Find your UV installation path:
# Find where uv is installed
which uv
# Common locations:
# macOS/Linux: ~/.local/bin/uv
# Windows: %APPDATA%\uv\bin\uv.exeImportant: You'll need the UV path for MCP configuration. The typical path is
~/.local/binon macOS/Linux, which translates to/Users/yourusername/.local/bin(replaceyourusernamewith your actual username).
Setup for MCP Usage
# Clone the repository
git clone https://github.com/Arize-ai/text-to-graphql-mcp.git
cd text-to-graphql-mcp
# Install dependencies (UV automatically creates virtual environment)
uv sync
# Test the installation
uv run text-to-graphql-mcp --helpNote: The
uv runpattern automatically handles virtual environments, making MCP configuration cleaner and more reliable than traditional pip installations.
Alternative Installation Methods
From PyPI (when published):
pip install text-to-graphql-mcpDevelopment Setup:
# For contributing to the project
uv sync --dev๐โโ๏ธ Quick Start
1. Configure with Cursor (Recommended)
Add to your .cursor/mcp.json:
{
"text-to-graphql": {
"command": "uv",
"args": [
"--directory",
"/path/to/text-to-graphql-mcp",
"run",
"text-to-graphql-mcp"
],
"env": {
"PATH": "/path/to/uv/bin:/usr/bin:/bin",
"OPENAI_API_KEY": "your_openai_api_key_here",
"GRAPHQL_ENDPOINT": "https://your-graphql-api.com/graphql",
"GRAPHQL_API_KEY": "your_api_key_here",
"GRAPHQL_AUTH_TYPE": "bearer"
}
}
}Important Setup Notes:
Replace
/path/to/text-to-graphql-mcpwith the actual path to your cloned repositoryReplace
/path/to/uv/binwith your actual UV installation path (typically/Users/yourusername/.local/binon macOS)The
PATHenvironment variable is required for MCP clients to find theuvcommand
2. Configure with Claude Desktop
Add to your Claude Desktop MCP configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"text-to-graphql": {
"command": "uv",
"args": [
"--directory",
"/path/to/text-to-graphql-mcp",
"run",
"text-to-graphql-mcp"
],
"env": {
"PATH": "/path/to/uv/bin:/usr/bin:/bin",
"OPENAI_API_KEY": "your_openai_api_key_here",
"GRAPHQL_ENDPOINT": "https://your-graphql-api.com/graphql",
"GRAPHQL_API_KEY": "your_api_key_here",
"GRAPHQL_AUTH_TYPE": "bearer"
}
}
}
}Setup Instructions:
Find your UV path: Run
which uvin terminal (typically/Users/yourusername/.local/bin/uv)Set the PATH: Use the directory containing
uv(e.g.,/Users/yourusername/.local/bin)Replace paths: Update both the
--directoryargument andPATHenvironment variable with your actual pathsAdd your API keys: Replace the placeholder values with your actual API keys
3. Common UV Path Examples
# Find your UV installation
which uv
# Common paths by OS:
# macOS: /Users/yourusername/.local/bin/uv
# Linux: /home/yourusername/.local/bin/uv
# Windows: C:\Users\yourusername\AppData\Roaming\uv\bin\uv.exe
# For MCP config, use the directory path:
# macOS: /Users/yourusername/.local/bin
# Linux: /home/yourusername/.local/bin
# Windows: C:\Users\yourusername\AppData\Roaming\uv\bin4. Alternative: Use Environment Variables
If you prefer using a .env file (useful for local development):
# Required
OPENAI_API_KEY=your_openai_api_key_here
GRAPHQL_ENDPOINT=https://your-graphql-api.com/graphql
GRAPHQL_API_KEY=your_api_key_here
# Optional - Authentication method (bearer|apikey|direct)
GRAPHQL_AUTH_TYPE=bearer
# Optional - Model settings
MODEL_NAME=gpt-4o
MODEL_TEMPERATURE=0Then use a simplified MCP configuration (still requires PATH):
{
"text-to-graphql": {
"command": "uv",
"args": [
"--directory",
"/path/to/text-to-graphql-mcp",
"run",
"text-to-graphql-mcp"
],
"env": {
"PATH": "/path/to/uv/bin:/usr/bin:/bin"
}
}
}5. Run the MCP Server (Optional - for testing)
# Run the server directly for testing
text-to-graphql-mcp
# Or run as a module
python -m text_to_graphql_mcp.mcp_server๐ง Usage
Available MCP Tools
generate_graphql_query
Convert natural language to GraphQL queries.
Input: "Get all users with their names and emails"
Output: query { users { id name email } }validate_graphql_query
Validate GraphQL queries against the loaded schema.
execute_graphql_query
Execute GraphQL queries and return formatted results.
get_query_history
Retrieve the history of all queries in the current session.
get_query_examples
Get example queries to understand the system's capabilities.
Example Interactions
Natural Language Input:
"Show me all blog posts from the last week with their authors and comment counts"Generated GraphQL:
query {
posts(where: { createdAt: { gte: "2024-06-05T00:00:00Z" } }) {
id
title
content
createdAt
author {
id
name
email
}
comments {
id
}
_count {
comments
}
}
}๐ณ Deploying with Docker
๐ก Key Concept: When using Docker with MCP clients (Claude/Cursor), environment variables are set during container startup (
docker run), not in the MCP client configuration. The MCP clients simply connect to the already-running container.
Building the Docker Image
# Clone the repository
git clone https://github.com/Arize-ai/text-to-graphql-mcp.git
cd text-to-graphql-mcp
# Build the Docker image
docker build -t text-to-graphql-mcp .Running the Container
Method 1: Using Environment Variables Directly
docker run -d \
--name text-to-graphql-mcp \
-p 8000:8000 \
-e OPENAI_API_KEY="your_openai_api_key_here" \
-e GRAPHQL_ENDPOINT="https://your-graphql-api.com/graphql" \
-e GRAPHQL_API_KEY="your_api_key_here" \
-e GRAPHQL_AUTH_TYPE="bearer" \
-e MODEL_NAME="gpt-4o" \
text-to-graphql-mcpMethod 2: Using an Environment File
Create a .env file:
OPENAI_API_KEY=your_openai_api_key_here
GRAPHQL_ENDPOINT=https://your-graphql-api.com/graphql
GRAPHQL_API_KEY=your_api_key_here
GRAPHQL_AUTH_TYPE=bearer
MODEL_NAME=gpt-4o
MODEL_TEMPERATURE=0Run the container:
docker run -d \
--name text-to-graphql-mcp \
-p 8000:8000 \
--env-file .env \
text-to-graphql-mcpMethod 3: Using Docker Compose
Create a docker-compose.yml file:
version: '3.8'
services:
text-to-graphql-mcp:
build: .
container_name: text-to-graphql-mcp
ports:
- "8000:8000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- GRAPHQL_ENDPOINT=${GRAPHQL_ENDPOINT}
- GRAPHQL_API_KEY=${GRAPHQL_API_KEY}
- GRAPHQL_AUTH_TYPE=${GRAPHQL_AUTH_TYPE:-bearer}
- MODEL_NAME=${MODEL_NAME:-gpt-4o}
- MODEL_TEMPERATURE=${MODEL_TEMPERATURE:-0}
- API_HOST=0.0.0.0 # Important: bind to all interfaces in container
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3Then run:
# Start the service
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the service
docker-compose downUsing Docker with MCP Clients
When running the MCP server in Docker, you need to use docker exec to communicate with the container:
Important: The environment variables (OPENAI_API_KEY, GRAPHQL_ENDPOINT, etc.) must be set when you first run the container using one of the methods above. The MCP client configurations below only connect to an already-running container.
Step 1: First, ensure your container is running with environment variables
# Example: Make sure the container is running with your environment variables
docker run -d \
--name text-to-graphql-mcp \
-p 8000:8000 \
--env-file .env \
text-to-graphql-mcp
# Verify the container is running
docker ps | grep text-to-graphql-mcpStep 2: Configure Cursor
Add to .cursor/mcp.json:
{
"text-to-graphql": {
"command": "docker",
"args": [
"exec",
"-i",
"text-to-graphql-mcp",
"uv",
"run",
"python",
"-m",
"src.text_to_graphql_mcp.mcp_server"
]
}
}Step 2: Configure Claude Desktop
Add to your Claude Desktop configuration:
{
"mcpServers": {
"text-to-graphql": {
"command": "docker",
"args": [
"exec",
"-i",
"text-to-graphql-mcp",
"uv",
"run",
"python",
"-m",
"src.text_to_graphql_mcp.mcp_server"
]
}
}
}Note: The MCP client configurations don't need environment variables because they're connecting to a container that already has them set. If you restart the container, make sure to include the environment variables again.
๐ Architecture
The system uses a multi-agent architecture built with LangGraph:
Intent Recognition: Understands what the user wants to accomplish
Schema Management: Loads and manages GraphQL schema information
Query Construction: Builds GraphQL queries from natural language
Query Validation: Ensures queries are valid against the schema
Query Execution: Executes queries against the GraphQL endpoint
Data Visualization: Provides recommendations for visualizing results
โ๏ธ Configuration
Environment Variables
Variable | Description | Default |
| OpenAI API key for LLM operations | Required |
| GraphQL API endpoint URL | Required |
| API key for your GraphQL service | Required |
| Authentication method: |
|
| Custom headers as JSON (overrides auto-auth) |
|
| OpenAI model to use |
|
| Model temperature for responses |
|
| Server host address |
|
| Server port |
|
| Max recursion for agent workflow |
|
Authentication Types
bearer(default): UsesAuthorization: Bearer <token>- standard for most GraphQL APIsapikey: UsesX-API-Key: <key>- used by some APIs like Arizedirect: UsesAuthorization: <token>- direct token without Bearer prefixCustom: Set
GRAPHQL_HEADERSto override with any custom authentication format
Common GraphQL API Examples
GitHub GraphQL API:
GRAPHQL_ENDPOINT=https://api.github.com/graphql
GRAPHQL_API_KEY=ghp_your_github_personal_access_token
GRAPHQL_AUTH_TYPE=bearerShopify GraphQL API:
GRAPHQL_ENDPOINT=https://your-shop.myshopify.com/admin/api/2023-10/graphql.json
GRAPHQL_API_KEY=your_shopify_access_token
GRAPHQL_AUTH_TYPE=bearerArize GraphQL API:
GRAPHQL_ENDPOINT=https://app.arize.com/graphql
GRAPHQL_API_KEY=your_arize_developer_api_key
# Auth type auto-detected for ArizeHasura:
GRAPHQL_ENDPOINT=https://your-app.hasura.app/v1/graphql
GRAPHQL_HEADERS={"x-hasura-admin-secret": "your_admin_secret"}๐ Observability & Agent Development
Want to build better AI agents quickly? Check out Arize Phoenix - an open-source observability platform specifically designed for LLM applications and agents. Phoenix provides:
Real-time monitoring of your agent's performance and behavior
Trace visualization to understand complex agent workflows
Evaluation frameworks for testing and improving agent responses
Data quality insights to identify issues with your training data
Cost tracking for LLM API usage optimization
Phoenix integrates seamlessly with LangChain and LangGraph (which this project uses) and can help you:
Debug agent behavior when queries aren't generated correctly
Monitor GraphQL query quality and success rates
Track user satisfaction and query complexity
Optimize your agent's prompt engineering
Get started with Phoenix:
pip install arize-phoenix
phoenix serveVisit docs.arize.com/phoenix for comprehensive guides on agent observability and development best practices.
๐งช Development
Setup Development Environment
# Install development dependencies
uv pip install -e ".[dev]"
# Run tests
pytest
# Format code
black .
isort .
# Type checking
mypy src/Project Structure
text-to-graphql-mcp/
โโโ src/text_to_graphql_mcp/ # Main package
โ โโโ mcp_server.py # MCP server implementation
โ โโโ agent.py # LangGraph agent logic
โ โโโ config.py # Configuration management
โ โโโ logger.py # Logging utilities
โ โโโ tools/ # Agent tools
โ โโโ ...
โโโ tests/ # Test suite
โโโ docs/ # Documentation
โโโ pyproject.toml # Package configuration
โโโ README.md๐ค Contributing
We welcome contributions! Please see our contributing guidelines for details.
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add some amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
๐ License
This project is licensed under the Elastic License 2.0 (ELv2) - see the LICENSE file for details.
๐ Troubleshooting
Common Issues
"No module named 'text_to_graphql_mcp'"
Ensure you've installed the package:
pip install text-to-graphql-mcp
"OpenAI API key not found"
Set your
OPENAI_API_KEYenvironment variableCheck your
.envfile configuration
"GraphQL endpoint not reachable"
Verify your
GRAPHQL_ENDPOINTURLCheck network connectivity and authentication
"Schema introspection failed"
Ensure the GraphQL endpoint supports introspection
Check authentication headers if required
๐ Links
๐ Acknowledgments
Available Tools
5 toolsexecute_graphql_queryB
Execute a GraphQL query and optionally visualize the results
| Name | Required | Description | Default |
|---|---|---|---|
| variables | No | Optional variables for the GraphQL query | |
| history_id | No | Optional history ID to update | |
| graphql_query | Yes | The GraphQL query to execute | |
| natural_language_query | No | The original natural language query for context |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states 'execute' and 'optionally visualize results', but does not disclose side effects, authentication requirements, error handling, or whether the operation is read-only or mutates state. This is insufficient for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. It efficiently communicates the primary action and optional feature. However, it lacks structure (e.g., bullet points) and could be slightly expanded for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and 100% schema parameter coverage, the description is adequate but not thorough. It fails to explain what 'visualize the results' entails or contextualize the tool among siblings like get_query_history. Some gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions, so baseline is 3. The tool description adds no additional parameter semantics beyond what the schema already provides, offering no extra context for parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute a GraphQL query') and resource, and distinguishes from siblings like generate_graphql_query, get_query_examples, get_query_history, and validate_graphql_query. The optional visualization feature adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidelines on when to use this tool vs alternatives like generate_graphql_query or validate_graphql_query. Usage is implied by the verb 'Execute' versus 'generate' or 'validate', but no direct comparisons or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_graphql_queryB
Generate a GraphQL query from natural language description
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language description of the desired GraphQL query | |
| history_id | No | Optional history ID to associate with this query |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description should disclose behavioral traits like dependencies (e.g., schema) or side effects. It does not mention any constraints, rate limits, or AI usage. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is appropriately concise, though could include more context without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and sibling tools, the description lacks details on expected query type (query/mutation) or integration with other tools. Incomplete for practical agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema describes both parameters with full coverage (100%). The description adds no extra context beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generating a GraphQL query from natural language. This is distinct from sibling tools which execute, validate, or retrieve examples/history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. No when-not or alternative recommendations. The description only implies usage without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_query_examplesA
Get example queries to help users understand what they can ask for
Returns: JSON string containing example queries
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns a JSON string of example queries, which is adequate for a read-only tool with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and every word is necessary. No wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no parameters, output schema exists), the description is complete and sufficient for an agent to understand what the tool does and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100% (vacuously). The description does not need to add parameter information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'example queries', with a clear purpose 'to help users understand what they can ask for'. It effectively distinguishes from sibling tools like execute, generate, validate, and history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining example queries but does not provide explicit guidance on when to use it versus alternatives (e.g., generate_graphql_query or validate_graphql_query) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_query_historyA
Retrieve the history of all queries
Returns: JSON string containing all query history
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool is a read operation returning a JSON string, which is adequate but lacks explicit mention of safety (read-only), authentication needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using only two sentences to convey the tool's purpose and return format. It is front-loaded with the key action, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and an output schema, the description is sufficiently complete. It could be enhanced by clarifying the scope (e.g., 'all queries' for which context), but the current text is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. According to guidelines, 0 parameters yields a baseline of 4, and no additional parameter info is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Retrieve' and the resource 'history of all queries', which is specific and distinct from sibling tools that deal with executing, generating, or validating queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_graphql_queryC
Validate and update a GraphQL query
| Name | Required | Description | Default |
|---|---|---|---|
| history_id | No | Optional history ID to update | |
| graphql_query | Yes | The GraphQL query to validate | |
| natural_language_query | No | The original natural language query for context |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility for behavioral disclosure. It only states 'validate and update' but does not explain side effects, such as whether update implies mutation, what happens on failure, or required permissions. This is insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, making it concise without wasted words. While not highly structured, it is efficient and front-loaded. However, it could be slightly more informative without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description does not explain return values or behavior. With 3 parameters (1 required) and no annotations, the description is sparse and does not cover usage scenarios, outcomes, or edge cases, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already described in the input schema. The description adds no additional meaning beyond the schema, so the baseline score of 3 applies. No extra context is provided to enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Validate and update a GraphQL query' clearly states the action (validate and update) and the resource (GraphQL query). It is specific but does not differentiate from sibling tools like execute_graphql_query or generate_graphql_query, which limits its clarity in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., execute_graphql_query, generate_graphql_query). There are no explicit conditions, exclusions, or recommended contexts, leaving the agent to infer usage without sufficient direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.2- First observed
execute_graphql_query - First observed
generate_graphql_query - First observed
get_query_examples - First observed
get_query_history - First observed
validate_graphql_query
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: execute queries, generate from natural language, retrieve examples, view history, and validate. No overlap or ambiguity.
All tools follow a consistent verb_noun pattern with snake_case, e.g., 'execute_graphql_query', 'generate_graphql_query'. No mixing of conventions.
Five tools cover the core operations for GraphQL query management (generate, validate, execute, retrieve history and examples) without being excessive or insufficient.
The tool surface provides a complete workflow: natural language generation, validation, execution, history tracking, and example discovery. No obvious gaps in the stated domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Ask questions in plain language, get answers from your business database. No SQL required.
Query BigQuery, Snowflake, Redshift & Azure Synapse with natural language
Ask business questions in plain English. Get instant answers from your database, no SQL needed.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAutomatically discovers GraphQL APIs through introspection and generates table-formatted queries with pagination, filters, and sorting. Supports multiple authentication types and provides both CLI and REST API interfaces for seamless integration.1MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to execute GraphQL queries and retrieve schema information from any GraphQL endpoint.23098MIT
- FlicenseNot gradedqualityDmaintenanceEnables querying PostgreSQL and MySQL databases using natural language, with RESTful endpoints for listing tables, describing schemas, and executing read-only queries.1-
- AlicenseAqualityDmaintenanceProvides comprehensive GraphQL introspection, filtering, and query/mutation execution with safety controls. Enables AI agents to explore and interact with GraphQL APIs through natural language.7131MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arize-ai/text-to-graphql-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server