Skip to main content
Glama
README.md9.92 kB
# 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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gyuco/mcp-http-client'

If you have feedback or need assistance with the MCP directory API, please join our Discord server