Version 4.43 or later needs to be installed to add the server automatically
Use cases
About
Heroku Platform MCP Server using the Heroku CLI.
| Attribute | Details |
|---|---|
| Docker Image | mcp/heroku |
| Author | heroku |
| Repository | https://github.com/heroku/heroku-mcp-server |
| Dockerfile | https://github.com/heroku/heroku-mcp-server/blob/refs/pull/24/merge/Dockerfile |
| Docker Image built by | Docker Inc. |
| Docker Scout Health Score | |
| Verify Signature | COSIGN_REPOSITORY=mcp/signatures cosign verify mcp/heroku --key https://raw.githubusercontent.com/docker/keyring/refs/heads/main/public/mcp/latest.pub |
| Licence | Apache License 2.0 |
| Tools provided by this Server | Short Description |
|---|---|
create_addon | Create add-on: specify service, plan, custom names |
create_app | Create app: custom name, region (US/EU), team, private space |
deploy_one_off_dyno | Run code/commands in Heroku one-off dyno with network and filesystem access. |
deploy_to_heroku | Use for all deployments. |
get_addon_info | Get add-on details: plan, state, billing |
get_app_info | Get app details: config, dynos, addons, access, domains |
get_app_logs | App logs: monitor/debug/filter by dyno/process/source |
list_addon_plans | List service plans: features, pricing, availability |
list_addon_services | List available add-on services and features |
list_addons | List add-ons: all apps or specific app, detailed metadata |
list_apps | List Heroku apps: owned, collaborator access, team/space filtering |
list_private_spaces | Lists Heroku Private Spaces with CIDR blocks, regions, compliance and capacity details. |
list_teams | Lists accessible Heroku Teams. |
maintenance_off | Disable maintenance mode and restore normal app operations |
maintenance_on | Enable maintenance mode and redirect traffic for a Heroku app |
pg_backups | Manage backups: schedules, status, verification, recovery |
pg_credentials | Manage access: credentials, permissions, security, monitoring |
pg_info | View database status: config, metrics, resources, health |
pg_kill | Stop processes: stuck queries, blocking transactions, runaway operations |
pg_locks | Analyze locks: blocked queries, deadlocks, concurrency |
pg_maintenance | Track maintenance: windows, schedules, progress, planning |
pg_outliers | Find resource-heavy queries: performance, patterns, optimization |
pg_ps | Monitor active queries: progress, resources, performance |
pg_psql | Execute SQL queries: analyze, debug, modify schema, manage data |
pg_upgrade | Upgrade PostgreSQL: version migration, compatibility, safety |
pipelines_create | Creates new Heroku deployment pipeline with configurable stages, apps, and team settings |
pipelines_info | Displays detailed pipeline configuration, stages, and connected applications |
pipelines_list | Lists accessible Heroku pipelines with ownership and configuration details |
pipelines_promote | Promotes apps between pipeline stages with configurable target applications |
ps_list | List and monitor Heroku app dynos. |
ps_restart | Restart Heroku app processes. |
ps_scale | Scale Heroku app dynos. |
rename_app | Rename app: validate and update app name |
transfer_app | Transfer app ownership to user/team |
create_addonCreate add-on: specify service, plan, custom names
| Parameters | Type | Description |
|---|---|---|
app | string | Target app for add-on. Must have write access. Region/space affects availability |
serviceAndPlan | string | Format: service_slug:plan_slug (e.g., heroku-postgresql:essential-0) |
as | stringoptional | Custom attachment name. Used for config vars prefix. Must be unique in app |
name | stringoptional | Global add-on identifier. Must be unique across all Heroku add-ons |
create_appCreate app: custom name, region (US/EU), team, private space
| Parameters | Type | Description |
|---|---|---|
app | stringoptional | App name. Auto-generated if omitted |
region | stringoptional | Region: us/eu. Default: us. Excludes space param |
space | stringoptional | Private space name. Inherits region. Excludes region param |
team | stringoptional | Team name for ownership |
deploy_one_off_dynoRun code/commands in Heroku one-off dyno with network and filesystem access.
Requirements:
Features:
Usage:
Example package.json:
{
"type": "module",
"dependencies": {
"axios": "^1.6.0"
}
}
| Parameters | Type | Description |
|---|---|---|
command | string | Command to run in dyno. |
name | string | Target Heroku app name. |
env | objectoptional | Dyno environment variables. |
size | stringoptional | Dyno size. |
sources | arrayoptional | Source files to include in dyno. |
timeToLive | numberoptional | Dyno lifetime in seconds. |
deploy_to_herokuUse for all deployments. Deploys new/existing apps, with or without teams/spaces, and env vars to Heroku. Ask for app name if missing. Requires valid app.json via appJson param.
| Parameters | Type | Description |
|---|---|---|
appJson | string | App.json config for deployment. Must follow schema: {"default":{"$schema":"http://json-schema.org/draft-07/schema#","title":"Heroku app.json Schema","description":"app.json is a manifest format for describing web apps. It declares environment variables, add-ons, and other information required to run an app on Heroku. Used for dynamic configurations or converted projects","type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z-\.]+","maxLength":300},"description":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"website":{"$ref":"#/definitions/uriString"},"repository":{"$ref":"#/definitions/uriString"},"logo":{"$ref":"#/definitions/uriString"},"success_url":{"type":"string"},"scripts":{"$ref":"#/definitions/scripts"},"env":{"$ref":"#/definitions/env"},"formation":{"$ref":"#/definitions/formation"},"addons":{"$ref":"#/definitions/addons"},"buildpacks":{"$ref":"#/definitions/buildpacks"},"environments":{"$ref":"#/definitions/environments"},"stack":{"$ref":"#/definitions/stack"},"image":{"type":"string"}},"additionalProperties":false,"definitions":{"uriString":{"type":"string","format":"uri"},"scripts":{"type":"object","properties":{"postdeploy":{"type":"string"},"pr-predestroy":{"type":"string"}},"additionalProperties":false},"env":{"type":"object","patternProperties":{"^[A-Z][A-Z0-9]*$":{"type":"object","properties":{"description":{"type":"string"},"value":{"type":"string"},"required":{"type":"boolean"},"generator":{"type":"string","enum":["secret"]}},"additionalProperties":false}}},"dynoSize":{"type":"string","enum":["free","eco","hobby","basic","standard-1x","standard-2x","performance-m","performance-l","private-s","private-m","private-l","shield-s","shield-m","shield-l"]},"formation":{"type":"object","patternProperties":{"^[a-zA-Z0-9_-]+$":{"type":"object","properties":{"quantity":{"type":"integer","minimum":0},"size":{"$ref":"#/definitions/dynoSize"}},"required":["quantity"],"additionalProperties":false}}},"addons":{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"object","properties":{"plan":{"type":"string"},"as":{"type":"string"},"options":{"type":"object"}},"required":["plan"],"additionalProperties":false}]}},"buildpacks":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false}},"environmentConfig":{"type":"object","properties":{"env":{"type":"object"},"formation":{"type":"object"},"addons":{"type":"array"},"buildpacks":{"type":"array"}}},"environments":{"type":"object","properties":{"test":{"allOf":[{"$ref":"#/definitions/environmentConfig"},{"type":"object","properties":{"scripts":{"type":"object","properties":{"test":{"type":"string"}},"additionalProperties":false}}}]},"review":{"$ref":"#/definitions/environmentConfig"},"production":{"$ref":"#/definitions/environmentConfig"}},"additionalProperties":false},"stack":{"type":"string","enum":["heroku-18","heroku-20","heroku-22","heroku-24"]}}}} |
name | string | App name for deployment. Creates new app if not exists. |
rootUri | string | Workspace root directory path. |
env | objectoptional | Environment variables overriding app.json values |
internalRouting | booleanoptional | Enable internal routing in private spaces. |
spaceId | stringoptional | Private space ID for space deployments. |
tarballUri | stringoptional | URL of deployment tarball. Creates from rootUri if not provided. |
teamId | stringoptional | Team ID for team deployments. |
get_addon_infoGet add-on details: plan, state, billing
| Parameters | Type | Description |
|---|---|---|
addon | string | Add-on identifier: UUID, name (postgresql-curved-12345), or attachment name (DATABASE) |
app | stringoptional | App context for add-on lookup. Required for attachment names. Uses Git remote default |
get_app_infoGet app details: config, dynos, addons, access, domains
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name. Requires access permissions |
json | booleanoptional | JSON output with full metadata. Default: text format |
get_app_logsApp logs: monitor/debug/filter by dyno/process/source
| Parameters | Type | Description |
|---|---|---|
app | string | Heroku app name. Requires: permissions, Cedar-gen |
dynoName | stringoptional | Format: web.1/worker.2. Excludes processType |
processType | stringoptional | web |
source | stringoptional | app=application, heroku=platform. Default: all |
list_addon_plansList service plans: features, pricing, availability
| Parameters | Type | Description |
|---|---|---|
service | string | Service slug (e.g., heroku-postgresql). Get from list_addon_services |
json | booleanoptional | JSON output with pricing, features, space compatibility. Default: text format |
list_addon_servicesList available add-on services and features
| Parameters | Type | Description |
|---|---|---|
json | booleanoptional | JSON output with sharing options and app generation support. Default: basic text |
list_addonsList add-ons: all apps or specific app, detailed metadata
| Parameters | Type | Description |
|---|---|---|
all | booleanoptional | List all add-ons across accessible apps. Overrides app param, shows full status |
app | stringoptional | Filter by app name. Shows add-ons and attachments. Uses Git remote default if omitted |
list_appsList Heroku apps: owned, collaborator access, team/space filtering
| Parameters | Type | Description |
|---|---|---|
all | booleanoptional | Show owned apps and collaborator access. Default: owned only |
personal | booleanoptional | List personal account apps only, ignoring default team |
space | stringoptional | Filter by private space name. Excludes team param |
team | stringoptional | Filter by team name. Excludes space param |
list_private_spacesLists Heroku Private Spaces with CIDR blocks, regions, compliance and capacity details. JSON output supported.
| Parameters | Type | Description |
|---|---|---|
json | booleanoptional | JSON output for detailed space metadata, text output if false/omitted |
list_teamsLists accessible Heroku Teams. Use for: viewing teams, checking membership, getting team metadata, and verifying access. JSON output available.
| Parameters | Type | Description |
|---|---|---|
json | booleanoptional | Output format control - true for detailed JSON with team metadata, false/omitted for simplified text |
maintenance_offDisable maintenance mode and restore normal app operations
| Parameters | Type | Description |
|---|---|---|
app | string | Target Heroku app name |
maintenance_onEnable maintenance mode and redirect traffic for a Heroku app
| Parameters | Type | Description |
|---|---|---|
app | string | Target Heroku app name |
pg_backupsManage backups: schedules, status, verification, recovery
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
pg_credentialsManage access: credentials, permissions, security, monitoring
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
pg_infoView database status: config, metrics, resources, health
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: all databases |
pg_killStop processes: stuck queries, blocking transactions, runaway operations
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
pid | number | Process ID to terminate |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
force | booleanoptional | Force immediate termination |
pg_locksAnalyze locks: blocked queries, deadlocks, concurrency
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
truncate | booleanoptional | Truncate queries to 40 chars |
pg_maintenanceTrack maintenance: windows, schedules, progress, planning
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
pg_outliersFind resource-heavy queries: performance, patterns, optimization
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
num | numberoptional | Number of queries to show. Default: 10 |
reset | booleanoptional | Reset pg_stat_statements stats |
truncate | booleanoptional | Truncate queries to 40 chars |
pg_psMonitor active queries: progress, resources, performance
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
verbose | booleanoptional | Show query plan and memory usage |
pg_psqlExecute SQL queries: analyze, debug, modify schema, manage data
| Parameters | Type | Description |
|---|---|---|
app | string | app to run command against |
command | stringoptional | SQL command. Single line. Ignored if file provided |
credential | stringoptional | credential to use |
database | stringoptional | Database identifier: config var, name, ID, alias. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
file | stringoptional | SQL file path. Ignored if command provided |
pg_upgradeUpgrade PostgreSQL: version migration, compatibility, safety
| Parameters | Type | Description |
|---|---|---|
app | string | Target app name |
confirm | stringoptional | Confirmation for destructive operation |
database | stringoptional | Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL |
version | stringoptional | PostgreSQL version target |
pipelines_createCreates new Heroku deployment pipeline with configurable stages, apps, and team settings
| Parameters | Type | Description |
|---|---|---|
name | string | Pipeline name |
stage | string | Initial pipeline stage |
app | stringoptional | App to add to pipeline |
team | stringoptional | Team owning the pipeline |
pipelines_infoDisplays detailed pipeline configuration, stages, and connected applications
| Parameters | Type | Description |
|---|---|---|
pipeline | string | Target pipeline name |
json | booleanoptional | Enable JSON output |
pipelines_listLists accessible Heroku pipelines with ownership and configuration details
| Parameters | Type | Description |
|---|---|---|
json | booleanoptional | Enable JSON output |
pipelines_promotePromotes apps between pipeline stages with configurable target applications
| Parameters | Type | Description |
|---|---|---|
app | string | Source app for promotion |
to | stringoptional | Target apps for promotion (comma-separated) |
ps_listList and monitor Heroku app dynos. View running dynos, check status/health, monitor process states, verify configurations.
| Parameters | Type | Description |
|---|---|---|
app | string | App name to list processes for |
json | booleanoptional | Output process info in JSON format |
ps_restartRestart Heroku app processes. Restart specific dynos, process types, or all dynos. Reset dyno states selectively.
| Parameters | Type | Description |
|---|---|---|
app | string | App name to restart processes for |
dyno-name | stringoptional | Specific dyno to restart (e.g., web.1). Omit both options to restart all |
process-type | stringoptional | Dyno type to restart (e.g., web). Omit both options to restart all |
ps_scaleScale Heroku app dynos. Adjust quantities, change sizes, view formation details, manage resources.
| Parameters | Type | Description |
|---|---|---|
app | string | App name to scale |
dyno | stringoptional | Dyno type and quantity (e.g., web=3:Standard-2X, worker+1). Omit to show current formation |
rename_appRename app: validate and update app name
| Parameters | Type | Description |
|---|---|---|
app | string | Current app name. Requires access |
newName | string | New unique app name |
transfer_appTransfer app ownership to user/team
| Parameters | Type | Description |
|---|---|---|
app | string | App to transfer. Requires owner/admin access |
recipient | string | Target user email or team name |
{
"mcpServers": {
"heroku": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"HEROKU_API_KEY",
"mcp/heroku"
],
"env": {
"HEROKU_API_KEY": "<YOUR_HEROKU_AUTH_TOKEN>"
}
}
}
}
Manual installation
You can install the MCP server using:
Installation for