一个基于TypeScript的MCP服务器,与Jira集成,允许Cursor与Jira工单进行交互。
要通过Smithery自动安装Cursor的Jira MCP服务器:
npx -y @smithery/cli install @kornbed/jira-mcp-server --client claude
npm install
.env.example创建一个.env文件,并填写您的Jira凭据:JIRA_HOST=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=your-api-token
PORT=3000
获取您的Jira API令牌:
.env文件中运行开发服务器:
npm run dev
构建项目:
npm run build
启动服务器:
npm start
要使用此MCP服务器与Cursor集成,您有两个选项:
npm run build
打开Cursor设置:
添加MCP配置:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/path/to/jira-mcp-cursor/dist/server.js"]
}
}
}
将/path/to/jira-mcp-cursor替换为您项目的绝对路径。
npm start
打开Cursor设置:
添加MCP配置:
{
"mcpServers": {
"jira": {
"url": "http://localhost:3000",
"capabilities": [
"list_tickets",
"get_ticket",
"get_comments",
"create_ticket",
"update_status",
"add_comment"
]
}
}
}
}
配置MCP服务器后,您可以在Cursor中直接使用Jira命令:
/jira list - 列出您的工单/jira view TICKET-123 - 查看工单详情/jira comments TICKET-123 - 获取工单评论/jira create - 创建新的工单/jira comment TICKET-123 - 添加评论/jira status TICKET-123 - 更新工单状态该服务器实现了Cursor所需的Model-Client-Protocol (MCP):
检索Jira工单列表,可选地通过JQL查询过滤。
端点: GET /api/tickets
查询参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| jql | 字符串 | 否 | 用于过滤工单的Jira查询语言(JQL)字符串 |
示例请求:
GET /api/tickets?jql=project=TEST+AND+status=Open
示例响应:
TEST-123: 示例工单 (打开)
TEST-124: 另一个工单 (进行中)
检索特定工单的详细信息。
端点: GET /api/tickets/:id
路径参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | 字符串 | 是 | Jira工单ID(例如,TEST-123) |
示例请求:
GET /api/tickets/TEST-123
示例响应:
编号:TEST-123
摘要:示例工单
状态:打开
类型:任务
描述:
详细的工单描述
检索特定工单的所有评论。
端点: GET /api/tickets/:id/comments
路径参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | 字符串 | 是 | Jira工单ID(例如,TEST-123) |
示例请求:
GET /api/tickets/TEST-123/comments
示例响应:
[2024年3月20日, 上午10:00:00] John Doe:
评论文本
---
[2024年3月20日, 上午9:30:00] Jane Smith:
另一个评论
---
创建一个新的Jira工单。
端点: POST /api/tickets
请求体:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| 摘要 | 字符串 | 是 | 工单摘要 |
| 描述 | 字符串 | 是 | 工单描述 |
| 项目键 | 字符串 | 是 | 项目键(例如,TEST) |
| 问题类型 | 字符串 | 是 | 问题类型(例如,任务、错误) |
示例请求:
POST /api/tickets
Content-Type: application/json
{
"摘要": "新功能请求",
"描述": "实现新功能",
"项目键": "TEST",
"问题类型": "任务"
}
示例响应:
创建工单:TEST-124
向现有工单添加新的评论。
端点: POST /api/tickets/:id/comments
路径参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | 字符串 | 是 | Jira工单ID(例如,TEST-123) |
请求体:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| 内容 | 字符串 | 是 | 评论文本 |
示例请求:
POST /api/tickets/TEST-123/comments
Content-Type: application/json
{
"内容": "这是一个新的评论"
}
示例响应:
向TEST-123添加了评论
更新现有工单的状态。
端点: POST /api/tickets/:id/status
路径参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | 字符串 | 是 | Jira工单ID(例如,TEST-123) |
请求体:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| 转换ID | 字符串 | 是 | 要执行的转换ID |
示例请求:
POST /api/tickets/TEST-123/status
Content-Type: application/json
{
"转换ID": "21"
}
示例响应:
更新了TEST-123的状态
在指定项目中使用文本搜索查找工单。
端点: GET /api/tickets/search
查询参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| 搜索文本 | 字符串 | 是 | 在工单中搜索的文本 |
| 项目键 | 字符串 | 是 | 要在其搜索的项目键的逗号分隔列表 |
| 最大结果数 | 数字 | 否 | 返回的最大结果数(默认:50) |
示例请求:
GET /api/tickets/search?搜索文本=登录错误&项目键=TEST,PROD&最大结果数=10
示例响应:
找到2个匹配“登录错误”的工单
[TEST] TEST-123: 登录页面错误
状态:打开(更新时间:2024年3月20日, 上午10:00:00)
描述:
用户无法使用SSO登录
----------------------------------------
[PROD] PROD-456: 解决登录性能问题
状态:进行中(更新时间:2024年3月19日, 下午3:30:00)
描述:
登录页面加载时间过长
----------------------------------------