2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ContextForge使ってみた

2
Posted at

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 から呼び出す例を紹介します。
image.png

挨拶ツールと足し算ツールを作り、ContextForgeに登録してみました。
AdminUIから登録済みのツールを一覧で見ることができます。

image.png

登録したツールをClaude Desktopから呼び出します。
ContextForgeを通すことで認証認可やレート制限などを適用できます。

image.png

手順

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つのツールを実装します。

server.py
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 サーバーとして登録します。
image.png

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

4-2. Virtual Serverの追加

次に、登録したツールをまとめて公開するための Virtual Server を作成します。Virtual Server は、複数のツールやサーバーを1つのエンドポイントとして束ねる仕組みです。

image.png

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 を再起動して、命令を出すと適切なツールを使用して回答を返してくれます。
image.png

まとめ

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?