Table of Contents [expand]
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年08月20日(水)
モデルコンテキストプロトコル (MCP) は、開発者が大規模言語モデル (LLM) をツール、サービス、データソースに接続するのに役立つオープンスタンダードです。Heroku は、ツールの登録、実行、オーケストレーションを自動的に処理する Managed Inference and Agents アドオンを通じて、MCP サーバーのネイティブサポートを提供します。
このアドオンを使用すると、Managed Inference and Agents API を使用して、登録済みの MCP ツールを表示し、登録済みの MCP ツールを自動的に実行できます。このアドオンを使用して、MCP ツールキットをビルドすることもできます。MCP ツールキットは Heroku がホストする複数の MCP サーバーのコレクションで、統合された URL を通じてモデルからアクセスすることが可能です。ツールキットを利用することで、AI ツールを安全かつ一元的に管理および実行できます。
Managed Inference and Agents API を使用して MCP ツールキットを作成するには、Heroku のアドオンチャットモデルにカスタム MCP サーバーをデプロイしてから登録します。
カスタム MCP サーバーのデプロイと登録
Heroku にカスタム MCP サーバーをデプロイする
MCPサーバーを Heroku にデプロイするには、MCP プロセスを定義する Procfile を作成し、選択した言語に必要なファイルを追加します (Python の場合は requirements.txt、Ruby の場合は Gemfile など)。この例については、オープンソースの MCP テンプレートを参照してください。
標準的な MCP サーバーを Heroku にデプロイする場合、LangChain などのフレームワークと /v1/chat/completions エンドポイントを組み合わせて、サーバーに対して直接ツール呼び出しを行うことができます。ただし、このアプローチでは以下が必要です。
- モデルからのツール呼び出しを処理して実行し、構造化された応答を返す制御ループをビルドして維持する
- 複数の異なる MCP サーバーとツールセットを管理する
- マルチテナントの長期実行 SSE またはストリーミング可能な HTTP MCP サーバーを備える (これは安全性が低く、コストが高くなる可能性がある)
代わりに、Heroku のManaged Inference and Agents アドオンを使用できます。アドオンはツールの登録、実行、オーケストレーションを自動的に処理します。また、Managed Inference and Agents API へのアクセスが許可され、MCP ツールキットをビルドできるようになります。Managed Inference and Agents アドオン機能を使用するには、デプロイされたカスタム MCP サーバーを Heroku に登録します。
Heroku にカスタム MCP サーバーを登録する
サーバーにアクセスし、Managed Inference and Agents API を介してカスタムツールの自動実行を有効にするには、デプロイされた MCP サーバーを Heroku に登録する必要があります。登録すると MCP ツールキットもビルドされます。これにより、モデルは単一の URL を通じて、そのモデルリソースに登録された Heroku がホストしているすべての MCP サーバーにアクセスできるようになります。
デプロイされた MCP アプリを Heroku に登録するには、以下の 2 つの手順があります。
- MCP アプリの Procfile に 1 行追加する。
- サーバーにアクセスするアドオンモデルに MCP アプリをアタッチする。
Heroku はオープンソースの MCP サンプルリポジトリを提供しており、これを変更して Heroku にデプロイできます。
| 目的 | リポジトリ |
|---|---|
| Ruby コード実行 | mcp-code-exec-ruby |
| Python コード実行 | mcp-code-exec-python |
| Go コード実行 | mcp-code-exec-go |
| Node コード実行 | mcp-code-exec-node |
| ドキュメント解析 (HTML と PDF –> Markdown) | mcp-doc-reader |
これらの例は標準の MCP アプリです。これらには必須ファイル (Procfile など) が含まれており、Procfile には MCP サーバーを宣言するための追加行があります。サンプルリポジトリをそのままデプロイするには、README で Deploy to Heroku (Heroku にデプロイ) ボタンをクリックします。
これらのツールは heroku_tools としてネイティブでも利用でき、MCP をデプロイする必要はありません。デプロイには dyno ランタイム用の ttl_seconds に上限がないなどの追加の利点があります。サンプルリポジトリをフォークすると、独自のカスタムツールの開発とデプロイに役立ちます。
注: 現在、Private Space で実行されている MCP サーバーは、
/v1/agents/heroku で登録したり使用したりすることができません。
Procfile に MCP 行を追加する
登録するには、MCP アプリの Procfile に MCP サーバーを宣言する行を追加します。Procfile STDIO サーバー名は以下のようにする必要があります。
"mcp" から始まる- モデルリソースに登録されているすべてのアプリ間で一意である
たとえば、MCP サーバーを宣言する Procfile については、Heroku のオープンソース MCP リポジトリ (Python Procfile など)) を参照してください。
アドオンに MCP サーバーをアタッチする
デプロイされた MCP アプリを Heroku Managed Inference and Agents チャットモデルにアタッチして、モデルに MCP サーバーのツールへのアクセスを許可します。
新しいモデルリソースを MCP アプリにアタッチするには、以下を実行します。
heroku ai:models:create MODEL_NAME -a $APP_NAME --as INFERENCE
既存のモデルリソースを MCP アプリにアタッチするには、以下を実行します。
heroku addons:attach MODEL_RESOURCE -a $APP_NAME --as INFERENCE
すでに推論リクエストを実行しているアプリがある場合は、MCP サーバーをアプリの推論アドオンにアタッチして、MCP ツールへのアクセスを許可できます。
アタッチした後、MCPサーバーは自動的に登録され、ツールが同期されます。その後、モデルを使用して /v1/agents/heroku に対してリクエストを送信すると、安全で分離された one-off dyno でツールを自動的に実行できます。
登録済みの MCP サーバーを一覧表示する
Managed Inference and Agents API にアクセスするには、モデルリソースの INFERENCE_KEY と INFERENCE_URL を取得します。
export INFERENCE_KEY=$(heroku config:get INFERENCE_KEY -a $APP_NAME)
export INFERENCE_URL=$(heroku config:get INFERENCE_URL -a $APP_NAME)
/v1/mcp/servers エンドポイントを使用してモデルに登録されているすべての MCP サーバーを一覧表示します。
curl "$INFERENCE_URL/v1/mcp/servers" \
-H "Authorization: Bearer $INFERENCE_KEY" \
-H "Content-Type: application/json" | jq .
エンドポイントは各サーバーに関するメタデータを返します。これには、プロセスタイプ、名前空間、すべての登録済みツールとそれらのスキーマと注釈が含まれます。応答フォーマットの詳細は、/v1/mcp/servers API リファレンスを参照してください。
/v1/agents/heroku でツールを自動実行
MCP サーバーを登録すると、/v1/agents/heroku エンドポイントを呼び出すときに、そのツールを tools パラメータに含めることができるようになります。モデルにアクセスを許可するツールごとに、"type": "mcp" とツールの名前を記述したツールオブジェクトを含めます。ツールは生成中にモデルによって呼び出された場合にのみ実行されます。
mcp ツールを使用した /v1/agents/heroku リクエストの例
curl "$INFERENCE_URL/v1/agents/heroku" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $INFERENCE_KEY" \
-H "X-Forwarded-Proto: https" \
-d @- <<EOF
{
"model": "claude-4-sonnet",
"messages": [
{
"role": "user",
"content": "Use the code exec tool to take the sha256 of the following string: 'Heroku Rocks'."
}
],
"tools": [
{
"type": "mcp",
"name": "code_exec_python"
}
]
}
EOF
登録後はメタデータが自動的に含まれるため、/v1/agents/heroku リクエストにツールパラメータ、スキーマ、説明を含める必要はありません。
詳細は、/v1/agents/heroku ドキュメントを参照してください。
/v1/agents/heroku mcp ツール呼び出し応答の例
event:message
data:{"id":"chatcmpl-184410e4ae2b7bb5180ae","object":"chat.completion","created":1748541138,"model":"claude-4-sonnet","system_fingerprint":"heroku-inf-1sefyj8","choices":[{"index":0,"message":{"role":"assistant","content":"I'll use the Python code execution tool to calculate the SHA256 hash of the string 'Heroku Rocks'.","refusal":null,"tool_calls":[{"id":"tooluse_GDSgVgflTByFOnL_ZbCrhQ","type":"function","function":{"name":"mcp-python/code_exec_python","arguments":"{\"code\":\"import hashlib\\n\\n# String to hash\\ntext = 'Heroku Rocks'\\n\\n# Calculate SHA256 hash\\nsha256_hash = hashlib.sha256(text.encode('utf-8')).hexdigest()\\n\\nprint(f\\\"String: {text}\\\")\\nprint(f\\\"SHA256: {sha256_hash}\\\")\"}"}}]},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":629,"completion_tokens":163,"total_tokens":792}}
event:message
data:{"id":"chatcmpl-184410e4ae2b7bb5180ae","object":"tool.completion","created":1748541141,"system_fingerprint":"heroku-inf-1sefyj8","choices":[{"index":0,"message":{"role":"tool","content":"Tool 'mcp-python/code_exec_python' returned result: {\"content\":[{\"type\":\"text\",\"text\":\"{\\n \\\"returncode\\\": 0,\\n \\\"stdout\\\": \\\"String: Heroku Rocks\\\\nSHA256: 7ebc92bcf8f51f0b623a18f0a357639410a409340043c7a670bb180acd138e6b\\\",\\n \\\"stderr\\\": \\\"\\\"\\n}\"}],\"isError\":false}","refusal":null,"tool_call_id":"tooluse_GDSgVgflTByFOnL_ZbCrhQ","name":"mcp-python/code_exec_python"},"finish_reason":""}],"usage":{}}
event:message
data:{"id":"chatcmpl-184410e4ae2b7bb5180ae","object":"chat.completion","created":1748541146,"model":"claude-4-sonnet","system_fingerprint":"heroku-inf-1sefyj8","choices":[{"index":0,"message":{"role":"assistant","content":"The SHA256 hash of the string 'Heroku Rocks' is:\n\n**7ebc92bcf8f51f0b623a18f0a357639410a409340043c7a670bb180acd138e6b**","refusal":null},"finish_reason":"stop"}],"usage":{"prompt_tokens":947,"completion_tokens":62,"total_tokens":1009}}
event:done
data:[DONE]
MCP サーバーを管理する
登録済みの MCP ツールは、CLI または Heroku Dashboard で表示および管理できます。
以下の CLI コマンドを実行します。
heroku addons:open INFERENCE -a $APP_NAME
または、ダッシュボードで次の手順を実行します。
- アプリをクリックして開きます。
Resources(リソース) タブを選択します。Add-on Services(アドオンサービス) の下にある Managed Inference and Agents アドオンを選択します。
登録済みのツールを外部クライアントで使用する
Cursor などの外部 AI アプリケーションは、構成ファイルを介して MCP サーバーと統合する機能を備えています。デプロイおよび登録済みの Heroku mcp ツールに外部 AI アプリケーションを統合するには、次の手順を実行します。
この CLI コマンドを実行して、Heroku Dashboard でアドオンを開きます。
heroku addons:open INFERENCE -a $APP_NAME
Toolkit URL(ツールキット URL) ($INFERENCE_URL/mcp/sse) とToolkit Token(ツールキット Token) ($INFERENCE_KEY) をコピーします。クライアントの構成ファイルに
Toolkit URL(ツールキット URL) とToolkit Token(ツールキット Token) を追加します。
たとえば、Cursor では、.cursor/mcp.json は以下のようになります。
{
"mcpServers": {
"myCustomTools": {
"command": "npx",
"args": [
"mcp-remote",
"<YOUR-TOOLKIT-URL>",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer <YOUR-TOOLKIT-TOKEN>"
}
}
}
}
MCP Inspector で登録済みのツールをテストする
デプロイした MCP サーバーを MCP Inspector を使用してテストできます。
次のコマンドを実行します。
npx @modelcontextprotocol/inspectorローカルにホストされている UI を開きます (通常は
http://127.0.0.1:6274)。左側のペインの
Transport Type(トランスポート種別) でSSE を選択します。URLで$INFERENCE_URL/mcp/sse (https://us.inference.heroku.com/mcp/sse など) を追加します。Authentication(認証) を選択し、モデルアドオンの$INFERENCE_KEY をBearer Token として追加します。Connect(接続) をクリックします。
これで MCP Inspector でツールを一覧表示し、サンプルリクエストを作成できるようになりました。

MCP Inspector インターフェースは SSE を使用しますが、基盤となるツール呼び出しの実行は、安全で分離された one-off dyno (STDIO モード) で実行されます。