Skip to main content
MCP servers are the upstream services that provide tools, prompts, and resources. MCPJungle acts as a proxy and registry for them. The endpoints below let you register new servers, control whether they are active, and inspect their stored configuration. All write operations require admin role.

GET /api/v0/servers

Returns a list of all registered MCP servers. Each item includes connection details but omits sensitive fields such as bearer tokens — use GET /api/v0/server_configs for the full configuration. Access: admin and user
curl http://localhost:8080/api/v0/servers \
  -H "Authorization: Bearer YOUR_TOKEN"
Response 200
[
  {
    "name": "filesystem",
    "transport": "stdio",
    "description": "Local filesystem access",
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
    "env": {},
    "session_mode": "stateless"
  },
  {
    "name": "weather",
    "transport": "streamable_http",
    "description": "Weather data via HTTP",
    "url": "https://weather-mcp.example.com/mcp",
    "session_mode": "stateless"
  }
]
name
string
required
Unique name of the server within MCPJungle.
transport
string
required
Transport protocol. One of stdio, streamable_http, or sse.
description
string
Human-readable description.
url
string
Remote server URL. Present for streamable_http and sse transports.
command
string
Executable path. Present for stdio transport.
args
string[]
Arguments passed to the command. Present for stdio transport.
env
object
Environment variables passed to the process. Present for stdio transport.
session_mode
string
Either stateless (default, new connection per call) or stateful (persistent connection).

POST /api/v0/servers

Registers a new MCP server. The body shape depends on the transport type. Accepts an optional ?force=true query parameter: if a server with the same name already exists, it is deregistered before the new one is registered. Access: admin only
force
boolean
default:"false"
When true, deregister any existing server with the same name before registering.

Request body

name
string
required
Unique name for the server. Must not conflict with an existing server unless force=true.
transport
string
required
Transport protocol. Accepted values: stdio, streamable_http, sse.
description
string
Optional human-readable description.
session_mode
string
default:"stateless"
Connection management mode. stateless creates a new connection per tool call. stateful keeps a persistent connection — useful for servers with slow cold starts or that require session state.
url
string
Remote server URL. Required when transport is streamable_http or sse. Must be a valid http:// or https:// URL.
bearer_token
string
Static token sent in the Authorization header when proxying requests to the upstream server. Ignored for stdio transport.
headers
object
Additional HTTP headers forwarded to streamable_http upstream servers. If both bearer_token and headers["Authorization"] are set, the explicit header value takes precedence.
command
string
Executable to launch. Required when transport is stdio.
args
string[]
Command-line arguments. Used only with stdio transport.
env
object
Environment variables injected into the subprocess. Used only with stdio transport.
cURL
curl -X POST http://localhost:8080/api/v0/servers \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "filesystem",
    "transport": "stdio",
    "description": "Local filesystem access",
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
  }'
Response 201 — The newly created server object (same shape as a list item from GET /api/v0/servers).

DELETE /api/v0/servers/:name

Deregisters a server. All tools and prompts provided by the server are removed from the proxy immediately. Access: admin only
name
string
required
Name of the server to deregister.
cURL
curl -X DELETE http://localhost:8080/api/v0/servers/weather \
  -H "Authorization: Bearer YOUR_TOKEN"
Response 204 — No content.

POST /api/v0/servers/:name/enable

Re-enables a previously disabled server, making its tools and prompts available again through the MCP proxy. Access: admin only
name
string
required
Name of the server to enable.
cURL
curl -X POST http://localhost:8080/api/v0/servers/weather/enable \
  -H "Authorization: Bearer YOUR_TOKEN"
Response 200
name
string
Name of the server that was enabled.
tools_affected
string[]
Names of tools that were re-enabled.
prompts_affected
string[]
Names of prompts that were re-enabled.
{
  "name": "weather",
  "tools_affected": ["weather__get_forecast", "weather__get_alerts"],
  "prompts_affected": []
}

POST /api/v0/servers/:name/disable

Disables a server, hiding all its tools and prompts from the MCP proxy without removing the registration. The server can be re-enabled later. Access: admin only
name
string
required
Name of the server to disable.
cURL
curl -X POST http://localhost:8080/api/v0/servers/weather/disable \
  -H "Authorization: Bearer YOUR_TOKEN"
Response 200 — Same shape as the enable response, listing the tools and prompts that were disabled.

GET /api/v0/server_configs

Returns the full registration configuration for every server, including bearer tokens and custom headers. Use this endpoint to export configs for migration or backup. Treat the output as a secret. Access: admin only
cURL
curl http://localhost:8080/api/v0/server_configs \
  -H "Authorization: Bearer YOUR_TOKEN"
Response 200 — An array of RegisterServerInput objects. Each item has the same fields as the POST /api/v0/servers request body, including bearer_token and headers where applicable.
This endpoint can expose upstream API tokens stored in MCPJungle. Restrict access to admin users and audit its usage in production.