Skip to main content
Glama
README.md
# MCPilot - MCP Gateway

A powerful, FastAPI-based gateway for the Model Context Protocol (MCP), designed to unify and scale your AI toolchain.

## โœ… Current Status

MCPilot is now **fully functional** with the following working features:

### โœ… Working Features
- **FastAPI Gateway Server** - Running on http://localhost:8000/docs
- **Admin Dashboard** - Beautiful web UI at http://localhost:8000
- **REST API Endpoints** - Full CRUD operations via /api/v1/*
- **API Wrapper System** - Convert REST APIs to MCP tools (tested with JSONPlaceholder)
- **Configuration Management** - Environment-based settings
- **Transport Framework** - Ready for HTTP, WebSocket, SSE, stdio
- **Modular Architecture** - Clean separation of concerns
- **Interactive Documentation** - OpenAPI/Swagger UI at /docs

### ๐Ÿ”„ In Progress
- **MCP Server Federation** - Basic framework ready, needs MCP client integration fixes
- **WebSocket Real-time Communication** - Framework ready
- **Admin UI Management** - Backend ready, frontend interactions needed

### ๐Ÿงช Tested Examples
The API wrapper successfully converts REST APIs to MCP tools:
```python
# Example: JSONPlaceholder API โ†’ MCP Tool
result = await gateway.call_tool(
    "api:jsonplaceholder:get_user",
    {"user_id": "1"}
)
# Returns: Full user data from REST API
```

---

1. **Federation of multiple MCP servers** into one unified endpoint
2. **REST API and function wrapping** as virtual MCP-compliant tools  
3. **Multiple transport support**: HTTP/JSON-RPC, WebSocket, SSE, and stdio
4. **Centralized tools, prompts, and resources** with full JSON-Schema validation
5. **Admin UI** with built-in auth, observability, and transport layers

## ๐Ÿ“ Project Structure

```
src/mcpilot/
โ”œโ”€โ”€ main.py           # FastAPI application entry point
โ”œโ”€โ”€ config.py         # Configuration management
โ”œโ”€โ”€ gateway.py        # Core MCP federation logic
โ”œโ”€โ”€ api.py           # REST API endpoints
โ”œโ”€โ”€ admin.py         # Admin management endpoints
โ”œโ”€โ”€ transports.py    # Transport layer implementations
โ”œโ”€โ”€ api_wrapper.py   # REST API to MCP tool wrapper
โ”œโ”€โ”€ middleware.py    # Request/response middleware
โ””โ”€โ”€ server.py        # Original MCP server implementation
```

## ๐Ÿ› ๏ธ Installation

### Prerequisites

- Python 3.10 or higher
- uv package manager (recommended) or pip

### Install Dependencies

```bash
# Using uv (recommended)
uv sync

# Or using pip
pip install -e .
```

## ๐Ÿš€ Quick Start

### 1. Start the Gateway Server

```bash
# Run the FastAPI server
uv run python -m mcpilot.main

# Or using uvicorn directly
uvicorn mcpilot.main:app --reload --host 0.0.0.0 --port 8000
```

### 2. Access the Admin UI

Open your browser to `http://localhost:8000` to access the admin dashboard.

### 3. API Documentation

- OpenAPI/Swagger UI: `http://localhost:8000/docs`
- ReDoc: `http://localhost:8000/redoc`

## ๐Ÿ”ง Configuration

MCPilot can be configured via environment variables or a `.env` file:

```env
# Server Configuration
MCPILOT_HOST=0.0.0.0
MCPILOT_PORT=8000
MCPILOT_DEBUG=false

# CORS Settings
MCPILOT_CORS_ORIGINS=["*"]

# Logging
MCPILOT_LOG_LEVEL=INFO
```

### Adding MCP Servers

Configure MCP servers via the admin API or by setting up the configuration:

```python
from mcpilot.config import MCPServerConfig

server_config = MCPServerConfig(
    name="my-server",
    type="stdio",
    command="python",
    args=["-m", "my_mcp_server"],
    enabled=True
)
```

### Adding API Wrappers

Convert REST APIs to MCP tools:

```python
from mcpilot.config import APIWrapperConfig

api_config = APIWrapperConfig(
    name="my-api",
    base_url="https://api.example.com",
    auth_type="bearer",
    auth_config={"token": "your-token"},
    endpoints=[
        {
            "name": "get_user",
            "method": "GET",
            "path": "/users/{user_id}",
            "description": "Get user information",
            "path_params": [
                {"name": "user_id", "type": "string", "required": True}
            ]
        }
    ]
)
```

## ๐Ÿ“– API Endpoints

### Core MCP Operations

- `GET /api/v1/tools` - List all available tools
- `POST /api/v1/tools/call` - Call a tool
- `GET /api/v1/prompts` - List all available prompts
- `POST /api/v1/prompts/get` - Get a prompt
- `GET /api/v1/resources` - List all available resources
- `POST /api/v1/resources/read` - Read a resource

### Admin Operations

- `GET /admin/servers` - List MCP servers
- `POST /admin/servers` - Add new MCP server
- `PUT /admin/servers/{name}` - Update MCP server
- `DELETE /admin/servers/{name}` - Remove MCP server
- `GET /admin/api-wrappers` - List API wrappers
- `POST /admin/api-wrappers` - Add new API wrapper

### Health & Monitoring

- `GET /health` - Health check endpoint
- `GET /api/v1/status` - Gateway and server status
- `GET /admin/metrics` - System metrics

## ๐Ÿ”Œ WebSocket Support

Connect to the WebSocket endpoint for real-time MCP communication:

```javascript
const ws = new WebSocket('ws://localhost:8000/api/v1/ws');

// Send MCP JSON-RPC message
ws.send(JSON.stringify({
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
}));
```

## ๐Ÿงช Development

### Running in Development Mode

```bash
# Install development dependencies
uv sync --dev

# Run with auto-reload
uvicorn mcpilot.main:app --reload --host 0.0.0.0 --port 8000
```

### Testing

```bash
# Run tests (when implemented)
uv run pytest

# Type checking
uv run mypy src/mcpilot
```

## ๐Ÿ“„ License

This project is licensed under the MIT License.

## ๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

---

## Original MCP Server Components

MCPilot also includes the original MCP server functionality for development and testing:

### Resources

The server implements a simple note storage system with:
- Custom note:// URI scheme for accessing individual notes
- Each note resource has a name, description and text/plain mimetype

### Prompts

The server provides a single prompt:
- summarize-notes: Creates summaries of all stored notes
  - Optional "style" argument to control detail level (brief/detailed)
  - Generates prompt combining all current notes with style preference

### Tools

The server implements one tool:
- add-note: Adds a new note to the server
  - Takes "name" and "content" as required string arguments
  - Updates server state and notifies clients of resource changes

## Configuration

[TODO: Add configuration details specific to your implementation]

## Quickstart

### Install

#### Claude Desktop

On MacOS: `~/Library/Application\ Support/Claude/claude_desktop_config.json`
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`

<details>
  <summary>Development/Unpublished Servers Configuration</summary>
  ```
  "mcpServers": {
    "MCPilot": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\Users\ary7s\OneDrive\Desktop\MCPilot",
        "run",
        "MCPilot"
      ]
    }
  }
  ```
</details>

<details>
  <summary>Published Servers Configuration</summary>
  ```
  "mcpServers": {
    "MCPilot": {
      "command": "uvx",
      "args": [
        "MCPilot"
      ]
    }
  }
  ```
</details>

## Development

### Building and Publishing

To prepare the package for distribution:

1. Sync dependencies and update lockfile:
```bash
uv sync
```

2. Build package distributions:
```bash
uv build
```

This will create source and wheel distributions in the `dist/` directory.

3. Publish to PyPI:
```bash
uv publish
```

Note: You'll need to set PyPI credentials via environment variables or command flags:
- Token: `--token` or `UV_PUBLISH_TOKEN`
- Or username/password: `--username`/`UV_PUBLISH_USERNAME` and `--password`/`UV_PUBLISH_PASSWORD`

### Debugging

Since MCP servers run over stdio, debugging can be challenging. For the best debugging
experience, we strongly recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector).


You can launch the MCP Inspector via [`npm`](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) with this command:

```bash
npx @modelcontextprotocol/inspector uv --directory C:\Users\ary7s\OneDrive\Desktop\MCPilot run mcpilot
```


Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.

TDQS

C2.6/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap with other tools. The tool's purpose is clearly defined as adding a new note, making it distinct by default.

Naming Consistency5/5

A single tool inherently follows a consistent naming pattern, as there are no other tools to compare it against. The name 'add-note' uses a verb-noun format with hyphenation, which is clear and readable.

Tool Count2/5

A single tool is generally too few for most server purposes, as it limits functionality and suggests an incomplete or trivial scope. For a note-taking domain, one tool is insufficient to cover basic operations like listing, updating, or deleting notes.

Completeness1/5

The server appears to be for note-taking, but with only an 'add-note' tool, it lacks essential operations such as retrieving, updating, deleting, or listing notes. This severe gap will cause agent failures in handling note-related workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues