MCP server for Jira Service Management Operations β alerts, on-call schedules and responders
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP server for Jira Service Management Operations β the alert surface that replaced Opsgenie, which no other Jira MCP server covers.
Search alerts and read their notes and activity timeline; acknowledge, close, annotate them and add responders; and look up who is on call now and next. Twelve tools, four of them writes.

Three questions in one session, against a live JSM site: who is on call, what is
open, and acknowledge what isn't. Watch the last answer in particular β the agent
confirms the acknowledgement actually landed (ack landed 16:38:00.577Z) instead
of assuming it did, which is the asynchronous-write behaviour described under
What this server handles for you.
You need Node β₯ 24 and an Atlassian Cloud site with JSM Operations enabled. There is nothing to clone or build β your MCP client runs the published package.
1. Find your cloud id. Open this while logged in to your site:
It answers with one line β {"cloudId":"..."} β and that UUID is what
JSM_CLOUD_ID wants. If you'd rather not rely on that endpoint, the cloud id is
also the segment after /s/ in the URL at
admin.atlassian.com β Apps β Sites β your site.
2. Create an API token at id.atlassian.com.
3. Add the server.
Claude Code:
--scope user registers the server for your whole account rather than only the
directory you happened to run the command in. That is what you want for an
alerts server β you want it in every session. Without the flag claude mcp add
defaults to local scope, and the server exists in that one directory only.
Claude Desktop: open the config from the app rather than by hand β the Claude menu in your menu bar (not the settings inside the window) β Settings β Developer β Edit Config. That creates the file if it doesn't exist yet:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
mcpServers is a top-level key, and the file holds every server you have
configured. If it already has an mcpServers block, add jira-alerts-mcp as
another entry inside it β pasting the whole block above over the file replaces
whatever was already there.
Then quit Claude Desktop completely and reopen it β the file is read only at startup, and closing the window is not quitting. The server then appears under the connectors panel in the message composer.
Most other MCP clients accept that same JSON shape. There is no scope choice to
make here β claude_desktop_config.json is already per-user, the same reach as
--scope user on the CLI.
4. Check it works. Ask your agent to list your open alerts. That runs
jsm_list_alerts, which needs no ids and confirms your credentials and the
read:ops-alert scope that nine of the fourteen tools share.
Then ask who is on call, which runs jsm_list_schedules. That is a separate
check, because schedules need read:ops-config β if alerts work and schedules
return 401, nothing is wrong with your token; see
Required scopes below.
Things that catch people out: with claude mcp add the server name is the first
positional argument, before any flags; -y on npx skips the install prompt,
which an MCP client has no way to answer; and in zsh ${VAR} needs quoting. A
server added without --scope user works in the directory you added it from and
is simply missing everywhere else, with no error to explain the absence β if it
seems to have disappeared, run claude mcp list from a different directory
before touching anything else. For GUI-launched sessions the token has to live
in the env block of the config itself β the shell environment isn't inherited,
which is why the JSON above carries the credentials inline.
If the server never shows up in Claude Desktop, two causes account for almost all of it, and neither announces itself:
npx wasn't on the PATH. A GUI app is launched by the window manager, not
a shell, so a Node installed through nvm often isn't visible to it. Set
"command" to the absolute path from which node and point "args" at the
installed dist/index.js, or install Node system-wide. A Node older than 24
that is found fails as EBADENGINE rather than anything readable.~/Library/Logs/Claude/mcp-server-jira-alerts-mcp.log (Windows:
%APPDATA%\Claude\logs\), named after the key you used under mcpServers.
Look for Startup failed: β it names exactly what is wrong.You found @rrvrs/jira-alerts-mcp on GitHub Packages. That is a mirror of the
same build, published so the panel is not empty. GitHub Packages requires a
personal access token even for public packages, so installing from it needs auth
that npmjs.com does not.
Use npx jira-alerts-mcp above β that is
the package on npmjs.com,
installable anonymously, and the only supported install route. The two are
separate names on separate registries; nothing redirects between them.
Only needed to work on the server itself, or to run a revision that has not been released:
Then point your client at the build rather than at npx, so edits take effect without republishing:
| Variable | Required | Notes |
|---|---|---|
JSM_CLOUD_ID | yes | Your Atlassian site's cloud id (a UUID) |
JSM_EMAIL + JSM_API_TOKEN | one of | Create a token |
JSM_OAUTH_TOKEN | one of | OAuth 3LO bearer; takes precedence if set |
JSM_TOOLSETS | no | Which tool families to register β see Choosing your toolsets. Unset registers responder |
JSM_READ_ONLY | no | true withholds every write tool |
TRANSPORT | no | stdio (default) or http |
PORT / HOST | no | HTTP transport; defaults to 127.0.0.1:3000 |
ALLOWED_HOSTS | no | Comma-separated Host allowlist. Required if you set HOST beyond loopback β see SECURITY.md |
Credentials are validated at startup, so a bad config fails immediately with an actionable message rather than on the first tool call.
.env.example lists these for reference. The server does not
read .env itself β an MCP server is launched by its client, and the client owns
the environment. Use the file as a checklist for your client's env block, or
set -a; source .env; set +a for local development.
Both auth methods are not equivalent, and the difference is not documented by Atlassian. Verified against a live tenant on 2026-09-05:
The delete scopes are granted per token, not per authentication method. Two
Atlassian account API tokens for the same account behave differently: one was
refused on every DELETE with 401 Unauthorized; scope does not match β valid
credentials, missing grant β and another completed the whole set. So a 401 on a
delete is not a reason to abandon JSM_EMAIL + JSM_API_TOKEN. Reissue the
token with the delete scopes included, or supply a 3LO or Forge OAuth token
granted delete:ops-alert:jira-service-management as JSM_OAUTH_TOKEN. The 401
handler says exactly this, so the model reports it rather than retrying.
The delete-backed alert tools are jsm_delete_alert Β· jsm_delete_alert_note Β·
jsm_remove_alert_tags Β· jsm_remove_alert_extra_properties Β·
jsm_delete_alert_attachment.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/jira-alerts-jsm-operations)<a href="https://allmcps.com/mcp/jira-alerts-jsm-operations"><img src="https://allmcps.com/api/badge/jira-alerts-jsm-operations?style=directory" alt="Jira Alerts (JSM Operations) on AllMCPs" /></a>