marias1lva/mcp-graphql-generator
If you are the rightful owner of mcp-graphql-generator and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A smart Model Context Protocol (MCP) server that automatically discovers and generates GraphQL queries for any API.
π MCP GraphQL Query Generator
A smart Model Context Protocol (MCP) server that automatically discovers and generates GraphQL queries for any API. Works with VS Code + GitHub Copilot, CLI, and REST API to make exploring and using GraphQL APIs effortless.
Perfect for VS Code integration with GitHub Copilot! π€
Quick Start β’ Features β’ VS Code Setup β’ API Reference β’ Examples
What is MCP?
The Model Context Protocol (MCP) is a new protocol that lets tools, APIs, and models talk to each other in a structured way. Instead of manually copying data into your IDE or chat window, MCP servers can: - Provide real-time API access directly inside VS Code or AI tools. - Enable natural language queries ("show me all products with pagination"). - Act as connectors between AI assistants (like Copilot) and external systems. This project is an MCP server for GraphQL APIs: - It introspects any GraphQL schema. - Generates queries automatically. - Exposes them through CLI, REST, and VS Code integration. In short: you donβt need to handcraft GraphQL queries anymore β just ask, and theyβre generated for you.
What is this?
This tool automatically introspects any GraphQL API and generates intelligent, production-ready queries with:
- Auto-discovery of all available queries and types in your GraphQL API
- Smart field selecion, including nested types
- Table-formatted queries with pagination, filtering, and sorting
- Natural language integration with GitHub Copilot
- Zero configuration - just point it to your GraphQL endpoint
- Multi-auth support (Bearer, API Key, Keycloak, etc.)
- Multiple interfaces (CLI, REST API, MCP Server, Web UI)
Features
For Developers
- Instant GraphQL exploration - No need to read documentation
- Smart query generation - Automatically includes relevant fields
- Production-ready queries - With proper pagination and error handling
- Type-safe - Full TypeScript support
For AI Integration
- GitHub Copilot integration - Ask questions in natural language
- VS Code extension ready - Works globally across all projects
- Context-aware - Understands your API structure
- Intelligent suggestions - Based on your schema
For Teams
- Consistent query patterns - Standardized across projects
- Documentation generator - Auto-generates API insights
- Multi-environment - Dev, staging, prod configurations
- Docker ready - Easy deployment and scaling
Quick Start
Option 1: Global VS Code Installation (Recommended)
Transform VS Code into a GraphQL powerhouse in 2 minutes:
# 1. Install Bun runtime (faster than Node.js)
powershell -c "irm bun.sh/install.ps1 | iex"
# 2. Clone and install globally
git clone https://github.com/marias1lva/mcp-graphql-generator.git
cd mcp-graphql-generator
.\install-global.ps1
# 3. Add to VS Code settings.json:
{
"mcp.servers": {
"graphql-query-generator": {
"name": "GraphQL Query Generator",
"url": "http://localhost:3001",
"enabled": true
}
}
}
# 4. Configure your API
notepad %APPDATA%\MCPGraphQLServer\.env
# Add: GRAPHQL_API_URL=https://your-api.example.com/graphql
That's it! Now ask GitHub Copilot: "List available GraphQL queries"
Option 2: Local Development
# Clone and setup
git clone https://github.com/marias1lva/mcp-graphql-generator.git
cd mcp-graphql-generator
bun install
# Configure API
cp .env.example .env
# Edit .env with your GraphQL API URL
# Start MCP server
bun mcp-server.ts
# Or use CLI directly
bun src/cli.ts list
bun src/cli.ts generate listUsers
VS Code Integration
Once installed, use natural language with GitHub Copilot:
π€ "List all available GraphQL queries"
π€ Found these queries:
β’ listUsers - Get all users with pagination
β’ listProducts - Browse products catalog
β’ listOrders - View order history
π€ "Generate a query to get users with their profiles"
π€ query ListUsers($first: Int, $after: String) {
listUsers(first: $first, after: $after) {
edges {
node {
id
name
email
profile {
firstName
lastName
avatar
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
π€ "What fields are available in the Product type?"
π€ Product type fields:
β’ id (ID!) - Unique identifier
β’ name (String!) - Product name
β’ price (Float!) - Product price
β’ description (String) - Product description
β’ category (Category) - Product category
Usage Options
1. CLI Interface
# Discover available queries
bun src/cli.ts list
# Generate a specific query
bun src/cli.ts generate listUsers
# Generate with options
bun src/cli.ts generate listProducts --depth 3 --pagination
# Interactive mode
bun src/cli.ts interactive
2. REST API
### Get all available queries
GET http://localhost:3001/mcp/queries
### Generate a specific query
POST http://localhost:3001/mcp/generate-query
Content-Type: application/json
{
"queryName": "listUsers",
"options": {
"includePagination": true,
"maxDepth": 2,
"selectedFields": ["id", "name", "email"]
}
}
### Analyze a type
GET http://localhost:3001/mcp/analyze/User
3. Programmatic Usage
import { GenericQueryGenerator } from './src/generators/genericQueryGenerator';
const generator = new GenericQueryGenerator();
// Get available queries
const queries = await generator.getAvailableQueries();
// Generate a table query
const query = await generator.generateTableQuery('listUsers', {
includePagination: true,
maxDepth: 2
});
// Generate custom query
const customQuery = await generator.generateCustomQuery('listUsers',
['id', 'name', 'email'],
{ includePagination: true }
);
Configuration
Environment Variables
# Required: Your GraphQL API endpoint
GRAPHQL_API_URL=https://your-api.example.com/graphql
# Optional: Authentication
API_TOKEN=your_bearer_token
API_KEY=your_api_key
# Optional: Keycloak authentication
KEYCLOAK_CLIENT_ID=your_client_id
KEYCLOAK_CLIENT_SECRET=your_client_secret
KEYCLOAK_URL=https://your-keycloak.example.com/auth
KEYCLOAK_REALM=your-realm
# Optional: Server configuration
MCP_PORT=3001
MAX_DEPTH=3
Per-Project Configuration
Create .vscode/settings.json
in your project:
{
"mcpGraphQL.projectSettings": {
"apiUrl": "https://project-specific-api.com/graphql",
"authToken": "${env:PROJECT_API_TOKEN}",
"defaultDepth": 2,
"enablePagination": true
}
}
Examples
Example Output - List Users Query
query ListUsers($first: Int, $after: String, $orderBy: UserOrderByInput) {
listUsers(first: $first, after: $after, orderBy: $orderBy) {
edges {
node {
id
name
email
createdAt
profile {
firstName
lastName
avatar
}
}
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
}
}
Example Output - Products with Categories
query ListProducts($first: Int, $after: String, $filters: ProductFiltersInput) {
listProducts(first: $first, after: $after, filters: $filters) {
edges {
node {
id
name
price
description
category {
id
name
slug
}
images {
url
alt
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Architecture
mcp-graphql-generator/
βββ src/
β βββ cli.ts # Command line interface
β βββ app.ts # HTTP server entry point
β βββ generators/
β β βββ genericQueryGenerator.ts # Core query generation logic
β βββ services/
β β βββ graphqlIntrospection.ts # API discovery service
β β βββ keycloakAuth.ts # Authentication service
β βββ mcp/
β β βββ server.ts # MCP protocol server
β βββ config/
β β βββ credentials.ts # Credential management
β βββ types/
β βββ auth.ts # Authentication types
β βββ env.d.ts # Environment types
βββ mcp-server.ts # MCP server entry point
βββ install-global.ps1 # Global VS Code installation
βββ configure-autostart.ps1 # Auto-start configuration
βββ docker-compose.global.yml # Docker deployment
βββ docs/ # Additional documentation
Docker Deployment
# docker-compose.yml
version: '3.8'
services:
mcp-server:
build: .
ports:
- "3001:3001"
environment:
- GRAPHQL_API_URL=https://your-api.example.com/graphql
- API_TOKEN=your_token
restart: unless-stopped
# Deploy with Docker
docker-compose up -d
# Or with Docker directly
docker build -t mcp-graphql-generator .
docker run -p 3001:3001 -e GRAPHQL_API_URL=https://your-api.com/graphql mcp-graphql-generator
API Compatibility
Works with any GraphQL API that supports introspection, including:
- β Apollo Server - Full compatibility
- β GraphQL Yoga - Full compatibility
- β Hasura - Including metadata queries
- β Postgraphile - Auto-generated CRUD
- β AWS AppSync - With custom resolvers
- β Shopify Admin API - E-commerce queries
- β GitHub GraphQL API - Repository data
- β Strapi GraphQL - Headless CMS
- β Contentful - Content management
- β Custom GraphQL APIs - Any introspection-enabled API
Development
Setup Development Environment
# Clone repository
git clone https://github.com/marias1lva/mcp-graphql-generator.git
cd mcp-graphql-generator
# Install dependencies
bun install
# Copy environment template
cp .env.example .env
# Edit .env with your test GraphQL API
# Start in development mode
bun --watch mcp-server.ts
# Run CLI in development
bun --watch src/cli.ts list
# Build for production
bun build
# Run tests (when implemented)
bun test
Project Scripts
{
"scripts": {
"start": "bun src/app.ts",
"dev": "bun --watch mcp-server.ts",
"build": "bun build",
"cli": "bun src/cli.ts",
"cli:list": "bun src/cli.ts list",
"cli:interactive": "bun src/cli.ts interactive"
}
}
Contributing
We welcome contributions! Here's how to get started:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Make your changes with proper TypeScript types
- Test your changes with a real GraphQL API
- Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Contribution Guidelines
- TypeScript - All code must be properly typed
- Bun - Use Bun for package management and runtime
- Testing - Include tests for new features
- Documentation - Update README and inline docs
- Code Style - Follow existing patterns
License
This project is licensed under the MIT License - see the file for details.
Acknowledgments
- Bun - For blazing fast JavaScript runtime
- Model Context Protocol - For VS Code integration standard
- GraphQL - For the amazing query language
- GitHub Copilot - For AI-powered development
- TypeScript - For type safety and developer experience
β Star this repo if it helped you! β