Configuration Reference
MCP Director uses a YAML file for configuration.
Configuration Discovery
The application searches for the configuration file in the following order:
- Environment Variable:
MCP_DIRECTOR_CONFIG(full path to the file) - Local Directory:
./config/default.yaml(relative to the current working directory) - Parent Directory:
../../config/default.yaml(useful when running from an app subdirectory) - Home Directory:
~/.mcp-director/config.yaml(global user configuration)
If no configuration file is found, the server will use sensible default settings.
Global Settings
yaml
version: "1.0"
settings:
log_level: info # info, debug, error, warn, trace
namespace_strategy: prefix # prefix or flat
# prefix: Tools will be named "server/tool_name"
# flat: Tools keep their original name (conflicts may occur)
protocol_version: "2025-11-25" # Latest MCP protocol versionHTTP Settings
yaml
settings:
http:
enabled: true
host: "127.0.0.1"
port: 3000
localhost_only: true
allowed_origins:
- "http://localhost:3000"
allowed_methods:
- GET
- POST
- DELETE
- OPTIONS
allowed_headers:
- Authorization
- Content-Type
- Accept
- X-CSRF-Token
rate_limit:
requests_per_minute: 120
max_body_bytes: 1048576STDIO Settings
yaml
settings:
stdio:
enabled: true # Must be true for Claude DesktopWeb UI Settings
yaml
settings:
web:
enabled: true # Serves the web dashboard from the HTTP serverAuthentication
yaml
settings:
auth:
enabled: true
username: admin
password_hash: "$2b$12$..." # Bcrypt hashTIP
Use mcp-director auth enable --reset-password -p "your-password" to set up authentication.
Servers
Define MCP servers to aggregate:
yaml
servers:
filesystem:
transport: subprocess
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/path"]
env:
DEBUG: "true"
remote-api:
transport: http
url: https://api.example.com/sseProjects
Group servers into projects:
yaml
projects:
dev:
servers: [filesystem, github]
overrides:
filesystem:
env:
DEBUG: "true"
args: ["--verbose"]Profiles
Control access and limits for clients:
yaml
profiles:
restricted:
tools_whitelist: ["filesystem/*"]
tools_blacklist: ["filesystem/delete_*"]
log_requests: false
allow_all_servers: false
allowed_projects: ["dev"]
auth:
enabled: true
token: "replace-with-generated-token"
rate_limit:
requests_per_minute: 10
time_restriction:
allowed_days: [1, 2, 3, 4, 5] # Monday-Friday
start_hour: 9
end_hour: 18INFO
Time restrictions use 24-hour local time. allowed_days is 1-7 with Monday=1 and Sunday=7.
Environment Variables
You can use environment variables in the config file:
yaml
servers:
my-server:
env:
API_KEY: ${MY_API_KEY}Disabled Tools
Globally disable specific tools:
yaml
settings:
disabled_tools:
- "filesystem/delete_file"
- "dangerous/tool"