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

[中文文档](./README.zh-CN.md)

A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for reading YAPI API documentation. Enables LLM clients (Claude Code, Cursor, etc.) to browse and inspect YAPI project interfaces.

## Features

- Browse project info, categories, and interfaces
- Get full API detail including request/response schemas
- Paginated listing with LLM-friendly Markdown output
- Token-based authentication via environment variables

## Requirements

- Node.js >= 18.0.0

## Installation

### From npm

```bash
npx @zhuxian/yapi-mcp-server
```

### From source

```bash
git clone <repo-url>
cd yapi-mcp
npm install
npm run build
```

## Configuration

The server requires three environment variables:

| Variable | Description | Example |
|----------|-------------|---------|
| `YAPI_BASE_URL` | Your YAPI instance URL | `https://yapi.example.com` |
| `YAPI_TOKEN` | Cookie token for authentication | `eyJhbGciOiJIUzI1NiIs...` |
| `YAPI_UID` | Your YAPI user ID | `1828` |

> **How to get Token and UID**: Open browser DevTools -> Application -> Cookies, find `_yapi_token` and `_yapi_uid` values.

## Usage

### Claude Code

**Option 1: Using CLI command**

```bash
# Add to current project
claude mcp add yapi -e YAPI_BASE_URL=https://yapi.example.com -e YAPI_TOKEN=your_token -e YAPI_UID=1828 -- npx -y @zhuxian/yapi-mcp-server

# Add globally (available in all projects)
claude mcp add yapi -s user -e YAPI_BASE_URL=https://yapi.example.com -e YAPI_TOKEN=your_token -e YAPI_UID=1828 -- npx -y @zhuxian/yapi-mcp-server
```

**Option 2: Manual configuration**

Add to `~/.claude/settings.json`:

```json
{
  "mcpServers": {
    "yapi": {
      "command": "npx",
      "args": ["-y", "@zhuxian/yapi-mcp-server"],
      "env": {
        "YAPI_BASE_URL": "https://yapi.example.com",
        "YAPI_TOKEN": "your_token",
        "YAPI_UID": "1828"
      }
    }
  }
}
```

### Cursor

Add to `.cursor/mcp.json` in your project root:

```json
{
  "mcpServers": {
    "yapi": {
      "command": "npx",
      "args": ["-y", "@zhuxian/yapi-mcp-server"],
      "env": {
        "YAPI_BASE_URL": "https://yapi.example.com",
        "YAPI_TOKEN": "your_token",
        "YAPI_UID": "1828"
      }
    }
  }
}
```

### Local Development

```bash
YAPI_BASE_URL=https://yapi.example.com YAPI_TOKEN=xxx YAPI_UID=1828 npm run dev
```

## Tools

### yapi_get_project

Get project basic information including name, description, base path, and environment configurations.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `project_id` | number | Yes | The YAPI project ID |

---

### yapi_get_cat_menu

Get the list of interface categories (folders) for a project.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `project_id` | number | Yes | The YAPI project ID |

---

### yapi_list_interfaces

List interfaces in a project with pagination.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `project_id` | number | Yes | The YAPI project ID |
| `page` | number | No | Page number (default: 1) |
| `limit` | number | No | Items per page, max 100 (default: 20) |

---

### yapi_list_by_category

List interfaces belonging to a specific category with pagination.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `cat_id` | number | Yes | Category ID (from `yapi_get_cat_menu`) |
| `page` | number | No | Page number (default: 1) |
| `limit` | number | No | Items per page, max 100 (default: 20) |

---

### yapi_get_interface

Get complete details of a single API interface including request parameters, headers, body schema, and response schema.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `interface_id` | number | Yes | The interface ID |

---

### yapi_get_full_menu

Get all interfaces grouped by category. Returns the complete hierarchy for the project.

> **Note**: May return large payloads for projects with many interfaces.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `project_id` | number | Yes | The YAPI project ID |

---

### yapi_get_by_url

Parse a YAPI page URL and fetch the corresponding data automatically.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | Full YAPI page URL |

**Supported URL formats:**

- `/project/{id}/interface/api` - Project overview
- `/project/{id}/interface/api/{interfaceId}` - Interface detail
- `/project/{id}/interface/api/cat_{catId}` - Category listing

## Typical Workflow

A recommended sequence when exploring a YAPI project:

```
1. yapi_get_project        → Understand the project
2. yapi_get_cat_menu       → See category structure
3. yapi_list_by_category   → Browse interfaces in a category
4. yapi_get_interface      → Get full detail for a specific API
```

Or simply use `yapi_get_by_url` with a YAPI page URL.

## Scripts

| Script | Description |
|--------|-------------|
| `npm run build` | Compile with SWC + generate type declarations |
| `npm run watch` | Watch mode compilation |
| `npm run start` | Run the compiled server |
| `npm run dev` | Run directly with `tsx` (no build needed) |
| `npm run typecheck` | Type check without emitting |

## License

MIT

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: URL parsing, category listing, full hierarchy, single interface details, project info, listing by category, and general listing. No overlap.

Naming Consistency4/5

All tools follow the pattern 'yapi_<verb>_<noun>', but 'yapi_get_by_url' deviates slightly from the direct resource naming of others (e.g., 'yapi_get_interface'). Overall consistent.

Tool Count5/5

7 tools is well-scoped for a read-only API documentation server, covering project info, categories, full hierarchy, interface details, and multiple listing methods.

Completeness4/5

The surface covers core read operations; missing search by method/status or interface modification is acceptable for a read-only server. Minor gaps in filtering.

Maintenance

ActivityInactive
ResponsivenessNo issues