Skip to main content
Glama
gyuco
by gyuco
README.md
# MCP REST Server

A Model Context Protocol (MCP) server that provides REST API client functionality with authentication support and Swagger documentation integration.

## Features

- **Multiple Authentication Methods**: Support for both token-based and login-based authentication
- **Swagger Integration**: Automatic endpoint discovery and documentation from OpenAPI/Swagger specs
- **Automatic Token Management**: Handles token refresh and re-authentication
- **Comprehensive HTTP Methods**: Support for GET, POST, PUT, DELETE, and PATCH requests
- **Error Handling**: Robust error handling with retry logic
- **MCP Compatible**: Fully compatible with the Model Context Protocol

## Installation

```bash
npm install
npm run build
```

## Development

```bash
npm run dev
```

## Configuration

The server supports two authentication methods:

### Token Authentication

```json
{
  "baseUrl": "https://api.example.com",
  "swaggerUrl": "https://api.example.com/swagger.json",
  "auth": {
    "type": "token",
    "token": "your-api-token-here"
  },
  "timeout": 30000,
  "retries": 3
}
```

### Login Authentication

```json
{
  "baseUrl": "https://api.example.com",
  "swaggerUrl": "https://api.example.com/swagger.json",
  "auth": {
    "type": "login",
    "username": "your-username",
    "password": "your-password",
    "loginEndpoint": "/auth/login",
    "tokenField": "access_token"
  },
  "timeout": 30000,
  "retries": 3
}
```

## Available Tools

### 1. configure_rest_client

Configure the REST client with authentication and API details.

**Parameters:**
- `baseUrl` (required): Base URL for the REST API
- `auth` (required): Authentication configuration (token or login)
- `swaggerUrl` (optional): URL to Swagger/OpenAPI documentation
- `timeout` (optional): Request timeout in milliseconds (default: 30000)
- `retries` (optional): Number of retries for failed requests (default: 3)

### 2. http_request

Make HTTP requests to the configured API.

**Parameters:**
- `method` (required): HTTP method (GET, POST, PUT, DELETE, PATCH)
- `path` (required): API endpoint path
- `params` (optional): Query parameters or request body parameters
- `body` (optional): Request body for POST, PUT, PATCH requests
- `headers` (optional): Additional headers

### 3. get_swagger_documentation

Get the complete list of available endpoints from Swagger documentation.

### 4. search_endpoints

Search for endpoints in the Swagger documentation.

**Parameters:**
- `query` (required): Search query to find matching endpoints

### 5. get_endpoint_info

Get detailed information about a specific endpoint.

**Parameters:**
- `path` (required): Endpoint path
- `method` (required): HTTP method

### 6. check_authentication

Check if the client is currently authenticated.

### 7. logout

Logout and clear authentication state.

## Usage Examples

### Basic Setup

1. Configure the client:
```json
{
  "baseUrl": "https://jsonplaceholder.typicode.com",
  "auth": {
    "type": "token",
    "token": "dummy-token"
  }
}
```

2. Make a GET request:
```json
{
  "method": "GET",
  "path": "/posts/1"
}
```

3. Make a POST request:
```json
{
  "method": "POST",
  "path": "/posts",
  "body": {
    "title": "New Post",
    "body": "Post content",
    "userId": 1
  }
}
```

### With Swagger Documentation

```json
{
  "baseUrl": "https://petstore.swagger.io/v2",
  "swaggerUrl": "https://petstore.swagger.io/v2/swagger.json",
  "auth": {
    "type": "token",
    "token": "your-api-key"
  }
}
```

Then you can:
- Search endpoints: `search_endpoints` with query "pet"
- Get endpoint info: `get_endpoint_info` with path "/pet" and method "POST"
- View all documentation: `get_swagger_documentation`

## Authentication Flow

### Token Authentication
1. Token is stored and used immediately
2. Added to requests as `Authorization: Bearer <token>`
3. If 401 received, no automatic retry (token assumed invalid)

### Login Authentication
1. Makes login request to specified endpoint
2. Extracts token from response using `tokenField`
3. Stores token in memory
4. Adds token to subsequent requests
5. If 401 received, automatically re-authenticates and retries

## Error Handling

- **Network errors**: Automatic retry with exponential backoff
- **Authentication errors**: Automatic re-authentication for login-based auth
- **Validation errors**: Clear error messages with details
- **API errors**: HTTP status and error message forwarding

## Development

### Project Structure

```
src/
├── types.ts          # TypeScript type definitions
├── auth.ts           # Authentication manager
├── swagger.ts        # Swagger documentation parser
├── rest-client.ts    # REST client implementation
└── index.ts          # MCP server implementation
```

### Building

```bash
npm run build
```

### Running

```bash
npm start
```

## MCP Client Configuration

The MCP REST server now supports **automatic configuration** through multiple methods, eliminating the need to configure APIs manually for each project.

### Configuration Methods (in order of priority)

1. **Command Line Arguments** (highest priority)
2. **Environment Variables**
3. **Configuration File**
4. **Manual Configuration** (via MCP tools - lowest priority)

### Cursor Configuration

#### Option 1: Auto-Configuration with Environment Variables (Recommended)

```json
{
  "mcpServers": {
    "mcp-rest-github": {
      "command": "node",
      "args": ["/path/to/your/mcp-rest/dist/index.js"],
      "env": {
        "MCP_REST_BASE_URL": "https://api.github.com",
        "MCP_REST_AUTH_TYPE": "token",
        "MCP_REST_TOKEN": "your-github-token-here",
        "MCP_REST_SWAGGER_URL": "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json"
      }
    },
    "mcp-rest-petstore": {
      "command": "node",
      "args": ["/path/to/your/mcp-rest/dist/index.js"],
      "env": {
        "MCP_REST_BASE_URL": "https://petstore.swagger.io/v2",
        "MCP_REST_AUTH_TYPE": "token",
        "MCP_REST_TOKEN": "your-api-key",
        "MCP_REST_SWAGGER_URL": "https://petstore.swagger.io/v2/swagger.json"
      }
    }
  }
}
```

#### Option 2: Auto-Configuration with Config Files

```json
{
  "mcpServers": {
    "mcp-rest-github": {
      "command": "node",
      "args": ["/path/to/your/mcp-rest/dist/index.js", "--config", "/path/to/your/mcp-rest/examples/github-api.json"]
    },
    "mcp-rest-petstore": {
      "command": "node",
      "args": ["/path/to/your/mcp-rest/dist/index.js", "--config", "/path/to/your/mcp-rest/examples/petstore.json"]
    }
  }
}
```

#### Option 3: Auto-Configuration with Command Line Arguments

```json
{
  "mcpServers": {
    "mcp-rest-github": {
      "command": "node",
      "args": [
        "/path/to/your/mcp-rest/dist/index.js",
        "--base-url", "https://api.github.com",
        "--auth-type", "token",
        "--token", "your-github-token-here",
        "--swagger-url", "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json"
      ]
    }
  }
}
```

### Claude Desktop Configuration

**Location:**
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

Use the same configuration options as Cursor above.

### Configuration Examples

The project includes several example configurations in the `examples/` directory:

- `examples/github-api.json` - GitHub API configuration
- `examples/petstore.json` - Swagger Petstore API configuration  
- `examples/jsonplaceholder.json` - JSONPlaceholder API configuration

### Environment Variables

| Variable | Description |
|----------|-------------|
| `MCP_REST_BASE_URL` | Base URL for the REST API (required) |
| `MCP_REST_AUTH_TYPE` | Authentication type: 'token' or 'login' (required) |
| `MCP_REST_TOKEN` | API token (required for token auth) |
| `MCP_REST_USERNAME` | Username (required for login auth) |
| `MCP_REST_PASSWORD` | Password (required for login auth) |
| `MCP_REST_LOGIN_ENDPOINT` | Login endpoint path (required for login auth) |
| `MCP_REST_TOKEN_FIELD` | Token field name in login response (default: access_token) |
| `MCP_REST_SWAGGER_URL` | URL to Swagger/OpenAPI documentation |
| `MCP_REST_TIMEOUT` | Request timeout in milliseconds (default: 30000) |
| `MCP_REST_RETRIES` | Number of retries for failed requests (default: 3) |
| `MCP_REST_CONFIG_FILE` | Path to JSON configuration file |

**Note**: Replace `/path/to/your/mcp-rest/` with the actual path to your MCP REST server directory.

### Usage in Claude/Cursor

#### With Auto-Configuration (Recommended)

If you've configured the server with auto-configuration (environment variables, CLI args, or config file), the server will be ready to use immediately:

```
Make a GET request to /posts/1
Show me all available endpoints
Search for endpoints related to "user"
```

#### With Manual Configuration

If you haven't provided auto-configuration, you can still configure the client manually:

1. **Configure the client first**:
```
Please configure the REST client with:
- Base URL: https://api.example.com
- Authentication: token
- Token: your-api-token-here
- Swagger URL: https://api.example.com/swagger.json
```

2. **Then make API requests**:
```
Make a GET request to /users/123
```

### Testing the Configuration

You can test your configuration before using it in Claude/Cursor:

```bash
# Test with config file
node dist/index.js --config examples/jsonplaceholder.json

# Test with CLI arguments
node dist/index.js --base-url https://api.github.com --auth-type token --token your-token

# Test with environment variables
MCP_REST_BASE_URL=https://httpbin.org MCP_REST_AUTH_TYPE=token MCP_REST_TOKEN=test node dist/index.js
```

If you see "✅ Auto-configured REST client for [URL]", the configuration is working correctly.

## License

MIT 

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: authentication checking, configuration, endpoint info, documentation retrieval, HTTP requests, logout, and endpoint search. No overlap.

Naming Consistency5/5

All tool names follow the verb_noun snake_case pattern (e.g., check_authentication, get_endpoint_info), ensuring predictability.

Tool Count5/5

7 tools cover the core functionality of a REST client server without being excessive or sparse, aligning well with the server's scope.

Completeness4/5

The tool set covers authentication lifecycle, API documentation exploration, and HTTP requests. Missing features like configuration management (e.g., updating base URL without reconfiguring) are minor.

Maintenance

ActivityInactive
ResponsivenessNo issues