A Model Context Protocol (MCP) server for DeployHQ that enables AI assistants like Claude Desktop and Claude Code to interact with your DeployHQ deployments.
- Full DeployHQ API Integration: Access projects, servers, and deployments
- Easy Installation: Use directly with
npx- no installation required - Works with Claude Desktop & Claude Code: stdio transport for both MCP clients
- Secure: Credentials via environment variables, never stored
- Type-Safe: Built with TypeScript and Zod validation
- Multiple Transports: stdio (primary), SSE, and HTTP (optional for hosting)
- Production-Ready: Comprehensive error handling and logging
The 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 all projects in your DeployHQ account.
Returns: Array of projects with repository information and deployment status.
Get detailed information about a specific project.
Parameters:
permalink(string): Project permalink or identifier
List all servers configured for a project.
Parameters:
project(string): Project permalink
List deployments for a project with pagination support.
Parameters:
project(string): Project permalinkpage(number, optional): Page number for paginationserver_uuid(string, optional): Filter by server UUID
Get detailed information about a specific deployment.
Parameters:
project(string): Project permalinkuuid(string): Deployment UUID
Get the deployment log for a specific deployment. Useful for debugging failed deployments.
Parameters:
project(string): Project permalinkuuid(string): Deployment UUID
Returns: Complete deployment log as text
Create 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 start
The same configuration works for both clients. Copy from docs/claude-config.json and add your credentials.
For Claude Desktop:
Edit your config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Then 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:
- "List all my DeployHQ projects"
- "Show me the servers for project X"
- "Get the latest deployment status for project Y"
- "Create a new deployment for project Z"
- "Show me the deployment log for the latest deployment"
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, orDEBUG(default:INFO)NODE_ENV: Environment mode -productionordevelopment
Control verbosity with the LOG_LEVEL environment variable:
- ERROR: Only show errors
- INFO: Show info and errors (default)
- DEBUG: Show all logs including detailed API calls
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:
- Check that all required environment variables are set
- Verify Node.js version is 18 or higher:
node --version - Check logs in Claude Desktop/Code for error messages
- Try setting
LOG_LEVEL=DEBUGfor more details
Problem: "Authentication failed" or 401/403 errors
Solutions:
- Verify your email and API key are correct
- Check that your API key hasn't expired
- Ensure your account has API access enabled
- Try logging into DeployHQ web interface with same credentials
Problem: "Project not found" or 404 errors
Solutions:
- Use
list_projectsto see exact permalink format - Project permalinks are case-sensitive
- Check that you have access to the project in DeployHQ
Problem: Deployment created but fails immediately
Solutions:
- Use
get_deployment_logto see detailed error logs - Verify server UUID is correct with
list_servers - Check that start and end revisions exist in repository
- Ensure server has correct deploy keys configured
Problem: "Request timeout" errors
Solutions:
- Check your internet connection
- Verify DeployHQ API is accessible:
curl https://YOUR_ACCOUNT.deployhq.com - Large deployment lists may take time - use pagination
- Try again in a moment if DeployHQ is experiencing issues
Problem: Not seeing any log output
Solutions:
- Logs go to stderr, not stdout (for stdio transport)
- Check Claude Desktop/Code logs location:
- macOS:
~/Library/Logs/Claude/ - Windows:
%APPDATA%\Claude\logs\
- macOS:
- Set
LOG_LEVEL=DEBUGfor verbose output - For hosted mode, check Digital Ocean logs
- Username: Your DeployHQ login email
- Password: Your DeployHQ password
- Account: Your DeployHQ account name (visible in the URL:
https://ACCOUNT.deployhq.com)
βββββββββββββββββββ βββββββββββββββ
β Claude Desktop β stdio/JSON-RPC β DeployHQ β
β or Claude Code βββββββββββββββββββββΊβ API β
β β (via npx) β β
β Environment β β β
β Variables ββββββΌββββββββββββββββββββΊβ Basic Auth β
βββββββββββββββββββ βββββββββββββββ
- Claude Desktop/Code: MCP clients that spawn the server via
npx - MCP Server: Reads credentials from environment variables, communicates via stdio
- DeployHQ API: REST API with HTTP Basic Authentication
- Node.js 18+ (Node 20+ recommended)
- DeployHQ account with API access
Note: 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-servernpm installnpm 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 UInpm 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.jsThe 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:
- β Tool Schema Validation - All 7 MCP tool schemas with valid/invalid inputs
- β API Client Methods - All DeployHQ API methods with mocked responses
- β Error Handling - Authentication, validation, and network errors
- β MCP Server Factory - Server creation and configuration
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 debuggingTest Stats:
- 50+ tests across 3 test suites
- Covers tools, api-client, and mcp-server modules
- Uses mocked fetch for isolated unit testing
- 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
- Minimal Permissions: Use a dedicated DeployHQ user with minimum required permissions
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:
- Go to Digital Ocean Apps
- Click "Create App"
- Select your GitHub repository
- Choose the branch (main)
-
Configure the app:
- Digital Ocean will detect the Dockerfile automatically
- Or use the
.do/app.yamlconfiguration
-
Set environment variables:
- Go to App Settings β Environment Variables
- Add the following as encrypted variables:
DEPLOYHQ_EMAILDEPLOYHQ_API_KEYDEPLOYHQ_ACCOUNT
- Add these as regular variables:
NODE_ENV=productionPORT=8080LOG_LEVEL=info
-
Deploy:
- Click "Next" and "Create Resources"
- Wait for deployment to complete
-
Configure custom domain (optional):
- Go to Settings β Domains
- Add
mcp.deployhq.com - Update your DNS records as instructed
-
Install 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:- Edit the
github.repofield with your repository - Review and adjust instance size if needed
- Edit the
-
Create 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
- Never commit credentials: Use
.envfor local development (excluded by.gitignore) - Use Digital Ocean secrets: Store credentials as encrypted environment variables
- HTTPS only: Digital Ocean provides automatic HTTPS
- Minimal permissions: Use a dedicated DeployHQ user with minimum required permissions
The hosted server includes a health check endpoint at /health:
curl https://mcp.deployhq.com/healthView logs in Digital Ocean:
- Dashboard: Go to your app β Runtime Logs
- CLI:
doctl apps logs <APP_ID> --follow
Digital Ocean will alert you on:
- Deployment failures
- Domain configuration issues
- Health check failures
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:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
See RELEASING.md for instructions on creating releases and publishing to npm.
MIT License - see LICENSE file for details
- DeployHQ API Documentation: https://www.deployhq.com/support/api
- MCP Documentation: https://modelcontextprotocol.io
- Issues: https://github.com/deployhq/deployhq-mcp-server/issues