mcp-server-jira
This MCP server enables an AI agent to comprehensively manage a self-hosted Jira instance via the Jira REST API v2 and Agile/GreenHopper APIs, providing 16 tools across the following areas:
Story Management
Create, retrieve, update, search (JQL-backed), and delete stories
Specify summary, description, acceptance criteria, labels, priority, story points, and optional Outline PRD links
Add comments to stories
Workflow & Guarded Actions
Transition stories through workflow states (e.g., To Do → In Progress → Done)
Terminal transitions (e.g., Done/Closed) and destructive actions (e.g., delete) require explicit
confirm: true
Multi-Project & Admin Management
List all visible projects and retrieve project metadata (priorities, issue types)
Create new projects and global issue types (admin only, requires
confirm: true)
Agile Management (Jira Software required)
List Agile boards (scrum/kanban) and sprints with state and date info
Retrieve sprint burndown data (committed vs. completed vs. remaining points, issue counts, GreenHopper time-series) for AI analysis
Create boards and sprints (requires
confirm: true)
Safety Features
Read-only tools (
get_*,search_*,list_*) are annotated as safeHigh-impact or destructive operations require
confirm: trueor return a warning without actingAll tools return structured JSON, including structured error objects
Configuration & Transport
Configured via environment variables or a JSON config file (Jira URL, credentials, default project key, custom field IDs)
Uses HTTP Basic Auth (email + API token)
Communicates via stdio using MCP JSON-RPC
Manages Jira Stories via the Jira REST API v2, providing CRUD operations, workflow transitions, search, and project info for Jira issues.
Provides agile burndown data, sprint and board listing for Jira Software projects, enabling AI-driven analysis of sprint progress.
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., "@mcp-server-jirashow me open stories in project PRD"
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.
@deomi/mcp-server-jira
A Model Context Protocol (MCP) server that lets an AI agent manage a self-hosted Jira instance over the Jira REST API v2 — create and edit Stories, search, transition workflows, manage boards & sprints, read burndown data, and (with confirmation) perform admin actions. Built for a PRD automation workflow, usable as a general Jira agent backend.
Transport: stdio
Auth: HTTP Basic (
email:api_token)16 tools across Story CRUD, workflow, multi-project, and Agile
Safety first: read/write/destructive annotations + server-enforced confirmation on risky actions
Table of contents
Related MCP server: Jira MCP Integration
Install
Once published, run it directly with npx (no global install needed):
npx -y @deomi/mcp-server-jiraOr install globally:
npm install -g @deomi/mcp-server-jira
mcp-server-jiraOr from source:
git clone https://github.com/sina-haseli/mcp-server-jira.git
cd mcp-server-jira
npm install
npm run build
node dist/index.jsThe server reads config from the environment, so it won't do anything useful until you supply credentials (see below). It logs to stderr and speaks MCP JSON-RPC on stdout.
Configuration
Provide settings in either of two ways. Per-setting precedence is: environment variable → config file.
Option A — a single config file (recommended for desktop clients)
Point JIRA_MCP_CONFIG at a JSON file:
{
"baseUrl": "https://jira.yourcompany.com",
"userEmail": "you@yourcompany.com",
"apiToken": "your_api_token_here",
"projectKey": "PRD",
"storyIssueType": "Story",
"outlineLinkField": "customfield_10100",
"storyPointsField": "customfield_10016"
}A template is provided in jira-mcp.config.example.json. Keep your
real file out of version control (the default .gitignore already ignores jira-mcp.config.json).
Option B — environment variables
Variable | Required | Description |
| ✅ | Base URL, e.g. |
| ✅ | Account email/username for Basic Auth |
| ✅ | API token / Personal Access Token (or password) for Basic Auth |
| ➖ | Default project key (optional — override per call) |
| ➖ | Story issue type name (default |
| ➖ | Custom field id for the Outline link (e.g. |
| ➖ | Custom field id for story points (default |
| ➖ | Path to a JSON config file (Option A) |
Required settings are validated at startup; if any are missing the server logs a clear error to
stderr and exits. JIRA_PROJECT_KEY is optional — see Multiple projects.
All API calls target ${JIRA_BASE_URL}/rest/api/2 (core), /rest/agile/1.0 (boards & sprints),
and /rest/greenhopper/1.0 (burndown).
Use with Claude Desktop
Open Settings → Developer → Edit Config (creates %APPDATA%\Claude\claude_desktop_config.json
on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS) and add:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["D:\\projects\\mcp-server-jira\\dist\\index.js"],
"env": {
"JIRA_MCP_CONFIG": "D:\\projects\\mcp-server-jira\\jira-mcp.config.json"
}
}
}
}Or, once published to npm, with no local checkout:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "@deomi/mcp-server-jira"],
"env": {
"JIRA_MCP_CONFIG": "D:\\projects\\mcp-server-jira\\jira-mcp.config.json"
}
}
}
}Fully quit Claude Desktop (tray → Quit, not just close the window) and reopen. Then run
get_project_info from the chat to confirm auth and connectivity.
Tools
Story CRUD
Tool | Purpose |
| Create a Story from a PRD (acceptance criteria + Outline link) |
| Fetch a Story's key fields by issue key |
| Update selected fields of a Story |
| JQL text search for Stories (duplicate detection) |
| Project metadata: priorities, issue types, story type id |
| Add a plain-text comment to a Story |
Workflow & guarded actions
Tool | Purpose |
| List or perform workflow transitions. Transitions to Done/Closed need |
| Permanently delete a Story. Requires |
Projects (multi-project)
Tool | Purpose |
| List all visible projects (discover |
| Admin. Create a project. Requires |
| Admin. Create a global issue type. Requires |
Agile / burndown (requires Jira Software)
Tool | Purpose |
| List Agile boards (scrum/kanban) — get a board id |
| List a board's sprints with start/end dates and state |
| Burndown data for AI analysis (committed vs done vs remaining) |
| Create a scrum/kanban board from a saved filter. Requires |
| Create a sprint on a board. Requires |
Every tool returns structured JSON. Errors are returned as structured objects
({ error: true, message, ... }) — the server never throws unhandled exceptions out of a tool.
Safety: human approval for risky actions
Two complementary mechanisms protect destructive and high-impact operations:
MCP annotations — every tool declares
readOnlyHint/destructiveHint/idempotentHint/openWorldHint. The host (e.g. Claude) uses these to decide when to prompt the human. Read-only tools (get_*,search_*,list_*) are flagged as such;update_storyanddelete_storyare flagged destructive.Server-enforced confirmation —
delete_story, terminaltransition_storycalls, and all admincreate_*tools (create_project,create_issue_type,create_board,create_sprint) require an explicitconfirm: true. Without it the tool makes no API call and returns arequires_confirmationwarning describing the impact, so the agent (and human) must opt in deliberately.
Multiple projects
JIRA_PROJECT_KEY / projectKey is an optional default. Every project-scoped tool
(create_story, search_stories, get_project_info, list_boards) accepts an optional
project_key argument that overrides the default for that call. Use list_projects to discover
available keys. If no project_key is passed and no default is configured, the tool returns a clear
error rather than guessing.
Burndown
An MCP server can't return a rendered chart image, but get_sprint_burndown returns the underlying
data: a reliable computed summary (committed / completed / remaining story points and issue
counts by status, derived from the sprint's issues) plus a best-effort raw GreenHopper burndown
time-series (burndown_chart_raw) when that internal endpoint is available. The AI can summarize
progress, flag scope changes, and describe the burndown from this data. Story points are read from
JIRA_STORY_POINTS_FIELD.
Development
npm install
npm run dev # ts-node src/index.ts
npm run build # tsc -> dist/
npm start # node dist/index.jsProject layout:
src/
├── index.ts # bootstrap (stdio transport)
├── config.ts # env / config-file loading + validation
├── logger.ts # stderr logger
├── jira/
│ ├── client.ts # axios clients (core / agile / greenhopper) + browseUrl
│ └── errors.ts # error mapping + ok()/fail() result helpers
└── tools/
├── index.ts # registerAllTools()
├── shared.ts # registerTool wrapper, annotations, confirm + project helpers
└── *.ts # one file per toolReleasing
Releases are automated by .github/workflows/release.yml: pushing a
v* tag builds the package, publishes it to npm (with provenance), and creates a GitHub Release with
auto-generated notes.
One-time setup: add a repo secret NPM_TOKEN (an npm Automation access token) under
Settings → Secrets and variables → Actions.
Cut a release:
npm version patch # or minor / major — bumps package.json and creates the tag
git push --follow-tagsThe workflow verifies the tag matches package.json before publishing.
License
MIT © Sina Haseli
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
- 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/sina-haseli/mcp-server-jira'
If you have feedback or need assistance with the MCP directory API, please join our Discord server