mcpField
J
jira-read

jira-read

github.com/fudesign2008生产力686 次安装今天更新
代码仓库

关于 jira-read

jira-read 是用于读取 Jira 工单数据的 Agent 技能,优先使用本地 Markdown 缓存,也可按需从 API 获取和更新。它支持批量读取、摘要或完整内容输出,并避免将附件内容载入 Agent 上下文。

主要功能

  1. 01读取并解析本地工单缓存
  2. 02按需从 Jira API 获取工单
  3. 03批量读取多个工单
  4. 04输出摘要、完整内容或元数据
  5. 05列出缓存条目

适用场景

  1. 01快速查看已缓存的 Jira 工单
  2. 02缺少缓存时获取最新工单数据
  3. 03一次整理多个工单的摘要

MCP 相关

此技能可通过 jira_get_issue 获取工单;README 提及 mcp-atlassian 可选用于提供凭据,但并非必需。

安装

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

$npx skills add https://github.com/fudesign2008/open-skills --skill jira-read

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference.md
scripts/
download_jira_attachments.mjs
download_jira_attachments.sh
resolve-jira-token.mjs
resolve-jira-token.test.mjs

详细介绍

Jira 读取 — 执行规则

从本地缓存快速读取已下载的 Jira 数据,无需访问网络。

配置

使用前设置缓存目录环境变量(建议添加到 .zshrc / .bashrc):

export JIRA_CACHE_DIR="$HOME/.cache/jira"

如果未设置,默认使用 ~/.cache/jira/。

触发条件与参数

主要触发方式:jira-read [JIRA-ID] — 不区分大小写(会自动转换为大写)

用法行为输出模式
jira-read {ID}读取本地缓存;若缺失则自动从 API 获取摘要
jira-read {ID} --live跳过缓存,从 API 获取并更新缓存摘要
jira-read {ID} --force强制从 API 获取,覆盖本地缓存摘要
jira-read {ID} --no-download仅读取本地;若缺失则提示摘要
jira-read {ID} --full与默认行为相同,输出完整内容,包括所有评论完整
jira-read {ID} --meta与默认行为相同,仅输出 YAML front matter元数据
jira-read ID1 ID2 ID3从本地缓存批量读取摘要
jira-read --live ID1 ID2 ID3从 API 批量获取并缓存摘要
jira-read --force ID1 ID2 ID3批量强制重新获取(覆盖本地缓存)摘要
jira-read --list / -l列出所有本地缓存条目列表

存储路径

  • 主文件:$JIRA_CACHE_DIR/{JIRA-ID}.md
  • 字段映射缓存:$JIRA_CACHE_DIR/.field-mapping.json

首次使用时,会自动调用 jira_search_fields 来构建字段 ID 映射;后续读取将直接使用缓存。--force 会刷新映射。


执行流程

步骤 1:解析 Jira ID

提取 ID(正则表达式:([A-Za-z]+-\d+))并转换为大写,构建本地文件路径。

步骤 2:检查文件是否存在

文件存在:继续步骤 3

文件不存在:

  • 在进行任何 API 调用前,通过凭据链(见下文)解析 PAT
  • 默认行为:调用 jira_get_issue(issue_key="{JIRA-ID}", fields="*all", comment_limit=50) → 成功后,格式化并保存,然后继续;失败时,按“错误处理”进行分类
  • --no-download:仅提示,不自动下载
  • --live:跳过本地检查,从 API 获取并更新缓存
  • --force:从 API 获取并覆盖本地缓存
步骤 3:读取、解析并输出

读取 Markdown → 解析 YAML front matter 和正文 → 以结构化 Markdown 输出。

已解析字段:jira_id、title、priority、status、reporter、assignee、created_at、updated_at、downloaded_at、source_url;正文包含问题描述、复现步骤、预期结果/实际结果和评论历史。

附件处理:绝不将附件内容读入 Agent 上下文。如果问题包含附件(日志、截图),请在输出末尾注明。用户需要实际附件(日志)时,请按照下文“附件下载”部分操作。

各场景的输出格式示例:参见 reference.md


凭据解析(任何实时获取之前)

在调用 MCP/jira_get_issue、使用 --live/--force 或下载附件之前,先运行此链。mcp-atlassian 是填充第 1 步的可选方式,并非必需。

  1. 环境变量 JIRA_PERSONAL_TOKEN(规范名称)
  2. 否则使用环境变量 JIRA_PAT(别名;将其复制到 JIRA_PERSONAL_TOKEN,供本次会话后续使用)
  3. 否则使用文件 ~/.config/jira-certs/jira-pat.txt(Windows:%USERPROFILE%\.config\jira-certs\jira-pat.txt)——读取首行,去除首尾空白;密钥必须为单行
  4. 否则只向用户询问一次 PAT,并询问是否将其写入该文件。令牌存在之前不得进行实时获取。

从环境变量或文件中取得令牌后:不要将 PAT 粘贴到聊天中、命令行参数中或命令预览中;不要在回复或日志中回显;不要将文件内容 cat 到对话中。脚本会自行读取环境变量或文件。

不要教授会插入 PAT 的手动 curl 命令(不得提供“与 Authentication 表等效的 curl 命令”)。此回退方式已被禁止(取代仍未关闭的旧版附件下载差异说明)。

附件下载

始终使用技能脚本将附件下载到本地磁盘——绝不要将附件内容读入 Agent 上下文。若要检查日志内容,只用 grep/head/tail 提取相关行。

身份验证(内部 Jira)
要素来源说明
PAT(Bearer)上述凭据链规范环境变量 JIRA_PERSONAL_TOKEN;别名 JIRA_PAT;文件 jira-pat.txt
mTLS 客户端证书JIRA_CLIENT_CERT / JIRA_CLIENT_KEY默认值:~/.config/jira-certs/client.crt + client.key
SSLJIRA_SSL_VERIFY=false内部自签名证书 → curl 使用 -k / node 使用 rejectUnauthorized: false

**凭据(配置字段):**将 PAT 作为单行内容存入 ~/.config/jira-certs/jira-pat.txt(与 mTLS 证书对位于同一目录;不得放入任何 git 仓库)。格式:单行密钥,不加引号。轮换:替换文件内容和任何已导出的环境变量,然后重试。mcp-atlassian 可能会注入 JIRA_PERSONAL_TOKEN,而非使用该文件。

附件 URL

直接使用 jira_get_issue 返回的 attachment[].url,例如: https://jira.example.com/secure/attachment/{attachmentId}/{filename}

下载脚本

先检查 curl -V。如果输出包含 Schannel(Windows 上常见),或无法使用 PEM 格式的 --cert/--key,必须使用 node sidecar。否则可以使用 bash 脚本。

# Node (Windows / Schannel curl)
node scripts/download_jira_attachments.mjs 100001 app-log-1700000000000.zip /tmp/logs/PROJ-1234.zip

# Bash + OpenSSL curl (PEM --cert/--key)
scripts/download_jira_attachments.sh 100001 app-log-1700000000000.zip /tmp/logs/PROJ-1234.zip

两种方式都会从凭据链中解析 PAT(Bearer,Basic 为回退方式)。使用 JIRA_CLIENT_CERT / JIRA_CLIENT_KEY 覆盖证书路径。设置 JIRA_URL(例如 https://jira.example.com)。绝不要将 PAT 放在命令行中。

下载与归档流程
  1. 解析凭据(使用上述链),然后调用 jira_get_issue(issue_key=..., fields="summary,description,attachment,status,priority") 获取 attachment[].id / filename / url
  2. 使用选定的脚本下载到临时目录——先下载 1 个文件以验证身份验证,然后批量下载
  3. 使用 unzip -l 预览 zip 结构;确认结构是平铺的,然后再解压
  4. 将文件归档到项目中的 issues/{type}/jira-bug/{JIRA-ID}-app-log/,并写入 {JIRA-ID}.md,记录工单信息和附件列表

下载结果报告格式:参见 reference.md § 7


缓存时效提示

缓存时长提示
< 1 小时无
1–24 小时“缓存于 X 小时前”
1–7 天“缓存于 X 天前,建议更新”
> 7 天“缓存已过期(X 天前),强烈建议更新”

错误处理

错误场景处理方式
Jira ID 格式无效提示正确的格式
未找到文件自动从 API 获取(仅在使用 --no-download 时提示)
凭据链为空(env + alias + file)询问并持久化(不要视为 401)
mcp-atlassian 不可用缺少可选注入器:仍使用凭据链;如果需要 issue JSON,在解析 PAT 后尝试使用缓存 / jira-read --live;不要仅因 MCP 缺失而中止
使用已解析的令牌时出现 HTTP 401 / 403令牌无效或已撤销——轮换令牌并更新 jira-pat.txt(如果设置了 env,也要更新)
TLS 握手 / 客户端证书检查 client.crt / client.key 和 TLS 1.3;在 Windows 上不要使用 Schannel curl 进行 PEM mTLS——请使用 node sidecar
未找到 issue提示 Jira ID 可能不正确
文件解析失败输出原始文件内容

评论

支持 Markdown