🚀 🌳 MCPJungle 🌳
MCPJungleは、組織内で実行されているすべてのModel Context Protocolサーバーの唯一の信頼できるレジストリです。開発者はこれを使用して、MCPサーバーとそれらが提供するツールを中央管理場所から登録および管理できます。MCPクライアントは、この「ゲートウェイ」MCPサーバーを通じて、すべてのツールを発見して利用することができます。
MCPJungleは、AIエージェントが接続する必要のある唯一のMCPサーバーです!
🚀 クイックスタート
誰がMCPJungleを使用すべきか?
- 開発者:ClaudeやCursorなどのMCPクライアントを使用し、ツール呼び出しのためにMCPサーバーにアクセスする必要がある方。
- 開発者:組み込みのセキュリティ、プライバシー、アクセス制御を備えたMCPサーバーにアクセスする必要がある、本番環境用のAIエージェントを構築する方。
- 組織:中央管理場所からすべてのMCPクライアント - サーバー間のやり取りを表示および管理したい方。独自のデータセンターでホストすることができます🔒
クイックスタートガイド
このクイックスタートガイドでは、以下の手順を説明します。
docker composeを使用してMCPJungleサーバーをローカルで起動する。
- mcpjungleに単純なMCPサーバーを登録する。
- Claudeをmcpjungleに接続して、MCPツールにアクセスする。
サーバーの起動
curl -O https://raw.githubusercontent.com/mcpjungle/MCPJungle/refs/heads/main/docker-compose.yaml
docker compose up -d
MCPサーバーの登録
クライアントバイナリは、brewを使用するか、Releasesからダウンロードできます。
brew install mcpjungle/mcpjungle/mcpjungle
context7のリモートMCPサーバーをmcpjungleに追加します。
mcpjungle register --name context7 --url https://mcp.context7.com/mcp
mcpjungleへの接続
ClaudeのMCPサーバー設定に以下を追加します。
{
"mcpServers": {
"mcpjungle": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8080/mcp",
"--allow-http"
]
}
}
}
Claudeに以下のように問い合わせてみましょう。
Use context7 to get the documentation for `/lodash/lodash`
Claudeは、MCPJungleを介してcontext7__get-library-docsツールを呼び出し、Lodashライブラリのドキュメントを返します。
おめでとう🎉 MCPJungleにリモートMCPサーバーを正常に登録し、Claudeを介してそのツールの1つを呼び出しました。
📦 インストール
⚠️ 重要提示
MCPJungleはBETA版のソフトウェアです。
本番環境での使用に耐えうるように積極的に開発を進めています。
フィードバックは、このリポジトリでディスカッションを開始することで提供できます。
MCPJungleはスタンドアロンのバイナリとして提供されます。Releasesページからダウンロードするか、Homebrewを使用してインストールできます。
brew install mcpjungle/mcpjungle/mcpjungle
インストールを確認するには、以下のコマンドを実行します。
mcpjungle version
⚠️ 重要提示
MacOSでは、コンパイルされたバイナリがまだNotarizedされていないため、homebrewを使用する必要があります。
MCPJungleは、レジストリサーバーを実行するのに便利なDockerイメージを提供しています。
docker pull mcpjungle/mcpjungle
💻 使用例
サーバー
MCPJungleサーバーは、登録されたすべてのMCPサーバーを管理し、AIエージェントがこれらの登録されたサーバーが提供するツールを発見して呼び出すための統一されたMCPゲートウェイを提供します。ゲートウェイ自体はストリーミング可能なHTTPトランスポートを使用して実行され、/mcpエンドポイントでアクセスできます。
Docker内での実行
MCPJungleサーバーをローカルで実行する場合は、docker composeが推奨されます。
# docker-compose.yamlは、個人がローカルマシンでmcpjungleを個人用に実行するために最適化されています。
# mcpjungleはデフォルトで`development`モードで実行されます。
curl -O https://raw.githubusercontent.com/mcpjungle/MCPJungle/refs/heads/main/docker-compose.yaml
docker compose up -d
# docker-compose.prod.yamlは、組織がリモートサーバーにmcpjungleを複数ユーザー向けにデプロイするために最適化されています。
# mcpjungleはデフォルトで`production`モードで実行され、エンタープライズ機能が有効になります。
curl -O https://raw.githubusercontent.com/mcpjungle/MCPJungle/refs/heads/main/docker-compose.prod.yaml
docker compose -f docker-compose.prod.yaml up -d
これにより、MCPJungleサーバーと永続的なPostgresデータベースコンテナが起動します。
サーバーが正常に起動していることをすぐに確認できます。
curl http://localhost:8080/health
npxまたはuvxに依存するstdioベースのMCPサーバーを登録する予定の場合は、代わりにmcpjungleのstdioタグ付きのDockerイメージを使用します。
MCPJUNGLE_IMAGE_TAG=latest-stdio docker compose up -d
💡 使用建议
docker-compose.yamlを使用している場合は、これがすでにデフォルトのイメージタグです。docker-compose.prod.yamlを使用している場合のみ、stdioイメージタグを指定する必要があります。
このイメージはかなり大きいですが、stdioベースのMCPサーバーに依存している場合にローカルで実行するのに非常に便利で、推奨されます。たとえば、context7やdeepwikiなどのリモートmcpサーバーのみを登録する場合は、標準(最小限の)イメージを使用できます。ただし、filesystem、time、githubなどのstdioベースのサーバーも使用する場合は、代わりにstdioタグ付きのイメージを使用する必要があります。
💡 使用建议
stdioサーバーがnpxまたはuvx以外のツールに依存している場合は、mcpjungleバイナリとともにそれらの依存関係を含むカスタムDockerイメージを作成する必要があります。
本番環境でのデプロイ
デフォルトのMCPJungle Dockerイメージは非常に軽量で、最小限のベースイメージとmcpjungleバイナリのみを含んでいます。したがって、本番環境でのデプロイに適しており、推奨されます。データベースについては、別のPostgres DBクラスターをデプロイし、そのエンドポイントをmcpjungleに指定することをお勧めします(以下のデータベースセクションを参照)。標準Dockerイメージとstdio Dockerイメージの定義を参照できます。
ホストマシンでの直接実行
バイナリを使用してサーバーをホストマシンで直接実行することもできます。
mcpjungle start
これにより、メインのレジストリサーバーとMCPゲートウェイが起動し、デフォルトでポート8080でアクセスできます。
データベース
mcpjungleサーバーはデータベースに依存しており、デフォルトでは現在の作業ディレクトリにSQLite DBを作成します。これは、ローカルでテストするだけの場合は問題ありません。あるいは、PostgresqlデータベースのDSNをサーバーに指定することもできます。
export DATABASE_URL=postgres://admin:root@localhost:5432/mcpjungle_db
docker run mcpjungle/mcpjungle:latest
mcpjungle start
クライアント
サーバーが起動したら、mcpjungle CLIを使用してサーバーとやり取りできます。MCPJungleは現在、stdioおよびStreamable HTTPトランスポートを使用するMCPサーバーをサポートしています。
Streamable HTTPベースのサーバーの登録
たとえば、http://127.0.0.1:8000/mcpでローカルに実行されているStreamable HTTP MCPサーバーがあり、add、subtractなどの基本的な数学ツールを提供しているとします。このMCPサーバーをMCPJungleに登録できます。
mcpjungle register --name calculator --description "Provides some basic math tools" --url http://127.0.0.1:8000/mcp
docker composeを使用してサーバーを実行し、Linuxではない場合は、ローカルループバックアドレスの代わりにhost.docker.internalを使用する必要があります。
mcpjungle register --name calculator --description "Provides some basic math tools" --url http://host.docker.internal:8000/mcp
レジストリはこのMCPサーバーを追跡し始め、そのツールを読み込みます。
MCPサーバーを登録するための設定ファイルを指定することもできます。
cat ./calculator.json
{
"name": "calculator",
"transport": "streamable_http",
"description": "Provides some basic math tools",
"url": "http://127.0.0.1:8000/mcp"
}
mcpjungle register -c ./calculator.json
このサーバーが提供するすべてのツールは、MCPJungleを介してアクセスできるようになります。
mcpjungle list tools
mcpjungle usage calculator__multiply
mcpjungle invoke calculator__multiply --input '{"a": 100, "b": 50}'
💡 使用建议
MCPJungleのツールは、<mcp-server-name>__<tool-name>のパターンに従う正規名で参照する必要があります。サーバー名とツール名は二重アンダースコア__で区切られます。たとえば、githubというMCPサーバーを登録し、git_commitというツールを提供する場合、MCPJungleではgithub__git_commitという名前で呼び出すことができます。MCPクライアントも、MCPJungleを介してツールを呼び出すためにこの正規名を使用する必要があります。
Streamable HTTPベースのMCPサーバーを登録するための設定ファイルの形式は次のとおりです。
{
"name": "<name of your mcp server>",
"transport": "streamable_http",
"description": "<description>",
"url": "<url of the mcp server>",
"bearer_token": "<optional bearer token for authentication>"
}
STDIOベースのサーバーの登録
STDIOトランスポートを使用するMCPサーバーの設定ファイルの例(filesystem.jsonと呼びましょう)は次のとおりです。
{
"name": "filesystem",
"transport": "stdio",
"description": "filesystem mcp server",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
}
このMCPサーバーをMCPJungleに登録するには、設定ファイルを指定します。
mcpjungle register -c ./filesystem.json
STDIOベースのMCPサーバーを登録するための設定ファイルの形式は次のとおりです。
{
"name": "<name of your mcp server>",
"transport": "stdio",
"description": "<description>",
"command": "<command to run the mcp server, eg- 'npx', 'uvx'>",
"args": ["arguments", "to", "pass", "to", "the", "command"],
"env": {
"KEY": "value"
}
}
STDIOベースのMCPサーバーを登録する方法の簡単なビデオを見ることもできます。
💡 使用建议
STDIOサーバーが何らかの理由で失敗したりエラーを投げたりした場合は、mcpjungleサーバーのログを確認して、そのstderr出力を確認してください。
制限事項 🚧
MCPJungleは、ツールが呼び出されるたびに新しい接続を作成します。これは、STDIO mcpサーバーの場合は、ツール呼び出しごとに新しいサブプロセスが起動されることを意味します。これには多少のパフォーマンスオーバーヘッドがありますが、メモリリークが発生しないことが保証されます。ただし、これはまた、MCPサーバーとのステートフルな接続に依存している場合、MCPJungleは現在それを提供できないことを意味します。このメカニズムを将来のリリースで改善する予定であり、コミュニティからのアイデアを歓迎しています!
MCPサーバーの登録解除
MCPサーバーをmcpjungleから削除できます。
mcpjungle deregister calculator
mcpjungle deregister filesystem
削除されると、このmcpサーバーとそのツールは、あなたやMCPクライアントからは利用できなくなります。
他のMCPクライアントとの統合
MCPJungleがhttp://localhost:8080で実行されていると仮定して、以下の設定を使用して接続します。
Claude
{
"mcpServers": {
"mcpjungle": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8080/mcp",
"--allow-http"
]
}
}
}
Cursor
{
"mcpServers": {
"mcpjungle": {
"url": "http://localhost:8080/mcp"
}
}
}
CursorをMCPJungleに接続する方法の簡単なビデオを見ることもできます。
ツールの有効化/無効化
特定のツールまたはMCPサーバーが提供するすべてのツールを有効または無効にすることができます。ツールが無効になっている場合、MCPJungleプロキシを介しては利用できないため、MCPクライアントはそれを表示または呼び出すことができません。
mcpjungle disable context7__get-library-docs
mcpjungle enable context7__get-library-docs
mcpjungle disable context7
mcpjungle enable context7
無効にされたツールは、mcpjungleのHTTP APIを介して依然としてアクセスできるため、人はCLI(または他のHTTPクライアント)からそれを管理することができます。
💡 使用建议
新しいサーバーがMCPJungleに登録されると、そのすべてのツールはデフォルトで有効になります。
ツールグループ
MCPJungleにより多くのMCPサーバーを追加すると、ゲートウェイを介して利用可能なツールの数が大幅に増える可能性があります。MCPクライアントがゲートウェイMCPを介して何百ものツールにさらされると、そのパフォーマンスが低下する可能性があります。MCPJungleでは、ツールグループを使用して、利用可能なすべてのツールのサブセットのみをMCPクライアントに公開することができます。新しいグループを作成し、公開したい特定のツールのみを含めることができます。グループが作成されると、mcpjungleはそれに対する一意のエンドポイントを返します。その後、MCPクライアントを構成して、メインゲートウェイエンドポイントの代わりにこのグループ固有のエンドポイントを使用することができます。
ツールグループの作成
create groupコマンドにJSON設定ファイルを指定することで、新しいツールグループを作成できます。グループには一意のnameと、MCPプロキシを介して公開したいincluded_toolsのリストを指定する必要があります。以下は、ツールグループ設定ファイル(claude-tools-group.json)の例です。
{
"name": "claude-tools",
"description": "This group only contains tools for Claude Desktop to use",
"included_tools": [
"filesystem__read_file",
"deepwiki__read_wiki_contents",
"time__get_current_time"
]
}
すべてのMCPサーバーにまたがる20のツールを公開する代わりに、このグループは3つの選りすぐりのツールのみを公開します。このグループをmcpjungleに作成できます。
$ mcpjungle create group -c ./claude-tools-group.json
Tool Group claude-tools created successfully
It is now accessible at the following streamable http endpoint:
http://127.0.0.1:8080/v0/groups/claude-tools/mcp
その後、Claude(または他のMCPクライアント)を構成して、このグループ固有のエンドポイントを使用してMCPサーバーにアクセスすることができます。クライアントは、これらの3つのツールのみを表示し、使用することができ、MCPJungleに登録されている他のツールは認識できません。
💡 使用建议
mcpjungle list toolsを実行して、利用可能なすべてのツールを表示し、グループに含めたいツールを選択することができます。
ツールグループの使用方法のビデオも見ることができます。
ツールグループの管理
現在、すべてのグループをリストアップしたり、特定のグループの詳細を表示したり、グループを削除したりする操作を実行できます。
mcpjungle list groups
mcpjungle get group claude-tools
mcpjungle delete group claude-tools
💡 使用建议
ツールがグループに含まれているが、後でグローバルに無効にされたり削除された場合、そのツールはグループのMCPエンドポイントを介しては利用できなくなります。ただし、ツールが後で再び有効にされたり追加されたりすると、自動的にグループ内で利用可能になります。
制限事項 🚧
- 現在、既存のツールグループを更新することはできません。グループを削除し、変更された設定ファイルで新しいグループを作成する必要があります。
productionモードでは、現在、管理者のみがツールグループを作成できます。標準ユーザーも独自のグループを作成できるようにする作業を行っています。
認証
MCPJungleは、Streamable HTTP MCPサーバーが静的トークンを受け入れる場合の認証をサポートしています。これは、HuggingFace、StripeなどのSaaSが提供するMCPサーバーを使用する場合に便利です。これらのサーバーは認証にAPIトークンを必要とします。MCPサーバーを登録する際にトークンを指定できます。
mcpjungle register --name huggingface --description "HuggingFace MCP Server" --url https://huggingface.co/mcp --bearer-token <your-hf-api-token>
または、設定ファイルから指定することもできます。
{
"name": "huggingface",
"transport": "streamable_http",
"url": "https://huggingface.co/mcp",
"description": "hugging face mcp server",
"bearer_token": "<your-hf-api-token>"
}
OAuthフローのサポートは間もなく追加されます!
エンタープライズ機能 🔒
組織内でMCPJungleを実行する場合は、サーバーをproductionモードで実行することをお勧めします。
mcpjungle start --prod
export SERVER_MODE=production
mcpjungle start
docker compose -f docker-compose.prod.yaml up -d
デフォルトでは、mcpjungleサーバーはdevelopmentモードで実行され、個人がローカルで実行するのに最適です。本番モードでは、サーバーはより厳格なセキュリティポリシーを適用し、認証、ACL、監視などの追加機能を提供します。本番モードでサーバーを起動した後、クライアントマシンで以下のコマンドを実行して初期化する必要があります。
mcpjungle init-server
これにより、サーバーに管理者ユーザーが作成され、そのAPIアクセストークンがホームディレクトリ(~/.mcpjungle.conf)に保存されます。その後、mcpjungle cliを使用して、サーバーに認証済みのリクエストを送信することができます。
アクセス制御
developmentモードでは、すべてのMCPクライアントがMCPJungleプロキシに登録されたすべてのMCPサーバーに完全にアクセスできます。productionモードでは、どのMCPクライアントがどのMCPサーバーにアクセスできるかを制御できます。たとえば、productionモードでMCPJungleにcalculatorとgithubの2つのMCPサーバーを登録したとします。デフォルトでは、どのMCPクライアントもこれらのサーバーにアクセスできません。MCPJungleにMCPクライアントを作成し、明示的にMCPサーバーへのアクセスを許可する必要があります。
mcpjungle create mcp-client cursor-local --allow "calculator, github"
MCP client 'cursor-local' created successfully!
Servers accessible: calculator,github
Access token: 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw
Send this token in the `Authorization: Bearer {token}` HTTP header.
Mcpjungleはクライアント用にアクセストークンを作成します。クライアントまたはエージェントを構成して、mcpjungleプロキシへのリクエストを行う際にこのトークンをAuthorizationヘッダーに含めるようにします。たとえば、Cursorに以下の設定を追加してMCPJungleに接続できます。
{
"mcpServers": {
"mcpjungle": {
"url": "http://localhost:8080/mcp",
"headers": {
"Authorization": "Bearer 1YHf2LwE1LXtp5lW_vM-gmdYHlPHdqwnILitBhXE4Aw"
}
}
}
}
このようにして特定のサーバーにアクセスできるクライアントは、そのサーバーが提供するすべてのツールを表示および呼び出すことができます。
💡 使用建议
--allowフラグを指定しない場合、MCPクライアントはどのMCPサーバーにもアクセスできません。
OpenTelemetry
MCPJungleは、監視のためにPrometheus互換のOpenTelemetryメトリクスをサポートしています。
productionモードでは、OpenTelemetryはデフォルトで有効になっています。
developmentモードでは、テレメトリはデフォルトで無効になっています。サーバーを起動する前にOTEL_ENABLED環境変数をtrueに設定することで有効にできます。
export OTEL_ENABLED=true
export OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=production
mcpjungle start
mcpjungleサーバーが起動すると、メトリクスは/metricsエンドポイントで利用できます。
🔧 技術詳細
現在の制限事項 🚧
まだ完璧ではありませんが、改善するために一生懸命取り組んでいます!
1. MCPJungleは登録されたMCPサーバーへの長時間実行される接続を維持しません
Streamable HTTPサーバーのツールを呼び出すと、mcpjungleはサーバーへの新しい接続を作成してリクエストを処理します。STDIOサーバーのツールを呼び出すと、mcpjungleは新しい接続を作成し、このサーバーを実行するための新しいサブプロセスを開始します。リクエストを処理した後、このサブプロセスを終了します。したがって、ツール呼び出しごとに新しいstdioサーバープロセスが起動されます。これには多少のパフォーマンスオーバーヘッドがありますが、メモリリークが発生しないことが保証されます。また、MCPサーバーとのステートフルな接続に依存している場合、MCPJungleは現在それを提供できません。将来のリリースでこのメカニズムを改善する予定であり、コミュニティからのアイデアを歓迎しています!
2. MCPJungleは認証のためのOAuthフローをサポートしていません
これは現在開発中です。人々がMCPサーバーでOAuthをどのように使用しているかについてのフィードバックを収集しているので、ディスカッションを開始したり、問題を報告したりして、あなたのユースケースを共有してください。
🔗 貢献
コミュニティからの貢献を歓迎します!
- 貢献ガイドラインと標準については、CONTRIBUTION.mdを参照してください。
- 開発セットアップと技術的詳細については、DEVELOPMENT.mdを参照してください。
他の貢献者やメンテナーとつながるために、Discordコミュニティに参加してください。