168 lines
4.5 KiB
Markdown
168 lines
4.5 KiB
Markdown
# mcp-bridge
|
|
|
|
The MCP-to-HTTP Bridge is a lightweight local service that translates HTTP requests into Model Context Protocol (MCP) calls, allowing standard web tools to communicate with local MCP adapters.
|
|
|
|
## Features
|
|
|
|
- HTTP to JSON-RPC translation for MCP adapters
|
|
- Configurable HTTP endpoints mapped to MCP methods
|
|
- Dynamic configuration reloading via SIGHUP or HTTP endpoint
|
|
- Structured JSON logging with configurable verbosity
|
|
- Graceful shutdown and process management
|
|
- Support for multiple concurrent adapters
|
|
|
|
## Quick Install
|
|
|
|
To install the `mcp-bridge` binary to your local system, run the following command:
|
|
|
|
```bash
|
|
curl -sSL https://git.nixc.us/colin/mcp-bridge/raw/branch/main/install.sh | bash
|
|
```
|
|
|
|
This will download the appropriate binary for your system from the `dist` directory and place it in your path.
|
|
|
|
For custom installation options:
|
|
|
|
```bash
|
|
# Install to a custom directory
|
|
curl -sSL https://git.nixc.us/colin/mcp-bridge/raw/branch/main/install.sh | bash -s -- --dir=$HOME/bin
|
|
```
|
|
|
|
## Usage
|
|
|
|
To run the bridge:
|
|
|
|
```bash
|
|
mcp-bridge -port 8091 -v info -config config.yaml
|
|
```
|
|
|
|
Options:
|
|
- `-port`: HTTP server port (overrides the port in config.yaml)
|
|
- `-v`: Log verbosity level (debug, info, warn, error)
|
|
- `-config`: Path to the configuration file (default: config.yaml)
|
|
- `-version`: Show version information and exit
|
|
|
|
## Configuration
|
|
|
|
The bridge is configured using YAML files. A main `config.yaml` file defines the port and a set of services, and each service has its own YAML file defining its endpoints and the command to run its MCP adapter.
|
|
|
|
### Main Configuration File (config.yaml)
|
|
|
|
```yaml
|
|
port: 8091
|
|
services:
|
|
service1:
|
|
config: service1.yaml
|
|
command:
|
|
- /path/to/adapter
|
|
- --arg1
|
|
- --arg2
|
|
service2:
|
|
config: service2.yaml
|
|
command:
|
|
- /path/to/another/adapter
|
|
```
|
|
|
|
### Service Configuration File (service1.yaml)
|
|
|
|
```yaml
|
|
serviceName: service1
|
|
endpoints:
|
|
- path: /api/v1/method1
|
|
mcp_method: method1
|
|
tool_name: tool1
|
|
- path: /api/v1/method2
|
|
mcp_method: method2
|
|
tool_name: tool2
|
|
```
|
|
|
|
## Configuration Reload
|
|
|
|
The bridge supports dynamic configuration reloading without restarting the service. There are two ways to trigger a reload:
|
|
|
|
1. Send a SIGHUP signal to the process:
|
|
```bash
|
|
kill -SIGHUP <pid>
|
|
```
|
|
|
|
2. Send a POST request to the `/reload` endpoint:
|
|
```bash
|
|
curl -X POST http://localhost:8091/reload
|
|
```
|
|
|
|
When a reload is triggered:
|
|
1. The configuration is reloaded from the config file
|
|
2. Existing services are gracefully shut down
|
|
3. New services are started based on the updated configuration
|
|
4. HTTP handlers are re-registered
|
|
|
|
Note: The HTTP server port cannot be changed during a reload.
|
|
|
|
## Making Requests
|
|
|
|
To call an MCP adapter method, send an HTTP request to the configured endpoint:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8091/path/to/endpoint -d '{"param1": "value1", "param2": "value2"}'
|
|
```
|
|
|
|
The request body will be passed as parameters to the MCP method, and the response from the adapter will be returned as the HTTP response.
|
|
|
|
### Error Handling
|
|
|
|
JSON-RPC errors returned by the adapter are translated to HTTP status codes:
|
|
- JSON-RPC errors are returned with HTTP 400 (Bad Request)
|
|
- Other errors are returned with HTTP 500 (Internal Server Error)
|
|
|
|
## Building from Source
|
|
|
|
To build the project from source:
|
|
|
|
```bash
|
|
git clone https://git.nixc.us/colin/mcp-bridge.git
|
|
cd mcp-bridge
|
|
./build-test-deploy.sh
|
|
```
|
|
|
|
This will:
|
|
1. Run all tests
|
|
2. Build binaries for multiple platforms (linux/amd64, linux/arm64, darwin/amd64, darwin/arm64)
|
|
3. Create checksum files
|
|
4. Stage the binaries for commit
|
|
|
|
## Development
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
mcp-bridge/
|
|
├── bin/ # Compiled binaries for testing
|
|
├── dist/ # Distribution binaries
|
|
├── src/ # Source code
|
|
│ ├── main.go # Main application
|
|
│ ├── handler/ # HTTP handlers
|
|
│ └── logger/ # Structured logging
|
|
├── test/ # Tests
|
|
│ ├── adapter/ # Mock adapter for testing
|
|
│ └── integration_test.go # Integration tests
|
|
├── config.yaml # Example configuration
|
|
├── service1.yaml # Example service configuration
|
|
├── build-test-deploy.sh # Build script
|
|
└── install.sh # Installation script
|
|
```
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
# Run unit tests
|
|
go test ./src/...
|
|
|
|
# Run integration tests
|
|
go test ./test
|
|
```
|
|
|
|
## License
|
|
|
|
See the [LICENSE](LICENSE) file for details.
|
|
|