模型上下文协议运行器
STDIO通过WebSocket运行MCP服务器的实现
通过WebSocket运行MCP服务器的实现
Note: This project is currently under active development and in WIP (Work In Progress) status. Features and APIs may change significantly.
A WebSocket server implementation for running Model Context Protocol (MCP) servers. This application enables MCP servers to be accessed via WebSocket connections, facilitating integration with web applications and other network-enabled clients.
MCP Server Runner acts as a bridge between WebSocket clients and MCP server implementations. It:
The application can be configured through environment variables:
PROGRAM= # Path to the MCP server executable (required if no config file) ARGS= # Comma-separated list of arguments for the MCP server HOST=0.0.0.0 # Host address to bind to (default: 0.0.0.0) PORT=8080 # Port to listen on (default: 8080) CONFIG_FILE= # Path to JSON configuration file
Additional environment variables will be passed through to the MCP server process.
Alternatively, you can provide a JSON configuration file:
{ "servers": { "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace" ] }, "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "your_token_here" } } }, "default_server": "filesystem", "host": "0.0.0.0", "port": 8080 }
You can specify the configuration file in two ways:
mcp-server-runner config.json
CONFIG_FILE
environment variable: CONFIG_FILE=config.json mcp-server-runner
The JSON configuration allows you to define multiple server configurations and select one as the default.
CONFIG_FILE
environment variablePROGRAM
, ARGS
, etc.)Using environment variables:
export PROGRAM=npx export ARGS=-y,@modelcontextprotocol/server-github export PORT=8080 export GITHUB_PERSONAL_ACCESS_TOKEN=github_pat_*** cargo run
Using a configuration file:
# Either specify the config file as an argument cargo run config.json # Or use the CONFIG_FILE environment variable CONFIG_FILE=config.json cargo run
Connect to the WebSocket server:
const ws = new WebSocket("ws://localhost:8080");
A Dockerfile and docker-compose.yml are provided for containerized deployment:
docker-compose up --build
Build the project:
cargo build
Run tests:
cargo test
Run with debug logging:
RUST_LOG=debug cargo run
The application follows a modular architecture:
main.rs
: Application entry point and server setupconfig/
: Configuration loading and managementprocess/
: Process management and I/O handlingwebsocket/
: WebSocket connection managementstate.rs
: Global state managementshutdown.rs
: Graceful shutdown handlinggit checkout -b feature/amazing-feature
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.