mcpField
J
jira-issues

jira-issues

github.com/moizibnyousaf生产力1.2k146 次安装5 周前更新
代码仓库

关于 jira-issues

用于通过 Jira REST API 或 MCP 创建和管理 Jira 问题的技能,面向需要记录、检索和更新工作项的用户。涵盖常见问题类型、状态变更、评论和 JQL 搜索。

主要功能

  1. 01创建带类型、标签和优先级的问题
  2. 02更新问题状态并添加评论
  3. 03使用 JQL 搜索问题
  4. 04支持 Jira REST API 或 MCP

适用场景

  1. 01记录 Bug、任务、Story 或 Epic
  2. 02查找当前用户未完成的问题
  3. 03将问题转为 Done 或添加评论

MCP 相关

可通过 Jira MCP 服务管理 Jira 问题,也可直接使用 Jira REST API。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/moizibnyousaf/ai-agent-skills --skill jira-issues

安装后在 Claude Code 中输入/jira-issues确认已加载。

详细介绍

Jira 问题管理

使用 Jira REST API 或 MCP 创建和管理 Jira 问题。

设置

选项 1:Jira MCP Server

安装 Jira MCP 服务,实现无缝集成:

npx @anthropic/create-mcp-server jira
选项 2:直接调用 API

设置环境变量:

export JIRA_BASE_URL="https://yourcompany.atlassian.net"
export JIRA_EMAIL="[email protected]"
export JIRA_API_TOKEN="your-api-token"

获取 API 令牌:https://id.atlassian.com/manage-profile/security/api-tokens

创建问题

基本问题
import requests
from requests.auth import HTTPBasicAuth
import os

def create_issue(project_key, summary, description, issue_type="Task"):
    url = f"{os.environ['JIRA_BASE_URL']}/rest/api/3/issue"

    auth = HTTPBasicAuth(
        os.environ['JIRA_EMAIL'],
        os.environ['JIRA_API_TOKEN']
    )

    payload = {
        "fields": {
            "project": {"key": project_key},
            "summary": summary,
            "description": {
                "type": "doc",
                "version": 1,
                "content": [{
                    "type": "paragraph",
                    "content": [{"type": "text", "text": description}]
                }]
            },
            "issuetype": {"name": issue_type}
        }
    }

    response = requests.post(url, json=payload, auth=auth)
    return response.json()

# Example
issue = create_issue("PROJ", "Fix login bug", "Users can't login with SSO", "Bug")
print(f"Created: {issue['key']}")
添加标签和优先级
def create_detailed_issue(project_key, summary, description,
                          issue_type="Task", priority="Medium",
                          labels=None, assignee=None):
    payload = {
        "fields": {
            "project": {"key": project_key},
            "summary": summary,
            "description": {
                "type": "doc",
                "version": 1,
                "content": [{
                    "type": "paragraph",
                    "content": [{"type": "text", "text": description}]
                }]
            },
            "issuetype": {"name": issue_type},
            "priority": {"name": priority},
        }
    }

    if labels:
        payload["fields"]["labels"] = labels
    if assignee:
        payload["fields"]["assignee"] = {"accountId": assignee}

    # ... make request

常见问题类型

类型用途
Bug某项功能无法正常使用
Task工作项
Story面向用户的功能
Epic大型计划
Sub-task较大任务的一部分

更新问题

更改状态
def transition_issue(issue_key, transition_name):
    # Get available transitions
    url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/transitions"
    transitions = requests.get(url, auth=auth).json()

    # Find matching transition
    transition_id = None
    for t in transitions['transitions']:
        if t['name'].lower() == transition_name.lower():
            transition_id = t['id']
            break

    # Execute transition
    requests.post(url, json={"transition": {"id": transition_id}}, auth=auth)
添加评论
def add_comment(issue_key, comment_text):
    url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/comment"

    payload = {
        "body": {
            "type": "doc",
            "version": 1,
            "content": [{
                "type": "paragraph",
                "content": [{"type": "text", "text": comment_text}]
            }]
        }
    }

    requests.post(url, json=payload, auth=auth)

搜索问题

JQL 查询
def search_issues(jql):
    url = f"{JIRA_BASE_URL}/rest/api/3/search"
    params = {"jql": jql, "maxResults": 50}
    response = requests.get(url, params=params, auth=auth)
    return response.json()['issues']

# Examples
my_bugs = search_issues("project = PROJ AND type = Bug AND assignee = currentUser()")
open_items = search_issues("project = PROJ AND status != Done")
recent = search_issues("project = PROJ AND created >= -7d")

快捷命令

当用户说……时,执行以下操作:

命令操作
“记录关于 X 的 Bug”创建带描述的 Bug 问题
“为 X 创建任务”创建 Task 问题
“我有哪些待办事项”JQL:assignee = currentUser() AND status != Done
“将 X 移至已完成”将问题转换为 Done 状态
“给 X 添加评论”为问题添加评论

最佳实践

  1. 摘要:控制在 80 个字符以内,以动词开头(Fix、Add、Update)
  2. 描述:Bug 问题应包含复现步骤
  3. 标签:用于分类(frontend、backend、urgent)
  4. 链接:在适当时引用相关问题

评论

支持 Markdown