opencode-jira-mcp
Provides tools for interacting with Jira Cloud, enabling issue tracking, project management, and agile features such as searching, creating, updating, transitioning issues, managing sprints, comments, attachments, and user assignments.
Click on "Deploy 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., "@opencode-jira-mcpFind all high-priority bugs in the PROJ project"
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.
opencode-jira-mcp
MCP (Model Context Protocol) server that connects opencode with Jira Cloud, exposing issue tracking, project management, and agile features as structured tools for AI agents.
Requirements
Node.js >= 18
A Jira Cloud account with an API token
An MCP client (such as opencode, Claude Desktop, or any MCP-compatible host)
Related MCP server: Jira MCP Server
Installation
1. Authenticate with GitHub Packages
Create or edit your ~/.npmrc file and add:
//npm.pkg.github.com/:_authToken=YOUR_GITHUB_TOKEN
@DevelopmentAgentSDD:registry=https://npm.pkg.github.comGet a GitHub token at Settings → Developer settings → Personal access tokens → Tokens (classic) with the
read:packagesscope.
2. Global install (recommended)
npm install -g @DevelopmentAgentSDD/opencode-jira-mcp3. Using npx (no install)
npx @DevelopmentAgentSDD/opencode-jira-mcpFrom source
git clone https://github.com/DevelopmentAgentSDD/MCP-JiraCloud.git
cd MCP-JiraCloud
npm ci
npm run buildConfiguration
The server requires three environment variables:
Variable | Description |
| Your Jira Cloud domain (e.g., |
| Email address of your Atlassian account |
| API token generated at https://id.atlassian.com/manage-profile/security/api-tokens |
Configuring in opencode
Add the server to your opencode.json:
{
"mcp": {
"jira": {
"type": "local",
"command": ["npx", "-y", "@DevelopmentAgentSDD/opencode-jira-mcp"],
"env": {
"JIRA_HOST": "my-company.atlassian.net",
"JIRA_EMAIL": "me@my-company.com",
"JIRA_API_TOKEN": "your-api-token-here"
}
}
}
}Security tip: avoid hardcoding the token. Use
{env:JIRA_API_TOKEN}interpolation so opencode reads it from the environment at runtime.
Configuring in Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "@DevelopmentAgentSDD/opencode-jira-mcp"],
"env": {
"JIRA_HOST": "my-company.atlassian.net",
"JIRA_EMAIL": "me@my-company.com",
"JIRA_API_TOKEN": "your-api-token-here"
}
}
}
}Available Tools
The server exposes 9 tools to the MCP host:
1. search_issues
Search for issues in Jira using structured parameters or raw JQL.
"Find all high-priority bugs in the PROJ project assigned to me"
"Search for issues containing 'login' in the summary or description"Parameters: projectKey, issueType, status, assignee, priority, labels, sprint, text, jql, startAt, maxResults, orderBy, fields
2. create_issue
Create a new Jira issue of any type (Task, Bug, Story, Epic, Subtask).
"Create a bug in PROJ: 'Login page crashes on mobile' with priority High"
"Create an Epic called 'Q2 Platform Migration' in the PROJ project"Parameters: projectKey, summary, issueType, description, priority, assignee, labels, parentKey (Subtask), epicName (Epic)
3. update_issue
Modify fields on an existing Jira issue.
"Update PROJ-123: change priority to Critical, add label 'security'"
"Set the assignee of PROJ-456 to unassigned"Parameters: issueKey, summary, description, priority, labels, assignee, components, customFields
4. transition_issue
Move an issue through its workflow or list available transitions.
"Move PROJ-123 to In Progress"
"What transitions are available for PROJ-456?"
"Close PROJ-789 with resolution 'Done'"Parameters: issueKey, transitionName, transitionId, resolution, comment, listTransitions
5. get_sprints
Retrieve sprints from a Jira board with optional issue details.
"Show me active sprints on the PROJ Scrum Board"
"List all sprints on board ID 42, including their issues"Parameters: boardId, boardName, state (active|future|closed), includeIssues, startAt, maxResults
6. assign_user
Assign or unassign a user to/from an issue.
"Assign PROJ-123 to John Doe"
"Unassign PROJ-456"Parameters: issueKey, accountId (set to null or "unassigned" to unassign)
7. manage_comments
List or add comments on a Jira issue.
"Show all comments on PROJ-123"
"Add a comment to PROJ-123: 'Fixed in PR #42, ready for review'"Parameters: action (list|add), issueKey, body (for add), startAt, maxResults
8. attach_file
Attach a file from the local filesystem to a Jira issue.
"Attach the file error-screenshot.png to PROJ-123"Parameters: issueKey, filePath (must exist, be readable, and <10 MB)
9. jira_health_check
Verify connectivity to Jira Cloud and validate authentication credentials.
"Check if the Jira connection is working"Parameters: none
Security
Token safety: the
JIRA_API_TOKENis never written to stdout, stderr, or error messages. All log entries and error responses redact the token.Headers sanitization:
Authorizationheaders are replaced withBasic [REDACTED]in all logs.Config sanitization: when logging the configuration, the token is displayed as
***SET***.Token rotation: generate new tokens at https://id.atlassian.com/manage-profile/security/api-tokens. The server picks up the new token on restart.
Troubleshooting
"JIRA_HOST is required"
Set the JIRA_HOST environment variable to your Jira Cloud domain without https://:
export JIRA_HOST=my-company.atlassian.net"JIRA_API_TOKEN is required"
Generate an API token at https://id.atlassian.com/manage-profile/security/api-tokens and set it:
export JIRA_API_TOKEN=your-generated-token"Authentication failed"
Verify your email matches the Atlassian account email
Ensure the API token is active (not revoked)
Check that
JIRA_HOSTis correct and does not includehttps://
"Access denied"
Your account does not have permission for the requested action. Verify your project permissions in Jira.
"Rate limit exceeded"
The server automatically retries with exponential backoff (up to 3 retries, max ~210s total). If you consistently hit rate limits, reduce request frequency or check your Jira Cloud plan limits.
Development
# Install dependencies
npm ci
# Run in development mode (with auto-reload)
npm run dev
# Type check
npm run typecheck
# Lint
npm run lint
# Format
npm run format
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Build for production
npm run buildProject structure
src/
index.ts # Entry point (shebang, main function)
config/ # Zod-based env var validation
auth/ # Basic Auth header builder
services/ # JiraClient (HTTP client with retry)
tools/ # 9 MCP tool handlers + centralized registration
transport/ # Stdio transport setup
types/ # TypeScript interfaces
utils/ # Errors, retry logic, sanitization
tests/
unit/ # Unit tests (vitest)
integration/ # Integration tests (nock for HTTP mocking)
fixtures/ # Mock Jira responsesTech stack
Category | Technology |
Language | TypeScript 5.5+ (strict mode) |
Runtime | Node.js >= 18 |
MCP SDK | @modelcontextprotocol/sdk ^1.0 |
Validation | Zod ^3.24 |
Logging | Pino ^9.0 |
Testing | Vitest + nock |
Linting | ESLint + Prettier |
License
MIT — see LICENSE for details.
Available Tools
9 toolsassign_userA
Assign a user to an issue or unassign the current user. Provide the issue key and the account ID of the user to assign. To unassign, use accountId: null or accountId: "unassigned". The assignee must have access to the issue's project.
Inputs: issueKey (required), accountId (required).
attach_fileA
Attach a local file to a Jira issue. Provide the issue key and the absolute or relative path to the file on the local filesystem. The file must exist and be readable. Maximum file size is 10 MB (Jira Cloud limit). Common file types are supported: images, PDFs, documents, logs. Returns attachment metadata including filename, size, MIME type, and URL.
Inputs: filePath (required), issueKey (required), fileName, mimeType.
create_issueA
Create a new issue in Jira. Requires at minimum: projectKey, summary, and issueType. Optionally accepts description, priority, assignee, labels, components, sprint assignment, parent issue (for subtasks), epic link, and custom fields. Returns the created issue key, ID, and URL. Before creating, consider using search_issues to check for potential duplicates.
Inputs: summary (required), issueType (required), projectKey (required), labels, +11 more.
get_sprintsA
Get sprints from a Jira board. You can specify a boardId directly or provide a boardName to look it up. Filter sprints by state: active, future, or closed. Optionally include the issues within each sprint. Use this to see what work is planned or in progress for a team.
Inputs: state, boardId, startAt, boardName, +2 more.
jira_health_checkA
Verify connectivity to Jira Cloud and validate the current authentication credentials. Makes a lightweight call to the Jira API to confirm the host, email, and API token are correctly configured. Returns the authenticated user's identity and Jira instance information. Use this to diagnose connection issues before running other tools.
Inputs: no named parameters.
manage_commentsA
Manage comments on a Jira issue. Use action "list" to read all comments, or action "add" to create a new comment. Comments support Jira markdown syntax including @mentions. When adding, the body field is required. The list action supports pagination.
Inputs: action (required), issueKey (required), body, startAt, +1 more.
search_issuesA
Search for issues in Jira using JQL (Jira Query Language). Supports filtering by project, type, status, assignee, priority, labels, sprint, and free-text search. Results are paginated. By default returns the first 50 matching issues. Use this to find existing issues before creating duplicates.
Inputs: jql, text, fields, labels, +9 more.
transition_issueA
Transition an issue through its workflow. You can either execute a transition by name or ID, or list all available transitions from the current state. Some transitions require a resolution (e.g., "Done" may require "Fixed", "Won't Fix", etc.). Use listTransitions=true to discover what transitions are available before attempting one.
Inputs: issueKey (required), comment, resolution, transitionId, +2 more.
update_issueA
Update editable fields of an existing issue. You can modify: summary, description, priority, labels, components, and custom fields. To change the issue status, use transition_issue instead. At least one field besides issueKey must be provided. Labels and components completely replace existing values.
Inputs: issueKey (required), labels, summary, priority, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
TDQS
Scored across 9 tools
Each tool targets a distinct aspect of Jira: searching, creating, updating, transitioning issues, health check, sprint retrieval, user assignment, comment management, and file attachment. No overlap in functionality.
Most tools follow a clear verb_noun pattern (search_issues, create_issue, update_issue, transition_issue, get_sprints, assign_user, manage_comments, attach_file). 'jira_health_check' breaks the pattern but remains descriptive and distinguishable.
9 tools is well-scoped for a Jira MCP server, covering essential CRUD and lifecycle operations without bloat. Each tool serves a necessary role.
Covers core issue management: search, create, update, transition, assign, comments, attachments, and sprint visibility. Minor gaps like absence of a dedicated get_issue, comment editing, or project-level tools, but still highly functional for typical workflows.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server for Atlassian Jira that enables AI assistants to manage issues, sprints, comments, and worklogs through natural language.MIT
- AlicenseNot gradedqualityDmaintenanceA server that exposes Jira Cloud operations as MCP tools, enabling programmatic management of Epics, Stories, Tasks, and Sprints directly from an AI chat or agentic workflow.1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Jira Cloud — gives AI agents full context and control over Jira issues, projects, sprints, and workflows.17 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server that provides AI assistants with access to Jira Cloud for issue management, search, and workflow operations.-