MeowKit

Jira Integration

Install and authenticate Jira access once, understand what the skills are allowed to do, and find the right one for a task.

MeowKit talks to Jira through the jira-as CLI, not through your browser session and not through a hosted service. Everything below is the one-time setup, what the integration will and will not do without asking, and how to find the skill you want.

Set it up

Install the CLI. Every mk:jira-* skill uses it, and there is no global install:

npx mewkit setup

That puts jira-as in .claude/skills/.venv/bin/. Then put three values in .meowkit/.env, which is gitignored:

VariableWhat it is
MEOW_JIRA_API_TOKENAn Atlassian Cloud API token. Create one at id.atlassian.com
MEOW_JIRA_EMAILThe Atlassian account that token belongs to
MEOW_JIRA_SITE_URLYour site, for example https://your-company.atlassian.net

Start a session. The jira-env-loader.sh hook checks the file and prints either [mk:jira] env OK or [mk:jira] <KEY> missing, so you find out at session start rather than mid-task. The wrapper translates MEOW_JIRA_* into the native JIRA_* variables per call, which is why your shell never needs them.

The full variable list is in Configuration.

What it will and will not do on its own

Read operations run without ceremony. Writes are where the rules are:

  • Bulk operations require a dry run first. Anything touching ten or more issues shows you what it would do before it does it. This is not a flag you can skip.
  • Nothing auto-falls-back. If jira-as cannot run, the router does not silently switch transport. It stops and tells you.
  • The router never executes. mk:jira picks a skill and hands off; execution always happens in a leaf skill with its own agent and its own file ownership.
  • Your token scope is the real boundary. MeowKit cannot do anything in Jira your API token cannot do, so a read-only token makes the whole integration read-only.

If your tenant needs mTLS, or you run multiple Atlassian profiles, jira-as will not work. In that case the leaves accept Atlassian MCP as an alternative transport:

claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcp

You invoke the leaf with that transport explicitly. Again, there is no automatic fallback.

Find the right skill

Ask for what you want and mk:jira routes you. If you already know where you are going, invoke the skill directly:

What you want to doSkill
Get, create, update, or delete one issuemk:jira-issue
Find issues, export them, work with filtersmk:jira-search
Move an issue through its workflow, assign, resolvemk:jira-lifecycle
Comments, attachments, watchers, notificationsmk:jira-collaborate
Links, blockers, dependenciesmk:jira-relationships
Worklogs, time tracking, reportsmk:jira-time
Epics, sprints, backlog, story pointsmk:jira-agile
Custom fields: discovery and configurationmk:jira-fields
Ten or more issues at oncemk:jira-bulk
Service Management: queues, SLAs, customersmk:jira-jsm
Projects, users, groups, schemesmk:jira-admin
Branch names, PRs, git integrationmk:jira-dev
Cache and project-context discoverymk:jira-ops
Judge whether a ticket is ready to work onmk:jira-evaluator
Estimate story pointsmk:jira-estimator
Analyse a ticket's context and attachments, root-cause itmk:jira-analyst

When it goes wrong

[mk:jira] MEOW_JIRA_SITE_URL missing at session start. The variable is absent or .meowkit/.env is not where the loader expects. Check the file exists at the project root, not in .claude/.

Authentication fails with all three variables set. Atlassian API tokens are tied to the account that created them. Confirm MEOW_JIRA_EMAIL is that account, not a shared or admin address.

A transition is rejected as invalid. Jira workflows differ per project, and a status that exists in one may not be reachable from the current one in another. mk:jira-ops discovers and caches the real workflow for the project into tasks/jira-workflows/; run it first and the valid transitions become visible.

Everything reads fine but nothing writes. Almost always token scope. Check what the token's account can do in the Jira UI; the integration cannot exceed it.

Next steps

On this page