opencode-jira-mcp
MCP server that connects opencode with Jira Cloud, exposing issue tracking, project management, and agile features as structured tools for AI agents.
README
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)
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.com
Get 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-mcp
3. Using npx (no install)
npx @DevelopmentAgentSDD/opencode-jira-mcp
From source
git clone https://github.com/DevelopmentAgentSDD/MCP-JiraCloud.git
cd MCP-JiraCloud
npm ci
npm run build
Configuration
The server requires three environment variables:
| Variable | Description |
|---|---|
JIRA_HOST |
Your Jira Cloud domain (e.g., my-company.atlassian.net) — do not include https:// |
JIRA_EMAIL |
Email address of your Atlassian account |
JIRA_API_TOKEN |
API token generated at https://id.atlassian.com/manage-profile/security/api-tokens |
Configuring in opencode.json
Add the server to your opencode.json or MCP client configuration:
{
"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 build
Project 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 responses
Tech 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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。