DevHelm MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEVHELM_API_TOKEN | Yes | Your DevHelm API token |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_monitorsA | List all uptime monitors in the workspace. |
| get_monitorB | Get a single monitor by ID, including its full configuration. |
| create_monitorA | Create a new uptime monitor. Required fields: name, type (HTTP/DNS/TCP/ICMP/MCP/HEARTBEAT), config (type-specific), frequencySeconds (30-86400).
|
| update_monitorC | Update an existing monitor's configuration. |
| delete_monitorB | Delete a monitor permanently. |
| pause_monitorB | Pause a monitor (stops checking until resumed). |
| resume_monitorB | Resume a paused monitor. |
| test_monitorB | Trigger an ad-hoc test run for a monitor and return the result. |
| list_monitor_resultsB | List recent check results for a monitor (cursor-paginated). |
| list_monitor_versionsC | List version history for a monitor. |
| list_incidentsA | List all incidents in the workspace. |
| get_incidentA | Get a single incident by ID with full details. |
| create_incidentB | Create a manual incident. Required fields: title, severity (DOWN/DEGRADED/MAINTENANCE). Optional: monitorId (UUID), body (detailed description). |
| resolve_incidentC | Resolve an active incident, optionally with a resolution message. |
| get_incident_timelineA | Full forensic timeline for an incident. Returns every recorded state transition for the incident, the rule evaluations that caused each triggering transition, and the policy snapshot in effect at the time. Use this to explain why an incident was declared/confirmed/resolved, or to audit a past detection decision. |
| get_check_traceA | Everything the detection engine recorded for a single check. Includes the rule evaluations produced for this check_id, the state transitions that fired (if any), and the policy snapshot active at evaluation time. Use when a user references a specific check execution ID (e.g. from a support ticket or webhook). |
| get_policy_snapshotA | Fetch a policy snapshot by its content-addressed SHA-256 hash. Useful for inspecting the exact detection policy that was active when a specific evaluation or transition happened — the hash is stable, so historical data keeps pointing at the right policy even if the monitor has been edited since. |
| list_monitor_rule_evaluationsA | List rule evaluations produced for a monitor (paginated). Filters:
Use to answer "which rules fired on monitor X in the last hour?". |
| list_monitor_transitionsB | List state transitions recorded for a monitor (paginated). A transition captures every WATCHING→TRIGGERED→CONFIRMED→RESOLVED edge the detection engine walked. Includes transitions that occurred before an incident was declared (incident_id = null). Use to reconstruct the full reliability history of a monitor. |
| list_alert_channelsA | List all alert channels configured in the workspace. |
| get_alert_channelC | Get an alert channel by ID. |
| create_alert_channelC | Create a new alert channel. Required: name, type, config (type-specific). Types: EMAIL, WEBHOOK, SLACK, PAGERDUTY, OPSGENIE, TEAMS, DISCORD, TELEGRAM, GOOGLE_CHAT, PUSHOVER, MATTERMOST, SPLUNK_ONCALL, PUSHBULLET, LINEAR, INCIDENT_IO, ROOTLY, ZAPIER, DATADOG, JIRA, GITLAB. |
| update_alert_channelB | Update an existing alert channel. Updatable fields: name, type, config (type-specific). See create_alert_channel for supported types. |
| delete_alert_channelC | Delete an alert channel. |
| test_alert_channelC | Send a test notification to an alert channel to verify it works. |
| list_notification_policiesA | List all notification policies in the workspace. |
| get_notification_policyC | Get a notification policy by ID. |
| create_notification_policyA | Create a notification policy. Required: name, matchRules (list of {type, value?, monitorIds?, regions?}), escalation ({steps: [{delayMinutes, channelIds}], onResolve?, onReopen?}), enabled (bool), priority (int, higher = evaluated first). |
| update_notification_policyC | Update a notification policy. |
| delete_notification_policyC | Delete a notification policy. |
| test_notification_policyB | Send a test dispatch to verify a notification policy's routing. |
| list_environmentsA | List all environments in the workspace. |
| get_environmentA | Get an environment by slug (e.g. 'production', 'staging'). |
| create_environmentC | Create an environment. Required fields: name, slug, color. |
| update_environmentC | Update an environment by slug. |
| delete_environmentB | Delete an environment by slug. |
| list_secretsA | List all secrets (metadata only, values are never returned). |
| create_secretA | Create an encrypted secret. Required fields: key, value. The value is encrypted at rest and can be referenced in monitor auth configs as {{secrets.KEY}}. |
| update_secretC | Update a secret's value by key. |
| delete_secretB | Delete a secret by key. |
| list_tagsA | List all tags in the workspace. |
| get_tagA | Get a tag by ID. |
| create_tagB | Create a tag. Required fields: name. Optional: color. |
| update_tagC | Update a tag. |
| delete_tagC | Delete a tag. |
| list_resource_groupsA | List all resource groups in the workspace. |
| get_resource_groupB | Get a resource group by ID. |
| create_resource_groupC | Create a resource group. Required fields: name. Optional: description. |
| update_resource_groupC | Update a resource group. |
| delete_resource_groupC | Delete a resource group. |
| add_resource_group_memberD | Add a monitor to a resource group. Required fields: monitorId. |
| remove_resource_group_memberC | Remove a monitor from a resource group. |
| list_webhooksA | List all webhook endpoints in the workspace. |
| get_webhookB | Get a webhook endpoint by ID. |
| create_webhookB | Create a webhook endpoint. Required fields: url, events (list of event types to subscribe to). |
| update_webhookC | Update a webhook endpoint. |
| delete_webhookC | Delete a webhook endpoint. |
| test_webhookC | Send a test event to a webhook endpoint to verify it works. |
| list_api_keysA | List all API keys in the workspace. |
| get_api_keyA | Get a single API key's metadata by id. The secret value is never returned. |
| create_api_keyA | Create a new API key. The key value is returned only once. Required fields: name. Optional: expiresAt. |
| revoke_api_keyA | Revoke an API key (disables it without deleting). |
| delete_api_keyC | Delete an API key permanently. |
| list_dependenciesA | List all tracked service dependencies. |
| get_dependencyB | Get a tracked dependency by ID. |
| track_dependencyA | Start tracking a service dependency by its slug (e.g. 'github', 'aws'). Optionally track a single component via |
| update_dependency_alert_sensitivityB | Change how loudly a tracked dependency alerts you. Levels: AWARENESS (silent tracking, default — status visible on the dashboard but no notifications), INCIDENTS_ONLY (notify on any incident), MAJOR_ONLY (notify only on major/critical incidents), and ALL (every status change, including maintenance). |
| delete_dependencyC | Stop tracking a service dependency. |
| search_servicesA | Search the catalog of third-party services (Stripe, GitHub, AWS, ...) that can be tracked as dependencies. Use |
| get_serviceA | Get a catalog service's summary by slug (e.g. 'github'), including its current status, categories, and component overview. |
| get_service_live_statusA | Get the live (real-time) operational status of a catalog service, fetched from its upstream status page. Use this when freshness matters more than latency — e.g. 'is Stripe down right now?'. |
| get_services_summaryA | Get the global status summary across the entire service catalog — counts of operational / degraded / outage services. Use this for a quick 'is anything broken on the internet right now?' overview before drilling into a specific service. |
| list_service_categoriesA | List all service catalog categories (e.g. cloud, payments, devtools)
usable as the |
| list_service_componentsB | List a catalog service's components (e.g. 'API', 'Dashboard', 'Webhooks') with their individual statuses. Component IDs can be used to track a single component via track_dependency. |
| get_service_uptimeB | Get historical uptime stats for a catalog service over a period (e.g. '7d', '30d', '90d'; default '30d'). |
| list_service_incidentsA | List incidents for a catalog service, or across all services when
|
| get_service_incidentA | Get one vendor incident in full detail, including the vendor's timeline of status updates (investigating → identified → resolved). Get incident IDs from list_service_incidents. |
| get_service_day_rollupA | Get a one-day rollup for a catalog service on a UTC calendar day (ISO YYYY-MM-DD): aggregated uptime, per-component impact windows, and the incidents that overlapped that day. Use this to answer 'what happened to Stripe on 2026-06-01?'. |
| get_component_uptimeA | Get daily uptime history for a single component of a catalog service (e.g. just the 'API' component of Stripe) over a period ('7d', '30d', '90d', '1y'; default '30d'). Get component IDs from list_service_components. |
| get_all_components_uptimeA | Get daily uptime history for every leaf component of a catalog service in one call, keyed by component ID, over a period ('7d', '30d', '90d', '1y'; default '30d'). Prefer this over repeated get_component_uptime calls when comparing components. |
| list_service_maintenancesB | List scheduled and past maintenance windows announced by a catalog service (e.g. upcoming AWS maintenance that could affect you). |
| acquire_deploy_lockA | Acquire a deploy lock to prevent concurrent deployments. Required: lockedBy (identity of requester, e.g. hostname or CI job ID). Optional: ttlMinutes (default 30, max 60). |
| get_current_deploy_lockA | Get the currently active deploy lock, or null if unlocked. |
| release_deploy_lockC | Release a deploy lock by ID. |
| force_release_deploy_lockA | Force-release any active deploy lock (admin action). |
| list_maintenance_windowsA | List maintenance windows for the workspace. Use this BEFORE creating a new window to check whether someone else (or an earlier agent run) already scheduled overlap, or AFTER a deploy to confirm the window you opened is still active. Filters (all optional; combine freely):
|
| get_maintenance_windowA | Get a single maintenance window by ID with full details. |
| create_maintenance_windowA | Schedule a maintenance window to suppress alerts during planned work. Call this BEFORE running an operation that may legitimately
cause monitors to fail — a deploy, a database migration, a
third-party service's announced downtime — so the on-call
rotation isn't paged for known-expected failures. Always
pair every successful create with a follow-up
Time fields use ISO 8601 / RFC 3339 timestamps with explicit
timezone — UTC strongly preferred. Example:
Body fields:
|
| update_maintenance_windowA | Update an in-flight or scheduled maintenance window. The most common use is extending an active window when a
deploy runs longer than expected — call this with the new
Time fields use ISO 8601 / RFC 3339 timestamps with explicit
timezone (UTC preferred), e.g. Body fields (same schema as create):
|
| cancel_maintenance_windowA | Cancel a maintenance window — alerts resume immediately. Call this AFTER a deploy or maintenance operation completes successfully so any new monitor failures surface as real incidents instead of being silently absorbed. If the window was scheduled but not yet started, this prevents it from ever opening. The window record is removed; the audit log preserves the historical fact that the window existed. There is no "uncancel" — schedule a new window if you need to restore suppression. |
| get_status_overviewA | Get the dashboard overview with monitor counts, incident summary, and uptime stats. |
| list_status_pagesA | List all status pages in the workspace. |
| get_status_pageA | Get a status page by ID, including branding and overall status. |
| create_status_pageC | Create a new status page. Required fields: name, slug. Optional: description, branding (brandColor, theme, headerStyle, etc.), visibility (PUBLIC/PASSWORD), enabled, incidentMode (MANUAL/REVIEW/AUTOMATIC). |
| update_status_pageC | Update a status page's name, slug, branding, visibility, or incident mode. |
| delete_status_pageB | Delete a status page permanently. |
| reorder_status_page_layoutA | Batch-reorder a status page's full layout. Required: sections — top-level layout in their new order, where each
entry is either {kind:"component", componentId} or
{kind:"group", groupId}. Use Use this for "drag-and-drop" layout edits that touch both groups and
ungrouped components. To reorder components within a single group
only, prefer |
| list_status_page_componentsC | List all components on a status page. |
| create_status_page_componentB | Add a component to a status page. Required fields: name, type (STATIC or MONITOR). Optional: groupId (nest under a group), monitorId (for MONITOR type). |
| update_status_page_componentC | Update a status page component's name, group, or status. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/devhelmhq/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server