An open API service indexing awesome lists of open source software.

https://github.com/aaydin-tr/swagger-navigator-mcp

Intelligent MCP Server for Swagger/OpenAPI Discovery
https://github.com/aaydin-tr/swagger-navigator-mcp

fuzzy-search mcp-server openapi swagger

Last synced: 6 months ago
JSON representation

Intelligent MCP Server for Swagger/OpenAPI Discovery

Awesome Lists containing this project

README

          

# ๐Ÿ” Swagger Navigator MCP Server

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org)
[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org)

An MCP server implementation that provides intelligent discovery and search capabilities for Swagger/OpenAPI endpoints. This tool enables AI assistants to dynamically explore, understand, and interact with REST APIs by parsing OpenAPI specifications and providing fuzzy search across endpoints.

---

## ๐Ÿš€ How It Works

The Swagger Navigator MCP Server acts as an intelligent API knowledge hub, seamlessly connecting developers with their API specifications. When you ask Cursor/Claude/LLMs to generate API clients, anticorruption layers, or type definitions, Cursor/Claude/LLMs consults the MCP server to get accurate, structured API information and then generates perfect code based on the actual API schema.

```mermaid
flowchart TD
A[๐Ÿ‘จโ€๐Ÿ’ป Developer] -->|"๐Ÿ’ฌ Generate API client
for /users endpoint"| B[๐ŸŽฏ Cursor/IDE/LLMs]
B -->|"๐Ÿ” Query: What is
/users endpoint?"| C[๐Ÿš€ Swagger Navigator MCP Server]
C -->|"๐Ÿ“Š Returns endpoint
schema & structure"| B
B -->|"โœจ Here's your
generated API client"| A

style A fill:#74b9ff,stroke:#0984e3,stroke-width:2px,color:#fff
style B fill:#a29bfe,stroke:#6c5ce7,stroke-width:2px,color:#fff
style C fill:#ff6b6b,stroke:#333,stroke-width:4px,color:#fff

linkStyle 0 stroke:#fd79a8,stroke-width:3px
linkStyle 1 stroke:#00b894,stroke-width:3px
linkStyle 2 stroke:#fdcb6e,stroke-width:3px
linkStyle 3 stroke:#e17055,stroke-width:3px
```

---

## โœจ Features

- **๐Ÿ” Dynamic API Discovery**: Automatically parse and index Swagger/OpenAPI specifications from multiple sources
- **๐ŸŽฏ Intelligent Search**: Use fuzzy matching to find relevant endpoints based on natural language queries
- **๐Ÿ”— Multi-source Support**: Handle both local files and remote HTTP endpoints with authentication
- **โšก Real-time Updates**: Monitor configuration changes and refresh API data automatically
- **๐Ÿ”„ Hot-reload Configuration**: Detect config file changes without server restart

---

## ๐Ÿ› ๏ธ Tools

### ๐Ÿ“‹ `list_all_sources`

Retrieves a comprehensive list of all available Swagger/OpenAPI sources in the system.

**Purpose:**

- Provides overview of all loaded API specifications
- Shows available APIs for search and exploration
- Returns source names for use with other tools

**Returns:**

- Array of sources with name, description, and OpenAPI info (title, version)

### ๐Ÿ“„ `list_endpoints_for_source`

Retrieves all endpoints from a specific API source with pagination support.

**Inputs:**

- `name` (string): The source name to list endpoints for
- `limit` (number, optional): Maximum endpoints to return (1-100, default: 10)
- `offset` (number, optional): Number of endpoints to skip (default: 0)

**Returns:**

- Array of endpoints with path, method, description, and metadata
- Pagination information with total count and navigation flags

### ๐Ÿ”Ž `search_endpoint`

Intelligently searches endpoints using fuzzy matching across multiple attributes.

**Inputs:**

- `query` (string): Search query using natural language (e.g., "create user", "authentication", "GET users")

**Returns:**

- Ranked array of matching endpoints with relevance scores
- Weighted search across descriptions, paths, methods, and tags

---

## โš™๏ธ Configuration

### ๐Ÿค– Usage with Cursor

Add this to your `~/.cursor/mcp.json`:

#### Using npx

```json
{
"mcpServers": {
"swagger-navigator-mcp": {
"command": "npx",
"args": ["-y", "swagger-navigator-mcp"],
"env": {
"CONFIG_PATH": "path/to/swagger-navigator-mcp.config.yaml"
}
}
}
}
```

### ๐Ÿ“ Configuration File

Create a `swagger-navigator-mcp.config.yaml` file:

```yaml
# Swagger Navigator MCP Server Configuration

sources:
# Local file example
- name: "petstore-local"
source: "./specs/petstore.json"
description: "Local Petstore API specification"

# Remote HTTP source with authentication
- name: "github-api"
source: "https://api.github.com"
description: "GitHub REST API v3"
headers:
Authorization: "token ${GITHUB_TOKEN}"
Accept: "application/vnd.github.v3+json"

# API with custom headers
- name: "internal-api"
source: "https://internal.company.com/api/swagger.json"
description: "Internal company API"
headers:
X-API-Key: "${API_KEY}"

# Optional: Search configuration
search:
fuzzyThreshold: 0.6 # 0-1, lower = more fuzzy matching

# Optional: Refresh interval in seconds
refreshInterval: 300 # Refresh every 5 minutes
```

### ๐Ÿ” Environment Variable Substitution

The configuration file supports environment variable substitution using `${VARIABLE_NAME}` syntax. This allows you to securely store sensitive information like API keys and tokens outside of your configuration file.

**Examples:**

- `${GITHUB_TOKEN}` - Substituted with the value of the `GITHUB_TOKEN` environment variable
- `${API_KEY}` - Substituted with the value of the `API_KEY` environment variable
- `${DATABASE_URL}` - Any environment variable can be used

> **Note:** If an environment variable is not set, the substitution will result in an empty string.

### ๐ŸŒ Environment Variables

Set environment variables for configuration and authentication:

```bash
export CONFIG_PATH="./swagger-navigator-mcp.config.yaml"
export GITHUB_TOKEN="your-github-token"
export API_KEY="your-api-key"
```

---

## ๐Ÿš€ Usage

### ๐Ÿ“ฆ Install Dependencies

```bash
npm install
```

### ๐Ÿ”จ Build the Project

```bash
npm run build
```

### โ–ถ๏ธ Start the Server

```bash
CONFIG_PATH=./swagger-navigator-mcp.config.yaml npm start
```

### ๐Ÿงช Development Mode

```bash
npm run dev
```

---

## ๐Ÿ“„ License

This project is licensed under the ISC License - see the [LICENSE](LICENSE) file for details.