
Security News
Ruby's Bundler 4.0.18 Extends Cooldown to bundle lock and bundle cache
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.
deployhq-mcp-server
Advanced tools
A Model Context Protocol (MCP) server for DeployHQ that enables AI assistants like Claude Desktop and Claude Code to interact with your DeployHQ deployments.
npx - no installation requiredThe MCP server provides 7 tools for AI assistants:
| Tool | Description | Parameters |
|---|---|---|
list_projects | List all projects | None |
get_project | Get project details | permalink |
list_servers | List project servers | project |
list_deployments | List deployments with pagination | project, page?, server_uuid? |
get_deployment | Get deployment details | project, uuid |
get_deployment_log | Get deployment log output | project, uuid |
create_deployment | Create new deployment | project, parent_identifier, start_revision, end_revision, + optional params |
list_projectsList all projects in your DeployHQ account.
Returns: Array of projects with repository information and deployment status.
get_projectGet detailed information about a specific project.
Parameters:
permalink (string): Project permalink or identifierlist_serversList all servers configured for a project.
Parameters:
project (string): Project permalinklist_deploymentsList deployments for a project with pagination support.
Parameters:
project (string): Project permalinkpage (number, optional): Page number for paginationserver_uuid (string, optional): Filter by server UUIDget_deploymentGet detailed information about a specific deployment.
Parameters:
project (string): Project permalinkuuid (string): Deployment UUIDget_deployment_logGet the deployment log for a specific deployment. Useful for debugging failed deployments.
Parameters:
project (string): Project permalinkuuid (string): Deployment UUIDReturns: Complete deployment log as text
create_deploymentCreate a new deployment for a project.
Parameters:
project (string): Project permalinkparent_identifier (string): Server or server group UUIDstart_revision (string): Starting commit hashend_revision (string): Ending commit hashbranch (string, optional): Branch to deploy frommode (string, optional): "queue" or "preview"copy_config_files (boolean, optional): Copy config filesrun_build_commands (boolean, optional): Run build commandsuse_build_cache (boolean, optional): Use build cacheuse_latest (string, optional): Use latest deployed commit as startThe fastest way to install for Claude Code:
claude mcp add --transport stdio deployhq --env DEPLOYHQ_EMAIL=your-email@example.com --env DEPLOYHQ_API_KEY=your-api-key --env DEPLOYHQ_ACCOUNT=your-account -- npx -y deployhq-mcp-server
Replace your-email@example.com, your-api-key, and your-account with your actual DeployHQ credentials.
The same configuration works for both clients. Copy from docs/claude-config.json and add your credentials.
For Claude Desktop:
Edit your config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonThen restart Claude Desktop.
For Claude Code:
Add to your .claude.json file in your project directory.
Configuration:
{
"mcpServers": {
"deployhq": {
"command": "npx",
"args": ["-y", "deployhq-mcp-server"],
"env": {
"DEPLOYHQ_EMAIL": "your-email@example.com",
"DEPLOYHQ_API_KEY": "your-password",
"DEPLOYHQ_ACCOUNT": "your-account-name"
// Optional: "LOG_LEVEL": "INFO" (ERROR, INFO, or DEBUG)
}
}
}
}
Note: Only the 3 DeployHQ credentials are required. LOG_LEVEL is optional and defaults to INFO.
Once configured, you can ask Claude to interact with DeployHQ:
User: What's the status of my latest deployment for my-app?
Claude: [Uses list_deployments → get_deployment → shows status]
User: Why did the last deployment fail for my-app?
Claude: [Uses list_deployments → get_deployment_log → analyzes log]
User: Deploy the latest changes to production for my-app
Claude: [Uses list_servers → list_deployments → create_deployment with use_latest]
User: I want to deploy my-app to production with the latest changes
Claude will:
1. Use list_projects to find "my-app"
2. Use list_servers to find production server UUID
3. Use list_deployments with use_latest to get last revision
4. Use create_deployment to queue deployment
5. Use get_deployment to show status
6. Use get_deployment_log if anything fails
DEPLOYHQ_EMAIL: Your DeployHQ login emailDEPLOYHQ_API_KEY: Your DeployHQ password/API keyDEPLOYHQ_ACCOUNT: Your DeployHQ account name (from URL: https://ACCOUNT.deployhq.com)LOG_LEVEL: Controls log verbosity - ERROR, INFO, or DEBUG (default: INFO)NODE_ENV: Environment mode - production or developmentControl verbosity with the LOG_LEVEL environment variable:
Example:
{
"mcpServers": {
"deployhq": {
"command": "npx",
"args": ["-y", "deployhq-mcp-server"],
"env": {
"DEPLOYHQ_EMAIL": "your-email@example.com",
"DEPLOYHQ_API_KEY": "your-password",
"DEPLOYHQ_ACCOUNT": "your-account-name",
"LOG_LEVEL": "DEBUG"
}
}
}
}
Problem: Server exits immediately after starting
Solutions:
node --versionLOG_LEVEL=DEBUG for more detailsProblem: "Authentication failed" or 401/403 errors
Solutions:
Problem: "Project not found" or 404 errors
Solutions:
list_projects to see exact permalink formatProblem: "Server is running in read-only mode" error when trying to create deployments
Solution:
DEPLOYHQ_READ_ONLY=false in your environment variables--read-only=false CLI flagProblem: Deployment created but fails immediately
Solutions:
get_deployment_log to see detailed error logslist_serversProblem: "Request timeout" errors
Solutions:
curl https://YOUR_ACCOUNT.deployhq.comProblem: Not seeing any log output
Solutions:
~/Library/Logs/Claude/%APPDATA%\Claude\logs\LOG_LEVEL=DEBUG for verbose outputhttps://ACCOUNT.deployhq.com)┌─────────────────┐ ┌─────────────┐
│ Claude Desktop │ stdio/JSON-RPC │ DeployHQ │
│ or Claude Code │◄──────────────────►│ API │
│ │ (via npx) │ │
│ Environment │ │ │
│ Variables ─────┼───────────────────►│ Basic Auth │
└─────────────────┘ └─────────────┘
npxNote: The server uses node-fetch for HTTP requests. Node 18+ is required for development tools (ESLint, Vitest).
git clone https://github.com/your-username/deployhq-mcp-server.git
cd deployhq-mcp-server
npm install
npm test # Run tests once
npm run test:watch # Run tests in watch mode
npm run test:coverage # Run tests with coverage report
npm run test:ui # Run tests with UI
npm run build
# Build first
npm run build
# Test with environment variables
DEPLOYHQ_EMAIL="your-email@example.com" \
DEPLOYHQ_API_KEY="your-api-key" \
DEPLOYHQ_ACCOUNT="your-account" \
node dist/stdio.js
The server will start in stdio mode and wait for JSON-RPC messages on stdin.
Configure your local .claude.json to use the built version:
{
"mcpServers": {
"deployhq": {
"command": "node",
"args": ["/path/to/deployhq-mcp-server/dist/stdio.js"],
"env": {
"DEPLOYHQ_EMAIL": "your-email@example.com",
"DEPLOYHQ_API_KEY": "your-password",
"DEPLOYHQ_ACCOUNT": "your-account-name"
}
}
}
}
The project includes a comprehensive test suite using Vitest:
Test Coverage:
Running Tests:
npm test # Run all tests
npm run test:watch # Watch mode for development
npm run test:coverage # Generate coverage report
npm run test:ui # Interactive UI for debugging
Test Stats:
By default, the MCP server allows all operations, including creating deployments. This is the recommended configuration for most users.
For users who want additional protection against accidental deployments, the server includes an optional read-only mode that can be enabled to block deployment creation.
Default Behavior (No Configuration Needed):
When you might want to enable read-only mode:
Important: Read-only mode is completely optional. The server works fully without it.
How to enable read-only mode:
Via environment variable:
{
"mcpServers": {
"deployhq": {
"command": "npx",
"args": ["-y", "deployhq-mcp-server"],
"env": {
"DEPLOYHQ_EMAIL": "your-email@example.com",
"DEPLOYHQ_API_KEY": "your-api-key",
"DEPLOYHQ_ACCOUNT": "your-account",
"DEPLOYHQ_READ_ONLY": "true"
}
}
}
}
Via CLI flag:
{
"mcpServers": {
"deployhq": {
"command": "npx",
"args": [
"-y",
"deployhq-mcp-server",
"--read-only"
],
"env": {
"DEPLOYHQ_EMAIL": "your-email@example.com",
"DEPLOYHQ_API_KEY": "your-api-key",
"DEPLOYHQ_ACCOUNT": "your-account"
}
}
}
}
Configuration precedence:
--read-only (highest priority)DEPLOYHQ_READ_ONLYfalse (deployments allowed)Deployment Logs May Contain Secrets: Deployment logs can include environment variables, API keys, and other sensitive information. Exercise caution when using tools that retrieve logs, especially with third-party AI services.
Use Least-Privilege API Keys: Create dedicated API keys with minimum required permissions for MCP access. Consider separate keys for read-only vs. read-write operations.
Audit MCP Activity: Monitor MCP usage, especially in production environments. Review logs regularly for unexpected behavior.
Environment Variables: Credentials are never stored, only passed via environment variables
HTTPS: When using npx, credentials stay local to your machine
No Telemetry: No data is sent anywhere except directly to DeployHQ API
The server can also be deployed as a hosted service with SSE/HTTP transports. This is useful for web integrations or shared team access.
Prepare your repository:
git add .
git commit -m "Initial commit"
git push origin main
Create a new app:
Configure the app:
.do/app.yaml configurationSet environment variables:
DEPLOYHQ_EMAILDEPLOYHQ_API_KEYDEPLOYHQ_ACCOUNTNODE_ENV=productionPORT=8080LOG_LEVEL=infoDeploy:
Configure custom domain (optional):
mcp.deployhq.comInstall doctl:
# macOS
brew install doctl
# Linux
cd ~
wget https://github.com/digitalocean/doctl/releases/download/v1.104.0/doctl-1.104.0-linux-amd64.tar.gz
tar xf doctl-1.104.0-linux-amd64.tar.gz
sudo mv doctl /usr/local/bin
Authenticate:
doctl auth init
Update .do/app.yaml:
github.repo field with your repositoryCreate the app:
doctl apps create --spec .do/app.yaml
Set environment secrets:
# Get your app ID
doctl apps list
# Update environment variables (replace APP_ID)
doctl apps update APP_ID --spec .do/app.yaml
View logs:
doctl apps logs APP_ID --follow
.env for local development (excluded by .gitignore)The hosted server includes a health check endpoint at /health:
curl https://mcp.deployhq.com/health
View logs in Digital Ocean:
doctl apps logs <APP_ID> --followDigital Ocean will alert you on:
Test the SSE endpoint:
curl -N http://localhost:8080/sse \
-H "X-DeployHQ-Email: your-email@example.com" \
-H "X-DeployHQ-API-Key: your-api-key" \
-H "X-DeployHQ-Account: your-account"
Test the HTTP transport endpoint:
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "X-DeployHQ-Email: your-email@example.com" \
-H "X-DeployHQ-API-Key: your-api-key" \
-H "X-DeployHQ-Account: your-account" \
-d '{
"jsonrpc": "2.0",
"method": "tools/list",
"params": {},
"id": 1
}'
See the hosted deployment documentation for full testing examples.
deployhq-mcp-server/
├── src/
│ ├── stdio.ts # stdio transport entrypoint (for Claude Desktop/Code)
│ ├── index.ts # Express server (for hosted deployment)
│ ├── mcp-server.ts # Core MCP server factory (shared)
│ ├── tools.ts # Tool definitions and schemas (shared)
│ ├── api-client.ts # DeployHQ API client (shared)
│ ├── transports/ # SSE/HTTP handlers (for hosted)
│ └── utils/ # Logging and utilities
├── docs/
│ ├── claude-config.json # Universal config template (Desktop & Code)
│ ├── USER_GUIDE.md # User documentation
│ ├── DEPLOYMENT.md # Hosted deployment guide
│ └── HTTP_TRANSPORT.md # HTTP transport documentation
├── .do/
│ └── app.yaml # Digital Ocean configuration (optional)
├── Dockerfile # Container configuration (optional)
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── STDIO_MIGRATION.md # stdio migration documentation
└── README.md # This file
Contributions are welcome! Please:
See RELEASING.md for instructions on creating releases and publishing to npm.
MIT License - see LICENSE file for details
FAQs
Model Context Protocol (MCP) server for DeployHQ API integration
We found that deployhq-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.