MCP服务器框架

基于Phoenix框架构建的MCP服务器,支持Server-Sent Events和JSON-RPC端点,用于管理和路由多个子MCP服务器。

  • by jmanhype
  • Elixir
  • 本地部署
  • 67 星标
  • 更新于
在 GitHub 查看 jmanhype/MCPhoenix

使用说明

MCPhoenix

基于Phoenix Framework(Elixir)构建的MCP服务器。为MCP客户端公开服务器发送事件和JSON-RPC端点,支持通过JSON配置管理多个子MCP服务器。

注意:模块和目录名称在整个代码库中使用拼写“MCPheonix”(不带“o”)。

它的作用

在端口4001上运行Phoenix web服务器,该服务器:

  1. 接受MCP JSON-RPC请求 POST /mcp/rpc
  2. 通过SSE向客户流式传输事件 GET /mcp/stream
  3. 将子MCP服务器(Flux映像生成、Dart任务管理等)作为监督进程进行管理
  4. 通过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)临时文件被提交到仓库

许可证

麻省理工学院