Jira MCP Server
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
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