Labby MCP server
{
"mcpServers": {
"dinglebear-labby": {
"command": "npx",
"args": [
"-y",
"@dinglebear/labby@latest"
],
"env": {
"LABBY_MCP_HTTP_TOKEN": "<labby_mcp_http_token>",
"LABBY_SERVER_URL": "https://...",
"LABBY_GOOGLE_CLIENT_SECRET": "<labby_google_client_secret>",
"LABBY_PUBLIC_URL": "https://...",
"LABBY_GOOGLE_CLIENT_ID": "<labby_google_client_id>",
"LABBY_AUTHELIA_ISSUER_URL": "https://..."
}
}
}
}{
"mcpServers": {
"dinglebear-labby": {
"command": "npx",
"args": [
"-y",
"@dinglebear/labby@latest"
],
"env": {
"LABBY_MCP_HTTP_TOKEN": "<labby_mcp_http_token>",
"LABBY_SERVER_URL": "https://...",
"LABBY_GOOGLE_CLIENT_SECRET": "<labby_google_client_secret>",
"LABBY_PUBLIC_URL": "https://...",
"LABBY_GOOGLE_CLIENT_ID": "<labby_google_client_id>",
"LABBY_AUTHELIA_ISSUER_URL": "https://..."
}
}
}
}{
"mcpServers": {
"dinglebear-labby": {
"command": "npx",
"args": [
"-y",
"@dinglebear/labby@latest"
],
"env": {
"LABBY_MCP_HTTP_TOKEN": "<labby_mcp_http_token>",
"LABBY_SERVER_URL": "https://...",
"LABBY_GOOGLE_CLIENT_SECRET": "<labby_google_client_secret>",
"LABBY_PUBLIC_URL": "https://...",
"LABBY_GOOGLE_CLIENT_ID": "<labby_google_client_id>",
"LABBY_AUTHELIA_ISSUER_URL": "https://..."
}
}
}
}{
"servers": {
"dinglebear-labby": {
"command": "npx",
"args": [
"-y",
"@dinglebear/labby@latest"
],
"env": {
"LABBY_MCP_HTTP_TOKEN": "${input:labby_mcp_http_token}",
"LABBY_SERVER_URL": "${input:labby_server_url}",
"LABBY_GOOGLE_CLIENT_SECRET": "${input:labby_google_client_secret}",
"LABBY_PUBLIC_URL": "${input:labby_public_url}",
"LABBY_GOOGLE_CLIENT_ID": "${input:labby_google_client_id}",
"LABBY_AUTHELIA_ISSUER_URL": "${input:labby_authelia_issuer_url}"
}
}
},
"inputs": [
{
"id": "labby_mcp_http_token",
"type": "promptString",
"description": "Labby mcp http token",
"password": true
},
{
"id": "labby_server_url",
"type": "promptString",
"description": "Labby server url",
"password": true
},
{
"id": "labby_google_client_secret",
"type": "promptString",
"description": "Labby google client secret",
"password": true
},
{
"id": "labby_public_url",
"type": "promptString",
"description": "Labby public url",
"password": true
},
{
"id": "labby_google_client_id",
"type": "promptString",
"description": "Labby google client id",
"password": true
},
{
"id": "labby_authelia_issuer_url",
"type": "promptString",
"description": "Labby authelia issuer url",
"password": true
}
]
}{
"mcpServers": {
"dinglebear-labby": {
"command": "npx",
"args": [
"-y",
"@dinglebear/labby@latest"
],
"env": {
"LABBY_MCP_HTTP_TOKEN": "<labby_mcp_http_token>",
"LABBY_SERVER_URL": "https://...",
"LABBY_GOOGLE_CLIENT_SECRET": "<labby_google_client_secret>",
"LABBY_PUBLIC_URL": "https://...",
"LABBY_GOOGLE_CLIENT_ID": "<labby_google_client_id>",
"LABBY_AUTHELIA_ISSUER_URL": "https://..."
}
}
}
}file .mcp.json (in your project root)file claude_desktop_config.jsonfile ~/.cursor/mcp.jsonfile .vscode/mcp.jsonfile ~/.codeium/windsurf/mcp_config.jsoninstall npx -y @dinglebear/labbyversion 1.20.1
What it does
Labby is a Rust MCP gateway that connects upstream MCP servers (HTTP and stdio) and exposes their tools, resources, and prompts over protected routes. It offers authentication (bearer, OAuth, Tailscale), a web UI for operators, CLI tools, HTTP API access, and Code Mode for running JavaScript snippets against the catalog.
- Proxy a single stdio MCP server to loopback or Tailscale Serve with authentication and route-scoped access control.
- Inspect and filter tools, resources, and prompts from multiple upstream MCP servers through a single gateway.
- Author and run reusable JavaScript snippets against the upstream MCP catalog with persisted artifacts.
Before you enable it
An MCP server runs with whatever access you give it. Start with a development account rather than production, and check which tools the server exposes before you let an agent call them unattended.