| ai_chatA | Send a single message to the configured AI (Claude/OpenAI/Ollama/Bedrock) and return its response. Non-streaming, single-turn. Optionally override the model (model) and the system prompt (system_prompt). On missing credentials, returns a tool error containing the same diagnostic the CLI would print. Mirrors omni-dev ai chat in one-shot form — that CLI command is interactive and has no system_prompt flag, so this tool is the only way to set a custom system prompt. Supply the message as message (inline) OR message_path (a filesystem path the server reads) — not both; prefer the path form when the message is already on disk. |
| atlassian_auth_statusA | Report which Atlassian credential scopes have credentials configured. Returns boolean presence flags only — NEVER includes the email, API token, or any other secret. The instance URL (non-secret) is returned verbatim. Checks local configuration only; it does NOT call the Atlassian API to validate the credentials (unlike omni-dev atlassian auth status, which signs in and prints the authenticated user). Takes no arguments. Read-only. Output is YAML. |
| atlassian_convertA | Convert between JFM (JIRA-Flavoured Markdown) and ADF (Atlassian Document Format) JSON. Bidirectional and fully offline — performs no network I/O and needs no Atlassian credentials. Set direction to "to-adf" to convert JFM markdown into an ADF JSON document (e.g. # Title becomes {"version":1,"type":"doc","content":[...]}), or "from-adf" to render an ADF JSON document back into JFM markdown. Use it to preview or inspect the ADF a JIRA/Confluence write tool would send. Output is the converted document (JSON for to-adf, markdown for from-adf). Mirrors omni-dev atlassian convert to-adf / from-adf. |
| browser_bridge_requestA | Send one HTTP request through a running, authenticated browser-bridge tab and return the buffered response envelope (status, headers, body) as YAML. Mirrors omni-dev browser bridge request. Requires a running bridge (omni-dev browser bridge serve or the daemon's bridge service) and a session token from OMNI_BRIDGE_TOKEN or token_file. NOT read-only — the request runs with the tab's session, so a non-GET method can mutate remote state. url is relative to the tab's page origin unless allow_origin permits a cross-origin target. Streaming responses are not supported here. |
| claude_skills_cleanA | Remove the skill symlinks under .claude/skills/ and the managed exclude block created by a prior claude_skills_sync — the inverse of that tool. MUTATES THE FILESYSTEM. Real files (non-symlinks) are preserved, never deleted. Operates relative to the server process's cwd. Use claude_skills_status first if you want to see what would be removed. Mirrors omni-dev ai claude skills clean. |
| claude_skills_statusA | Report the skill symlinks under .claude/skills/ and the managed exclude-block entries left by prior claude_skills_sync runs. READ-ONLY — changes nothing, so it is the safe way to preview before calling claude_skills_sync or claude_skills_clean. Operates relative to the server process's cwd. Mirrors omni-dev ai claude skills status. |
| claude_skills_syncA | Sync Claude Code skills from the current repository (the MCP server's current working directory) into target worktrees. MUTATES THE FILESYSTEM: creates symlinks inside .claude/skills/ (e.g. .claude/skills/my-skill -> ../../../.claude/skills/my-skill) and upserts a managed block in .git/info/exclude. Operates relative to the server process's cwd — not cross-project. Use claude_skills_clean to reverse this and claude_skills_status to inspect the result without changing anything. Mirrors omni-dev ai claude skills sync. |
| config_models_showA | Return the embedded models.yaml listing every supported AI model the CLI knows about, with each model's identifier, token limits (input context and max output tokens), and provider. Use this to discover the valid model values accepted by ai_chat and the git tools. Takes no arguments. Read-only. Output is YAML. Mirrors omni-dev config models show --embedded-only (the plain show additionally merges user/project overrides; this tool returns the embedded catalog only). |
| confluence_attachment_deleteA | Delete a Confluence attachment by ID. Set purge: true to permanently purge instead of moving to trash (requires space admin). Mirrors omni-dev atlassian confluence attachment delete --force. |
| confluence_attachment_downloadA | Download a Confluence attachment by ID to disk. Returns YAML metadata (id, title, media_type, bytes, on-disk path). If output_path is omitted, the file is written to a fresh temp directory whose path is in the result; the assistant can then read it via the filesystem tool. Mirrors omni-dev atlassian confluence attachment download. |
| confluence_attachment_listA | List attachments on a Confluence page (one page per call). Pass the returned next_cursor back as cursor to fetch the next page. limit defaults to 25. Mirrors omni-dev atlassian confluence attachment list. |
| confluence_attachment_uploadA | Upload a local file as an attachment to a Confluence page. file_path is a path on the MCP server's filesystem (the file is streamed from disk, never fully buffered). Optional filename overrides the stored name; comment is recorded as a version note; minor_edit (default false) marks the upload as minor. Returns YAML describing the new attachment. Mirrors omni-dev atlassian confluence attachment upload. |
| confluence_childrenA | List children of a Confluence page (pass id, e.g. "12345678"), or top-level pages in a space (pass space, e.g. "ENG") — id and space are mutually exclusive. Supports optional recursion with a max depth, so this is the tool for walking a page hierarchy. To enumerate EVERY page in a space (flat, with status/sort filters and cursor pagination) use confluence_space_pages instead. Mirrors omni-dev atlassian confluence children. |
| confluence_comment_addA | Post a markdown comment to a Confluence page as a page-level footer comment. The content is converted to ADF before posting. Supply the body as content (inline) OR content_path (a filesystem path the server reads) — not both. For inline (anchored) comments, use confluence_comment_add_inline. Mirrors omni-dev atlassian confluence comment add. |
| confluence_comment_add_inlineA | Post a markdown comment anchored to a text selection on a Confluence page (an inline comment). For a page-level comment not tied to any text, use confluence_comment_add instead. Supply the body as content (inline) OR content_path (a filesystem path the server reads) — not both. anchor_text must match the on-page text exactly; if it appears multiple times, pass match_index (1-based) to pick which occurrence. Errors if the anchor does not match or match_index is out of range. Mirrors omni-dev atlassian confluence comment add-inline. |
| confluence_comment_auditA | Audit every inline comment on a Confluence page for anchor drift. Inline-comment anchors do NOT follow text edits: when the annotated text is rewritten, Confluence leaves the mark on whatever original characters survive, so comments end up torn across fragments, slid onto unrelated text, or dropped. This compares each comment's currently-anchored text against the reviewer's durable original highlight and returns YAML with a per-comment status (ok/torn/mark_lost/drifted), the original vs. current anchored text, and a suggested_new_anchor for drifted comments. Read-only — fix drift with confluence_comment_reanchor. Mirrors omni-dev atlassian confluence comment audit. |
| confluence_comment_listA | List comments on a Confluence page (auto-paginated). kind selects "footer", "inline", or "all" (default — both kinds merged and sorted by creation time). limit of 0 returns every comment. Inline comments include their inline_marker_ref and durable inline_original_selection (the reviewer's original highlight); note that inline-comment anchors do NOT follow text edits — use confluence_comment_audit to detect drift and confluence_comment_reanchor to fix it. Comment authors are returned as Atlassian account IDs (e.g. 557058:...) — resolve them to display names with confluence_user_get (pass every distinct author ID in one call). Mirrors omni-dev atlassian confluence comment list. |
| confluence_comment_reanchorA | Move an inline comment's anchor to a new run of text in a Confluence page's current ADF, then write the page back in one update — the fix for a comment flagged as drifted/mark_lost by confluence_comment_audit. Pass the inline comment_id and the exact anchor_text to move it to; match_index (1-based) disambiguates when the text occurs more than once. The anchor may span multiple runs (e.g. a phrase split by bold) but not a block boundary. Operates entirely on ADF — it never round-trips through JFM, which would discard the annotation marks. Set dry_run: true to validate and preview the move without writing. Mirrors omni-dev atlassian confluence comment reanchor. |
| confluence_comment_repliesA | List the replies (child comments) of a Confluence comment. kind must be "footer" or "inline" — Confluence stores reply chains on kind-specific endpoints, so the caller must commit to one. limit of 0 returns every reply. Mirrors omni-dev atlassian confluence comment replies. |
| confluence_compareA | Compare two versions of a Confluence page. Returns a structurally-aware diff: walks the ADF tree, splits the document into heading-delimited sections, and reports per-block changes rather than character-level deltas over a serialization. Version refs accept "latest", "previous", "v-N" (e.g. "v-2"), a numeric version, or an ISO 8601 date. previous is relative to to. Detail levels: summary (counts only), outline (default — per-section change kind + drill-in cursors), full (embeds per-section deltas, budget-truncated). Mirrors omni-dev atlassian confluence compare run. |
| confluence_compare_sectionA | Drill into a section diff using a cursor returned by confluence_compare (outline mode). Stateless: the cursor encodes the page ID and version pair. Output formats: "unified" (default), "side_by_side", "markdown_inline". Mirrors omni-dev atlassian confluence compare section. |
| confluence_createA | Create a NEW Confluence page (use confluence_write to overwrite an existing page identified by its ID). Builds from explicit fields or from a full JFM document (frontmatter + body, e.g. the output of confluence_read). With a document, space_key/title/parent_id come from the frontmatter and the body becomes the page body — enabling the read → edit → create round-trip. Explicit space_key/title/parent_id override frontmatter and a warning is returned when they do. JFM is GitHub-style markdown, NOT Confluence wiki markup — see resource omni-dev://specs/jfm. The document/content bodies each also accept a filesystem-path form (document_path/content_path) the server reads from disk — prefer it when the body is already on disk, to avoid emitting a large body inline. Set dry_run: true first when uncertain about required fields or formatting — validates the input and returns the request that would be sent (method, path, body) without creating the page. Returns the new page's ID. Mirrors omni-dev atlassian confluence create (and its --dry-run). |
| confluence_deleteA | Delete a Confluence page. IRREVERSIBLE. Requires the caller to pass confirm: true to prevent accidental deletions. Set purge: true to permanently purge instead of moving to trash (requires space admin). Mirrors omni-dev atlassian confluence delete --force. |
| confluence_downloadA | Recursively download a Confluence page or an entire space into a directory. Either id (root page) or space (space key) must be provided. Set include_attachments: true to also fetch each page's attachment binaries into an attachments/ subdirectory beside its content file. Returns a YAML manifest summary of downloaded pages. To read a single page's body instead (no files written), use confluence_read. Mirrors omni-dev atlassian confluence download. |
| confluence_historyA | List version history (metadata only) for a Confluence page. Returns version number, timestamp, author account ID, edit message, and minor-edit flag for each version, newest-first. Resolve those author account IDs to display names with confluence_user_get. Does NOT fetch version bodies — use confluence_read for content. since filters to versions at or after a numeric version ("5") or ISO 8601 date ("2026-01-01T00:00:00Z"). limit defaults to 20; 0 means unlimited. Mirrors omni-dev atlassian confluence history. |
| confluence_label_addB | Add one or more labels to a Confluence page. Mirrors omni-dev atlassian confluence label add. |
| confluence_label_listA | List labels on a Confluence page (auto-paginated). limit of 0 returns every label. Mirrors omni-dev atlassian confluence label list. |
| confluence_label_removeA | Remove one or more labels from a Confluence page. Destructive operation: callers must explicitly pass confirm: true for the removal to proceed; otherwise the tool refuses with an error. Mirrors omni-dev atlassian confluence label remove. |
| confluence_moveA | Move or reparent a Confluence page within its current space. position is "append" (default — target becomes new parent), "before", or "after" (sibling reorder relative to target). Same-space only — cross-space moves are not supported. Returns the moved page's metadata as YAML (id, title, parent_id, ancestors). Mirrors omni-dev atlassian confluence move. |
| confluence_readA | Fetch a Confluence page by numeric ID (e.g. "12345678"). Returns JFM markdown by default — AI-friendly GitHub-style markdown, the form to read/edit then feed back to confluence_write/confluence_create. That output carries localId attributes (and inline-comment anchor spans) that anchor inline comments and other stateful nodes — preserve them verbatim when editing so a later confluence_write does not drop those comments. Pass format="adf" for the raw ADF JSON (the on-the-wire document model) only when you need exact node structure. Pass version to read a specific historical version (an immutable snapshot) instead of the current head — useful for seeing what a reviewer was reading when they commented. When output_file is set, the content is written to that path and the tool returns a short YAML summary (path/bytes/format) — useful for large pages. This reads a single page; to fetch a whole page tree or an entire space to disk, use confluence_download instead. NOTE: inline-comment anchors do NOT follow text edits — to detect/repair drifted comments use confluence_comment_audit / confluence_comment_reanchor. Any author/version metadata is returned as Atlassian account IDs — resolve them to display names with confluence_user_get. Mirrors omni-dev atlassian confluence read. |
| confluence_searchA | Search Confluence pages using CQL (Confluence Query Language), e.g. space = ENG AND title ~ "architecture". Returns YAML with matching page IDs, titles, and space keys — feed an ID into confluence_read for the body. Use confluence_children/confluence_space_pages instead when you want to enumerate a known page tree or space rather than query by text. Mirrors omni-dev atlassian confluence search --cql. |
| confluence_space_listA | List Confluence spaces (one page per call). Optional filters: keys (Vec), type (common values: global, personal, collaboration, knowledge_base, onboarding — passed through to the API verbatim, so other template-derived types Atlassian returns are also accepted), status (common values: current, archived). Filters combine as AND. Pass the returned next_cursor back as cursor to fetch the next page. limit defaults to 25. Mirrors omni-dev atlassian confluence space list. |
| confluence_space_pagesA | Enumerate ALL pages within a Confluence space (flat list, one response page per call), e.g. space "ENG". To walk a page hierarchy parent-by-parent instead, use confluence_children. Returns summary records: id, title, status, parentId, authorId, createdAt — no page bodies. Optional filters: status (common values: current, archived, draft, trashed) and sort (common values: id, -id, title, -title, created-date, -created-date, modified-date, -modified-date) — both passed through to the Confluence v2 API verbatim. Pass the returned next_cursor back as cursor to fetch the next page. limit defaults to 25. Mirrors omni-dev atlassian confluence space pages. |
| confluence_user_getA | Resolve one or more Atlassian account_ids (as emitted by author fields in confluence_comment_list, confluence_history, confluence_read, etc.) to user records — the reverse of confluence_user_search. Returns YAML with one entry per requested ID: account_id, display_name, email (when accessible), and account_type. Pass every distinct author ID from a batch in one call. Unknown, anonymised, or permission-denied IDs come back as a stub record with an error field (the batch never fails). Mirrors omni-dev atlassian confluence user get. |
| confluence_user_searchB | Search Confluence users by display name or email. limit of 0 returns every match; defaults to 25. Mirrors omni-dev atlassian confluence user search. |
| confluence_writeA | Overwrite an EXISTING Confluence page's body (identified by id) from JFM markdown (default) or raw ADF JSON. This fully replaces the body — to create a brand-new page instead, use confluence_create. DATA LOSS: inline comments (and task-item state) are anchored to the page through the localId attributes that confluence_read emits; if the body you send omits them, Confluence drops the inline comments tied to those anchors. Edit the JFM returned by confluence_read and keep its localIds intact — do not hand-author a fresh body or send content produced with local IDs stripped (atlassian_convert with strip_local_ids). JFM is GitHub-style markdown, NOT Confluence wiki markup — see resource omni-dev://specs/jfm for syntax. Provide the body as content (inline) OR content_path (a filesystem path the server reads) — not both. Prefer content_path when the body is already on disk: emitting a large body inline is slow, and pages routinely exceed that threshold; the inline form is fine for short bodies. Set dry_run: true first when uncertain about required fields or formatting — validates the input and returns the request that would be sent (method, path, body) without updating the page. Mirrors omni-dev atlassian confluence write --force (and --dry-run). |
| coverage_diffA | Analyze diff/patch coverage from a per-line coverage report plus the git diff, and return the rendered report with the patch-coverage percentage and gate result as YAML. Read-only. Mirrors omni-dev coverage diff. report is a required filesystem path to the head coverage report (lcov / llvm-cov-json / cobertura, auto-detected). format renders the report as markdown (default), yaml, or json. Unlike the CLI this tool never fails the call on a low fail_under_patch; it reports below_gate: true instead. |
| datadog_auth_statusA | Report which Datadog credential scopes have credentials configured. Returns boolean presence flags only — NEVER includes the API key, application key, or any other secret. The site (non-secret) is returned verbatim. Read-only; takes no parameters. Unlike the CLI omni-dev datadog auth status, this tool only inspects local config presence and does NOT call Datadog's /api/v1/validate endpoint, so it cannot confirm the keys are actually accepted. Output is YAML. |
| datadog_dashboard_getA | Fetch a single Datadog dashboard by id (string, e.g. abc-def-ghi). Returns the full definition including widgets. Use datadog_dashboard_list to discover ids first. Read-only. Mirrors omni-dev datadog dashboard get. Output is YAML. |
| datadog_dashboard_listA | List Datadog dashboards (id, title, author). filter_shared (boolean, optional) restricts to shared (true) or non-shared (false) dashboards; omit it for all. Use datadog_dashboard_get to fetch one dashboard's full widget definition by id. Read-only. Mirrors omni-dev datadog dashboard list. Output is YAML. |
| datadog_downtime_listA | List Datadog scheduled downtimes (monitor muting windows). active_only (boolean, optional, default false) restricts to currently-active downtimes; omit or set false to include past and future ones. Read-only. Mirrors omni-dev datadog downtime list. Output is YAML. |
| datadog_events_listA | List Datadog events from the event/alert stream (e.g. deploys, monitor alerts), optionally filtered (e.g. service:api) over a time range (default last 1h). For application log lines use datadog_logs_search instead. limit of 0 (or omitted) auto-paginates across cursor pages up to 10000; any non-zero value caps the total at that count (default 100). from / to accept relative shorthand (15m, 1h), now, RFC 3339, or Unix epoch seconds. Read-only. Mirrors omni-dev datadog events list. Output is YAML. |
| datadog_hosts_listA | List Datadog reporting hosts, optionally narrowed by a hosts filter (e.g. env:prod) and a from cutoff (Unix epoch seconds). limit of 0 (or omitted) auto-paginates up to 10000. Read-only. Mirrors omni-dev datadog hosts list. Output is YAML. |
| datadog_logs_searchA | Search Datadog log events with a logs query (e.g. service:api status:error) over a time range (default last 15m). For the event/alert stream rather than logs, use datadog_events_list. limit of 0 (or omitted) auto-paginates across cursor pages up to 10000; any non-zero value caps the total at that count (default 100). sort is timestamp-asc or timestamp-desc (default). Read-only. Mirrors omni-dev datadog logs search. Output is YAML. |
| datadog_metrics_catalog_listA | List metrics in the Datadog catalog (/api/v1/metrics). Distinct from datadog_metrics_query: returns metric names (e.g. system.cpu.user) ingested since from, optionally filtered by host — use this to discover what to query, then datadog_metrics_query to fetch the actual timeseries. Read-only. Mirrors omni-dev datadog metrics catalog list. Output is YAML. |
| datadog_metrics_queryA | Execute a point-in-time Datadog metrics timeseries query (e.g. avg:system.cpu.user{*} over the last 1h). Returns the actual data points; use datadog_metrics_catalog_list instead when you only need to discover metric names. Read-only. Mirrors omni-dev datadog metrics query. Returns YAML matching the CLI -o yaml output (status, from_date, to_date, series). |
| datadog_monitor_getA | Fetch a single Datadog monitor by numeric id (e.g. 12345). Use datadog_monitor_list / datadog_monitor_search to discover ids first. Read-only. Mirrors omni-dev datadog monitor get. Output is YAML. |
| datadog_monitor_listA | List Datadog monitors with optional name / tags filters (e.g. name = "cpu", tags = "team:sre"). Returns full monitor objects. Use datadog_monitor_search for free-text / faceted queries like status:alert; use datadog_monitor_get when you already know the numeric monitor id. limit of 0 (or omitted) auto-paginates up to 10000. Read-only. Mirrors omni-dev datadog monitor list. Output is YAML. |
| datadog_monitor_searchA | Free-text / faceted search across Datadog monitors (e.g. status:alert, type:metric tag:team:sre). Prefer this over datadog_monitor_list when filtering by status/facets rather than just name/tags; the response is a search envelope (monitors + paging metadata) rather than a plain array. limit of 0 (or omitted) auto-paginates up to 10000. Read-only. Mirrors omni-dev datadog monitor search. Output is YAML. |
| datadog_slo_getA | Fetch a single Datadog SLO by id (string, e.g. abc123def456). Use datadog_slo_list to discover ids first. Read-only. Mirrors omni-dev datadog slo get. Output is YAML. |
| datadog_slo_listA | List Datadog Service Level Objectives, optionally filtered by tags, free-text query, explicit ids, or referenced metrics_query. Use datadog_slo_get to fetch one SLO's full definition by id. limit of 0 (or omitted) auto-paginates up to 10000. Read-only. Mirrors omni-dev datadog slo list. Output is YAML. |
| git_amend_commitsA | Apply commit message amendments deterministically from an inline YAML document (no AI). This is the apply-messages-from-YAML counterpart to git_twiddle_commits: use git_twiddle_commits with dry_run = true to generate the amendments YAML, then pass it here to apply. Mutating: rewrites commit messages via git commit --amend / interactive rebase. Mirrors omni-dev git commit message amend. Commits already contained in a remote main branch are refused unless allow_pushed = true (rewriting published history). |
| git_branch_infoA | Analyze the current branch's commits against a base branch and return repository information as YAML. Use this when you want the diff against main/master (or another base) without computing an explicit range; use git_view_commits instead when you already have a range. Mirrors omni-dev git branch info. |
| git_check_commitsA | Validate commit messages in a range against commit guidelines (read-only — never modifies commits). Use this to report problems; use git_twiddle_commits instead to rewrite the messages. range is required (e.g. HEAD~3..HEAD). Mirrors omni-dev git commit message check. Returns a YAML payload with the full CheckReport, a pass/fail summary, and the exit code the CLI would use (honouring strict). |
| git_create_prA | Generate an AI-drafted pull request title and description for the current branch. Mirrors omni-dev git branch create pr in its content-generation phase — this tool returns the proposed PR content as YAML and does NOT push the branch or invoke gh pr create. |
| git_staged_commitA | Generate a Conventional Commits message from the currently staged diff and (by default) commit it via git commit -m. Mirrors omni-dev git commit message staged. Set print_only = true to return the generated message without committing. |
| git_twiddle_commitsA | Generate improved commit messages for a range (e.g. HEAD~3..HEAD) and (by default) apply them. Mutating: rewrites commit messages unless dry_run = true. Use this to fix messages; use git_check_commits instead to only report problems without modifying anything. Mirrors omni-dev git commit message twiddle --auto-apply. Set dry_run = true to return the proposed amendments as YAML without applying them. The editor is never started from this tool. Commits already contained in a remote main branch are refused (rewriting published history); overriding requires a human running omni-dev git commit message amend --allow-pushed from the CLI. |
| git_view_commitsA | Analyze commits in a range and return repository information as YAML. Use this when you have an explicit commit range (e.g. HEAD~3..HEAD); use git_branch_info instead to analyze the current branch against a base branch without computing the range yourself. Mirrors omni-dev git commit message view. |
| jira_attachment_deleteA | Delete a JIRA attachment by ID. DESTRUCTIVE AND IRREVERSIBLE (JIRA has no trash). You must explicitly pass confirm: true for the deletion to proceed; otherwise the tool returns an error without contacting the API. Returns YAML {status: ok} on success. Mirrors omni-dev atlassian jira attachment delete --force. |
| jira_attachment_downloadA | Download attachments on a JIRA issue to disk. Returns YAML metadata (id, filename, mime_type, size, on-disk path) for each downloaded file. If output_dir is omitted, files are written to a fresh temp directory whose path is in the result; the assistant can then read them via the filesystem tool. Mirrors omni-dev atlassian jira attachment download. |
| jira_attachment_imagesA | Download image attachments (PNG, JPEG, GIF, SVG, WebP) on a JIRA issue to disk. Returns YAML metadata for each downloaded image. If output_dir is omitted, files are written to a fresh temp directory. Mirrors omni-dev atlassian jira attachment images. |
| jira_attachment_uploadA | Upload one or more local files as attachments to a JIRA issue. Provide file_paths as absolute paths on the MCP server's filesystem; each is streamed from disk and rides a single multipart request. Returns YAML metadata (id, filename, mime_type, size, content_url) for each created attachment. Mirrors omni-dev atlassian jira attachment upload. |
| jira_board_issuesA | List issues on a JIRA agile board (every issue on the board, across its backlog and all its sprints). Accepts an optional JQL filter. Returns YAML. To scope to a single sprint's issues instead, use jira_sprint_issues. Mirrors omni-dev atlassian jira board issues. |
| jira_board_listB | List JIRA agile boards, optionally filtered by project key and/or board type (scrum/kanban). Returns YAML. Mirrors omni-dev atlassian jira board list. |
| jira_bulk_createA | Bulk-create JIRA issues and (optionally) wire dependency links between them in one call — built for epic decomposition. issues are created in order and each may carry a local alias. links are created afterward; each inward/outward is resolved alias-first (to the freshly-minted key) else treated as an existing issue key, so you can link issues this same call just created. Default is continue-on-error: every record is attempted and a YAML report lists per-issue {alias, ok, key, self_url | error}, per-link {ok | error}, and a summary. Set fail_fast to stop at the first failure. NOTE: JIRA has no transaction — nothing is rolled back; the report always shows exactly what succeeded so you can retry only the remainder. To link existing issues only, pass an empty issues array and reference real keys in links. |
| jira_changelogA | Get the change history for a JIRA issue. Returns YAML with one entry per change (author, timestamp, items). The author is an Atlassian account ID — resolve it to a display name with jira_user_get. Mirrors omni-dev atlassian jira changelog. |
| jira_commentA | Manage JIRA issue comments on key (e.g. PROJ-123). action = "list" returns comments as YAML; action = "add" posts the given body (JFM markdown — GitHub-style, see resource omni-dev://specs/jfm). Supply the body as body (inline) OR body_path (a filesystem path the server reads) — not both. Listed comment authors are Atlassian account IDs — resolve them to display names with jira_user_get. To change the text of an existing comment use jira_comment_edit (it needs the comment id from the list output). |
| jira_comment_editA | Edit an existing JIRA comment (identified by key + comment_id; get the id from jira_comment with action = "list"). To add a new comment or list comments use jira_comment instead. body is JFM markdown (see resource omni-dev://specs/jfm) and replaces the current comment text; supply it as body (inline) OR body_path (a filesystem path the server reads) — not both. Optional visibility = {type: "group"|"role", value: <name>} updates the restriction. JIRA enforces stricter permissions on edit than on add (often only the original author can edit) — when JIRA refuses, its error message is surfaced verbatim. Returns the updated comment metadata as YAML. |
| jira_createA | Create a new JIRA issue, from explicit fields or from a full JFM document (frontmatter + body, e.g. the output of jira_read). With a document, project/summary/issue_type, labels and custom fields come from the frontmatter (project is derived from key: when no project: is set) and the body becomes the description — enabling the read → edit → create round-trip. Explicit project/summary/issue_type override frontmatter and a warning is returned when they do. Without a document, custom_fields is an optional map of field name or canonical id (e.g. {"Story Points": 8} or {"Planned / Unplanned Work": "Unplanned"}) to value, resolved against the create screen and shaped for the API — use it to satisfy fields a project requires at create time (otherwise JIRA returns HTTP 400). The document/description bodies each also accept a filesystem-path form (document_path/description_path) the server reads from disk — prefer it when the body is already on disk, to avoid emitting a large body inline. Set dry_run: true first when uncertain about required fields or formatting — validates and resolves the input and returns the request that would be sent (method, path, body) without creating the issue (mirrors the CLI's omni-dev atlassian jira create --dry-run). Returns the new issue key and self URL as YAML. Creates a single issue; to create several issues at once (and optionally link them, e.g. epic decomposition) use jira_bulk_create. |
| jira_deleteA | Delete a JIRA issue. DESTRUCTIVE AND IRREVERSIBLE. You must explicitly pass confirm: true for the deletion to proceed; otherwise the tool returns an error without contacting the API. Returns YAML {status: ok} on success. Mirrors omni-dev atlassian jira delete. |
| jira_devA | Fetch development status for a JIRA issue by key (e.g. PROJ-123): linked pull requests, branches, and repositories as YAML. Read-only. |
| jira_editA | Set arbitrary fields on an existing JIRA issue by field display name or canonical id — labels, selects, story points, dates, rich-text custom fields (e.g. Acceptance Criteria), parent, and other editable fields. Names are resolved against the issue's edit screen and values coerced to the API shape, so pass natural values: {"Labels": ["a", "b"], "Story Points": 8, "Acceptance Criteria": "- one\n- two"}. String values for rich-text fields are JFM markdown auto-converted to ADF ("" clears the field); pass a raw ADF object ({"type": "doc", ...}) to bypass conversion. Complements jira_write (description body, assignee/reporter, raw-id fields); to change workflow status use jira_transition; for hierarchy jira_link_parent remains the canonical surface. Set dry_run: true to preview the request (method, path, body) without updating. Returns {status: ok, key, updated_fields} as YAML. Mirrors the CLI's omni-dev atlassian jira write --set-field. |
| jira_field_listA | List JIRA field definitions, optionally filtered by name substring. Returns YAML. Mirrors omni-dev atlassian jira field list. The schema_type is "richtext" for ADF-required custom fields (e.g. Acceptance Criteria); schema_custom, when present, holds the raw plugin URI (e.g. com.atlassian.jira.plugin.system.customfieldtypes:textarea). |
| jira_field_optionsA | List allowed option values for a JIRA custom field. If context_id is omitted, the first context for the field is auto-discovered. Returns YAML. Mirrors omni-dev atlassian jira field options. |
| jira_link_createA | Create a typed link between two JIRA issues (e.g. Blocks, Relates). link_type is the type name (list options with jira_link_types); inward is the source issue and outward the target. To set hierarchy (Epic → Story / Story → Sub-task) use jira_link_parent instead. Returns YAML {status: ok}. Set dry_run: true to preview the request that would be sent (method, path, body) without creating the link. Mirrors omni-dev atlassian jira link create. |
| jira_link_listA | List inward and outward links on a JIRA issue. Returns YAML with one entry per link (id, link_type, direction, linked_issue_key, linked_issue_summary). Mirrors omni-dev atlassian jira link list. |
| jira_link_parentA | Set a JIRA issue's parent — the system parent field for Epic → Story / Story → Sub-task hierarchy, distinct from the relationship links created by jira_link_create. parent is the parent issue key (e.g. the epic); child is the issue placed under it. Returns YAML {status: ok}. Set dry_run: true to preview the request that would be sent (method, path, body) without setting the parent. Mirrors omni-dev atlassian jira link parent. |
| jira_link_remote_listA | List remote (external URL) links on a JIRA issue — links pointing out to non-JIRA resources (Confluence pages, Bitbucket PRs, external trackers). Read-only. Returns YAML with one entry per remote link (id, optional global_id, optional relationship, object.{url, title, summary, icon}). Mirrors omni-dev atlassian jira link remote list. |
| jira_link_removeA | Remove a JIRA issue link by its link ID (use jira_link_list or jira_read to discover IDs). Destructive operation: callers must explicitly pass confirm: true for the removal to proceed; otherwise the tool refuses with an error. Returns YAML {status: ok}. Set dry_run: true to preview the request that would be sent (method, path) without removing the link — no confirm needed for a dry-run. Mirrors omni-dev atlassian jira link remove. |
| jira_link_typesA | List the configured JIRA issue link-type catalogue (id, name, inward, outward). Global per JIRA instance — returns the configured types, not the ones used in any particular issue. Returns YAML. Mirrors omni-dev atlassian jira link types. |
| jira_project_create_metaA | Introspect which fields a JIRA issue type needs: for each field on the create screen, returns required, schema_type, allowed values (resolving option/select/cascading-select), and any default. Collapses the create→HTTP 400→jira_field_list→jira_field_options recovery loop into a single pre-flight call. Returns YAML. Mirrors omni-dev atlassian jira project create-meta. |
| jira_project_listA | List JIRA projects. Returns YAML. Mirrors omni-dev atlassian jira project list. |
| jira_readA | Fetch a JIRA issue by key (e.g. PROJ-123). Returns JFM markdown (default, AI-friendly GitHub-style markdown — see resource omni-dev://specs/jfm) or the raw ADF description JSON when format = "adf". When output_file is set, the content is written to that path and the tool returns a short YAML summary (path/bytes/format) — useful for large issues. Assignee/reporter and other people fields are Atlassian account IDs — resolve them to display names with jira_user_get. |
| jira_searchA | Search JIRA issues using a JQL query (e.g. project = PROJ AND status = Open ORDER BY created DESC; dates are YYYY-MM-DD). Returns matching issues as YAML. Provide either a raw jql string, or the convenience filters project / assignee / status (ANDed together) — at least one is required. limit defaults to 20; pass 0 for unlimited. To list issues on a board or sprint instead, use jira_board_issues / jira_sprint_issues. |
| jira_sprint_addB | Add one or more issues to a JIRA sprint by issue key. Returns YAML {status: ok} on success. Mirrors omni-dev atlassian jira sprint add. |
| jira_sprint_createA | Create a new sprint on a JIRA agile board. Returns YAML for the created sprint. Mirrors omni-dev atlassian jira sprint create. |
| jira_sprint_issuesA | List issues in one JIRA sprint (get sprint IDs from jira_sprint_list). Accepts an optional JQL filter. Returns YAML. For every issue on a board regardless of sprint, use jira_board_issues instead. Mirrors omni-dev atlassian jira sprint issues. |
| jira_sprint_listA | List sprints on an agile board, optionally filtered by state (active/future/closed). Returns YAML. Mirrors omni-dev atlassian jira sprint list. |
| jira_sprint_updateA | Update sprint name, state (future/active/closed), dates, or goal. Returns YAML {status: ok}. Mirrors omni-dev atlassian jira sprint update. |
| jira_transitionA | Transition a JIRA issue to a new workflow status. Most common usage: pass the transition name in transition, e.g. transition: "In Progress". The numeric id also works, e.g. transition: "31". Names are matched case-insensitively. If unsure which transitions are valid from the issue's current status, call this tool first with list = true (or omit transition) to get the available {id, name} pairs as YAML, then call again with one of those names. For transitions whose screen requires input, pass resolution (e.g. "Fixed") and/or custom_fields (a name→value map). Optionally pass comment (JFM markdown): it rides in the transition when the screen accepts a comment (satisfying a mandatory-comment screen), otherwise it is posted separately after the transition succeeds. |
| jira_transition_listA | List the workflow transitions available from a JIRA issue's current status. Returns YAML with {id, name, to_status, has_screen} for each transition. Faster and lighter than jira_read when you only need the transition ids and names to feed into jira_transition. Equivalent to jira_transition with list = true, but exposed as a single-purpose tool for discoverability. |
| jira_user_getA | Resolve one or more Atlassian account_ids (as emitted by author fields in jira_comment, jira_read, jira_changelog, etc.) to user records — the reverse of jira_user_search. Returns YAML with one entry per requested ID: account_id, display_name, email_address (often redacted by GDPR), active, and account_type. Pass every distinct author ID from a batch in one call. Unknown, anonymised, or permission-denied IDs come back as a stub record with an error field (the batch never fails); deactivated accounts resolve normally with active: false. Mirrors omni-dev atlassian jira user get. |
| jira_user_searchA | Search JIRA users by display-name or email substring. Returns matches as YAML — each entry includes account_id, display_name, email_address (often redacted by GDPR), active, and account_type. Use the returned account_id as input to jira_write's assignee or reporter parameter. limit defaults to 25; pass 0 for unlimited. Atlassian matches substrings on display name and email — try a shorter or alternate spelling if the first attempt returns nothing. |
| jira_version_createA | Create a new version in a JIRA project. Dates must be YYYY-MM-DD and are validated client-side. Returns YAML for the created version. Mirrors omni-dev atlassian jira version create. |
| jira_version_listA | List versions for a JIRA project, optionally filtered by released and archived flags. Returns YAML. Mirrors omni-dev atlassian jira version list. |
| jira_watcher_addA | Add a user (by Atlassian accountId, not a name or email — resolve one with jira_user_search) as a watcher on a JIRA issue. Returns YAML {status: ok}. Mirrors omni-dev atlassian jira watcher add. |
| jira_watcher_listA | List watchers on a JIRA issue. Returns YAML with watch_count and an array of watcher accounts. Mirrors omni-dev atlassian jira watcher list. |
| jira_watcher_removeA | Remove a user (by Atlassian accountId, not a name or email — resolve one with jira_user_search) from the watchers of a JIRA issue. Destructive operation: callers must explicitly pass confirm: true for the removal to proceed; otherwise the tool refuses with an error. Returns YAML {status: ok}. Mirrors omni-dev atlassian jira watcher remove. |
| jira_worklog_addB | Log time on a JIRA issue. time_spent accepts JIRA's duration format (e.g., 1h 30m, 2d). Returns YAML {status: ok}. Mirrors omni-dev atlassian jira worklog add. |
| jira_worklog_listA | List worklog entries on a JIRA issue. Returns YAML. Mirrors omni-dev atlassian jira worklog list. |