mcpd is a tool to declaratively manage Model Context Protocol (MCP) servers, providing a consistent interface to define and run tools across environments, from local development to containerized cloud deployments.
Built by Mozilla AI
π mcpd official docs
Today, mcpd launches MCP servers as subprocesses using STDIO (Standard Input/Output) and acts as an HTTP proxy between agents and the tools they expose. This enables agent-compatible workflows with support for secrets, runtime arguments, and reproducible configurations, no matter where mcpd is running.
We're developing a Kubernetes operator, guided by our internal roadmap, to extend mcpd for deploying and managing MCP servers as long-lived services in production. It will use the same .mcpd.toml configuration and proxy model, making it easier to scale and manage lifecycles without changing the developer experience.
ML teams build agents that work perfectly locally. Operations teams often get handed Python scripts with little context and told "make this production-ready across dev/UAT/prod." The gap between local development and enterprise deployment kills AI initiatives.
mcpd solves this with declarative configuration, secure secrets management, and seamless environment promotion - all while keeping the developer experience simple.
Zero-Config Tool Setup
No need to clone multiple repos or install language-specific dependencies. mcpd add and mcpd daemon handle everything.
Language-Agnostic Tooling
Use MCP servers in Docker containers or written in Python, JavaScript, or TypeScript via a unified HTTP API.
Declarative Configuration
Version-controlled .mcpd.toml files define your agent infrastructure. Reproducible, auditable, CI-friendly.
Enterprise-Ready Secrets
Separate project configuration from runtime variables, and export sanitized secrets templates. No need to commit secrets to Git ever again.
Seamless Local-to-Prod
Same configuration works in development, CI, and cloud environments without modification or risky hand-offs.
| 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 |
- Focus on Developer Experience via
mcpdCLI - Declarative configuration (
.mcpd.toml) to define required servers/tools - Run and manage language-agnostic MCP servers
- Secure execution context for secrets and runtime args
- Smooth dev-to-prod transition via the
mcpddaemon - Rich CLI and SDK tooling, see supported languages below:
You need the following installed before running mcpd:
If you are developing mcpd, you will also need:
- Go (v1.25.1+ recommended)
Add the Mozilla.ai tap:
brew tap mozilla-ai/tapThen install mcpd:
brew install mcpdOr install directly from the cask:
brew install --cask mozilla-ai/tap/mcpdOfficial releases can be found on mcpd's GitHub releases page.
The following is an example of manually downloading and installing mcpd using curl and jq by running install_mcpd:
function install_mcpd() {
command -v curl >/dev/null || { echo "curl not found"; return 1; }
command -v jq >/dev/null || { echo "jq not found"; return 1; }
latest_version=$(curl -s https://api.github.com/repos/mozilla-ai/mcpd/releases/latest | jq -r .tag_name)
os=$(uname)
arch=$(uname -m)
zip_name="mcpd_${os}_${arch}.tar.gz"
url="https://github.com/mozilla-ai/mcpd/releases/download/${latest_version}/${zip_name}"
echo "Downloading: $url"
curl -sSL "$url" -o "$zip_name" || { echo "Download failed"; return 1; }
echo "Extracting: $zip_name"
tar -xzf "$zip_name" mcpd || { echo "Extraction failed"; return 1; }
echo "Installing to /usr/local/bin"
sudo mv mcpd /usr/local/bin/mcpd && sudo chmod +x /usr/local/bin/mcpd || { echo "Install failed"; return 1; }
rm -f "$zip_name"
echo "mcpd installed successfully"
}# Clone and build
git clone [email protected]:mozilla-ai/mcpd.git
cd mcpd
make build
sudo make install # Install mcpd 'globally' to /usr/local/bin# Initialize a new project
mcpd init
# Add an MCP server
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
# You can tail the log file
tail -f mcpd.logAPI docs will be available at http://localhost:8090/docs.
mcpd is runtime-flexible and infrastructure-agnostic:
- βοΈ Works in any container or host with
uvandnpx - βοΈ Multi-cloud ready (AWS, GCP, Azure, on-prem)
- β»οΈ Low resource overhead via efficient server management
| Language | Repository | Status |
|---|---|---|
| Python | mcpd-sdk-python | β |
| JavaScript | mcpd-sdk-javascript | β |
Plugin SDKs are built using the mcpd plugin Protocol Buffers specification.
| Language | Repository | Status |
|---|---|---|
| Go | mcpd-plugin-sdk-go | β |
| .NET | mcpd-plugin-sdk-dotnet | β |
More on plugins soon!
Build local code:
make buildRun tests:
make testValidate Mozilla AI registry (when modifying registry files):
make validate-registryRun the local documentation site (requires uv), dynamically generates command line documentation:
make docsPlease see our Contributing to mcpd guide for more information.
Licensed under the Apache License 2.0.