← 返回 Skills 市场
jeffersonling1217-png

Publish Jira

作者 AlienTree · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ 安全检测通过
82
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install jira-atlassian
功能描述
Full-featured Atlassian Jira Cloud REST API v3 skill. Manage issues, sprints, boards, epics, projects, users, and more via direct Jira API calls. Use when ma...
使用说明 (SKILL.md)

\r \r

Jira Integration\r

\r Interact with Atlassian Jira Cloud via REST API v3.\r \r

Authentication\r

\r Use Basic Auth with email and API token:\r \r Required Environment Variables:\r

[email protected]\r
JIRA_API_TOKEN=your_api_token\r
JIRA_DOMAIN=your_domain  # e.g. "yourcompany" for yourcompany.atlassian.net\r
```\r
\r
**Credentials:**\r
- Email: `$JIRA_EMAIL`\r
- API Token: `$JIRA_API_TOKEN`\r
- Domain: `https://$JIRA_DOMAIN.atlassian.net`\r
\r
**Base URL:**\r
```\r
https://$JIRA_DOMAIN.atlassian.net/rest/api/3\r
```\r
\r
**Jira Software (Agile) Base URL:**\r
```\r
https://$JIRA_DOMAIN.atlassian.net/rest/agile/1.0\r
```\r
\r
**Generate API Token:**\r
1. Go to https://id.atlassian.com/manage-profile/security/api-tokens\r
2. Click "Create API token"\r
3. Label it (e.g., "nanobot")\r
4. Copy the token\r
\r
## Common Headers\r
\r
```\r
Content-Type: application/json\r
Accept: application/json\r
Authorization: Basic base64(email:token)\r
```\r
\r
---\r
\r
# Complete API Reference\r
\r
## Total API Summary\r
\r
| Category | Count |\r
|----------|-------|\r
| **Total Endpoints** | 122 |\r
| **Total Schemas** | 64 |\r
| **Jira Software (Agile)** | 51 endpoints |\r
| **Builds API** | 9 endpoints |\r
| **Deployments API** | 7 endpoints |\r
| **DevInfo API** | 7 endpoints |\r
| **DevOps Components** | 7 endpoints |\r
| **Feature Flags** | 6 endpoints |\r
| **Operations** | 11 endpoints |\r
| **Remote Links** | 5 endpoints |\r
| **Security** | 13 endpoints |\r
\r
---\r
\r
## Jira Software (Agile) API\r
\r
### Boards\r
\r
#### Get All Boards\r
```\r
GET /rest/agile/1.0/board\r
```\r
Returns all boards visible to the user.\r
\r
#### Create Board\r
```\r
POST /rest/agile/1.0/board\r
```\r
Body:\r
```json\r
{\r
  "name": "Sprint Board",\r
  "type": "scrum",\r
  "filterId": 12345,\r
  "location": {\r
    "type": "project",\r
    "projectKeyOrId": "PROJ"\r
  }\r
}\r
```\r
\r
#### Get Board by ID\r
```\r
GET /rest/agile/1.0/board/{boardId}\r
```\r
\r
#### Delete Board\r
```\r
DELETE /rest/agile/1.0/board/{boardId}\r
```\r
\r
#### Get Board Configuration\r
```\r
GET /rest/agile/1.0/board/{boardId}/configuration\r
```\r
Returns board configuration including column config, estimation type, and ranking info.\r
\r
#### Get Issues for Board\r
```\r
GET /rest/agile/1.0/board/{boardId}/issue\r
```\r
Query params: `startAt`, `maxResults`, `jql`, `validateQuery`, `fields`, `expand`\r
\r
#### Move Issues to Board\r
```\r
POST /rest/agile/1.0/board/{boardId}/issue\r
```\r
Body:\r
```json\r
{\r
  "issues": ["PROJ-1", "PROJ-2"],\r
  "rankBeforeIssue": "PROJ-3",\r
  "rankAfterIssue": "PROJ-4",\r
  "rankCustomFieldId": 10001\r
}\r
```\r
\r
#### Get Backlog Issues\r
```\r
GET /rest/agile/1.0/board/{boardId}/backlog\r
```\r
\r
#### Move Issues to Backlog\r
```\r
POST /rest/agile/1.0/backlog/{boardId}/issue\r
```\r
Body:\r
```json\r
{\r
  "issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
---\r
\r
### Sprints\r
\r
#### Get All Sprints\r
```\r
GET /rest/agile/1.0/board/{boardId}/sprint\r
```\r
\r
#### Create Sprint\r
```\r
POST /rest/agile/1.0/sprint\r
```\r
Body:\r
```json\r
{\r
  "name": "Sprint 1",\r
  "originBoardId": 1,\r
  "startDate": "2024-01-15T00:00:00.000Z",\r
  "endDate": "2024-01-29T00:00:00.000Z",\r
  "goal": "Sprint 1 goal"\r
}\r
```\r
\r
#### Get Sprint\r
```\r
GET /rest/agile/1.0/sprint/{sprintId}\r
```\r
\r
#### Update Sprint (Full)\r
```\r
PUT /rest/agile/1.0/sprint/{sprintId}\r
```\r
Body:\r
```json\r
{\r
  "name": "Updated Sprint Name",\r
  "startDate": "2024-01-15T00:00:00.000Z",\r
  "endDate": "2024-01-29T00:00:00.000Z",\r
  "goal": "Updated goal",\r
  "state": "active"\r
}\r
```\r
\r
#### Partially Update Sprint\r
```\r
POST /rest/agile/1.0/sprint/{sprintId}\r
```\r
Body:\r
```json\r
{\r
  "name": "Updated Name",\r
  "goal": "Updated goal",\r
  "state": "closed"\r
}\r
```\r
\r
#### Delete Sprint\r
```\r
DELETE /rest/agile/1.0/sprint/{sprintId}\r
```\r
\r
#### Get Issues for Sprint\r
```\r
GET /rest/agile/1.0/sprint/{sprintId}/issue\r
```\r
\r
#### Move Issues to Sprint\r
```\r
POST /rest/agile/1.0/sprint/{sprintId}/issue\r
```\r
Body:\r
```json\r
{\r
  "issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
#### Swap Sprint\r
```\r
POST /rest/agile/1.0/sprint/{sprintId}/swap\r
```\r
Body:\r
```json\r
{\r
  "sprintToSwapWith": 5\r
}\r
```\r
\r
---\r
\r
### Epics\r
\r
#### Get Epics for Board\r
```\r
GET /rest/agile/1.0/board/{boardId}/epic\r
```\r
\r
#### Get Epic\r
```\r
GET /rest/agile/1.0/epic/{epicIdOrKey}\r
```\r
\r
#### Partially Update Epic\r
```\r
POST /rest/agile/1.0/epic/{epicIdOrKey}\r
```\r
Body:\r
```json\r
{\r
  "name": "Epic Name",\r
  "summary": "Epic summary",\r
  "color": "color_1",\r
  "done": false\r
}\r
```\r
\r
#### Get Issues for Epic\r
```\r
GET /rest/agile/1.0/epic/{epicIdOrKey}/issue\r
```\r
\r
#### Move Issues to Epic\r
```\r
POST /rest/agile/1.0/epic/{epicIdOrKey}/issue\r
```\r
Body:\r
```json\r
{\r
  "issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
#### Rank Epics\r
```\r
PUT /rest/agile/1.0/epic/{epicIdOrKey}/rank\r
```\r
Body:\r
```json\r
{\r
  "rankBeforeEpic": "EPIC-2",\r
  "rankAfterEpic": "EPIC-3",\r
  "rankCustomFieldId": 10001\r
}\r
```\r
\r
#### Get Issues Without Epic\r
```\r
GET /rest/agile/1.0/epic/none/issue\r
```\r
\r
#### Remove Issues from Epic\r
```\r
POST /rest/agile/1.0/epic/none/issue\r
```\r
Body:\r
```json\r
{\r
  "issues": ["PROJ-1", "PROJ-2"]\r
}\r
```\r
\r
---\r
\r
### Issue Ranking\r
\r
#### Rank Issues\r
```\r
PUT /rest/agile/1.0/issue/rank\r
```\r
Body:\r
```json\r
{\r
  "issues": ["PROJ-1", "PROJ-2"],\r
  "rankAfterIssue": "PROJ-3",\r
  "rankBeforeIssue": "PROJ-4",\r
  "rankCustomFieldId": 10001\r
}\r
```\r
\r
#### Get Agile Issue\r
```\r
GET /rest/agile/1.0/issue/{issueIdOrKey}\r
```\r
Returns issue with Agile fields (sprint, closedSprints, flagged, epic).\r
\r
#### Get Issue Estimation\r
```\r
GET /rest/agile/1.0/issue/{issueIdOrKey}/estimation?boardId={boardId}\r
```\r
\r
#### Estimate Issue\r
```\r
PUT /rest/agile/1.0/issue/{issueIdOrKey}/estimation\r
```\r
Body:\r
```json\r
{\r
  "boardId": 1,\r
  "value": "3h"\r
}\r
```\r
Accepts formats: "1w", "2d", "3h", "20m" or number (minutes).\r
\r
---\r
\r
## Jira Platform API\r
\r
### Issues (CRUD Operations)\r
\r
#### Get Issue\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}\r
```\r
Query params: `fields`, `expand`, `properties`, `updateHistory`\r
Examples:\r
- `GET /rest/api/3/issue/PROJ-123`\r
- `GET /rest/api/3/issue/PROJ-123?fields=summary,status,assignee`\r
- `GET /rest/api/3/issue/PROJ-123?expand=changelog`\r
\r
#### Create Issue\r
```\r
POST /rest/api/3/issue\r
```\r
Body:\r
```json\r
{\r
  "fields": {\r
    "project": { "key": "PROJECT_KEY" },\r
    "summary": "Issue title",\r
    "description": {\r
      "type": "doc",\r
      "version": 1,\r
      "content": [\r
        { "type": "paragraph", "content": [{ "type": "text", "text": "Description" }] }\r
      ]\r
    },\r
    "issuetype": { "name": "Task" },\r
    "priority": { "id": "3" },\r
    "assignee": { "accountId": "USER_ACCOUNT_ID" }\r
  }\r
}\r
```\r
\r
#### Edit Issue\r
```\r
PUT /rest/api/3/issue/{issueIdOrKey}\r
```\r
Body:\r
```json\r
{\r
  "fields": {\r
    "summary": "Updated summary",\r
    "description": { ... }\r
  },\r
  "update": {\r
    "labels": [\r
      { "add": "bugfix" },\r
      { "remove": "blocker" }\r
    ]\r
  }\r
}\r
```\r
\r
#### Delete Issue\r
```\r
DELETE /rest/api/3/issue/{issueIdOrKey}?deleteSubtasks=true\r
```\r
\r
#### Assign Issue\r
```\r
PUT /rest/api/3/issue/{issueIdOrKey}/assignee\r
```\r
Body:\r
```json\r
{\r
  "accountId": "USER_ACCOUNT_ID"\r
}\r
```\r
Use `"accountId": "-1"` for default assignee, `null` for unassigned.\r
\r
---\r
\r
### Search (JQL)\r
\r
#### Search Issues\r
```\r
GET /rest/api/3/search?jql={jql}&startAt={offset}&maxResults={limit}&fields={fields}\r
```\r
Query params: `jql`, `startAt`, `maxResults`, `fields`, `expand`, `properties`\r
Examples:\r
- `GET /rest/api/3/search?jql=project=PMG ORDER BY created DESC`\r
- `GET /rest/api/3/search?jql=assignee=currentUser()&maxResults=50`\r
\r
---\r
\r
### Issue Operations\r
\r
#### Get Transitions\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}/transitions\r
```\r
\r
#### Transition Issue\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/transitions\r
```\r
Body:\r
```json\r
{\r
  "transition": { "id": "21" }\r
}\r
```\r
\r
#### Add Comment\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/comment\r
```\r
Body:\r
```json\r
{\r
  "body": {\r
    "type": "doc",\r
    "version": 1,\r
    "content": [\r
      { "type": "paragraph", "content": [{ "type": "text", "text": "Comment text" }] }\r
    ]\r
  }\r
}\r
```\r
\r
#### Send Notification\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/notify\r
```\r
Body:\r
```json\r
{\r
  "subject": "Subject",\r
  "textBody": "Body text",\r
  "to": { "reporter": true },\r
  "restrict": { "group": { "name": "jira-software-users" } }\r
}\r
```\r
\r
---\r
\r
### Issue Metadata\r
\r
#### Get Create Issue Metadata\r
```\r
GET /rest/api/3/issue/createmeta?projectKeys={project}&issuetypeNames={type}\r
```\r
\r
#### Get Edit Metadata\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}/editmeta\r
```\r
\r
#### Get Create Metadata for Project\r
```\r
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes\r
```\r
\r
#### Get Create Metadata for Project & Issue Type\r
```\r
GET /rest/api/3/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}\r
```\r
\r
---\r
\r
### Bulk Operations\r
\r
#### Bulk Create Issues (up to 50)\r
```\r
POST /rest/api/3/issue/bulk\r
```\r
Body:\r
```json\r
{\r
  "issueUpdates": [\r
    { "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Task" } } },\r
    { "fields": { "project": { "key": "PROJ" }, "summary": "...", "issuetype": { "name": "Bug" } } }\r
  ]\r
}\r
```\r
\r
#### Bulk Fetch Issues (up to 100)\r
```\r
POST /rest/api/3/issue/bulkfetch\r
```\r
Body:\r
```json\r
{\r
  "issueIdsOrKeys": ["PROJ-1", "PROJ-2", "10005"],\r
  "fields": ["summary", "project", "status", "assignee"],\r
  "properties": []\r
}\r
```\r
\r
#### Bulk Fetch Changelogs\r
```\r
POST /rest/api/3/changelog/bulkfetch\r
```\r
Body:\r
```json\r
{\r
  "issueIdsOrKeys": ["PROJ-1", "PROJ-2"],\r
  "fieldIds": ["status", "assignee"],\r
  "maxResults": 100\r
}\r
```\r
\r
#### Get Changelogs\r
```\r
GET /rest/api/3/issue/{issueIdOrKey}/changelog?startAt=0&maxResults=50\r
```\r
\r
#### Get Changelogs by IDs\r
```\r
POST /rest/api/3/issue/{issueIdOrKey}/changelog/list\r
```\r
Body:\r
```json\r
{\r
  "changelogIds": [10001, 10002]\r
}\r
```\r
\r
---\r
\r
### Projects\r
\r
#### Get Projects\r
```\r
GET /rest/api/3/project\r
```\r
\r
#### Get Project\r
```\r
GET /rest/api/3/project/{projectIdOrKey}\r
```\r
\r
---\r
\r
### Users\r
\r
#### Get User\r
```\r
GET /rest/api/3/user?accountId={accountId}\r
```\r
\r
#### Get Current User (Myself)\r
```\r
GET /rest/api/3/myself\r
```\r
\r
#### Search Users\r
```\r
GET /rest/api/3/user/search?query={query}&maxResults={limit}\r
```\r
\r
---\r
\r
### Issue Events\r
\r
#### Get Events (Admin)\r
```\r
GET /rest/api/3/events\r
```\r
\r
---\r
\r
## DevOps Integration APIs\r
\r
### Build Information API\r
\r
#### Submit Build Data\r
```\r
POST /rest/builds/0.1/bulk\r
```\r
**Note:** Requires Connect JWT token or OAuth token for on-premise integration.\r
\r
#### Get Build by Key\r
```\r
GET /rest/builds/0.1/pipelines/{pipelineId}/builds/{buildNumber}\r
```\r
\r
---\r
\r
## Error Handling\r
\r
| Status | Meaning |\r
|--------|---------|\r
| 400 | Bad request or malformed data |\r
| 401 | Invalid credentials or expired token |\r
| 403 | Permission denied |\r
| 404 | Resource not found |\r
| 409 | Conflict |\r
| 429 | Rate limited - wait and retry |\r
| 500 | Internal server error |\r
\r
---\r
\r
## Notes\r
\r
- **JQL (Jira Query Language)**: Use JQL for powerful issue search and filtering\r
- **Issue IDs vs Keys**: Use `PROJ-123` format for keys, numeric ID for direct lookups\r
- **Transition IDs**: Get available transitions first via `GET /rest/api/3/issue/{key}/transitions`\r
- **Account IDs**: Jira Cloud uses account IDs for users - get them via the users API\r
- **Bulk Operations**: Use bulk endpoints for efficiency when creating/fetching multiple issues\r
- **Expand**: Use `?expand=changelog` on issue GET to retrieve full change history\r
安全使用建议
This skill appears coherent, but be cautious before providing real credentials: use a dedicated Jira API token with least privilege (or a service account) and point it at a test project first. Verify the skill’s source/homepage and consider rotating the token after testing. Because the agent will make API calls using your token, audit your Jira access logs and limit network exposure if possible. If you need stronger assurance, request the skill author’s provenance or use an intermediary proxy that logs outbound calls for inspection.
功能分析
Type: OpenClaw Skill Name: jira-atlassian Version: 1.0.0 The skill bundle is a documentation-only integration for the Atlassian Jira Cloud REST API v3. It contains no executable code and provides a comprehensive reference for managing Jira issues, boards, and sprints. While it requires sensitive environment variables (JIRA_API_TOKEN), this is standard for the stated purpose, and there are no instructions or patterns indicating malicious intent, data exfiltration, or prompt injection attacks in SKILL.md.
能力标签
cryptorequires-oauth-token
能力评估
Purpose & Capability
Name/description describe a Jira Cloud REST API integration and the required environment variables (JIRA_EMAIL, JIRA_API_TOKEN, JIRA_DOMAIN) directly match that purpose; no unrelated services, binaries, or config paths are requested.
Instruction Scope
SKILL.md contains API endpoint usage, sample requests, and auth instructions limited to Jira REST endpoints. It does not instruct reading unrelated files, scanning system state, or sending data to external endpoints outside the Jira domain templates.
Install Mechanism
Instruction-only skill with no install spec and no code files — nothing is written to disk or downloaded during install, which is low-risk and appropriate for a documentation-driven integration.
Credentials
Only three env vars are required (email, API token, domain), all necessary for Basic Auth against Jira Cloud. The API token is sensitive but its presence is justified by the described functionality.
Persistence & Privilege
always is false and the skill is user-invocable; it does not request persistent system-level privileges or modify other skills. Autonomous invocation is allowed (platform default) but not combined with other concerning privileges.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install jira-atlassian
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /jira-atlassian 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release of full-featured Atlassian Jira Cloud REST API v3 integration. - Manage Jira issues, sprints, boards, epics, projects, and users via direct API calls. - Supports 122 endpoints across core, agile, builds, deployments, devops, and security APIs. - Includes detailed documentation for endpoints and request formats. - Requires Atlassian email, API token, and domain for secure authentication. - Ideal for automating Jira tasks, running JQL queries, and integrating with Jira projects.
元数据
Slug jira-atlassian
版本 1.0.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Publish Jira 是什么?

Full-featured Atlassian Jira Cloud REST API v3 skill. Manage issues, sprints, boards, epics, projects, users, and more via direct Jira API calls. Use when ma... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 82 次。

如何安装 Publish Jira?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install jira-atlassian」即可一键安装,无需额外配置。

Publish Jira 是免费的吗?

是的,Publish Jira 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Publish Jira 支持哪些平台?

Publish Jira 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Publish Jira?

由 AlienTree(@jeffersonling1217-png)开发并维护,当前版本 v1.0.0。

💬 留言讨论