Built by Mozilla AI
π mcpd official docs
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.
Under the hood, mcpd spawns MCP servers as STDIO subprocesses and proxies requests over HTTP.
You need the following installed before running mcpd:
(Works for both macOS and Linux)
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/mcpdPlease read our docs to install via GitHub releases or local Go Binary build.
# 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.logNow 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"
}'API docs will be available at http://localhost:8090/docs.
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
| 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 |
| 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-plugins-sdk-go | β |
| .NET | mcpd-plugins-sdk-dotnet | β |
| Python | mcpd-plugins-sdk-python | β |
If you are developing mcpd, you will need:
- Go (v1.25.6+ recommended)
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 docsmcpd is the "Tooling Layer" of the Mozilla.ai ecosystem. These tools are designed to work together or standalone.
| Layer | Tool | Function |
|---|---|---|
| Compute | llamafile | Local LLM inference server |
| Interface | any-llm | Unified Python library for LLM inference |
| Logic | any-agent | Orchestration and agent loops |
| Tools | mcpd | (You are here) Tool sandbox & router |
| Safety | any-guardrail | Input/Output validation |
Please see our Contributing to mcpd guide for more information.
Licensed under the Apache License 2.0.