Skip to main content
Glama
README.md
# MCP Server Documentation

The MCP (Model Communication Protocol) Server is a service that provides intelligent introspection and exploration capabilities for any GraphQL API. This documentation will guide you on how to use the MCP server with Cursor IDE and MCP Client.

## Overview

The MCP server provides a powerful interface to access and explore your GraphQL schema through an advanced set of tools. It introspects any GraphQL schema and provides structured, searchable information about:
- Types
- Queries
- Mutations
- Input types

## Features

### 1. Smart Schema Search
The MCP server includes an advanced search system that helps you find exactly what you need in your GraphQL schema:

- Fuzzy matching for typo tolerance
- Multi-word search support
- Relevance-based results
- Context-aware searching
- Field-level search capabilities

### 2. Type Exploration
Detailed type information with:
- Field listings
- Related types
- Documentation
- Usage examples

### 3. Query/Mutation Discovery
Easy exploration of available operations:
- Grouped by category
- Detailed parameter information
- Return type details
- Usage context

## Setup

1. Install dependencies:
```bash
yarn install
```

2. Configure your GraphQL endpoint in the MCP server:
```typescript
const GRAPHQL_ENDPOINT = "http://your-graphql-endpoint/graphql";
```

3. Configure Cursor IDE:
Create or update `.cursor/mcp.json` in your project:
```json
{
  "mcpServers": {
    "cw-core": {
      "command": "node",
      "args": [
        "/Users/martinshumberto/repositories/cw-mcp-server/build/main.js",
        "--debug"
      ],
      "transport": "stdio"
    }
  }
}

```

## Available Tools

### 1. Schema Tool
```typescript
// Get complete schema information
{
  "title": "GraphQL Schema",
  "description": "Full introspection of GraphQL schema"
}
```

### 2. Search Tool
```typescript
// Advanced search across schema elements
{
  "title": "Search Schema",
  "description": "Advanced search across all GraphQL schema elements",
  "parameters": {
    "searchTerm": "Search term - supports multiple words and partial matches",
    "threshold": "Optional similarity threshold (0-1, default: 0.3)"
  }
}
```

### 3. Types Tool
```typescript
// Get specific type information
{
  "title": "GraphQL Types",
  "description": "Get fields from a specific GraphQL type",
  "parameters": {
    "typeName": "Name of the GraphQL type to inspect"
  }
}
```

### 4. Field Tool
```typescript
// Get detailed field information
{
  "title": "Field Details",
  "description": "Get detailed information about a specific field in a type",
  "parameters": {
    "typeName": "Name of the GraphQL type containing the field",
    "fieldName": "Name of the field to inspect"
  }
}
```

### 5. Related Types Tool
```typescript
// Find related types
{
  "title": "Related Types",
  "description": "Find types that are related to a specific type",
  "parameters": {
    "typeName": "Name of the GraphQL type to find relations for"
  }
}
```

## Using with Cursor IDE

### 1. Search Examples

Basic search:
```json
{
  "searchTerm": "user"
}
```

Multi-word search:
```json
{
  "searchTerm": "create user profile"
}
```

Fuzzy search with custom threshold:
```json
{
  "searchTerm": "user",
  "threshold": 0.5
}
```

### 2. Type Exploration
```typescript
// Get type details
const typeInfo = await getType("User");

// Find related types
const relatedTypes = await findRelatedTypes("User");

// Get field details
const fieldInfo = await getFieldDetails("User", "profile");
```

## Cursor AI Integration Features

1. **Schema Autocomplete**
   - Cursor AI will automatically provide intelligent code completion for your GraphQL types and fields
   - Example: When typing a GraphQL query, press Ctrl+Space to see available fields

2. **Type Inspection**
   - Hover over any GraphQL type to see its full definition
   - Use Command+Click (Mac) or Ctrl+Click (Windows) to jump to type definitions

3. **Query Building**
   - Type `query` or `mutation` to get intelligent suggestions based on your schema
   - Cursor AI will suggest valid fields and arguments

### Example Usage with Cursor AI

1. **Creating a Query**
```typescript
// Start typing and Cursor AI will suggest available queries
const userQuery = `
  query Get
`
// After typing "Get", Cursor AI will suggest queries like "GetUser", "GetProfile", etc.
```

2. **Building Mutations**
```typescript
// Cursor AI will suggest available mutation fields and their required arguments
const createUserMutation = `
  mutation Create
`
// After typing "Create", you'll get suggestions like "CreateUser", "CreatePost", etc.
```

### Cursor AI Commands

Access these features through the Command Palette (Cmd/Ctrl + Shift + P):

1. **MCP: Show Schema**
   - Displays the full GraphQL schema in a side panel
   - Useful for exploring available types and operations

2. **MCP: Generate Query**
   - Helps you build a GraphQL query with proper typing
   - Suggests fields based on your schema

3. **MCP: Generate Type**
   - Creates TypeScript interfaces from GraphQL types
   - Maintains type safety between your frontend and API

### Keyboard Shortcuts

| Action             | Mac             | Windows/Linux    |
|-------------------|-----------------|------------------|
| Show Schema        | Cmd + Shift + S | Ctrl + Shift + S |
| Generate Query     | Cmd + Shift + Q | Ctrl + Shift + Q |
| Generate Type      | Cmd + Shift + T | Ctrl + Shift + T |
| Jump to Definition | Cmd + Click     | Ctrl + Click     |
| Show Hover Info    | Option + Hover  | Alt + Hover      |

## Best Practices

1. **Efficient Searching**
   - Use specific search terms
   - Utilize multi-word search for better context
   - Adjust threshold for search precision

2. **Type Exploration**
   - Start with high-level types
   - Use related types to understand connections
   - Explore field details for deeper understanding

3. **Performance**
   - Cache frequently used schema information
   - Use specific tools instead of full schema when possible
   - Implement proper error handling

## Error Handling

The MCP server provides detailed error information:

```typescript
try {
  const result = await searchSchema("user");
} catch (error) {
  if (error.message.includes("not found")) {
    // Handle not found case
  } else {
    // Handle other errors
  }
}
```

## Contributing

Feel free to contribute to the MCP server by:
1. Reporting issues
2. Suggesting new features
3. Submitting pull requests

## License

This project is licensed under the MIT License - see the LICENSE file for details.