Jira MCP Server
Provides tools to create Jira issues and list available issue types for a project using the Jira Cloud API.
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., "@Jira MCP Servercreate a task in project PROJ: update API documentation"
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.
Jira MCP Server
MCP (Model Context Protocol) server for Jira Cloud API integration. Create issues and list issue types using Basic Auth (email + API token).
Features
jira_create_issue – Create a new Jira issue with project, summary, and issue type
jira_list_issue_types – List available issue types for a project
Related MCP server: mcp-jira
Prerequisites
Node.js 24+
Jira Cloud site
Setup
Clone and install
cd jira_mcp npm installConfigure environment
Copy
.env.exampleto.envand fill in your values:cp .env.example .envJIRA_BASE_URL=https://your-domain.atlassian.net JIRA_EMAIL=user@example.com JIRA_API_TOKEN=your_api_token_hereBuild
npm run build
Usage
Run the server
npm startOr with env vars inline:
JIRA_BASE_URL=https://your-domain.atlassian.net JIRA_EMAIL=you@example.com JIRA_API_TOKEN=xxx npm startThe server runs via stdio and is intended to be used as a subprocess by MCP clients (e.g. Cursor, Claude Desktop).
Cursor configuration
Add to your Cursor MCP config (e.g. ~/.cursor/mcp.json):
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/path/to/jira_mcp/dist/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}Tools
jira_list_issue_types
List issue types (Bug, Task, Story, etc.) for a project.
Parameter | Type | Required | Description |
project_key | string | Yes | Jira project key (e.g. PROJ) |
response_format | string | No |
|
jira_create_issue
Create a new Jira issue.
Parameter | Type | Required | Description |
project_key | string | Yes | Jira project key |
summary | string | Yes | Issue title |
issue_type | string | Yes | Issue type name (e.g. Bug, Task) or ID |
description | string | No | Issue description |
response_format | string | No |
|
Testing Without Cursor
The best way to test the MCP server interactively is with MCP Inspector, a web UI for exercising tools, resources, and prompts.
Build the project (if not already done):
npm run buildRun MCP Inspector with your server. With a
.envfile in the project root, the server loads it automatically:npm run inspectorOr run directly (env from
.envis loaded by the server):npx @modelcontextprotocol/inspector node dist/index.jsTo pass env vars explicitly instead:
npx @modelcontextprotocol/inspector \ -e JIRA_BASE_URL=https://your-domain.atlassian.net \ -e JIRA_EMAIL=you@example.com \ -e JIRA_API_TOKEN=your-token \ node dist/index.jsOpen the Inspector in your browser (typically
http://localhost:6274).Test tools – Use the Tools tab to call
jira_list_issue_typesandjira_create_issuewith sample inputs.
The Inspector runs your server as a subprocess and connects via stdio, so it behaves like a real MCP client.
Development
# Run with auto-reload
npm run dev
# Run all tests (unit + integration)
npm test
# Run tests with coverage
npm run test:coverage
# Run integration tests only (spawns MCP server + mock Jira)
npm run test:integration
# Lint code
npm run lint
npm run lint:fix
# Format code
npm run format
npm run format:checkPre-commit hooks (Husky)
On each git commit, Husky runs lint and Prettier on staged files. If there are errors, the commit is blocked with a message:
❌ Commit blocked: Fix the lint or Prettier errors above.
Tips: npm run lint:fix | npm run formatTo bypass (use sparingly): git commit --no-verify or HUSKY=0 git commit
CI
GitHub Actions runs on pull requests to main/master with separate stages on Node.js 24.x:
Unit Tests –
npm run test:unit(90% coverage enforced)Integration Tests –
npm run test:integration(MCP server + mock Jira)Lint & Format – ESLint and Prettier checks
Security Audit –
npm audit(fails on moderate+ vulnerabilities)CodeQL – Static security analysis (JavaScript/TypeScript)
Dependency Review – Checks for vulnerable deps in PRs
Dependabot is configured for weekly dependency updates (.github/dependabot.yml).
To block merges until PRs pass, enable branch protection in GitHub: Settings → Branches → Add rule → Require status checks to pass before merging.
API Reference
License
MIT
Available Tools
2 toolsjira_create_issueCreate Jira IssueA
Create a new Jira issue in a project.
Creates an issue with the given project, summary, and issue type. Use jira_list_issue_types to discover valid issue types for a project.
Args:
project_key (string): Jira project key (e.g. PROJ)
summary (string): Issue title (required)
issue_type (string): Issue type name (e.g. Bug, Task) or numeric ID
description (string, optional): Issue description
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON: { "key": string, "id": string, "self": string } For Markdown: Summary with issue key and link
Examples:
Create a bug: project_key="PROJ", summary="Login fails", issue_type="Bug"
Create a task: project_key="DEMO", summary="Review docs", issue_type="Task"
Error Handling:
401: Check JIRA_EMAIL and JIRA_API_TOKEN
403: No create permission in project
404: Project or issue type not found
422: Validation error (e.g. missing required fields)
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | Issue title | |
| issue_type | Yes | Issue type name or ID | |
| description | No | Optional description | |
| project_key | Yes | Jira project key | |
| response_format | No | Output format | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already indicate a write operation), the description discloses authentication requirements (JIRA_EMAIL, JIRA_API_TOKEN), permission needs (403 error), and validation behavior (422). It also details return formats for both markdown and JSON, adding valuable context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Examples, Error Handling). It is concise yet comprehensive, with every sentence contributing actionable information. Front-loads the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains return values for both formats. It covers prerequisites, error scenarios, and examples, making it complete for a creation tool with robust annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds examples and clarifies that issue_type can be a name or numeric ID, reinforcing schema info with practical usage. Error handling explanations further enrich parameter context, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a new Jira issue in a project,' clearly specifying the action and resource. It distinguishes itself from sibling tool jira_list_issue_types by focusing on creation, not listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs users to jira_list_issue_types for discovering valid issue types, providing clear guidance on when to use an alternative. Error handling section also helps users know what to do in failure scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_list_issue_typesList Jira Issue TypesARead-onlyIdempotent
List issue types available for a Jira project.
Use this tool to discover which issue types (e.g. Bug, Task, Story) can be used when creating issues in a project. Returns id, name, and description for each type.
Args:
project_key (string): Jira project key (e.g. PROJ, DEMO)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON: { "issue_types": [{ "id": string, "name": string, "description": string }] } For Markdown: Formatted list of issue types
Examples:
"What issue types can I create in project PROJ?" -> project_key="PROJ"
Use before jira_create_issue to get valid issue_type values
Error Handling:
401: Check JIRA_EMAIL and JIRA_API_TOKEN
403: Insufficient permissions for the project
404: Project not found
| Name | Required | Description | Default |
|---|---|---|---|
| project_key | Yes | Jira project key | |
| response_format | No | Output format | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive, so the bar is lower. The description adds valuable context beyond that: error handling scenarios (401, 403, 404), return format details, and a note about permissions. These are genuine behavioral disclosures that help the agent anticipate outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage, args, returns, examples, errors). The first sentence immediately states the tool's function, and every sentence serves a purpose without redundancy. The error handling section is dense but valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by specifying the return structure for both format options. It also covers error handling, usage context, and integration with jira_create_issue. For a simple listing tool, this is a complete and self-contained specification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by providing explicit examples (e.g., "What issue types can I create in project PROJ?" -> project_key="PROJ") and clarifying the response_format default in a way that connects to use cases. This adds useful semantic guidance despite the schema being sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: "List issue types available for a Jira project." It clearly distinguishes from the sibling tool (jira_create_issue) by stating it is for discovery before creation, and the title itself is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says "Use this tool to discover which issue types can be used when creating issues" and "Use before jira_create_issue to get valid issue_type values." This provides clear when-to-use guidance and an alternative context, satisfying the dimension fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v1.0.0- First observed
jira_create_issue - First observed
jira_list_issue_types
TDQS
The two tools are completely distinct: one lists issue types for discovery, the other creates an issue. There is no overlap or ambiguity between them.
Both tools follow the same 'jira_verb_noun' pattern (jira_list_issue_types, jira_create_issue), making the naming predictable and consistent.
With exactly 2 tools, the server sits in the 'borderline thin' range. While the scope is clear, a Jira server typically needs more tools to be useful.
The tools cover only creation and issue-type lookup. Missing get, update, delete, search, and project listing means agents cannot verify or manage issues, leaving significant workflow gaps.
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 Connectors
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Read tickets, users, orgs, macros and satisfaction ratings; create, update and comment on tickets.
Enable interaction with Slack workspaces. Supports subscribing to Slack events through Resources.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
130
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Jira Cloud and Server/Data Center deployments for issue management, project tracking, and workflow automation. Supports multiple authentication methods including API tokens, OAuth 2.0, and personal access tokens.MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Jira issues, projects, and comments via API Key. Supports operations like creating, updating, searching, transitioning issues, and managing projects.640MIT
- AlicenseAqualityDmaintenanceEnables interaction with Jira issues via JQL search, epic management, comments, attachments, and issue CRUD, with support for both Cloud and Server/Data Center instances.918MIT
- AlicenseNot gradedqualityDmaintenanceEnables creating, fetching, and updating Jira issues via the REST API with support for ADF descriptions and common fields like priority, labels, and issue types.982Apache 2.0
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/vertigooxyz-devix/mcp-for-jira'
If you have feedback or need assistance with the MCP directory API, please join our Discord server