MCP Config Reference
Configuration structure
mcp_servers:
<name>:
command: string
args: [string]
env:
<key>: <value>
tool_filter:
include: [string]
exclude: [string]
utility_tool_policy: allow | hide | block
Transport types
stdio (default)
mcp_servers:
sqlite:
command: uvx
args: ["mcp-server-sqlite", "--db-path", "/path/to/db.sqlite"]
http
mcp_servers:
remote:
url: "https://api.example.com/mcp"
headers:
Authorization: "Bearer ${API_KEY}"
Tool filtering
Include only specific tools
mcp_servers:
github:
tool_filter:
include:
- "search_repositories"
- "get_file_contents"
Exclude specific tools
mcp_servers:
github:
tool_filter:
exclude:
- "create_issue"
- "create_pull_request"
Combine include and exclude
Include takes precedence:
mcp_servers:
github:
tool_filter:
include:
- "search_repositories"
- "get_file_contents"
exclude:
- "search_repositories" # This wins — search_repositories is excluded
Utility tool policy
Controls how low-utility tools (like echo, ping) are handled:
| Policy | Behavior |
|---|---|
allow | Show all tools |
hide | Hide utility tools from the tool list (default) |
block | Completely block utility tools |
mcp_servers:
my-server:
utility_tool_policy: hide
Environment variable substitution
Use ${VAR} syntax for secrets:
mcp_servers:
github:
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN}"
Timeout configuration
mcp_servers:
slow-server:
timeout: 30 # Seconds
Retry configuration
mcp_servers:
unreliable:
retries: 3
retry_delay: 1.0 # Seconds
Global MCP settings
mcp:
enabled: true
max_servers: 20
default_timeout: 10
default_retries: 2
Example: Multiple servers
mcp_servers:
github:
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN}"
tool_filter:
include:
- "search_repositories"
- "get_file_contents"
- "list_issues"
sqlite:
command: uvx
args: ["mcp-server-sqlite", "--db-path", "~/.monoclaw/data.db"]
fetch:
command: uvx
args: ["mcp-server-fetch"]
utility_tool_policy: hide