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. 03JQL による課題検索
  4. 04Jira REST API または MCP の利用

活用シーン

  1. 01Bug、Task、Story、Epic の記録
  2. 02自分の未完了課題の検索
  3. 03課題を Done に変更、またはコメントを追加

MCP 対応

Jira MCP サーバー経由、または 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 サーバー

シームレスに連携するには、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

よく使用するイシュータイプ

タイプ用途
バグ不具合の報告
タスク作業項目
ストーリーユーザー向け機能
エピック大規模な取り組み
サブタスクより大きなタスクの一部

イシューの更新

ステータスの変更
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 についてバグを記録して」説明付きのバグイシュー
「X のタスクを作成して」タスクイシュー
「自分の担当分は何?」JQL:assignee = currentUser() AND status != Done
「X を完了にして」イシューを「完了」に遷移
「X にコメントを追加して」イシューにコメントを追加

ベストプラクティス

  1. 概要:80 文字以内にし、動詞(Fix、Add、Update)で始めます
  2. 説明:バグの場合は再現手順を含めます
  3. ラベル:分類に使用します(frontend、backend、urgent)
  4. リンク:関連する場合は、関連イシューを参照します

コメント