jira-alerts-mcp
jira-alerts-mcp
Un servidor MCP para la API REST de Jira Service Management Operations: alertas y guardias.
Por qué existe
Las alertas no son elementos de trabajo. Viven detrás de una API distinta: /jsm/ops/api, la superficie reubicada de Opsgenie, con sus propios ámbitos, su propio formato de id y su propia semántica de escritura asíncrona. El Registry de MCP lista 30 servidores de Jira; todos hablan con elementos de trabajo. Ninguno puede decirte qué te está paginando ahora mismo.
El servidor MCP oficial de Atlassian no cubre ese hueco. atlassian/atlassian-mcp-server cubre Jira, Confluence, requests de Jira Service Management, Bitbucket, Compass y el Teamwork Graph. No tiene ninguna herramienta para alertas, horarios o guardias. Además, es un servidor alojado y cerrado; el repositorio contiene manifests y skills, no handlers, así que ese hueco solo lo puede cerrar Atlassian, no una contribución.
Los servidores MCP de Opsgenie que existen hablan con una API con fecha de caducidad. giantswarm/mcp-opsgenie, burakdirin/opsgenie-mcp-server y daviddykeuk/opsgenie-mcp llaman todos a api.opsgenie.com con una GenieKey. Opsgenie dejó de venderse el 4 de junio de 2025 y se apagará el 5 de abril de 2027, momento en el que esas API REST dejarán de responder. La funcionalidad se trasladó a Jira Service Management.
Este servidor apunta a la superficie que las reemplaza: api.atlassian.com/jsm/ops/api/{cloudId} con OAuth o un token de API de Atlassian. Busca alertas, lee sus notas y su línea de actividad, reconoce / cierra / anota / añade responders, y consulta quién está de guardia ahora y después.
Related MCP server: Jira & Confluence MCP Server
Compatibilidad
Para inquilinos de Atlassian Cloud con JSM Operations, es decir, sitios ya migrados de Opsgenie independiente o aprovisionados después de la fusión. Si tu equipo todavía accede a app.opsgenie.com y se autentica con una GenieKey, este servidor no llegará a tus datos; uno de los servidores de Opsgenie mencionados arriba sí lo hará, hasta 2027.
URL base: https://api.atlassian.com/jsm/ops/api/{cloudId}/v1
Herramientas
Herramienta | Endpoint | Lectura/Escritura |
|
| lectura |
|
| lectura |
|
| lectura |
|
| lectura |
|
| lectura |
|
| escritura |
|
| escritura |
|
| escritura |
|
| escritura |
|
| lectura |
|
| lectura |
|
| lectura |
Deliberadamente no implementados: DELETE /v1/alerts/{id} y la creación de alertas. Eliminar alertas destruye el historial de auditoría sin posibilidad de deshacer, y la creación de alertas pertenece a la API de integración (/jsm/ops/integration/v2/alerts) con una integration key, no a un agente interactivo. Abre un issue si tienes una necesidad concreta.
Tres comportamientos de la API que las descripciones de las herramientas codifican
Estas son las cosas que rompen en silencio las integraciones ingenuas, por eso se indican en las descripciones de las herramientas, donde el modelo las leerá de verdad:
Las escrituras son asíncronas. Cada endpoint mutante devuelve
{ result, requestId, took }inmediatamente y aplica el cambio fuera de banda. Volver a leer la alerta justo después de un ack a menudo la mostrará aún sin reconocer.jsm_get_request_statuses la vía de verificación correcta, y cada herramienta de escritura apunta a ella.tinyIdno es un id. El número corto de la interfaz de JSM (#4821) es rechazado por/v1/alerts/{id}, que solo acepta el id completouuid-timestamp. Los alias requieren un endpoint completamente distinto (/v1/alerts/alias?alias=). Tanto las descripciones del esquema como el handler de 404 lo indican explícitamente, para que el modelo se autocorrija en lugar de reintentar la misma llamada.La ventana de búsqueda tiene un tope de 20.000.
offset + limitdebe mantenerse por debajo.jsm_list_alertsrechaza localmente la paginación más profunda con un mensaje que le dice al modelo que acote la consulta en lugar de gastar un viaje de ida y vuelta en un 400 garantizado.
Configuración
Requiere Node ≥ 22.
git clone https://github.com/rrvrs/jira-alerts-mcp.git
cd jira-alerts-mcp
npm install
npm run buildConfiguración
Copia .env.example como referencia. Ten en cuenta que el servidor no lee .env por sí mismo: un servidor MCP lo lanza su cliente, y el entorno pertenece al cliente. Usa el archivo como lista de verificación para el bloque env de tu cliente, o set -a; source .env; set +a para desarrollo local.
Variable | Obligatoria | Notas |
| sí | El cloud id de tu sitio de Atlassian (un UUID) |
| una de las dos | |
| una de las dos | Bearer OAuth 3LO; tiene prioridad si está definido |
| no |
|
| no | Transporte HTTP; por defecto |
| no | Lista de |
Las credenciales se validan al arrancar, así que una configuración incorrecta falla de inmediato con un mensaje accionable en lugar de hacerlo en la primera llamada a una herramienta.
Cómo encontrar tu cloud id. Abre https://<your-site>.atlassian.net/_edgeAuth/tenantInfo con la sesión iniciada, o llama a GET https://api.atlassian.com/oauth/token/accessible-resources con tu token.
Ámbitos requeridos. Las herramientas de lectura necesitan read:ops-alert:jira-service-management; las de escritura necesitan write:ops-alert:jira-service-management. Conceder solo el ámbito de lectura es una configuración compatible: las herramientas de escritura fallarán con un 403 que nombra el ámbito que falta.
La cuenta también necesita acceso a JSM Operations en el equipo correspondiente. Las alertas y horarios cuelgan de la página de Operations de un equipo, así que unas credenciales que no pueden ver el equipo obtendrán listas vacías en lugar de errores.
Conexión con Claude Code
claude mcp add jsm-alerts \
--env JSM_CLOUD_ID='your-cloud-id' \
--env JSM_EMAIL='you@example.com' \
--env JSM_API_TOKEN="${JSM_API_TOKEN}" \
-- node /absolute/path/to/jira-alerts-mcp/dist/index.jsDos cosas que suelen despistar: el nombre del servidor es el primer argumento posicional, antes de cualquier flag; y en zsh ${VAR} necesita comillas. Para sesiones iniciadas desde la GUI, el token tiene que vivir en el bloque env de ~/.claude/settings.json; el entorno del shell no se hereda.
Pruebas
npm test # offline test suite — no network, no tenant
npm run inspect # MCP Inspector against dist/index.js — needs credentialsPara la comprobación en vivo, empieza con jsm_list_schedules. No necesita ids y confirma autenticación, ámbitos y visibilidad del equipo en una sola llamada.
Estado de verificación de endpoints
Las rutas se comprobaron contra la referencia de la API REST de JSM ops en lugar de darse por supuestas:
Confirmados en la documentación publicada:
/v1/alerts,/v1/alerts/{id},/v1/alerts/alias,/v1/alerts/requests/{id},/v1/alerts/{id}/acknowledge,/v1/alerts/{id}/close,/v1/alerts/{id}/responders,/v1/alerts/{id}/notes,/v1/schedules/{id}/on-calls,/v1/schedules/{id}/next-on-calls.Paridad con Opsgenie, merece confirmación en la primera ejecución:
GET /v1/alerts/{id}/logsy los parámetros de consulta exactos para la paginación de notas/logs (order, cursoroffset). JSM Operations es una reubicación de la API de Opsgenie y estos no han cambiado allí, pero el sitio de documentación se renderiza en el cliente y no se pudo leer de principio a fin.Envoltura de colecciones: Atlassian no es consistente sobre si las colecciones llegan bajo
dataovalues.JsmClient.getCollectionacepta ambas y normaliza, así que esto no requiere ningún cambio en ningún caso; pero si una herramienta de listado devuelve cero elementos contra datos que sabes que existen, ese normalizador es lo primero que hay que inspeccionar.
Arquitectura
src/
├── index.ts # transports and startup credential validation
├── server.ts # assembles the tool domains
├── constants.ts # API root, limits
├── types.ts # JSM API interfaces
├── schemas/common.ts # Zod fragments shared across domains
├── services/
│ ├── client.ts # auth, request, envelope normalisation, error mapping
│ └── format.ts # markdown rendering, truncation, result envelopes
└── tools/
├── define.ts # defineTool() + registerTools()
├── list-executor.ts # the shared list pipeline
├── alerts/ # read tools — one file per tool, plus shapes.ts
├── actions/ # write tools, all via execute-action.ts
└── oncall/ # schedules and on-callUna herramienta por archivo. Un módulo de herramienta es dueño de su forma de entrada, su descripción y su handler, y de nada más: la más grande tiene ~100 líneas. server.ts concatena los arrays exportados de los tres dominios; index.ts solo sabe de transportes.
Hay tres convenciones que merece la pena conservar al ampliarlo:
Toda herramienta de listado pasa por
executeList(tools/list-executor.ts). Gestiona la obtención, la rama de resultado vacío, el truncado a 25.000 caracteres, el bloque de paginación y el conmutador de formato. En su día hubo dos bugs en copias por herramienta de esa lógica: una página vacía devolvía un resultado que el SDK rechazaba, ynext_offsetse saltaba registros que el truncado había descartado. Ahora hay una sola copia, a propósito.Toda escritura pasa por
executeAction(tools/actions/execute-action.ts), para que el contrato de recibo asíncrono no pueda desviarse entre las cuatro herramientas de escritura.La paginación informa de lo que se entregó, no de lo que se obtuvo.
countynext_offsetdescriben los registros realmente presentes en la respuesta, ytruncatedavisa cuando la API devolvió más de lo que cabía.
Nota sobre inputSchema
La registerTool del SDK de TypeScript de MCP espera un raw Zod shape (un objeto plano de tipos Zod), no un z.object(...). Pasar un z.object — como muestran algunos ejemplos — falla. Las herramientas de aquí definen un shape plano y derivan su tipo de entrada con z.infer<z.ZodObject<typeof shape>>. Una consecuencia: .strict() no se puede aplicar a un shape plano, así que las claves desconocidas se eliminan en lugar de rechazarse.
Relacionado con esto, ToolResult es un type alias, no una interface: el CallToolResult del SDK lleva una firma de índice, y TypeScript solo concede una implícita a los type aliases.
Contribuciones
Consulta CONTRIBUTING.md para conocer el bucle de desarrollo, las convenciones que merece la pena conservar y cómo añadir una herramienta. Los issues y PRs no deben contener cloud ids, tokens ni datos reales de alertas.
Seguridad
Este servidor guarda credenciales de Atlassian, y el transporte HTTP no realiza autenticación propia; consulta SECURITY.md para el modelo de amenazas, notas de endurecimiento y cómo informar de una vulnerabilidad de forma privada.
Licencia
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.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive Opsgenie alert management including listing, creating, acknowledging, and closing alerts, as well as managing alert notes, logs, and custom properties through natural language.224MIT
- FlicenseAqualityFmaintenanceEnables interaction with Jira and Confluence APIs to search, create, and manage issues, pages, comments, and attachments across both Atlassian platforms.7
- AlicenseNot gradedqualityCmaintenanceEnables PagerDuty incident response operations including listing incidents, acknowledging and resolving incidents, looking up on-call schedules, and listing services.MIT
- FlicenseAqualityCmaintenanceEnables issue search, creation, updates, comments, status transitions, and project listing in Jira, purpose-built for security incident management and SOC workflows.9
Related MCP Connectors
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Monitor uptime and incidents, run checks, and publish status updates from your Uptimepage org.
Uptime, API and server monitoring with outages, reporting, on-call and status pages.
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/rrvrs/jira-alerts-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server