MCPheonix について
MCPheonix は Elixir の Phoenix フレームワークで構築された MCP サーバーです。SSE と JSON-RPC のエンドポイントを公開し、JSON 設定で定義された複数の子 MCP サーバーを管理します。Elixir 環境で開発する利用者を想定しています。
主な機能
- 01MCP リクエスト用の JSON-RPC エンドポイント
- 02クライアントへイベントを送信する SSE ストリーム
- 03OTP 監視下で動作する子サーバー
- 04stdio 経由で子サーバーへ振り分けるツール呼び出し
- 05JSON ファイルによる子サーバーの設定
活用シーン
- 01Flux 画像生成と Dart タスク管理のサーバーを単一のエンドポイントで提供する
- 02OTP の監視ツリーで MCP 子プロセスを管理する実装を調べる
MCP 対応
本プロジェクトは MCP サーバーとして動作し、/mcp/rpc と /mcp/stream のエンドポイントを MCP クライアントに提供して、ツール呼び出しを設定済みの子 MCP サーバーへ転送します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCPhoenix
Phoenix Framework(Elixir)を基盤とする MCP サーバーです。MCP クライアント向けに Server-Sent Events と JSON-RPC のエンドポイントを提供し、JSON 設定を通じて複数の子 MCP サーバーを管理できます。
注:コードベース全体で、モジュール名とディレクトリ名には「MCPheonix」(「o」を含まない表記)が使用されています。
できること
ポート 4001 で Phoenix ウェブサーバーを実行し、次の機能を提供します。
POST /mcp/rpcで MCP JSON-RPC リクエストを受け付けますGET /mcp/streamで SSE を介してクライアントにイベントをストリーミングします- 子 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 統合 | Durable Objects クライアント(実験的、カスタム hex パッケージを使用) |
| イベントシステム | パイプライン処理に Broadway + GenStage を使用 |
| テスト | ExUnit、テストファイル 2 件(Cloudflare DO クライアント、モック WebSocket) |
| ライセンス | MIT |
アーキテクチャ
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
要件
| 依存関係 | バージョン |
|---|---|
| Elixir | >= 1.14 |
| Erlang/OTP | >= 25 |
| Phoenix | ~> 1.7.0 |
| Node.js | >= 18(子 MCP サーバー用) |
| Python | >= 3.9(Flux/Dart 統合用) |
オプションの統合
| 統合 | 必要なもの |
|---|---|
| Flux 画像生成 | Python 3.9 以降、Flux CLI、BFL_API_KEY |
| Dart タスク管理 | Node.js 18 以降、DART_TOKEN |
| Cloudflare Durable Objects | Worker のデプロイ、CLOUDFLARE_WORKER_URL、CLOUDFLARE_ACCOUNT_ID、CLOUDFLARE_API_TOKEN |
MCP エンドポイント
| エンドポイント | メソッド | 用途 |
|---|---|---|
/mcp/stream | GET | SSE ストリーム。x-mcp-client-id ヘッダーを返します |
/mcp/rpc | POST | JSON-RPC 2.0。x-mcp-client-id ヘッダーを渡します |
主要な依存関係
| パッケージ | バージョン | 用途 |
|---|---|---|
phoenix | ~> 1.7.0 | ウェブフレームワーク |
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 hex パッケージ(
cloudflare_durable_ex)に依存しています - MCP エンドポイントに認証はありません
- SSE 接続はサーバー再起動後に維持されません
- Ash フレームワークのリソース(User、Message、Registry)はひな形として追加されていますが、完全には統合されていないようです
- LiveView と LiveDashboard は含まれていますが、MCP インターフェースには使用されていません
- ログファイル(
dev.log、phoenix_server.log)と一時ファイルがリポジトリにコミットされています
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。