Skip to content

Config Schema

Complete reference for the muxed.config.json configuration file.

type MuxedConfig = {
mcpServers: Record<string, ServerConfig>;
daemon?: DaemonConfig;
mergeClaudeConfig?: boolean;
};
FieldTypeRequiredDescription
mcpServersRecord<string, ServerConfig>yesObject where keys are server names and values are server configs
daemonDaemonConfignoDaemon settings
mergeClaudeConfigbooleannoWhen true, auto-merges servers from Claude Desktop config

A union of StdioServerConfig | HttpServerConfig. Each server entry is either a local stdio process or a remote HTTP server.

For local MCP servers started as child processes.

FieldTypeRequiredDescription
commandstringyesCommand to run (e.g., "npx")
argsstring[]noCommand arguments
envRecord<string, string>noEnvironment variables
cwdstringnoWorking directory

For remote MCP servers over HTTP.

FieldTypeRequiredDescription
urlstringyesServer URL (e.g., "https://mcp.example.com/mcp")
transport"streamable-http" | "sse"noTransport type. Default: "streamable-http"
headersRecord<string, string>noCustom HTTP headers (e.g., auth tokens)
sessionIdstringnoExisting session ID for reconnection
reconnectionReconnectionConfignoReconnection behavior
authOAuthConfignoOAuth authentication
FieldTypeDefaultDescription
maxDelaynumberMaximum delay between reconnection attempts (ms)
initialDelaynumberInitial delay before first retry (ms)
growFactornumberMultiplier for exponential backoff
maxRetriesnumberMaximum number of reconnection attempts

OAuthConfig is a union of ClientCredentialsAuth | AuthorizationCodeAuth.

FieldTypeRequiredDescription
type"client_credentials"yesOAuth flow type
clientIdstringyesOAuth client ID
clientSecretstringyesOAuth client secret
scopestringnoOAuth scope
FieldTypeRequiredDescription
type"authorization_code"yesOAuth flow type
clientIdstringnoOAuth client ID
clientSecretstringnoOAuth client secret
scopestringnoOAuth scope
callbackPortnumbernoPort for OAuth callback (0-65535)
FieldTypeDefaultDescription
idleTimeoutnumber300000 (5 min)Daemon shuts down after this many ms idle
connectTimeoutnumber30000 (30s)Timeout for connecting to MCP servers
requestTimeoutnumber60000 (60s)Default timeout for tool calls
healthCheckIntervalnumber30000 (30s)Periodic health check ping interval
maxRestartAttemptsnumber-1 (unlimited)Max restart attempts for crashed servers
maxTotalTimeoutnumber300000 (5 min)Max total wait for blocking calls with progress
taskExpiryTimeoutnumber3600000 (1 hr)Clean up stale task references after this
logLevel"debug" | "info" | "warn" | "error""info"Logging level
shutdownTimeoutnumber10000 (10s)Max wait for in-flight requests during shutdown
http.enabledbooleanfalseEnable HTTP JSON-RPC listener
http.portnumber3100HTTP listener port
http.hoststring"127.0.0.1"HTTP listener bind address

muxed resolves configuration in the following order:

  1. Explicit path via --config <path>
  2. muxed.config.json in the current working directory
  3. ~/.config/muxed/config.json (global)
  4. Empty fallback (no servers configured)

Global config is merged as a base — project-level config takes precedence.

When set to true, muxed reads Claude Desktop’s config and merges its mcpServers as a base. Servers defined in your muxed config take precedence on name conflicts.

Claude Desktop config location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"]
}
}
}
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"],
"env": { "NODE_ENV": "production" },
"cwd": "/home/user"
},
"remote-api": {
"url": "https://mcp.example.com/mcp",
"transport": "streamable-http",
"headers": { "Authorization": "Bearer token123" },
"sessionId": "existing-session",
"reconnection": {
"maxDelay": 30000,
"initialDelay": 1000,
"growFactor": 1.5,
"maxRetries": 5
},
"auth": {
"type": "client_credentials",
"clientId": "my-client",
"clientSecret": "my-secret",
"scope": "read write"
}
}
},
"daemon": {
"idleTimeout": 600000,
"connectTimeout": 30000,
"requestTimeout": 120000,
"healthCheckInterval": 30000,
"maxRestartAttempts": 10,
"maxTotalTimeout": 300000,
"taskExpiryTimeout": 3600000,
"logLevel": "debug",
"shutdownTimeout": 15000,
"http": {
"enabled": true,
"port": 3100,
"host": "127.0.0.1"
}
},
"mergeClaudeConfig": true
}