ContextForge とは
エージェント開発が進むと、こういう問題が出てきます。
- MCP サーバーが増えすぎてどこに何があるかわからない
- LangGraph、CrewAI、AutoGen など異なるフレームワークが別々にツールを呼んでいる
- 「誰がどのツールを呼んだか」の管理やセキュリティが分散する
ContextForge はこれらを 1つのゲートウェイに集約することで解決します。
ContextForge はIBM発のOSSで、バラバラなツール・エージェント・APIを1つの入口に集約し、「ガバナンス」「ディスカバリ」「オブザーバビリティ」を提供します。
(公式説明)
An open source registry and proxy that federates MCP, A2A, and REST/gRPC APIs with centralized governance, discovery, and observability. Optimizes Agent & Tool calling, and supports plugins.
| カテゴリー | 説明 |
|---|---|
| ガバナンス | 認証・認可(誰が使えるか) レート制限やポリシーの適用 |
| ディスカバリ | 使えるツール・エージェント等を検索・一覧 |
| オブザーバビリティ | トレースやメトリクス、利用状況の可視化 |
概要
簡単な例として、ContextForge に自作MCPサーバーを2つ登録し、Claude Desktop から呼び出す例を紹介します。

挨拶ツールと足し算ツールを作り、ContextForgeに登録してみました。
AdminUIから登録済みのツールを一覧で見ることができます。
登録したツールをClaude Desktopから呼び出します。
ContextForgeを通すことで認証認可やレート制限などを適用できます。
手順
1. ContextForge の立ち上げ
基本的にはREADME に従って立ち上げを行います。
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge
Admin UIからツールの登録等を行う場合は、.env のCSRF_ENABLEDパラメータをfalseにしてから、以下コマンドの実行を行います。(あくまでローカル検証用の設定です。)
# .env のシークレット(標準ライブラリで生成して設定)
python3 -c "import secrets;print(secrets.token_urlsafe(48))"
# → .env の JWT_SECRET_KEY= と AUTH_ENCRYPTION_SECRET= に貼る
# 依存関係のインストール
make install-dev
# DB 初期化(alembic は mcpgateway/ 配下から実行すること)
cd mcpgateway && uv run python -m alembic upgrade head
# 起動
cd ../ && make serve
2. ローカルMCPサーバーの構築
FastMCP を使用して2つのツールを実装します。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("demo-tools")
@mcp.tool()
def add(a: float, b: float) -> float:
"""2つの数を足し算して返します。"""
return a + b
@mcp.tool()
def greet(name: str) -> str:
"""名前を受け取り、日本語の挨拶を返します。"""
return f"こんにちは、{name}さん! ContextForge 経由の自作 MCP ツールです。"
if __name__ == "__main__":
mcp.run()
3. MCPサーバーをHTTPで公開する
mcpgateway.translate を使って、STDIOベースの MCP サーバーを Streamable HTTP エンドポイントとして起動します。この後、Admin UI からこのエンドポイントを ContextForge に登録します。
uv run python -m mcpgateway.translate --stdio "uv run python /path/to/server.py" \
--expose-streamable-http --port 9100
4. ContextForge への登録(Admin UI)
4-1. MCPサーバーの追加
Admin UI から、先ほど起動した http://localhost:9100 を MCP サーバーとして登録します。

登録が完了すると、サーバーに含まれるツール(greet・add)が自動的に検出・追加されます。

4-2. Virtual Serverの追加
次に、登録したツールをまとめて公開するための Virtual Server を作成します。Virtual Server は、複数のツールやサーバーを1つのエンドポイントとして束ねる仕組みです。
5. Claude Desktop 連携
設定ファイル の mcpServers に以下のように追加します。
serverId やトークンはAdmin UIから取得した値に書き換える必要があります。
"contextforge-demo": {
"command": "/opt/homebrew/bin/npx",
"args": [
"-y", "mcp-remote",
"http://localhost:4444/servers/<serverId>/sse",
"--header", "Authorization: Bearer <トークン>",
"--transport", "sse-only"
]
}
手順は以上です。
あとはClaude Desktop を再起動して、命令を出すと適切なツールを使用して回答を返してくれます。

まとめ
今回はツール登録とClaude Desktop連携という最小構成を試しました。ContextForgeにはこの他にも、A2A対応エージェントの登録、プラグインによるポリシー適用、OpenTelemetryによるトレーシング等さまざまな機能があります。
野良MCPが増えていく中で、ゲートウェイ層で「ガバナンス」「ディスカバリ」「オブザーバビリティ」をまとめて確保できるContextForgeは、エンタープライズ導入の有力な選択肢だと感じました。


