Integrates with GitHub as a stdio-based MCP server, providing tools for Git and GitHub operations.
Supports integration with Hugging Face's MCP server, allowing access to AI models and tools through authentication with API tokens.
Demonstrated in the quickstart guide using context7 to retrieve Lodash documentation, showing how tools can access and return library documentation.
Supports PostgreSQL as a database backend for storing MCP server registrations and configuration data.
Provides SQLite as a default database option for storing MCP server registrations and configuration data.
Mentioned as an example of SaaS-provided MCP Servers that require API token authentication.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCPJungle mcp gatewaylist all registered MCP servers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCPJungle is an open source, self-hosted Gateway for all your Model Context Protocol Servers.
🧑💻 Developers use it to register & manage MCP servers and the tools they provide from a central place.
🤖 MCP Clients use it to discover and consume all these tools from a single "Gateway" MCP Server.

Who should use MCPJungle?
Developers using MCP Clients like Claude & Cursor that need to access MCP servers for tool-calling
Developers building production-grade AI Agents that need to access MCP servers with built-in security, privacy and Access Control.
Organisations wanting to view & manage all MCP client-server interactions from a central place. Hosted in their own datacenter 🔒
📋 Table of Contents
Quickstart guide
This quickstart guide will show you how to:
Start the MCPJungle server locally using
docker composeRegister a simple MCP server in mcpjungle
Connect your Claude to mcpjungle to access your MCP tools
Start the server
Related MCP server: whistle-mcp
Register MCP servers
Download the mcpjungle CLI on your local machine either using brew or directly from the Releases Page.
The CLI lets you manage everything in mcpjungle.
Next, lets add an MCP server to mcpjungle using the CLI. For this example, we'll use context7.
Connect to mcpjungle
Use the following configuration for your Claude MCP servers config:
Once mcpjungle is added as an MCP to your Claude, try asking it the following:
Claude will then attempt to call the context7__get-library-docs tool via MCPJungle, which will return the documentation for the Lodash library.
Congratulations! 🎉
You have successfully registered a remote MCP server in MCPJungle and called one of its tools via Claude
You can now proceed to play around with the mcpjungle and explore the documentation & CLI for more details.
Installation
MCPJungle is shipped as a stand-alone binary.
You can either download it from the Releases Page or use Homebrew to install it:
Verify your installation by running
On MacOS, you will have to use homebrew because the compiled binary is notNotarized yet.
MCPJungle provides a Docker image which is useful for running the registry server (more about it later).
Usage
MCPJungle has a Client-Server architecture and the binary lets you run both the Server and the Client.
Server
The MCPJungle server is responsible for managing all the MCP servers registered in it and providing a unified MCP gateway for AI Agents to discover and call tools provided by these registered servers.
The gateway itself runs over streamable http transport and is accessible at the /mcp endpoint.
Running inside Docker
For running the MCPJungle server locally, docker compose is the recommended way:
Theenterprise mode used to be called production mode.
The mode has now been renamed for clarity. Everything else remains the same.
This will start the MCPJungle server along with a persistent Postgres database container.
You can quickly verify that the server is running:
If you plan on registering stdio-based MCP servers that rely on npx or uvx, use mcpjungle's stdio tagged docker image instead.
If you're usingdocker-compose.yaml, this is already the default image tag.
You only need to specify the stdio image tag if you're using docker-compose.prod.yaml.
This image is significantly larger. But it is very convenient and recommended for running locally when you rely on stdio-based MCP servers.
For example, if you only want to register remote mcp servers like context7 and deepwiki, you can use the standard (minimal) image.
But if you also want to use stdio-based servers like filesystem, time, github, etc., you should use the stdio-tagged image instead.
If your stdio servers rely on tools other thannpx or uvx, you will have to create a custom docker image that includes those dependencies along with the mcpjungle binary.
Production Deployment
The default MCPJungle Docker image is very lightweight - it only contains a minimal base image and the mcpjungle binary.
It is therefore suitable and recommended for production deployments.
For the database, we recommend you deploy a separate Postgres DB cluster and supply its endpoint to mcpjungle (see Database section below).
You can see the definitions of the standard Docker image and the stdio Docker image.
Running directly on host
You can also run the server directly on your host machine using the binary:
This starts the main registry server and MCP gateway, accessible on port 8080 by default.
Shutting down
It is important that the mcpjungle server shuts down gracefully to ensure proper cleanup.
The recommended way to stop the server process is to send a SIGTERM signal to it.
Database
The mcpjungle server relies on a database and by default, creates a SQLite DB file mcpjungle.db in the current working directory.
This is okay when you're just testing things out locally.
For more serious deployments, mcpjungle also supports Postgresql. You can supply the DSN to connect to it:
You can also supply postgres-specific env vars or files if you don't prefer using the DSN:
Client
Once the server is up, you can use the mcpjungle CLI to interact with it.
MCPJungle currently supports MCP servers using stdio and Streamable HTTP Transports.
Support for SSE (server-sent events) also exists but is currently not mature.
Let's see how to register them in mcpjungle.
Registering streamable HTTP-based servers
Let's say you're already running a streamable http MCP server locally at http://127.0.0.1:8000/mcp which provides basic math tools like add, subtract, etc.
You can register this MCP server with MCPJungle:
If you used docker compose to run the server, and you're not on Linux, you will have to use host.docker.internal instead of your local loopback address.
The registry will now start tracking this MCP server and load its tools.

You can also provide a configuration file to register the MCP server:
All tools provided by this server are now accessible via MCPJungle:

A tool in MCPJungle must be referred to by its canonical name which follows the pattern<mcp-server-name>__<tool-name>.
Server name and tool name are separated by a double underscore __.
eg- If you register a MCP server github which provides a tool called git_commit, you can invoke it in MCPJungle using the name github__git_commit.
Your MCP client must also use this canonical name to call the tool via MCPJungle.
The config file format for registering a Streamable HTTP-based MCP server is:
Registering STDIO-based servers
Here's an example configuration file (let's call it filesystem.json) for a MCP server that uses the STDIO transport:
You can register this MCP server in MCPJungle by providing the configuration file:
The config file format for registering a STDIO-based MCP server is:
You can also watch a quick video on How to register a STDIO-based MCP server.
If your STDIO server fails or throws errors for some reason, check the mcpjungle server's logs to view itsstderr output.
Caveat ⚠️
When running mcpjungle inside Docker, you need some extra configuration to run the filesystem mcp server.
By default, mcpjungle inside container does not have access to your host filesystem.
So you must:
mount the host directory you want to access as a volume in the container
specify the mount path as the directory in the filesystem mcp server command args
The docker-compose.yaml provided by mcpjungle mounts the current working directory as /host in the container.
So you can use the following configuration for the filesystem mcp server:
Then, the mcp has access to /host, ie, the current working directory on your host machine.
See DEVELOPMENT.md for more details.
Deregistering MCP servers
You can remove a MCP server from mcpjungle.
Once removed, this mcp server and its tools are no longer available to you or your MCP clients.
Cold-start problem & Stateful Connections
By default, MCPJungle always creates a new connection with the upstream MCP server when a tool is called.
When the tool call is complete, the connection is closed.
This keeps the system clean and avoids memory leaks.
But sometimes this can cause a latency overhead. For eg- a new process is spawned every time you call a tool of a STDIO-based mcp server. If the server takes several seconds to start up, this slows down the tool call and the overall interaction.
To solve this, MCPJungle also supports stateful connections.
You can set the session_mode to stateful (default is stateless) in you MCP server configuration:
mcpjungle will create a new connection with this mcp server the first time you call one of its tools.
This connection is not closed when the tool call is complete. Subsequent tool calls to this server reuse the same connection, avoiding the cold-start overhead.
The connection is only closed when:
mcpjungle server is stopped
the mcp server is deregistered from mcpjungle
the connection times out after a period of inactivity. You can set the number of seconds using the
SESSION_IDLE_TIMEOUT_SECenv var to configure this globally in mcpjungle server (default value is -1, which means no timeout).
When possible, it is recommended that you use stateless connections (default setting).
Integration with other MCP Clients
Assuming that MCPJungle is running on http://localhost:8080, use the following configurations to connect to it:
Claude
Cursor
You can watch a quick video on How to connect Cursor to MCPJungle.
Copilot
Follow Copilot's doc on configuraing a MCP server manually.
Your mcp.json config file should look like this after adding mcpjungle to it:
You may have to click onStart for Copilot to actually start interacting with mcpjungle.
Enabling/Disabling Tools
You can disable and re-enable a specific tool or all the tools provided by an MCP Server.
If a tool is disabled, it is not available via the MCPJungle Proxy or any of the Tool Groups, so no MCP clients can view or call it.
You can disable and enable Prompts as well.
A disabled tool is still accessible via mcpjungle's HTTP API, so humans can still manage it from the CLI (or any other HTTP client).
When a new server is registered in MCPJungle, all its tools & prompts areenabled by default.
Prompts
Mcpjungle supports Prompts.
When you register a new MCP server, if it provides prompts, they're registered in mcpjungle too.
Here are some examples of how you can interact with Prompts using the CLI:
Tool Groups
As you add more MCP servers to MCPJungle, the number of tools available through the Gateway can grow significantly.
If your MCP client is exposed to hundreds of tools through the gateway MCP, its performance may degrade.
MCPJungle allows you to expose only a subset of all available tools to your MCP clients using Tool Groups.
You can create a new group and only include specific tools that you wish to expose.
Once a group is created, mcpjungle returns a unique endpoint for it.
You can then configure your MCP client to use this group-specific endpoint instead of the main gateway endpoint.
Creating a Tool Group
You can create a new tool group by providing a JSON configuration file to the create group command.
You must specify a unique name for the group and define which tools to include using one or more of the following fields:
included_tools: List specific tool names to include (e.g.,["filesystem__read_file", "time__get_current_time"])included_servers: Include ALL tools from specific MCP servers (e.g.,["time", "deepwiki"])excluded_tools: Exclude specific tools (useful when including entire servers)
Example 1: Cherry-picking specific tools
Here is an example of a tool group configuration file (claude-tools-group.json):
This group exposes only 3 handpicked tools instead of all available tools.
Example 2: Including entire servers with exclusions
You can also include all tools from specific servers and optionally exclude some:
This includes ALL tools from the time and deepwiki servers except time__convert_time.
Example 3: Mixing approaches
You can combine all three fields for maximum flexibility:
This includes filesystem__read_file plus all tools from the time server except time__convert_time.
You can create this group in mcpjungle:
You can then configure Claude (or any other MCP client) to use this group-specific endpoint to access the MCP server.
The client will then ONLY see and be able to use these 3 tools and will not be aware of any other tools registered in MCPJungle.
You can runmcpjungle list tools to view all available tools and pick the ones you want to include in your group.
You can also watch a Video on using Tool Groups.
The exclusion is always applied at the end.
So if you add a tool toincluded_tools and also list it in excluded_tools, it will be excluded from the final group.
Limitation 🚧
Prompts are currently not supported in Tool Groups. We're working to fix this issue 🛠️
Managing tool groups
You can currently perform operations like listing all groups, viewing details of a specific group and deleting a group.
Working with tools in groups
You can list and invoke tools within specific groups using the --group flag:
These commands provide group-scoped operations, making it easier to work with tools within specific contexts and validate that tools are available in your groups.
If a tool is included in a group but is later disabled globally or deleted, then it will not be available via the group's MCP endpoint.
But if the tool is re-enabled or added again later, it will automatically become available in the group again.
Limitations 🚧
Currently, you cannot update an existing tool group. You must delete the group and create a new one with the modified configuration file.
In
enterprisemode, currently only an admin can create a Tool Group. We're working on allowing standard Users to create their own groups as well.
Authentication
MCPJungle currently supports authentication if your Streamable HTTP MCP Server accepts static tokens for auth.
This is useful when using SaaS-provided MCP Servers like HuggingFace, Stripe, etc. which require your API token for authentication.
You can supply your token while registering the MCP server:
Or from your configuration file
If you need to supply a custom value for the Authorization header or add additional custom headers, you can use the headers field in the config file:
Support for Oauth flow is coming soon!
Enterprise Features 🔒
If you're running MCPJungle in your organisation, we recommend running the Server in the enterprise mode:
By default, mcpjungle server runs in development mode which is ideal for individuals running it locally.
In Enterprise mode, the server enforces stricter security policies and will provide additional features like Authentication, ACLs, observability and more.
After starting the server in enterprise mode, you must initialize it by running the following command on your client machine:
This will create an admin user in the server and store its API access token in your home directory (~/.mcpjungle.conf).
You can then use the mcpjungle cli to make authenticated requests to the server.
Access Control
In development mode, all MCP clients have full access to all the MCP servers registered in MCPJungle Proxy.
enterprise mode lets you control which MCP clients can access which MCP servers.
Suppose you have registered 2 MCP servers calculator and github in MCPJungle in enterprise mode.
By default, no MCP client can access these servers. You must create an MCP Client in mcpjungle and explicitly allow it to access the MCP servers.
Mcpjungle creates an access token for your client.
Configure your client or agent to send this token in the Authorization header when making requests to the mcpjungle proxy.
You can also supply a custom access token for your mcp clients and user accounts using the--access-token flag.
This is useful when you want to manage tokens yourself, perhaps through a central identity server.
For example, you can add the following configuration in Cursor to connect to MCPJungle:
A client that has access to a particular server this way can view and call all the tools provided by that server.
If you don't specify the--allow flag, the MCP client will not be able to access any MCP servers.
Creating mcp clients from the config file
You can also create an MCP client by providing a JSON configuration file:
When creating a client from a config file, you must provide a custom access token because mcpjungle cannot print the generated token to the console.
Supplying custom access tokens in config files
There are 3 ways to provide the access token from configuration file:
Directly in the
access_tokenfield: Only use this for testing purposes. Not recommended for production, especially if you're committing the config file to version control.From a file using the
access_token_ref.filefield: The file should contain only the token string.From an environment variable using the
access_token_ref.envfield: The env var should contain the token string.
Creating user accounts
In addition to MCP clients, you can also create User accounts in mcpjungle for human users.
A user has a very limited set of privileges compared to an admin in the enterprise mode. For example, they can view and use MCP servers, but they don't have write permissions in mcpjungle.
The config file format for creating a user is similar to that of an MCP client:
Again, when using the config file, you must provide a custom access token.
OpenTelemetry
MCPJungle supports Prometheus-compatible OpenTelemetry Metrics for observability.
In
enterprisemode, OpenTelemetry is enabled by default.In
developmentmode, telemetry is disabled by default. You can enable it by setting theOTEL_ENABLEDenvironment variable totruebefore starting the server:
Once the mcpjungle server is started, metrics are available at the /metrics endpoint.
Current limitations 🚧
We're not perfect yet, but we're working hard to get there!
1. MCPJungle does not support OAuth flow for authentication yet
This is a work in progress.
We're collecting more feedback on how people use OAuth with MCP servers, so feel free to start a Discussion or open an issue to share your use case.
Contributing 💻
We welcome contributions from the community!
For contribution guidelines and standards, see CONTRIBUTION.md
For development setup and technical details, see DEVELOPMENT.md
Join our Discord community to connect with other contributors and maintainers.