mcpd is a daemon that manages your MCP servers via declarative configuration, exposing them as clean HTTP endpoints. This bridges the gap between your agents and your infrastructure, handling the messy work of lifecycle management, secret injection, and environment promotion so you don't have to.
βοΈ How it Works
Under the hood, mcpd spawns MCP servers as STDIO subprocesses and proxies requests over HTTP.
π Quick Start
Prerequisites
You need the following installed before running mcpd:
# Initialize a new project and create a new .mcpd.toml file
mcpd init
# Add an MCP server to .mcpd.toml
mcpd add time
# Set the local timezone for the MCP server
mcpd config args set time -- --local-timezone=Europe/London
# Start the daemon in dev mode with debug logging
mcpd daemon --dev --log-level=DEBUG --log-path=$(pwd)/mcpd.log
Now that the daemon is running, let's call the get_current_time tool provided by the time MCP server
# Check the time
curl -s --request POST \
--url http://localhost:8090/api/v1/servers/time/tools/get_current_time \
--header 'Accept: application/json, application/problem+json' \
--header 'Content-Type: application/json' \
--data '{
"timezone": "Europe/Warsaw"
}'
Engineering teams build agents that work locally, then struggle to make them production-ready across environments. mcpd bridges this gap with declarative configuration and secure secrets management.
Declarative & reproducible β .mcpd.toml defines your tool infrastructure
Language-agnostic β Python, JS, Docker containers via unified HTTP API
Dev-to-prod ready β Same config works locally and in containers
ποΈ Built for Dev & Production
Development Workflow
Production Benefit
mcpd daemon runs everything locally
Same daemon runs in containers
.mcpd.toml version-controlled configs
Declarative infrastructure as code
Local secrets in ~/.config/mcpd/
Secure secrets injection via control plane
mcpd config export exports version-control safe snapshot of local configuration
Sanitized secrets config and templates for CI/CD pipelines