Skip to main content
Glama
fikri2992

MCP API Server

by fikri2992
README.md
# MCP Builder CLI

A command-line interface for generating Model Context Protocol (MCP) servers from API specifications. This package provides two separate tools:

1. **MCP Builder CLI** (`mcp-builder`) - Generate custom MCP servers from API specification documents
2. **MCP API Server** (`mcp-api-server`) - Make HTTP requests from AI assistants like Claude

## What is this for?

This package contains two distinct tools that serve different purposes:

### MCP Builder CLI (`mcp-builder`)
Generate custom MCP servers from API specification documents. This tool helps developers create MCP servers tailored to specific APIs.

### MCP API Server (`mcp-api-server`)
Allow AI assistants like Claude to make HTTP requests (GET, POST, PUT, DELETE) to any web API directly. This acts as a bridge between AI assistants and web APIs, enabling them to:
- Fetch data from REST APIs
- Send data to web services
- Interact with online tools and platforms

For example, you could ask Claude to check the weather by making a request to a weather API, or ask it to shorten a URL using a URL shortening service.

## Quickstart Guide

### 1. Using the Built-in API Server with Claude Desktop (Easiest)

First, configure Claude Desktop to use the built-in MCP API server:

1. Open Claude Desktop
2. Go to the MCP configuration file (usually located at `~/.config/claude/claude_desktop_config.json` on Mac/Linux or `%APPDATA%/Claude/claude_desktop_config.json` on Windows)
3. Add this server configuration:

```json
{
  "mcpServers": {
    "api-server": {
      "command": "npx",
      "args": ["mcp-api-server"]
    }
  }
}
```

4. Restart Claude Desktop
5. You can now use the API tools in Claude!

### 2. Running the API Server Directly

The easiest way to run the API server is using NPX (no installation required):

```bash
npx mcp-api-server
```

For development/testing, you might want to enable debug logging and allow localhost requests:

```bash
npx mcp-api-server --debug --allow-localhost
```

You can also run the server directly with Node:

```bash
node dist/src/index.js
```

With debug and localhost access:

```bash
node dist/src/index.js --debug --allow-localhost
```

### 3. Installing Globally

To install the tools globally on your system:

```bash
npm install -g mcp-builder
```

Then run the API server with:

```bash
mcp-api-server
```

### 4. Using with Claude

Once configured, you can ask Claude to make API requests:

> "Can you get the latest news from https://api.example.com/news/latest?"

> "Please post this data to my webhook: {\"message\": \"Hello World\"}"

Claude will automatically use the appropriate tool (`api_get`, `api_post`, etc.) based on what you're asking for.

## Features

- 🚀 **HTTP API Tools**: GET, POST, PUT, DELETE request support
- 🔒 **Security**: Request validation with configurable security policies
- 📝 **Logging**: Comprehensive debug logging and request tracking
- ⚙️ **Configurable**: Flexible configuration via CLI args and environment variables
- 🛡️ **Error Handling**: Robust error handling with detailed error messages
- 🔄 **Graceful Shutdown**: Proper cleanup and shutdown handling

## Installation

### NPX (Recommended)

Run directly without installation:

```bash
npx mcp-builder
```

### Global Installation

```bash
npm install -g mcp-builder
mcp-builder
```

### Local Installation

```bash
npm install mcp-builder
npx mcp-builder
```

## Usage

### API Server Usage

```bash
# Start the API server
mcp-api-server

# Start with debug logging
mcp-api-server --debug

# Allow localhost requests (useful for development)
mcp-api-server --allow-localhost

# Allow private IP requests
mcp-api-server --allow-private-ips

# Show help
mcp-api-server --help
```

You can also run the API server directly with Node:

```bash
# Start the API server directly
node dist/src/index.js

# Start with debug logging
node dist/src/index.js --debug

# Allow localhost requests
node dist/src/index.js --allow-localhost

# Allow private IP requests
node dist/src/index.js --allow-private-ips

# Show help
node dist/src/index.js --help
```

### Environment Variables

Configure the API server using environment variables:

```bash
# Server Configuration
API_TIMEOUT=60000          # Request timeout in milliseconds
ALLOW_LOCALHOST=true      # Allow requests to localhost (127.0.0.1)
ALLOW_PRIVATE_IPS=false   # Allow requests to private IP ranges
MAX_RESPONSE_LENGTH=100000 # Maximum response length in bytes
USER_AGENT="MyApp/1.0.0"   # Custom user agent string for requests

# Debug Configuration
DEBUG=true                # Enable detailed logging
```

### MCP Builder CLI Usage

The MCP Builder CLI is used to generate custom MCP servers from API specification documents:

```bash
# Generate an MCP server from an API specification
mcp-builder generate <api-spec.md> <output-directory>

# Validate an API specification file
mcp-builder validate <api-spec.md>

# Show help
mcp-builder --help

# Show help for a specific command
mcp-builder help generate
```

### Configuration Options

| CLI Option | Environment Variable | Default | Description |
|------------|---------------------|---------|-------------|
| `--debug` | `DEBUG` | `false` | Enable debug logging |
| `--allow-localhost` | `ALLOW_LOCALHOST` | `false` | Allow requests to localhost |
| `--allow-private-ips` | `ALLOW_PRIVATE_IPS` | `false` | Allow requests to private IPs |
| N/A | `API_TIMEOUT` | `30000` | Request timeout in milliseconds |
| N/A | `MAX_RESPONSE_LENGTH` | `50000` | Maximum response length in bytes |
| N/A | `USER_AGENT` | `MCP-API-Server/1.0.0` | Custom user agent string |

## Available Tools

The API server provides the following MCP tools that Claude or other MCP clients can use:

### `api_get`
Make an HTTP GET request to retrieve data from a URL.

**Parameters:**
- `url` (string): The URL to request data from
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Can you fetch the JSON data from https://api.example.com/users?"

### `api_post`
Make an HTTP POST request to send data to a URL.

**Parameters:**
- `url` (string): The URL to send data to
- `body` (string or object, optional): The data to send
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Please post this JSON to my webhook: {\"name\": \"John\", \"age\": 30}"

### `api_put`
Make an HTTP PUT request to update data at a URL.

**Parameters:**
- `url` (string): The URL to update data at
- `body` (string or object, optional): The updated data
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Update my user profile with this data: {\"name\": \"John Smith\", \"age\": 31}"

### `api_delete`
Make an HTTP DELETE request to remove data at a URL.

**Parameters:**
- `url` (string): The URL to delete data from
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Please delete the user with ID 123 from https://api.example.com/users/123"

## MCP Client Configuration

To use this server with an MCP client, add it to your MCP configuration:

### Claude Desktop Configuration

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "api-server": {
      "command": "npx",
      "args": ["mcp-api-server"]
    }
  }
}
```

### With Custom Configuration

```json
{
  "mcpServers": {
    "api-server": {
      "command": "npx",
      "args": ["mcp-api-server", "--debug", "--allow-localhost"]
    }
  }
}
```

You can also run the server directly with Node:

```json
{
  "mcpServers": {
    "api-server": {
      "command": "node",
      "args": ["dist/src/index.js", "--debug", "--allow-localhost"]
    }
  }
}
```

## Security Considerations

- By default, requests to localhost and private IP ranges are blocked to prevent SSRF attacks
- Only enable `--allow-localhost` and `--allow-private-ips` in trusted environments
- The server validates all requests and sanitizes responses
- Request timeouts prevent hanging connections
- Response size limits prevent memory exhaustion

## Error Handling

The server provides detailed error messages for:
- Invalid URLs
- Network timeouts
- JSON parsing errors
- Validation failures
- HTTP errors

All errors are logged with timestamps and context for debugging.

## License

MIT License - see LICENSE file for details.

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request

## Support

- Report issues: [GitHub Issues](https://github.com/yourusername/mcp-builder/issues)
- Documentation: [GitHub Repository](https://github.com/yourusername/mcp-builder)

## Installation

### NPX (Recommended)

Run directly without installation:

```bash
npx mcp-builder
```

### Global Installation

```bash
npm install -g mcp-builder
mcp-builder
```

### Local Installation

```bash
npm install mcp-builder
npx mcp-builder
```

## Usage

### Basic Usage

```bash
# Start the server
mcp-api-server

# Start with debug logging
mcp-api-server --debug

# Allow localhost requests (useful for development)
mcp-api-server --allow-localhost

# Allow private IP requests
mcp-api-server --allow-private-ips

# Show help
mcp-api-server --help
```

You can also run the server directly with Node:

```bash
# Start the server
node dist/src/index.js

# Start with debug logging
node dist/src/index.js --debug

# Allow localhost requests
node dist/src/index.js --allow-localhost

# Allow private IP requests
node dist/src/index.js --allow-private-ips

# Show help
node dist/src/index.js --help
```

### Environment Variables

Configure the server using environment variables:

```bash
# Server Configuration
API_TIMEOUT=60000          # Request timeout in milliseconds
ALLOW_LOCALHOST=true      # Allow requests to localhost (127.0.0.1)
ALLOW_PRIVATE_IPS=false   # Allow requests to private IP ranges
MAX_RESPONSE_LENGTH=100000 # Maximum response length in bytes
USER_AGENT="MyApp/1.0.0"   # Custom user agent string for requests

# Debug Configuration
DEBUG=true                # Enable detailed logging
```

### Configuration Options

| CLI Option | Environment Variable | Default | Description |
|------------|---------------------|---------|-------------|
| `--debug` | `DEBUG` | `false` | Enable debug logging |
| `--allow-localhost` | `ALLOW_LOCALHOST` | `false` | Allow requests to localhost |
| `--allow-private-ips` | `ALLOW_PRIVATE_IPS` | `false` | Allow requests to private IPs |
| N/A | `API_TIMEOUT` | `30000` | Request timeout in milliseconds |
| N/A | `MAX_RESPONSE_LENGTH` | `50000` | Maximum response length in bytes |
| N/A | `USER_AGENT` | `MCP-API-Server/1.0.0` | Custom user agent string |

## Available Tools

The server provides the following MCP tools that Claude or other MCP clients can use:

### `api_get`
Make an HTTP GET request to retrieve data from a URL.

**Parameters:**
- `url` (string): The URL to request data from
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Can you fetch the JSON data from https://api.example.com/users?"

### `api_post`
Make an HTTP POST request to send data to a URL.

**Parameters:**
- `url` (string): The URL to send data to
- `body` (string or object, optional): The data to send
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Please post this JSON to my webhook: {\"name\": \"John\", \"age\": 30}"

### `api_put`
Make an HTTP PUT request to update data at a URL.

**Parameters:**
- `url` (string): The URL to update data at
- `body` (string or object, optional): The updated data
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Update my user profile with this data: {\"name\": \"John Smith\", \"age\": 31}"

### `api_delete`
Make an HTTP DELETE request to remove data at a URL.

**Parameters:**
- `url` (string): The URL to delete data from
- `headers` (object, optional): HTTP headers to include in the request

**Example usage with Claude:**
> "Please delete the user with ID 123 from https://api.example.com/users/123"

## MCP Client Configuration

To use this server with an MCP client, add it to your MCP configuration:

### Claude Desktop Configuration

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "api-server": {
      "command": "npx",
      "args": ["mcp-api-server"]
    }
  }
}
```

### With Custom Configuration

```json
{
  "mcpServers": {
    "api-server": {
      "command": "npx",
      "args": ["mcp-api-server", "--debug", "--allow-localhost"]
    }
  }
}
```

## Security Considerations

- By default, requests to localhost and private IP ranges are blocked to prevent SSRF attacks
- Only enable `--allow-localhost` and `--allow-private-ips` in trusted environments
- The server validates all requests and sanitizes responses
- Request timeouts prevent hanging connections
- Response size limits prevent memory exhaustion

## Error Handling

The server provides detailed error messages for:
- Invalid URLs
- Network timeouts
- JSON parsing errors
- Validation failures
- HTTP errors

All errors are logged with timestamps and context for debugging.

## License

MIT License - see LICENSE file for details.

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request

## Support

- Report issues: [GitHub Issues](https://github.com/yourusername/mcp-builder/issues)
- Documentation: [GitHub Repository](https://github.com/yourusername/mcp-builder)

TDQS

A3.5/5.0

Scored across 4 tools

Disambiguation5/5

Each tool corresponds to a distinct HTTP method (DELETE, GET, POST, PUT), with no overlap in purpose. The descriptions clearly differentiate them by the type of request they make, eliminating any ambiguity.

Naming Consistency5/5

All tool names follow a consistent 'api_' prefix followed by the HTTP method in lowercase (e.g., api_delete, api_get). This pattern is uniform across all tools, making them predictable and easy to understand.

Tool Count5/5

With 4 tools covering the core HTTP methods (DELETE, GET, POST, PUT), the count is well-scoped for a general-purpose API server. Each tool serves a clear, essential function without redundancy.

Completeness5/5

The tool set provides complete coverage for basic HTTP operations, allowing agents to perform CRUD-like actions (Create via POST, Read via GET, Update via PUT, Delete via DELETE). There are no obvious gaps for a server focused on making HTTP requests.

Maintenance

ActivityInactive
ResponsivenessNo issues