MCPhoenix
基于Phoenix Framework(Elixir)构建的MCP服务器。为MCP客户端公开服务器发送事件和JSON-RPC端点,支持通过JSON配置管理多个子MCP服务器。
注意:模块和目录名称在整个代码库中使用拼写“MCPheonix”(不带“o”)。
它的作用
在端口4001上运行Phoenix web服务器,该服务器:
- 接受MCP JSON-RPC请求
POST /mcp/rpc - 通过SSE向客户流式传输事件
GET /mcp/stream - 将子MCP服务器(Flux映像生成、Dart任务管理等)作为监督进程进行管理
- 通过stdio将工具调用路由到相应的子服务器
子服务器在中定义 priv/config/mcp_servers.json 并在启动时自动启动。
状态
| 地区 | 州 |
|---|---|
| 传输 | HTTP(SSE+JSON-RPC) |
| 框架 | Phoenix 1.7,Elixir>=1.14,Erlang>=25 |
| 子MCP服务器 | Flux(图像生成)、Dart(任务管理) |
| OTP监督 | 是--子服务器是受监督的进程 |
| Cloudflare集成 | 持久对象客户端(实验性,使用自定义十六进制包) |
| 事件系统 | 百老汇+GenStage用于处理管道 |
| 测试 | ExUnit,2个测试文件(Cloudflare DO客户端,模拟websocket) |
| 许可证 | 麻省理工学院 |
建筑
lib/
mcpheonix/
application.ex — OTP application, supervision tree
mcp/
server.ex — Core MCP server logic
server_manager.ex — Manages child MCP server processes
server_process.ex — GenServer wrapping a child stdio process
supervisor.ex — Supervisor for MCP server processes
config.ex — Reads mcp_servers.json
connection.ex — Client connection state
json_rpc_protocol.ex — JSON-RPC 2.0 parsing
jsonrpc_client.ex — Client for calling child servers
flux_server.ex — Flux-specific server config
features/
resources.ex — Resource listing
tools.ex — Tool listing and dispatch
events/
broker.ex — Pub/sub event broker
cloud/
durable_objects/
client.ex — Cloudflare Durable Objects HTTP client
resources/
message.ex, registry.ex, user.ex — Domain resources (Ash framework)
mcpheonix_web/
endpoint.ex — Phoenix endpoint
router.ex — Routes: /mcp/stream (SSE), /mcp/rpc (JSON-RPC)
controllers/
mcp_controller.ex — SSE stream and RPC handler
page_controller.ex — Default page
plugs/
mcp_rpc_plug.ex — Parses JSON-RPC body
raw_body_*.ex — Raw body reading for RPC添加MCP服务器
编辑 priv/config/mcp_servers.json:
{
"mcpServers": {
"your_server": {
"command": "/path/to/executable",
"args": ["arg1"],
"env": { "API_KEY": "value" },
"tools": {
"tool_name": {
"description": "What it does",
"parameters": [
{ "name": "param1", "type": "string", "description": "..." }
]
}
}
}
}
}服务器在OTP监督下作为子进程启动,并在出现故障时重新启动。
设置
git clone https://github.com/jmanhype/MCPhoenix.git
cd MCPhoenix # note: the repo name uses correct spelling
mix deps.get
mix phx.server # starts on port 4001需求
| 依赖关系 | 版本 |
|---|---|
| 灵丹妙药 | >=1.14 |
| Erlang/OTP | >=25 |
| 凤凰城 | ~>1.7.0 |
| Node.js | >=18(用于子MCP服务器) |
| Python | >=3.9(用于Flux/Dart集成) |
可选集成
| 整合 | 需要什么 |
|---|---|
| Flux图像生成 | Python 3.9+,Flux CLI, BFL_API_KEY |
| 飞镖任务管理 | Node.js 18+, DART_TOKEN |
| Cloudflare持久对象 | 工作部署, CLOUDFLARE_WORKER_URL, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN |
MCP端点
| 端点 | 方法 | 目的 |
|---|---|---|
/mcp/stream | GET | SSE流;回报 x-mcp-client-id 头球 |
/mcp/rpc | 发布JSON-RPC 2.0;通过 x-mcp-client-id 头球 |
关键依赖
| 包装 | 版本 | 用途 |
|---|---|---|
phoenix | ~>1.7.0 | Web框架 |
phoenix_live_view | ~>0.19.0 | LiveView(包括但不包括主界面) |
ash | ~>2.9 | 资源框架 |
broadway | ~>1.0 | 事件处理 |
gen_stage | ~>1.2 | 事件流 |
finch | ~>0.16 | HTTP客户端 |
mint_web_socket | ~>1.0 | 支持WebSocket |
jason | ~>1.4 | JSON编码 |
局限性
- Cloudflare Durable Objects集成依赖于自定义GitHub十六进制包(
cloudflare_durable_ex)可能不会公开 - MCP端点上没有身份验证
- 服务器重启后,SSE连接不会持久化
- Ash框架资源(用户、消息、注册表)似乎是脚手架式的,但没有完全集成
- LiveView和LiveDashboard包含在内,但不用于MCP界面
- 日志文件(
dev.log,phoenix_server.log)临时文件被提交到仓库
许可证
麻省理工学院
