Jira Service Desk Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Jira Service Desk Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP (Model Context Protocol) server for Jira Service Management (formerly Jira Service Desk). Connects AI assistants — Claude Code, Claude Desktop, Cursor, and others — to your JSM instance via Anthropic's MCP.
Built on top of atlassian-python-api and inspired by mcp-atlassian.
| Category | Tools |
|---|---|
| Service Desks | List desks, get desk by ID, app info |
| Request Types | List types, get type details, get required fields |
| Customer Requests | Create, get, list my requests, get status |
| Comments | Add public/internal comments, list, get by ID |
| Customers | Create customer, list, add/remove from desk |
| Participants | List, add, remove request participants |
| Transitions | List available transitions, perform transition |
| Organizations | CRUD organizations, manage users, link to desks |
| Queues | List queues, list issues in queue |
| SLA | Get SLA info per request, by metric ID |
| Approvals | List approvals, get by ID, approve/decline |
| Attachments | Upload temp file, attach to request |
40 tools total. Write operations are gated by READ_ONLY_MODE.
pip install jira-service-desk-mcpOr with uv:
uv pip install jira-service-desk-mcpOr install from source:
pip install -e .Copy .env.example to .env and fill in your credentials:
cp .env.example .envRecommended shared format (same env shape as mcp-atlassian):
JIRA_URL=https://jira.your-company.com
JIRA_PERSONAL_TOKEN=<base64-encoded username:token>Use a base64-encoded username:token string when you want one MCP config style that works across both mcp-atlassian and jira-service-desk-mcp for Atlassian Cloud. On non-Cloud/self-hosted Jira instances, JIRA_PERSONAL_TOKEN now defaults to Bearer/PAT handling to avoid misclassifying base64-looking PATs. If you intentionally need basic auth there, set JIRA_PERSONAL_TOKEN_MODE=basic.
Alternative: Atlassian Cloud (username + API token):
JIRA_URL=https://your-instance.atlassian.net
[email protected]
JIRA_API_TOKEN=your-api-tokenGenerate an API token at https://id.atlassian.com/manage-profile/security/api-tokens.
Alternative: Server / Data Center (raw Personal Access Token):
JIRA_URL=https://jira.your-company.com
JIRA_PERSONAL_TOKEN=your-personal-access-tokenThe token can be either a raw PAT (bearer token), the full Bearer <token> header value, or a base64-encoded `username:api_token` string. The server strips Bearer automatically when present.
For non-Cloud/self-hosted Jira, JIRA_PERSONAL_TOKEN is treated as Bearer/PAT by default, even if it looks like base64. This avoids accidental fallback to Basic auth for PATs that happen to decode cleanly. If you need to force Basic auth from JIRA_PERSONAL_TOKEN, set:
JIRA_PERSONAL_TOKEN_MODE=basicNote:JIRA_IS_CLOUDis auto-detected from the URL (.atlassian.net→ Cloud). Set it explicitly only if the heuristic is wrong for your instance.
stdio (default — for Claude Code, Claude Desktop, Cursor, etc.):
jira-service-desk-mcpSSE (for remote/web clients):
jira-service-desk-mcp --transport sse --port 8000The fastest way to connect JSM to Claude Code:
claude mcp add jira-service-desk -- jira-service-desk-mcpWith environment variables inline:
claude mcp add jira-service-desk \
-e JIRA_URL=https://jira.your-company.com \
-e JIRA_PERSONAL_TOKEN=<base64-encoded username:token> \
-- uvx jira-service-desk-mcpTo scope the server to your project only:
claude mcp add --scope project jira-service-desk \
-e JIRA_URL=https://jira.your-company.com \
-e JIRA_PERSONAL_TOKEN=<base64-encoded username:token> \
-- uvx jira-service-desk-mcpVerify it works:
claude mcp listAdd the same shape to ~/.claude.json, project-level .mcp.json, claude_desktop_config.json, or .cursor/mcp.json:
{
"mcpServers": {
"mcp-atlassian": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-atlassian"],
"env": {
"JIRA_URL": "https://jira.your-company.com",
"JIRA_PERSONAL_TOKEN": "<base64-encoded username:token>"
}
},
"jira-service-desk": {
"type": "stdio",
"command": "uvx",
"args": ["jira-service-desk-mcp"],
"env": {
"JIRA_URL": "https://jira.your-company.com",
"JIRA_PERSONAL_TOKEN": "<base64-encoded username:token>"
}
}
}
}This mirrors the mcp-atlassian configuration style for Atlassian Cloud while still allowing jira-service-desk-mcp to distinguish Cloud basic-auth tokens from non-Cloud Bearer/PAT tokens.
| Variable | Required | Description |
|---|---|---|
JIRA_URL | Yes | Jira instance URL |
JIRA_USERNAME | Cloud | Email for Atlassian Cloud |
JIRA_API_TOKEN | Cloud | API token for Cloud auth |
JIRA_PERSONAL_TOKEN | Recommended | Raw PAT or base64-encoded username:token |
JIRA_PERSONAL_TOKEN_MODE | No | auto (default), pat, or basic override for JIRA_PERSONAL_TOKEN |
JIRA_PASSWORD | — | Basic auth password (not recommended) |
JIRA_IS_CLOUD | No | Auto-detected from URL; set explicitly to override |
JIRA_SSL_VERIFY | No | true (default) or false |
READ_ONLY_MODE | No | true to disable all write operations |
get_service_desk_info — Application infolist_service_desks — All accessible service desksget_service_desk — Service desk by IDlist_request_types — Request types for a deskget_request_type — Specific request typeget_request_type_fields — Fields required for a request typecreate_customer_request — Create a new requestget_customer_request — Get request by keylist_my_customer_requests — Your requestsget_customer_request_status — Request statusadd_request_comment — Add public or internal commentlist_request_comments — List comments on a requestget_request_comment — Get comment by IDcreate_customer — Create customer accountlist_customers — List customers of a deskadd_customers_to_service_desk — Add customersremove_customers_from_service_desk — Remove customerslist_request_participants — List participantsadd_request_participants — Add participantsremove_request_participants — Remove participantslist_customer_transitions — Available transitionsperform_transition — Execute a transitionlist_organizations — List organizationsget_organization — Organization by IDcreate_organization — Create organizationdelete_organization — Delete organizationadd_organization_to_service_desk — Link org to deskremove_organization_from_service_desk — Unlink orglist_users_in_organization — Users in orgadd_users_to_organization — Add users to orgremove_users_from_organization — Remove users from orglist_queues — Queues in a service desklist_issues_in_queue — Issues in a queueget_request_sla — SLA info for a requestget_request_sla_by_id — Specific SLA metriclist_approvals — Approvals for a requestget_approval — Approval by IDanswer_approval — Approve or declineupload_temporary_attachment — Upload temp fileattach_file_to_request — Attach to requestsrc/mcp_jira_service_desk/
├── __init__.py # CLI entry point (click)
├── __main__.py # python -m support
├── config.py # Environment-based configuration
├── client.py # ServiceDeskClient — wraps atlassian-python-api
├── formatting.py # Human-readable formatting for API responses
└── server.py # FastMCP server with all tool definitionsJIRA_* env vars, determines auth typeatlassian.ServiceDesk, normalizes paginated responsesFastMCP instance with @mcp.tool() decorators for each operationgit clone https://github.com/CzSadykov/jira-service-desk-mcp.git
cd jira-service-desk-mcp
pip install -e ".[dev]"
pytestMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.