opsgenie-mcp
Provides comprehensive tools for managing Opsgenie alerts, incidents, schedules, teams, users, integrations, policies, and on-call rules via the MCP protocol.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@opsgenie-mcplist unacknowledged alerts from the last hour"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
opsgenie-mcp
MCP server for Opsgenie (Atlassian's incident/alert management and on-call platform) — exposes the full public Opsgenie REST API as MCP tools.
⚠️ Vendor note: Atlassian has announced Opsgenie is reaching end of support and recommends migrating to Jira Service Management or Compass. The public API documented here (
docs.opsgenie.com) is still live and unchanged as of this build, but expect it to eventually be deprecated.
Overview
Stateless HTTP service. No credentials are ever persisted — each request supplies its own API key via a header, used only for the lifetime of that single request.
Supports concurrent requests; per-request credential isolation is done via Python
contextvars, not a global/shared client instance.Entry points:
POST /mcp(MCP protocol) andGET /health(health check).Default port:
8080(configurable viaMCP_HTTP_PORT).
Related MCP server: mcp-server-splunk-oncall
Scope
213 tools across 28 categories, generated from Opsgenie's official
documentation at docs.opsgenie.com (Alert, Incident, Incident Timeline,
Integration, Heartbeat, Alert & Notification Policy, Policy (legacy v1),
Maintenance, Account, User, Custom User Role, Contact, Notification Rule
(+ Step), Team (+ Member/Role/Routing Rule), Schedule (+ Rotation/Override),
Escalation, Who Is On Call, Forwarding Rule, Service (+ Incident Rules/
Templates), Incident Templates).
MSPbots' own stored integration config for this vendor calls exactly 1
endpoint (GET /v2/alerts, read-only). Per explicit user decision, this
build covers the full public API including write operations (create/
update/delete/enable/disable across every resource), not just that one
read-only call — see Known Gaps for which tools mutate real data.
Source data was extracted by fetching all ~29 docs.opsgenie.com/docs/*-api
pages and structuring each documented operation (method, path, path/query
params, JSON body fields) into a machine-readable format, then generating
all 213 tool functions from that structured data — the same
codegen-from-structured-spec approach used for other large-API vendors in
this program (ConnectSecure, Dynu, Jira Data Center), adapted here because
Opsgenie has no downloadable OpenAPI/Postman spec, only prose documentation.
Authentication
Opsgenie uses a static API key tied to a specific Opsgenie integration
(created in Opsgenie's Settings → Integrations → API). MSPbots' own
integration convention sends this key as Authorization: GenieKey <apiKey>,
matching Opsgenie's own documented format, and this server forwards it
exactly that way.
HEADER 授权参数说明
Header | 类型 | 是否必填 | 默认值 | 枚举值 | 字段描述 | Example |
| string | 是 | 无 | 无 | Opsgenie 集成 API Key,原样转发为上游 |
|
| string | 否 |
| 无 | Opsgenie API 基础 URL;EU 实例客户需传 |
|
Missing the required header returns 401:
{
"error": "Missing credentials",
"message": "This server requires the X-Opsgenie-Api-Key header",
"required_headers": ["X-Opsgenie-Api-Key"],
"optional_headers": ["X-Opsgenie-Base-Url"]
}Environment Variables
Variable | 类型 | 是否必填 | 默认值 | 说明 |
| int | 否 |
| HTTP 监听端口 |
| string | 否 |
| HTTP 监听地址 |
| string | 否 |
| 默认 Opsgenie API 基础 URL(可被请求头 |
MCP Endpoint
POST /mcp— MCP protocol (streamable HTTP transport)GET /health— health check, returns{"status": "ok", "service": "opsgenie-mcp", "transport": "http"}
Tool List
Tool names are opsgenie_<category>_<operation>, derived from each
operation's heading in the official docs (e.g. "List Alerts" in the alert
category → opsgenie_alert_list_alerts). body parameters are accepted as
a generic dict — the exact field list for each is documented in that
tool's own docstring (extracted from the source docs), and the full field
schema is available in Opsgenie's own API reference (linked below).
Category | Tool | 功能 | 方法+路径 | 参数 |
account |
| Get Account Info. | GET /v2/account | 无 |
alert |
| Acknowledge Alert. | POST /v2/alerts/:identifier/acknowledge | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Add Details (Custom Properties) to Alert. | POST /v2/alerts/:identifier/details | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Add Note to Alert. | POST /v2/alerts/:identifier/notes | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Add Responder to Alert. | POST /v2/alerts/:identifier/responders | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Add Tags to Alert. | POST /v2/alerts/:identifier/tags | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Add Team to Alert. | POST /v2/alerts/:identifier/teams | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Assign Alert. | POST /v2/alerts/:identifier/assign | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Close Alert. | POST /v2/alerts/:identifier/close | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Count Alerts. | GET /v2/alerts/count | query(可选), search_identifier(可选), search_identifier_type(可选) |
alert |
| Create a Saved Search. | POST /v2/alerts/saved-searches | body(必填) |
alert |
| Create Alert. | POST /v2/alerts | body(必填) |
alert |
| Create Alert Attachment. | POST /v2/alerts/:alertIdentifier/attachments | alert_identifier(必填), body(必填), alert_identifier_type(可选) |
alert |
| Delete Alert. | DELETE /v2/alerts/:identifier | identifier(必填), identifier_type(可选), user(可选), source(可选) |
alert |
| Delete Alert Attachment. | DELETE /v2/alerts/:alertIdentifier/attachments/:attachmentId | alert_identifier(必填), attachment_id(必填), alert_identifier_type(可选), user(可选) |
alert |
| Delete Saved Search. | DELETE /v2/alerts/saved-searches/:identifier | identifier(必填), identifier_type(可选) |
alert |
| Escalate Alert to Next. | POST /v2/alerts/:identifier/escalate | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Execute Custom Action. | POST /v2/alerts/:identifier/actions/:action | identifier(必填), action(必填), body(必填), identifier_type(可选) |
alert |
| Get Alert. | GET /v2/alerts/:identifier | identifier(必填), identifier_type(可选) |
alert |
| Get Alert Attachment. | GET /v2/alerts/:alertIdentifier/attachments/:attachmentId | alert_identifier(必填), attachment_id(必填), alert_identifier_type(可选) |
alert |
| Get Request Status. | GET /v2/alerts/requests/:requestId | request_id(必填) |
alert |
| Get Saved Search. | GET /v2/alerts/saved-searches/:identifier | identifier(必填), identifier_type(可选) |
alert |
| List Alert Attachments. | GET /v2/alerts/:alertIdentifier/attachments | alert_identifier(必填), alert_identifier_type(可选) |
alert |
| List Alert Logs. | GET /v2/alerts/:identifier/logs | identifier(必填), identifier_type(可选), offset(可选), direction(可选), limit(可选), order(可选) |
alert |
| List Alert Notes. | GET /v2/alerts/:identifier/notes | identifier(必填), identifier_type(可选), offset(可选), direction(可选), limit(可选), order(可选) |
alert |
| List Alert Recipients. | GET /v2/alerts/:identifier/recipients | identifier(必填), identifier_type(可选) |
alert |
| List Alerts. | GET /v2/alerts | query(可选), search_identifier(可选), search_identifier_type(可选), offset(可选), limit(可选), sort(可选), order(可选) |
alert |
| List Saved Searches. | GET /v2/alerts/saved-searches | 无 |
alert |
| Remove Details (Custom Properties) from Alert. | DELETE /v2/alerts/:identifier/details | identifier(必填), keys(必填), identifier_type(可选), user(可选), source(可选), note(可选) |
alert |
| Remove Tags from Alert. | DELETE /v2/alerts/:identifier/tags | identifier(必填), tags(必填), identifier_type(可选), user(可选), source(可选), note(可选) |
alert |
| Snooze Alert. | POST /v2/alerts/:identifier/snooze | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Unacknowledge Alert. | POST /v2/alerts/:identifier/unacknowledge | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Update Alert Description. | POST /v2/alerts/:identifier/description | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Update Alert Message. | POST /v2/alerts/:identifier/message | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Update Alert Priority. | PUT /v2/alerts/:identifier/priority | identifier(必填), body(必填), identifier_type(可选) |
alert |
| Update Saved Search. | PATCH /v2/alerts/saved-searches/:identifier | identifier(必填), body(必填), identifier_type(可选) |
alert_notification_policy |
| Change Policy Order. | POST /v2/policies/:identifier/change-order | identifier(必填), body(必填), team_id(可选) |
alert_notification_policy |
| Create Policy. | POST /v2/policies | body(必填), team_id(可选) |
alert_notification_policy |
| Delete Policy. | DELETE /v2/policies/:identifier | identifier(必填), team_id(可选) |
alert_notification_policy |
| Disable Policy. | POST /v2/policies/:identifier/disable | identifier(必填), team_id(可选) |
alert_notification_policy |
| Enable Policy. | POST /v2/policies/:identifier/enable | identifier(必填), team_id(可选) |
alert_notification_policy |
| Get Policy. | GET /v2/policies/:identifier | identifier(必填), team_id(可选) |
alert_notification_policy |
| List Alert Policies. | GET /v2/policies/alert | team_id(可选) |
alert_notification_policy |
| List Notification Policies. | GET /v2/policies/notification | team_id(必填) |
alert_notification_policy |
| Update Policy. | PUT /v2/policies/:identifier | identifier(必填), body(必填), team_id(可选) |
contact |
| Create Contact. | POST /v2/users/:userIdentifier/contacts | user_identifier(必填), body(必填) |
contact |
| Delete Contact. | DELETE /v2/users/:userIdentifier/contacts/:contactId | user_identifier(必填), contact_id(必填) |
contact |
| Disable Contact. | POST /v2/users/:userIdentifier/contacts/:contactId/disable | user_identifier(必填), contact_id(必填) |
contact |
| Enable Contact. | POST /v2/users/:userIdentifier/contacts/:contactId/enable | user_identifier(必填), contact_id(必填) |
contact |
| Get Contact. | GET /v2/users/:userIdentifier/contacts/:contactId | user_identifier(必填), contact_id(必填) |
contact |
| List Contacts. | GET /v2/users/:userIdentifier/contacts | user_identifier(必填) |
contact |
| Update Contact (Partial). | PATCH /v2/users/:userIdentifier/contacts/:contactId | user_identifier(必填), contact_id(必填), body(必填) |
custom_user_role |
| Create Custom User Role. | POST /v2/roles | body(必填) |
custom_user_role |
| Delete Custom User Role. | DELETE /v2/roles/:identifier | identifier(必填), identifier_type(可选) |
custom_user_role |
| Get Custom User Role. | GET /v2/roles/:identifier | identifier(必填), identifier_type(可选) |
custom_user_role |
| List Custom User Roles. | GET /v2/roles | 无 |
custom_user_role |
| Update Custom User Role. | PUT /v2/roles/:identifier | identifier(必填), body(必填), identifier_type(可选) |
escalation |
| Create Escalation. | POST /v2/escalations | body(必填) |
escalation |
| Delete Escalation. | DELETE /v2/escalations/:identifier | identifier(必填), identifier_type(可选) |
escalation |
| Get Escalation. | GET /v2/escalations/:identifier | identifier(必填), identifier_type(可选) |
escalation |
| List Escalations. | GET /v2/escalations | 无 |
escalation |
| Update Escalation. | PATCH /v2/escalations/:identifier | identifier(必填), body(必填), identifier_type(可选) |
forwarding_rule |
| Create Forwarding Rule. | POST /v2/forwarding-rules | body(必填) |
forwarding_rule |
| Delete Forwarding Rule. | DELETE /v2/forwarding-rules/:identifier | identifier(必填), identifier_type(可选) |
forwarding_rule |
| Get Forwarding Rule. | GET /v2/forwarding-rules/:identifier | identifier(必填), identifier_type(可选) |
forwarding_rule |
| List Forwarding Rules. | GET /v2/forwarding-rules | 无 |
forwarding_rule |
| Update Forwarding Rule. | PUT /v2/forwarding-rules/:identifier | identifier(必填), body(必填), identifier_type(可选) |
heartbeat |
| Add Heartbeat Request. | POST /v2/heartbeats | body(必填) |
heartbeat |
| Delete Heartbeat Request. | DELETE /v2/heartbeats/:heartbeatName | heartbeat_name(必填) |
heartbeat |
| Disable Heartbeat Request. | POST /v2/heartbeats/:heartbeatName/disable | heartbeat_name(必填) |
heartbeat |
| Enable Heartbeat Request. | POST /v2/heartbeats/:heartbeatName/enable | heartbeat_name(必填) |
heartbeat |
| Get Heartbeat Request. | GET /v2/heartbeats/:heartbeatName | heartbeat_name(必填) |
heartbeat |
| List Heartbeats. | GET /v2/heartbeats | 无 |
heartbeat |
| Ping Heartbeat Request. | GET /v2/heartbeats/:heartbeatName/ping | heartbeat_name(必填) |
heartbeat |
| Update Heartbeat Request. | PATCH /v2/heartbeats/:heartbeatName | heartbeat_name(必填), body(必填) |
incident |
| Add Details(Custom Properties) to Incident. | POST /v1/incidents/:identifier/details | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Add Note to Incident. | POST /v1/incidents/:identifier/notes | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Add Responder to Incident. | POST /v1/incidents/:identifier/responders | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Add Tags to Incident. | POST /v1/incidents/:identifier/tags | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Close Incident. | POST /v1/incidents/:identifier/close | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Create Incident. | POST /v1/incidents/create | body(必填) |
incident |
| Delete Incident. | DELETE /v1/incidents/:identifier | identifier(必填), identifier_type(可选) |
incident |
| Get Associated Alerts. | GET /v1/incidents/:identifier/associated-alert-ids | identifier(必填), identifier_type(可选), offset(可选), direction(可选), limit(可选), order(可选) |
incident |
| Get Incident. | GET /v1/incidents/:identifier | identifier(必填), identifier_type(可选) |
incident |
| Get Request Status. | GET /v1/incidents/requests/:requestId | request_id(必填) |
incident |
| Get Responder Alerts. | GET /v1/incidents/:identifier/responder-alert-ids | identifier(必填), identifier_type(可选), offset(可选), direction(可选), limit(可选), order(可选) |
incident |
| List Incident Logs. | GET /v1/incidents/:identifier/logs | identifier(必填), identifier_type(可选), offset(可选), direction(可选), limit(可选), order(可选) |
incident |
| List Incident Notes. | GET /v1/incidents/:identifier/notes | identifier(必填), identifier_type(可选), offset(可选), direction(可选), limit(可选), order(可选) |
incident |
| List Incidents. | GET /v1/incidents | query(可选), offset(可选), limit(可选), sort(可选), order(可选) |
incident |
| Remove Details(Custom Properties) from Incident. | DELETE /v1/incidents/:identifier/details | identifier(必填), keys(必填), identifier_type(可选), note(可选) |
incident |
| Remove Tags from Incident. | DELETE /v1/incidents/:identifier/tags | identifier(必填), tags(必填), identifier_type(可选), note(可选) |
incident |
| Reopen Incident. | POST /v1/incidents/:identifier/reopen | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Resolve Incident. | POST /v1/incidents/:identifier/resolve | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Update Incident Description. | POST /v1/incidents/:identifier/description | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Update Incident Message. | POST /v1/incidents/:identifier/message | identifier(必填), body(必填), identifier_type(可选) |
incident |
| Update Incident Priority. | POST /v1/incidents/:identifier/priority | identifier(必填), body(必填), identifier_type(可选) |
incident_template |
| Create Incident Template. | POST /v1/incident-templates | body(必填) |
incident_template |
| Delete Incident Template. | DELETE /v1/incident-templates/:incidentTemplateId | incident_template_id(必填) |
incident_template |
| Get Incident Templates. | GET /v1/incident-templates | 无 |
incident_template |
| Update Incident Template. | PUT /v1/incident-templates/:incidentTemplateId | incident_template_id(必填), body(必填) |
incident_timeline |
| Add Incident Timeline Entry. | POST /v2/incident-timelines/:incidentId/entries | incident_id(必填), body(必填) |
incident_timeline |
| Delete Incident Timeline Entry. | DELETE /v2/incident-timelines/:incidentId/entries/:timelineEntryId | incident_id(必填), timeline_entry_id(必填) |
incident_timeline |
| Get Incident Timeline Entry. | GET /v2/incident-timelines/:incidentId/entries/:timelineEntryId | incident_id(必填), timeline_entry_id(必填), content_type(可选) |
incident_timeline |
| Hide Incident Timeline Entry. | PATCH /v2/incident-timelines/:incidentId/entries/:timelineEntryId/hide | incident_id(必填), timeline_entry_id(必填) |
incident_timeline |
| List Incident Timeline Entries. | GET /v2/incident-timelines/:incidentId/entries | incident_id(必填), group(可选), discard_hidden(可选), offset(可选), order(可选), limit(可选), content_type(可选) |
incident_timeline |
| Unhide Incident Timeline Entry. | PATCH /v2/incident-timelines/:incidentId/entries/:timelineEntryId/unhide | incident_id(必填), timeline_entry_id(必填) |
incident_timeline |
| Update Incident Timeline Entry. | PUT /v2/incident-timelines/:incidentId/entries/:timelineEntryId | incident_id(必填), timeline_entry_id(必填), body(必填) |
integration |
| Authenticate Integration. | POST /v2/integrations/authenticate | body(必填) |
integration |
| Create a New Integration Action. | POST /v2/integrations/:integrationId/actions | integration_id(必填), body(必填) |
integration |
| Create API Based Integration. | POST /v2/integrations | body(必填) |
integration |
| Delete Integration. | DELETE /v2/integrations/:integrationId | integration_id(必填) |
integration |
| Disable Integration. | POST /v2/integrations/:integrationId/disable | integration_id(必填) |
integration |
| Enable Integration. | POST /v2/integrations/:integrationId/enable | integration_id(必填) |
integration |
| Get Integration. | GET /v2/integrations/:integrationId | integration_id(必填) |
integration |
| Get Integration Actions. | GET /v2/integrations/:integrationId/actions | integration_id(必填) |
integration |
| List Integrations. | GET /v2/integrations | type(可选), team_id(可选), team_name(可选) |
integration |
| Update All Integration Actions. | PUT /v2/integrations/:integrationId/actions | integration_id(必填), body(必填) |
integration |
| Update Integration. | PUT /v2/integrations/:integrationId | integration_id(必填), body(必填) |
maintenance |
| Cancel Maintenance. | POST /v1/maintenance/:maintenanceId/cancel | maintenance_id(必填) |
maintenance |
| Change Maintenance End Date. | POST /v1/maintenance/:maintenanceId/change-end-date | maintenance_id(必填), body(必填) |
maintenance |
| Create Maintenance. | POST /v1/maintenance | body(必填) |
maintenance |
| Delete Maintenance. | DELETE /v1/maintenance/:maintenanceId | maintenance_id(必填) |
maintenance |
| Get Maintenance. | GET /v1/maintenance/:maintenanceId | maintenance_id(必填) |
maintenance |
| List Maintenance. | GET /v1/maintenance | type(可选) |
maintenance |
| Update Maintenance. | PUT /v1/maintenance/:maintenanceId | maintenance_id(必填), body(必填) |
notification_rule |
| Copy Notification Rules to Other Users. | PATCH /v2/users/:userIdentifier/notification-rules/copy-to | user_identifier(必填), body(必填) |
notification_rule |
| Create Notification Rule. | POST /v2/users/:userIdentifier/notification-rules | user_identifier(必填), body(必填) |
notification_rule |
| Delete Notification Rule. | DELETE /v2/users/:userIdentifier/notification-rules/:ruleId | user_identifier(必填), rule_id(必填) |
notification_rule |
| Disable Notification Rule. | POST /v2/users/:userIdentifier/notification-rules/:ruleId/disable | user_identifier(必填), rule_id(必填) |
notification_rule |
| Enable Notification Rule. | POST /v2/users/:userIdentifier/notification-rules/:ruleId/enable | user_identifier(必填), rule_id(必填) |
notification_rule |
| Get Notification Rule. | GET /v2/users/:userIdentifier/notification-rules/:ruleId | user_identifier(必填), rule_id(必填) |
notification_rule |
| List Notification Rule. | GET /v2/users/:userIdentifier/notification-rules | user_identifier(必填) |
notification_rule |
| Update Notification Rule (Partial). | PATCH /v2/users/:userIdentifier/notification-rules/:ruleId | user_identifier(必填), rule_id(必填), body(必填) |
notification_rule_step |
| Create Notification Rule Step. | POST /v2/users/:userIdentifier/notification-rules/:ruleId/steps | user_identifier(必填), rule_id(必填), body(必填) |
notification_rule_step |
| Delete Notification Rule Step. | DELETE /v2/users/:userIdentifier/notification-rules/:ruleId/steps/:stepId | user_identifier(必填), rule_id(必填), step_id(必填) |
notification_rule_step |
| Disable Notification Rule Step. | POST /v2/users/:userIdentifier/notification-rules/:ruleId/steps/:stepId/disable | user_identifier(必填), rule_id(必填), step_id(必填) |
notification_rule_step |
| Enable Notification Rule Step. | POST /v2/users/:userIdentifier/notification-rules/:ruleId/steps/:stepId/enable | user_identifier(必填), rule_id(必填), step_id(必填) |
notification_rule_step |
| Get Notification Rule Step. | GET /v2/users/:userIdentifier/notification-rules/:ruleId/steps/:stepId | user_identifier(必填), rule_id(必填), step_id(必填) |
notification_rule_step |
| List Notification Rule Steps. | GET /v2/users/:userIdentifier/notification-rules/:ruleId/steps | user_identifier(必填), rule_id(必填) |
notification_rule_step |
| Update Notification Rule Step (Partial). | PATCH /v2/users/:userIdentifier/notification-rules/:ruleId/steps/:stepId | user_identifier(必填), rule_id(必填), step_id(必填), body(必填) |
policy |
| Change Policy Order. | POST /v1/policies/:identifier/change-order | identifier(必填), body(必填) |
policy |
| Create Policy. | POST /v1/policies | body(必填) |
policy |
| Delete Policy. | DELETE /v1/policies/:identifier | identifier(必填) |
policy |
| Disable Policy. | POST /v1/policies/:identifier/disable | identifier(必填) |
policy |
| Enable Policy. | POST /v1/policies/:identifier/enable | identifier(必填) |
policy |
| Get Policy. | GET /v1/policies/:identifier | identifier(必填) |
policy |
| List Policies. | GET /v1/policies | 无 |
policy |
| Update Policy. | PUT /v1/policies/:identifier | identifier(必填), body(必填) |
schedule |
| Create Schedule. | POST /v2/schedules | body(必填) |
schedule |
| Delete Schedule. | DELETE /v2/schedules/:identifier | identifier(必填), identifier_type(可选) |
schedule |
| Export Schedule. | GET /v2/schedules/:identifier.ics | identifier(必填), identifier_type(可选) |
schedule |
| Get Schedule. | GET /v2/schedules/:identifier | identifier(必填), identifier_type(可选) |
schedule |
| Get Schedule Timeline. | GET /v2/schedules/:identifier/timeline | identifier(必填), identifier_type(可选), expand(可选), interval(可选), interval_unit(可选), date(可选) |
schedule |
| List Schedules. | GET /v2/schedules | expand(可选) |
schedule |
| Update Schedule (Partial). | PATCH /v2/schedules/:identifier | identifier(必填), body(必填), identifier_type(可选) |
schedule_override |
| Create Schedule Override. | POST /v2/schedules/:scheduleIdentifier/overrides | schedule_identifier(必填), body(必填), schedule_identifier_type(可选) |
schedule_override |
| Delete Schedule Override. | DELETE /v2/schedules/:scheduleIdentifier/overrides/:alias | schedule_identifier(必填), alias(必填), schedule_identifier_type(可选) |
schedule_override |
| Get Schedule Override. | GET /v2/schedules/:scheduleIdentifier/overrides/:alias | schedule_identifier(必填), alias(必填), schedule_identifier_type(可选) |
schedule_override |
| List Schedule Overrides. | GET /v2/schedules/:scheduleIdentifier/overrides | schedule_identifier(必填), schedule_identifier_type(可选) |
schedule_override |
| Update Schedule Override. | PUT /v2/schedules/:scheduleIdentifier/overrides/:alias | schedule_identifier(必填), alias(必填), body(必填), schedule_identifier_type(可选) |
schedule_rotation |
| Create Rotation. | POST /v2/schedules/:scheduleIdentifier/rotations | schedule_identifier(必填), body(必填), schedule_identifier_type(可选) |
schedule_rotation |
| Delete Rotation. | DELETE /v2/schedules/:scheduleIdentifier/rotations/:id | schedule_identifier(必填), id(必填), schedule_identifier_type(可选) |
schedule_rotation |
| Get Rotation. | GET /v2/schedules/:scheduleIdentifier/rotations/:id | schedule_identifier(必填), id(必填), schedule_identifier_type(可选) |
schedule_rotation |
| List Rotations. | GET /v2/schedules/:scheduleIdentifier/rotations | schedule_identifier(必填), schedule_identifier_type(可选) |
schedule_rotation |
| Update Rotation. | PATCH /v2/schedules/:scheduleIdentifier/rotations/:id | schedule_identifier(必填), id(必填), body(必填), schedule_identifier_type(可选) |
service |
| Create Service. | POST /v1/services | body(必填) |
service |
| Delete Service. | DELETE /v1/services/:id | id(必填) |
service |
| Get Service. | GET /v1/services/:id | id(必填) |
service |
| List Services. | GET /v1/services/ | query(可选), limit(可选), sort(可选), order(可选), offset(可选) |
service |
| Update Service. | PATCH /v1/services/:id | id(必填), body(必填) |
service_incident_rule |
| Create Incident Rule. | POST /v1/services/:serviceId/incident-rules | service_id(必填), body(必填) |
service_incident_rule |
| Delete Incident Rule. | DELETE /v1/services/:serviceId/incident-rules/:incidentRuleId | service_id(必填), incident_rule_id(必填) |
service_incident_rule |
| Get Incident Rules. | GET /v1/services/:serviceId/incident-rules | service_id(必填) |
service_incident_rule |
| Update Incident Rule. | PUT /v1/services/:serviceId/incident-rules/:incidentRuleId | service_id(必填), incident_rule_id(必填), body(必填) |
service_incident_template |
| Create Incident Template. | POST /v1/services/:serviceId/incident-templates | service_id(必填), body(必填) |
service_incident_template |
| Delete Incident Template. | DELETE /v1/services/:serviceId/incident-templates/:incidentTemplateId | service_id(必填), incident_template_id(必填) |
service_incident_template |
| Get Incident Templates. | GET /v1/services/:serviceId/incident-templates | service_id(必填) |
service_incident_template |
| Update Incident Template. | PUT /v1/services/:serviceId/incident-templates/:incidentTemplateId | service_id(必填), incident_template_id(必填), body(必填) |
team |
| Create Team. | POST /v2/teams | body(必填) |
team |
| Delete Team. | DELETE /v2/teams/:identifier | identifier(必填), identifier_type(可选) |
team |
| Get Team. | GET /v2/teams/:identifier | identifier(必填), identifier_type(可选) |
team |
| List Team Logs. | GET /v2/teams/:identifier/logs | identifier(必填), identifier_type(可选), limit(可选), order(可选), offset(可选) |
team |
| List Teams. | GET /v2/teams | 无 |
team |
| Update Team (Partial). | PATCH /v2/teams/:teamId | team_id(必填), body(必填) |
team_member |
| Add Team Member. | POST /v2/teams/:teamIdentifier/members | team_identifier(必填), body(必填), team_identifier_type(可选) |
team_member |
| Remove Team Member. | DELETE /v2/teams/:teamIdentifier/members/:memberIdentifier | team_identifier(必填), member_identifier(必填), team_identifier_type(可选) |
team_role |
| Create Team Role. | POST /v2/teams/:teamIdentifier/roles | team_identifier(必填), body(必填), team_identifier_type(可选) |
team_role |
| Delete Team Role. | DELETE /v2/teams/:teamIdentifier/roles/:identifier | team_identifier(必填), identifier(必填), team_identifier_type(可选), identifier_type(可选) |
team_role |
| Get Team Role. | GET /v2/teams/:teamIdentifier/roles/:identifier | team_identifier(必填), identifier(必填), team_identifier_type(可选), identifier_type(可选) |
team_role |
| List Team Roles. | GET /v2/teams/:teamIdentifier/roles | team_identifier(必填), team_identifier_type(可选) |
team_role |
| Update Team Role (Partial). | PATCH /v2/teams/:teamIdentifier/roles/:identifier | team_identifier(必填), identifier(必填), body(必填), team_identifier_type(可选), identifier_type(可选) |
team_routing_rule |
| Change Team Routing Rule Order. | POST /v2/teams/:teamIdentifier/routing-rules/:id/change-order | team_identifier(必填), id(必填), body(必填), team_identifier_type(可选) |
team_routing_rule |
| Create Team Routing Rule. | POST /v2/teams/:teamIdentifier/routing-rules | team_identifier(必填), body(必填), team_identifier_type(可选) |
team_routing_rule |
| Delete Team Routing Rule. | DELETE /v2/teams/:teamIdentifier/routing-rules/:id | team_identifier(必填), id(必填), team_identifier_type(可选) |
team_routing_rule |
| Get Team Routing Rule. | GET /v2/teams/:teamIdentifier/routing-rules/:id | team_identifier(必填), id(必填), team_identifier_type(可选) |
team_routing_rule |
| List Team Routing Rules. | GET /v2/teams/:teamIdentifier/routing-rules | team_identifier(必填), team_identifier_type(可选) |
team_routing_rule |
| Update Team Routing Rule (Partial). | PATCH /v2/teams/:teamIdentifier/routing-rules/:id | team_identifier(必填), id(必填), body(必填), team_identifier_type(可选) |
user |
| Create User. | POST /v2/users | body(必填) |
user |
| Delete Saved Search. | DELETE /v1/incidents/saved-searches/:identifier | identifier(必填), identifier_type(可选) |
user |
| Delete User. | DELETE /v2/users/:identifier | identifier(必填) |
user |
| Get Saved Search. | GET /v2/users/saved-searches/:identifier | identifier(必填), identifier_type(可选) |
user |
| Get User. | GET /v2/users/:identifier | identifier(必填), expand(可选) |
user |
| List Saved Searches. | GET /v2/users/saved-searches | 无 |
user |
| List User. | GET /v2/users | limit(可选), offset(可选), sort(可选), order(可选), query(可选) |
user |
| List User Escalations. | GET /v2/users/:identifier/escalations | identifier(必填) |
user |
| List User Forwarding Rules. | GET /v2/users/:identifier/forwarding-rules | identifier(必填) |
user |
| List User Schedules. | GET /v2/users/:identifier/schedules | identifier(必填) |
user |
| List User Teams. | GET /v2/users/:identifier/teams | identifier(必填) |
user |
| Update User (Partial). | PATCH /v2/users/:identifier | identifier(必填), body(必填) |
who_is_on_call |
| Export On-Call User. | GET /v2/schedules/on-calls/:identifier.ics | identifier(必填) |
who_is_on_call |
| Get Next On Calls. | GET /v2/schedules/:scheduleIdentifier/next-on-calls | schedule_identifier(必填), schedule_identifier_type(可选), flat(可选), date(可选) |
who_is_on_call |
| Get On Calls. | GET /v2/schedules/:scheduleIdentifier/on-calls | schedule_identifier(必填), schedule_identifier_type(可选), flat(可选), date(可选) |
who_is_on_call |
| List On Calls. | GET /v2/schedules/on-calls | flat(可选), date(可选) |
测试示例
# Health check
curl -s http://localhost:8080/health
# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp \
-H "X-Opsgenie-Api-Key: <your-opsgenie-api-key>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: <session-id-from-initialize>" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "opsgenie_alert_list_alerts",
"arguments": {"limit": "5"}
}
}'Live-verified (2026-07-30): opsgenie_alert_list_alerts (the same
endpoint MSPbots itself calls) was called end-to-end through this running
server with a real test API key and returned real alert data (message,
status, priority, responders, integration, etc.) from the account. Two
other tools in different categories (opsgenie_team_list_teams,
opsgenie_account_get_account_info) were also called with the same key and
correctly returned Opsgenie's own 403 API Key is not granted with configuration access — confirming the request/auth-header plumbing works
correctly outside the alert category too; this specific test key is just
scoped to alert-level access only (a normal Opsgenie integration-key
restriction, not a bug).
API Reference
Authentication: https://docs.opsgenie.com/docs/authentication
Per-category docs are linked from the sidebar at https://docs.opsgenie.com/docs/alert-api
Known Gaps
Full API coverage was an explicit user decision, matching the pattern used for other large public APIs in this program (ConnectSecure, Cove Data Protection, Dynu, Jira Data Center). MSPbots itself only calls 1 endpoint (
GET /v2/alerts); everything else — including destructive operations likeopsgenie_team_delete_team,opsgenie_schedule_delete_schedule,opsgenie_integration_delete_integration,opsgenie_user_delete_user, and anyclose/delete/disabletool — mutates real Opsgenie configuration or alert/incident state. Treat these as destructive/irreversible and confirm with a human before invoking.bodyparameters are untyped (dict) rather than fully modeled — each tool's docstring lists the field names extracted from Opsgenie's docs, but reproducing all of them as typed Python parameters was out of scope for a 213-tool generation across 28 categories.Source data was extracted from prose documentation, not a machine spec — Opsgenie has no downloadable OpenAPI/Postman collection, so every operation's method/path/params was parsed from
docs.opsgenie.com's HTML by multiple independent research passes (cross-checked against the actual page text, not summarized). A few pages intermittently served a Cloudflare bot-check to browser-based fetches; those categories were extracted via the plain HTTP fetch path instead.Only
opsgenie_alert_list_alerts(MSPbots' own endpoint) was live-verified with real data returned;opsgenie_team_list_teamsandopsgenie_account_get_account_infowere verified to reach the real API and return a correctly-parsed error (the test key's permission scope, not a code issue). The remaining 210 tools are structurally correct (schema validated, MCP-protocoltools/listconfirmed, all 213 passcompile()) but not individually smoke-tested — most are write/destructive operations that would create, modify, or delete real teams, schedules, escalations, integrations, or alerts, so they weren't exercised against the live test account.Vendor is reaching end-of-support (see the warning banner at the top of this README) — Atlassian recommends migrating to Jira Service Management or Compass. This MCP targets the still-live Opsgenie public API as of this build.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/MSPbotsAI/opsgenie-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server