io.b3os/jira 1.0.0 · issue-tracking, project-management · MIT

Work with Jira Cloud issues using your Atlassian email and API token: search with JQL, read an issue with its rendered description and comments, create issues, comment, move issues through workflow transitions, assign them, and look up projects and users. Uses the Jira Cloud REST API v3 on your <site>.atlassian.net (not Jira Data Center).

Every call's result carries upstream_status and timing: validate_ms, inject_ms, render_ms, upstream_ms, map_ms and total_ms. upstream is the service's time; the others are B3OS's own (call actions). The snippets below show no timing values, because a fixture records none.

Connection

jira, type basic: Jira Cloud account.

Your Atlassian account email as the username and an API token (id.atlassian.com, Security, API tokens) as the password, plus your site name: acme for acme.atlassian.net. The token acts with your Jira permissions.

How to get one: support.atlassian.com.

Connection params (no secret): site.

The credential is sent only to *.atlassian.net.

Store the credential once as a vault connection for this pack and key, then name its id in a call's connections. Leave the key out and B3OS uses the project's newest connection for the pack and key without a subject (connections).

Hosts it reaches: *.atlassian.net.

Actions

ActionEffectMCP toolTitle
get-myselfreadjira__get-myselfGet current user
search-issuesreadjira__search-issuesSearch issues (JQL)
get-issuereadjira__get-issueGet issue
create-issuewritejira__create-issueCreate issue
add-commentwritejira__add-commentComment on issue
get-transitionsreadjira__get-transitionsGet transitions
transition-issuewritejira__transition-issueTransition issue
assign-issuewritejira__assign-issueAssign issue
find-usersreadjira__find-usersFind users
list-projectsreadjira__list-projectsList projects

get-myself

Get current user. Who the API token belongs to: account id, display name, email and time zone. A cheap way to check the connection and site.

Ref io.b3os/jira/get-myself@1.0.0 · effect read · connection jira · MCP tool jira__get-myself

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/get-myself@1", "input": {}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get current user (documented response shape, example values). From the bundle's fixtures/get-myself.json, not a live call.

json
{ "account_id": "712020:1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e", "display_name": "Mona Example", "email": "mona@acme.example", "time_zone": "America/Los_Angeles"}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

search-issues

Search issues (JQL). Find issues with JQL, for example project = PROJ AND status != Done ORDER BY updated DESC, or assignee = currentUser() AND sprint in openSprints(). Returns key, summary, status, type, priority, assignee, labels and dates. Page with next_page_token while is_last is false.

Ref io.b3os/jira/search-issues@1.0.0 · effect read · connection jira · MCP tool jira__search-issues

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/search-issues@1", "input": { "jql": "project = SHOP AND statusCategory != Done ORDER BY updated DESC", "max_results": 1 }, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Search issues (JQL) (documented response shape, example values). From the bundle's fixtures/search-issues.json, not a live call.

json
{ "issues": [ { "key": "SHOP-42", "id": "10042", "summary": "Cart overflows on narrow screens", "status": "In Progress", "status_category": "indeterminate", "issue_type": "Bug", "priority": "High", "assignee": "Mona Example", "reporter": "Hubot Example", "labels": ["checkout"], "created": "2026-10-24T10:11:20.000-0700", "updated": "2026-10-25T09:02:41.000-0700", "url": "https://acme.atlassian.net/browse/SHOP-42" } ], "is_last": false, "next_page_token": "CAEaAggD"}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

get-issue

Get issue. One issue by key with summary, status, type, priority, people, labels, the description rendered as HTML, and its latest comments (rendered as HTML).

Ref io.b3os/jira/get-issue@1.0.0 · effect read · connection jira · MCP tool jira__get-issue

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/get-issue@1", "input": {"key": "SHOP-42"}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get issue (documented response shape, example values). From the bundle's fixtures/get-issue.json, not a live call.

json
{ "key": "SHOP-42", "id": "10042", "summary": "Cart overflows on narrow screens", "status": "In Progress", "status_category": "indeterminate", "issue_type": "Bug", "priority": "High", "assignee": "Mona Example", "reporter": "Hubot Example", "labels": ["checkout"], "created": "2026-10-24T10:11:20.000-0700", "updated": "2026-10-25T09:02:41.000-0700", "url": "https://acme.atlassian.net/browse/SHOP-42", "description_html": "<p>Steps: open the cart and resize to 375px.</p>", "comments": [ { "author": "Hubot Example", "body_html": "<p>Reproduced on Safari 18.</p>", "created": "25/Oct/26 10:00 AM" } ]}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

create-issue

Create issue. Create an issue in a project with a summary, an issue type (Task, Bug, Story, ... as named in the project), an optional plain-text description, labels and assignee. Returns the new key and URL. Not idempotent.

Ref io.b3os/jira/create-issue@1.0.0 · effect write · connection jira · MCP tool jira__create-issue

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Idempotency-Key: 7c1e2f6a-1d43-4a8e-b2a5-3f0c9d5e8b11" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/create-issue@1", "input": { "project_key": "SHOP", "summary": "Flaky checkout test", "issue_type": "Bug", "description": "Seen three times this week.", "labels": ["ci"] }, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Create issue (documented response shape, example values). From the bundle's fixtures/create-issue.json, not a live call.

json
{ "key": "SHOP-43", "id": "10043", "url": "https://acme.atlassian.net/browse/SHOP-43"}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

add-comment

Comment on issue. Add a plain-text comment to an issue (sent as one paragraph). Returns the comment id. Not idempotent.

Ref io.b3os/jira/add-comment@1.0.0 · effect write · connection jira · MCP tool jira__add-comment

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Idempotency-Key: 7c1e2f6a-1d43-4a8e-b2a5-3f0c9d5e8b11" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/add-comment@1", "input": {"key": "SHOP-42", "text": "Fixed in build 812."}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Comment on issue (documented response shape, example values). From the bundle's fixtures/add-comment.json, not a live call.

json
{"id": "10102", "created": "2026-10-26T08:00:00.000-0700"}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

get-transitions

Get transitions. The workflow transitions available on an issue right now (Start progress, Done, ...), with their ids and the status each leads to. transition-issue needs one of these ids.

Ref io.b3os/jira/get-transitions@1.0.0 · effect read · connection jira · MCP tool jira__get-transitions

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/get-transitions@1", "input": {"key": "SHOP-42"}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get transitions (documented response shape, example values). From the bundle's fixtures/get-transitions.json, not a live call.

json
{ "transitions": [ { "id": "21", "name": "In Progress", "to_status": "In Progress", "to_category": "indeterminate" }, { "id": "31", "name": "Done", "to_status": "Done", "to_category": "done" } ]}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

transition-issue

Transition issue. Move an issue through its workflow with a transition id from get-transitions, for example to In Progress or Done. Fields the transition screen requires are not set by this action.

Ref io.b3os/jira/transition-issue@1.0.0 · effect write · connection jira · MCP tool jira__transition-issue

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Idempotency-Key: 7c1e2f6a-1d43-4a8e-b2a5-3f0c9d5e8b11" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/transition-issue@1", "input": {"key": "SHOP-42", "transition_id": "31"}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Transition issue (documented response shape, example values). From the bundle's fixtures/transition-issue.json, not a live call.

json
{"key": "SHOP-42", "transition_id": "31"}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

assign-issue

Assign issue. Assign an issue to a user by account id (find-users looks them up), or unassign it when account_id is omitted.

Ref io.b3os/jira/assign-issue@1.0.0 · effect write · connection jira · MCP tool jira__assign-issue

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Idempotency-Key: 7c1e2f6a-1d43-4a8e-b2a5-3f0c9d5e8b11" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/assign-issue@1", "input": { "key": "SHOP-42", "account_id": "712020:1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e" }, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Assign issue (documented response shape, example values). From the bundle's fixtures/assign-issue.json, not a live call.

json
{ "key": "SHOP-42", "account_id": "712020:1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e"}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

find-users

Find users. Find people by name or email fragment, with account ids for assign-issue and create-issue. Email is only shown where the user's privacy settings allow.

Ref io.b3os/jira/find-users@1.0.0 · effect read · connection jira · MCP tool jira__find-users

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/find-users@1", "input": {"query": "mona"}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Find users (documented response shape, example values). From the bundle's fixtures/find-users.json, not a live call.

json
{ "users": [ { "account_id": "712020:1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e", "display_name": "Mona Example", "email": "mona@acme.example", "active": true } ]}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response

list-projects

List projects. Projects visible to the user, optionally filtered by name or key: key, name, type (software, business, service_desk) and id. Page with start_at.

Ref io.b3os/jira/list-projects@1.0.0 · effect read · connection jira · MCP tool jira__list-projects

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/jira/list-projects@1", "input": {"max_results": 2}, "connections": {"jira": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List projects (documented response shape, example values). From the bundle's fixtures/list-projects.json, not a live call.

json
{ "projects": [ { "id": "10000", "key": "SHOP", "name": "Storefront", "type": "software" }, { "id": "10001", "key": "OPS", "name": "Operations", "type": "service_desk" } ], "total": 2, "is_last": true}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noJira rejected the email and API token.
forbidden403nobuilt from the service's response
rate_limited429yesJira rate limit reached; retry after the Retry-After header.
invalid_request400nobuilt from the service's response
Ask a question... ⌘I