A Model Context Protocol (MCP) server for Massdriver, providing AI assistants with tools to manage your infrastructure platform — projects, environments, deployments, policies, and more.
This server is published to the official MCP Registry as cloud.massdriver/mcp-server — MCP clients with registry support can discover and install it by that name.
To install manually, pick whichever suits your setup:
Download a release binary — grab the archive for your platform (Linux, macOS, or Windows; amd64 and arm64) from GitHub Releases and put mcp-server on your PATH.
Go install (requires Go 1.25+):
go install github.com/massdriver-cloud/mcp-server@latestDocker:
docker pull massdrivercloud/mcp-serverBuild from source:
git clone https://github.com/massdriver-cloud/mcp-server.git
cd mcp-server
make build # outputs ./bin/mcp-serverYou'll need a Massdriver API key and your organization ID — see the Massdriver docs for creating API credentials.
The server reads configuration from environment variables, or from a profile in ~/.config/massdriver/config.yaml:
export MASSDRIVER_API_KEY="your-api-key"
export MASSDRIVER_ORGANIZATION_ID="your-org-id"
# Optional:
export MASSDRIVER_URL="https://api.massdriver.cloud" # set this if you run a self-hosted Massdriver instance
export MASSDRIVER_PROFILE="default" # named profile in ~/.config/massdriver/config.yamlBy default the server speaks MCP over stdio (for local tool integrations like
Claude Desktop). To serve the Streamable HTTP transport instead, pass -http
(or set MASSDRIVER_MCP_HTTP_ADDR):
./bin/mcp-server -http 127.0.0.1:8080The HTTP endpoint is stateless and returns application/json, so a single tool
call is a plain POST (no session handshake required):
curl -s 127.0.0.1:8080 \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_viewer","arguments":{}}}'The HTTP endpoint is unauthenticated and exposes infrastructure-mutating tools. Bind it to localhost or place it behind an authenticating proxy.
The stdio transport needs an interactive stdin, so pass -i:
docker run --rm -i \
-e MASSDRIVER_API_KEY \
-e MASSDRIVER_ORGANIZATION_ID \
massdrivercloud/mcp-serverOn a self-hosted Massdriver instance, also pass -e MASSDRIVER_URL.
Using a profile?
MASSDRIVER_PROFILEreads credentials from~/.config/massdriver/config.yaml, which doesn't exist inside the container. Either pass the credentials as environment variables as shown above, or mount your config directory and pointXDG_CONFIG_HOMEat it:docker run --rm -i \ -e MASSDRIVER_PROFILE \ -e XDG_CONFIG_HOME=/config \ -v ~/.config/massdriver:/config/massdriver:ro \ massdrivercloud/mcp-server
claude mcp add massdriver \
--env MASSDRIVER_API_KEY=your-api-key \
--env MASSDRIVER_ORGANIZATION_ID=your-org-id \
-- /path/to/mcp-serverAdd to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"massdriver": {
"command": "/path/to/mcp-server",
"env": {
"MASSDRIVER_API_KEY": "your-api-key",
"MASSDRIVER_ORGANIZATION_ID": "your-org-id"
}
}
}
}The server uses stdio transport, compatible with any MCP client.
See MCP_README.md for the full tool reference, including per-tool descriptions, input conventions, pagination, and behavioral annotations.
list_projects get_project create_project clone_project update_project delete_project
list_environments get_environment create_environment update_environment delete_environment set_environment_default remove_environment_default compare_environments
list_instances get_instance update_instance set_instance_secret remove_instance_secret set_remote_reference remove_remote_reference list_alarms
list_deployments get_deployment get_deployment_logs create_deployment propose_deployment approve_deployment reject_deployment abort_deployment plan_deployment rollback_deployment compare_deployments
list_components get_component add_component update_component remove_component link_components unlink_components
get_bundle
list_resources get_resource create_resource update_resource delete_resource export_resource create_resource_grant delete_resource_grant list_resource_grants
get_organization create_custom_attribute update_custom_attribute delete_custom_attribute
get_viewer
get_audit_log list_audit_logs list_audit_log_event_types
list_groups get_group create_group update_group delete_group add_group_user remove_group_user revoke_group_invitation add_group_service_account remove_group_service_account
list_service_accounts get_service_account create_service_account update_service_account delete_service_account
list_oci_repos get_oci_repo create_oci_repo update_oci_repo delete_oci_repo create_oci_repo_grant delete_oci_repo_grant list_oci_repo_grants
get_policy create_policy update_policy delete_policy list_policy_actions list_policy_entities evaluate_policy evaluate_policies_batch explain_policy get_policy_attribute_schema list_policy_attribute_values
get_server
get_url
Development, architecture, and release documentation lives in CONTRIBUTING.md.