mcpField
J
jira

jira

github.com/zenobi-us生产力6848 次安装今天更新
代码仓库

关于 jira

这项技能通过 atlassian MCP 服务和 mcporter 以编程方式操作 Jira,提供搜索问题、读取详情、处理状态转换、评论、元数据及关联资源的工作流和脚本。

主要功能

  1. 01使用 JQL 搜索问题
  2. 02获取问题摘要和详情
  3. 03查看并执行工作流状态转换
  4. 04添加评论并查找关联资源
  5. 05获取用户和云账户信息
  6. 06通过 mcporter 检查工具架构

适用场景

  1. 01按项目或状态筛选问题
  2. 02查看工单及其关联的拉取请求
  3. 03推动问题进入工作流下一状态
  4. 04为 Jira 工单添加评论

MCP 相关

通过 mcporter 使用 atlassian MCP 服务访问 Jira 问题、项目和元数据。技能还介绍了如何检查架构以发现可用工具及其参数。

安装

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

$npx skills add https://github.com/zenobi-us/dotfiles --skill jira

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

包含的文件

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

scripts/
get_cloud_id.sh
get_current_user.sh
get_ticket_summary.sh

详细介绍

JIRA Skill

使用 atlassian MCP 服务掌握 Jira 自动化与集成。此 Skill 支持以编程方式访问 Jira 事项、项目和元数据。

[!CRITICAL] ⚠️ 重要 - 参数传递:

使用函数调用语法(不要使用标志语法)。参数应放在函数调用中,而不是作为标志:

mcporter call 'atlassian.functionName(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", fields: ["key", "summary"])'

关键规则:

  • 函数调用中的参数使用 camelCase
  • 字符串值使用双引号:"value"
  • 数组值使用方括号表示法:["item1", "item2"]
  • 对象值使用对象表示法:{key: "value"}
  • 环境变量在引号外插值:"'$VAR'"
  • 不要使用 --flag 语法,也无需转义 JSON 字符串

快速设置

获取工单摘要(一次调用)

获取工单信息的最快方式:

mise x node@20 -- ./scripts/get_ticket_summary.sh TICKET-123

返回人类可读的摘要,包含:

  • 键、摘要、类型、状态、优先级、经办人
  • 创建/更新时间戳
  • 完整描述
  • 关联资源(PR 等)
  • Jira 直达链接

用于解析的 JSON 输出:

mise x node@20 -- ./scripts/get_ticket_summary.sh TICKET-123 --json

返回包含 ticket 和 remoteLinks 对象的结构化 JSON。

获取当前用户信息
mise x node@20 -- ./scripts/get_current_user.sh

返回:accountId、displayName、email

或者获取指定字段:

mise x node@20 -- ./scripts/get_current_user.sh --account-id
mise x node@20 -- ./scripts/get_current_user.sh --email
mise x node@20 -- ./scripts/get_current_user.sh --display-name
获取 Cloud ID(所有操作必需)
export JIRA_CLOUD_ID=$(mise x node@20 -- ./scripts/get_cloud_id.sh)
export JIRA_URL=$(mise x node@20 -- ./scripts/get_cloud_id.sh --url)

此操作会设置后续所有 mcporter 调用所需的环境变量。

核心操作

搜索事项
mise x node@20 -- mcporter call 'atlassian.searchJiraIssuesUsingJql(cloudId: "'$JIRA_CLOUD_ID'", jql: "assignee = currentUser() AND status = Open")'

指定字段:

mise x node@20 -- mcporter call 'atlassian.searchJiraIssuesUsingJql(cloudId: "'$JIRA_CLOUD_ID'", jql: "assignee = currentUser()", fields: ["key", "summary", "status", "assignee"])'

使用分页:

mise x node@20 -- mcporter call 'atlassian.searchJiraIssuesUsingJql(cloudId: "'$JIRA_CLOUD_ID'", jql: "assignee = currentUser()", maxResults: 50)'

返回:包含 key、fields.summary、fields.status.name 的 issues[] 数组

常用 JQL:

  • assignee = currentUser() - 分配给你的事项
  • status = Open - 按状态筛选
  • project = PROJ - 指定项目
  • updated >= -7d - 最近 7 天内更新的事项
  • issuetype = Bug - 指定事项类型
获取事项详情
mise x node@20 -- mcporter call 'atlassian.getJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")'

指定字段:

mise x node@20 -- mcporter call 'atlassian.getJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", fields: ["key", "summary", "status", "assignee", "description"])'

使用 expand 获取更多详情:

mise x node@20 -- mcporter call 'atlassian.getJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", expand: ["changelog", "editmeta"])'

返回:完整事项对象,包含 key、fields(摘要、状态、经办人、描述等)

获取事项转换
mise x node@20 -- mcporter call 'atlassian.getTransitionsForJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")'

返回:工作流状态变更可用转换项的 ID 和名称列表

将事项转换为新状态
mise x node@20 -- mcporter call 'atlassian.transitionJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", transition: {id: "11"})'

同时更新字段:

mise x node@20 -- mcporter call 'atlassian.transitionJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", transition: {id: "11"}, fields: {assignee: {id: "USER_ID"}})'
获取项目元数据
mise x node@20 -- mcporter call 'atlassian.getJiraProjectIssueTypesMetadata(cloudId: "'$JIRA_CLOUD_ID'", projectIdOrKey: "PROJ")'
编辑 Jira 事项字段

TODO:添加更新事项字段的示例

为事项添加评论
mise x node@20 -- mcporter call 'atlassian.addCommentToJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", commentBody: "Your comment here")'

附带 GitHub 永久链接:

mise x node@20 -- mcporter call 'atlassian.addCommentToJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", commentBody: "See implementation details:\n\nhttps://github.com/owner/repo/blob/commit-hash/path/to/file.ts#L123")'

返回:包含 id、body、author、created、updated 的评论对象

创建新事项

TODO:添加创建新事项的示例

获取事项类型元数据
mise x node@20 -- mcporter call 'atlassian.getJiraIssueTypeMetaWithFields(cloudId: "'$JIRA_CLOUD_ID'", projectIdOrKey: "PROJ", issueTypeId: "10001")'
获取相关链接(PR、Confluence 等)
mise x node@20 -- mcporter call 'atlassian.getJiraIssueRemoteIssueLinks(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")'

返回:包含关联资源的 remoteIssueLinks[] 数组

筛选 GitHub PR:

mise x node@20 -- mcporter call 'atlassian.getJiraIssueRemoteIssueLinks(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")' | \
  jq '.[]? | select(.type.name == "GitHub" or (.globalId | contains("github"))) | .object.url'

辅助脚本

脚本用途
./scripts/get_ticket_summary.sh一次调用获取工单摘要 - 一次调用即可获取所有工单信息(人类可读或 JSON 格式)
./scripts/get_current_user.sh获取已认证用户信息(accountId、displayName、email)
./scripts/get_cloud_id.sh获取 Jira Cloud ID 和 URL

常见问题与解决方案

问题解决方案
没有可用的云 ID运行 ./scripts/get_cloud_id.sh 获取并导出云 ID
需要当前用户信息使用 ./scripts/get_current_user.sh 获取 accountId、displayName 和 email
搜索返回 0 个结果检查 JQL 语法。尝试使用 status = Open,而不是 status = "To Do"。先在 Jira 界面中测试查询。
在 remoteIssueLinks 中找不到 PR 链接并非所有 PR 都会自动关联。检查是否已在 GitHub/Jira 中创建“Link”。
转换失败并显示“Cannot transition”转换 ID 错误。务必先运行 getTransitionsForJiraIssue,查看当前状态的有效转换。
“Invalid arguments”或命令失败使用函数调用语法,而不是标志语法。参数应放在 functionName(param: value) 中,而不是 --param value
数组无法正常使用在函数调用中使用方括号表示法:fields: ["key", "summary"],而不是 --fields '["key","summary"]'
对象无法正常使用在函数调用中使用对象表示法:transition: {id: "11"},而不是 --transition '{"id":"11"}'

使用架构内省发现函数参数

mcporter CLI 可以检查 MCP 服务架构,以发现正确的参数及其类型。

列出所有可用工具
mise x node@20 -- mcporter list atlassian --json | jq -r ".tools[].name"

返回:

atlassianUserInfo
getAccessibleAtlassianResources
getConfluenceSpaces
getConfluencePage
getPagesInConfluenceSpace
getConfluencePageFooterComments
getConfluencePageInlineComments
getConfluencePageDescendants
createConfluencePage
updateConfluencePage
createConfluenceFooterComment
createConfluenceInlineComment
searchConfluenceUsingCql
getJiraIssue
editJiraIssue
createJiraIssue
getTransitionsForJiraIssue
transitionJiraIssue
lookupJiraAccountId
searchJiraIssuesUsingJql
addCommentToJiraIssue
addWorklogToJiraIssue
getJiraIssueRemoteIssueLinks
getVisibleJiraProjects
getJiraProjectIssueTypesMetadata
getJiraIssueTypeMetaWithFields
search
fetch
检查特定工具的架构
mise x node@20 -- mcporter list atlassian --json | jq '.tools[] | select(.name == "addCommentToJiraIssue")'

这会返回完整的 JSON 架构,包括:

  • inputSchema.properties - 所有可用参数及其类型和说明
  • inputSchema.required - 必填参数
  • options - 每个参数的 CLI 专用元数据

仅筛选必填参数:

mise x node@20 -- mcporter list atlassian --json | \
  jq '.tools[] | select(.name == "addCommentToJiraIssue") | .inputSchema.required[]'

获取参数说明:

mise x node@20 -- mcporter list atlassian --json | \
  jq '.tools[] | select(.name == "addCommentToJiraIssue") | .inputSchema.properties | to_entries[] | "\(.key): \(.value.description)"'

这种内省方法适用于任何工具——只需更改 select() 筛选器中的工具名称。

提示

  • 每个会话只需设置一次:

    export JIRA_CLOUD_ID=$(mise x node@20 -- ./scripts/get_cloud_id.sh)
    export JIRA_URL=$(mise x node@20 -- ./scripts/get_cloud_id.sh --url)
    
  • 函数调用语法是 mcporter 的标准语法 - 使用 mcporter call 'func(param: value)',不要使用标志

  • 转换前务必先使用 getTransitionsForJiraIssue - 转换 ID 会因项目工作流而异

  • 在引号外插入环境变量:mcporter call 'func(cloudId: "'$VAR'")' 可行,但 mcporter call 'func(cloudId: "$VAR")' 不可行

  • 在 Shell 脚本中使用 jq 解析 JSON

  • 不确定参数时使用架构内省 - mcporter list atlassian --json | jq 是你的好帮手

  • 完整工作流示例请参阅 examples/ 目录

评论

支持 Markdown