Integrations

Jira API工具

Try it

Search Jira Cloud and manage issues, projects, comments, assignments, and workflow transitions.

What it does

Access Jira Cloud through managed OAuth to search bounded JQL queries, inspect projects and issues, and retrieve users or metadata. Create, update, assign, transition, comment on, or delete issues after explicit user approval. Works through CLI commands or proxied Jira REST API requests and supports selecting a connection when several accounts are linked.

When to use it

  • Finding in-progress issues with JQL
  • Creating and assigning a Jira task
  • Moving an issue through a workflow
  • Adding comments or updating issue fields

The skill document

Jira

Access the Jira Cloud API with managed OAuth authentication. Search issues with JQL, create and manage issues, and automate workflows.

Quick Start

CLI:

maton jira issue search 'project = PROJ AND status = "In Progress"' --cloud-id abc-123
maton api '/jira/ex/jira/{cloudId}/rest/api/3/search/jql?jql=project%3DKEY&maxResults=10'

Python:

# First, get your cloud ID
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/jira/oauth/token/accessible-resources')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

# Then search issues
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/jira/ex/jira/{cloudId}/rest/api/3/search/jql?jql=project%3DKEY&maxResults=10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Base URL

https://api.maton.ai/jira/{native-api-path}

Maton proxies requests to api.atlassian.com and automatically injects your OAuth token.

Getting Cloud ID

Jira Cloud requires a cloud ID. Get it first:

GET /jira/oauth/token/accessible-resources

Example:

maton jira cloud list

Response:

[{
  "id": "62909843-b784-4c35-b770-e4e2a26f024b",
  "url": "https://yoursite.atlassian.net",
  "name": "yoursite"
}]

Installation

NPM:

npm install -g @maton/cli

Homebrew:

brew install maton-ai/cli/maton

Authentication

CLI:

maton login                          # Opens browser for API key
maton login --interactive            # Skip browser, paste API key directly
maton whoami                         # Show current auth state

Manual:

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key
  4. Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"

Connection Management

Manage your Jira OAuth connections at https://api.maton.ai.

List Connections

CLI:

maton connection list jira --status ACTIVE
maton api -X GET /connections -f app=jira -f status=ACTIVE

Python:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=jira&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Create Connection

CLI:

maton connection create jira
maton api /connections -f app=jira

Python:

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'jira'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Get Connection

CLI:

maton connection view {connection_id}
maton api /connections/{connection_id}

Python:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Response:

{
  "connection": {
    "connection_id": "{connection_id}",
    "status": "ACTIVE",
    "creation_time": "2025-12-08T07:20:53.488460Z",
    "last_updated_time": "2026-01-31T20:03:32.593153Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "jira",
    "metadata": {}
  }
}

Open the returned url in a browser to complete OAuth authorization.

Delete Connection

CLI:

maton connection delete {connection_id}
maton api -X DELETE /connections/{connection_id}

Python:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Specifying Connection

If you have multiple Jira connections, specify which one to use:

CLI:

maton jira project list --cloud-id abc-123 --connection {connection_id}
maton api /jira/ex/jira/{cloudId}/rest/api/3/project --connection {connection_id}

Python:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/jira/ex/jira/{cloudId}/rest/api/3/project')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If you have multiple connections, always specify the connection to ensure requests go to the intended account.

Security & Permissions

  • Access is scoped to issues, projects, boards, sprints, and users within the connected Jira account.
  • All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.

API Reference

Projects

List Projects

GET /jira/ex/jira/{cloudId}/rest/api/3/project

Example:

maton jira project list --cloud-id abc-123

Get Project

GET /jira/ex/jira/{cloudId}/rest/api/3/project/{projectKeyOrId}

Example:

maton jira project view PROJ --cloud-id abc-123

Issues

Search Issues (JQL)

GET /jira/ex/jira/{cloudId}/rest/api/3/search/jql?jql=project%3DPROJ%20order%20by%20created%20DESC&maxResults=20&fields=summary,status,assignee

Example:

maton jira issue search 'project = PROJ order by created DESC' --cloud-id abc-123 --limit 20 --fields summary,status,assignee

Get Issue

GET /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}

Example:

maton jira issue view PROJ-123 --cloud-id abc-123

Create Issue

POST /jira/ex/jira/{cloudId}/rest/api/3/issue
Content-Type: application/json

{
  "fields": {
    "project": {"key": "PROJ"},
    "summary": "Fix login",
    "issuetype": {"name": "Task"}
  }
}

Example:

maton jira issue create --cloud-id abc-123 --project PROJ --summary 'Fix login' --type Task

Update Issue

PUT /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}
Content-Type: application/json

{
  "fields": {
    "summary": "Updated summary"
  }
}

Example:

maton jira issue update PROJ-123 --cloud-id abc-123 --summary 'Updated summary'

Delete Issue

DELETE /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}

Example:

maton jira issue delete PROJ-123 --cloud-id abc-123

Assign Issue

PUT /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/assignee
Content-Type: application/json

{
  "accountId": "712020:5aff718e-6fe0-4548-82f4-f44ec481e5e7"
}

Example:

maton jira issue update PROJ-123 --cloud-id abc-123 --assignee 712020:5aff718e-6fe0-4548-82f4-f44ec481e5e7

Transitions

Get Transitions

GET /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions

Example:

maton jira transition list PROJ-123 --cloud-id abc-123

Transition Issue (change status)

POST /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/transitions
Content-Type: application/json

{
  "transition": {"id": "31"}
}

Example:

maton jira transition apply PROJ-123 --cloud-id abc-123 --id 31

Comments

Get Comments

GET /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment

Example:

maton jira comment list PROJ-123 --cloud-id abc-123

Add Comment

POST /jira/ex/jira/{cloudId}/rest/api/3/issue/{issueIdOrKey}/comment
Content-Type: application/json

{
  "body": {
    "type": "doc",
    "version": 1,
    "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Comment text"}]}]
  }
}

Example:

maton jira comment add PROJ-123 --cloud-id abc-123 --body 'Comment text'

Users

Get Current User

GET /jira/ex/jira/{cloudId}/rest/api/3/myself

Example:

maton jira whoami --cloud-id abc-123

Search Users

GET /jira/ex/jira/{cloudId}/rest/api/3/user/search?query=john

Example:

maton jira user search john --cloud-id abc-123

Metadata

List Issue Types

GET /jira/ex/jira/{cloudId}/rest/api/3/issuetype

Example:

maton jira issuetype list --cloud-id abc-123

List Priorities

GET /jira/ex/jira/{cloudId}/rest/api/3/priority

Example:

maton jira priority list --cloud-id abc-123

List Statuses

GET /jira/ex/jira/{cloudId}/rest/api/3/status

Example:

maton jira status list --cloud-id abc-123

Code Examples

CLI

# Discover accessible Jira Cloud resources
maton jira cloud list

# Search issues with JQL
maton jira issue search 'project = PROJ AND status = "In Progress"' --cloud-id abc-123

# Filter with jq
maton jira issue search 'project = PROJ' --cloud-id abc-123 \
  --json --jq '.issues | map(select(.fields.status.name == "In Progress"))'

# Create an issue
maton jira issue create --cloud-id abc-123 --project PROJ --summary 'Fix login'

JavaScript

// Get cloud ID first
const resources = await fetch(
  'https://api.maton.ai/jira/oauth/token/accessible-resources',
  { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } }
).then(r => r.json());

const cloudId = resources[0].id;

// Search issues
const issues = await fetch(
  `https://api.maton.ai/jira/ex/jira/${cloudId}/rest/api/3/search/jql?jql=project=KEY`,
  { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } }
).then(r => r.json());

Python

import os
import requests

headers = {'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}

# Get cloud ID
resources = requests.get(
    'https://api.maton.ai/jira/oauth/token/accessible-resources',
    headers=headers
).json()

cloud_id = resources[0]['id']

# Search issues
issues = requests.get(
    f'https://api.maton.ai/jira/ex/jira/{cloud_id}/rest/api/3/search/jql',
    headers=headers,
    params={'jql': 'project=KEY', 'maxResults': 10}
).json()

Notes

  • Always fetch cloud ID first using /oauth/token/accessible-resources
  • JQL queries must be bounded (e.g., project=KEY)
  • Use URL encoding for JQL query parameters
  • Update, Delete, Transition return HTTP 204 on success
  • Agile API requires additional OAuth scopes. If you receive a scope error, contact Maton support at support@maton.ai with the specific operations/APIs you need and your use-case
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsing
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.

Error Handling

StatusMeaning
400Missing Jira connection or invalid JQL
401Invalid or missing Maton API key
429Rate limited (10 req/sec per account)
4xx/5xxPassthrough error from Jira API

Troubleshooting: API Key Issues

CLI:

  1. Check your auth state:
maton whoami
  1. Verify the API key is valid by listing connections:
maton connection list

Manual:

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Troubleshooting: Invalid App Name

  1. Ensure your URL path starts with jira. For example:
  • Correct: https://api.maton.ai/jira/ex/jira/{cloudId}/rest/api/3/project
  • Incorrect: https://api.maton.ai/ex/jira/{cloudId}/rest/api/3/project

Resources

Questions people ask

What Jira operations are supported?
It can list and inspect projects; search, view, create, update, assign, transition, comment on, and delete issues; search users; and list issue types, priorities, and statuses.
How does authentication and account selection work?
Requests use managed OAuth plus an API key. Fetch the Jira Cloud ID first, and specify a connection ID when multiple Jira connections are available so the request reaches the intended account.
Are write actions performed automatically?
No. Every create, update, transition, comment, assignment, or delete operation requires explicit user approval after confirming the target and intended effect.

Related skills

Turn China 3C launch inputs into executable routes, messaging, channel actions, risk checks, and review decisions.

by killsnake0126 installs112 stars

Join video meetings as a voice bot, visual avatar, or avatar with live screen sharing.

by johnpatternai22 installs8 stars

A structured interview and analysis process that uncovers the actual job customers hire your product to do — and who they're really competing against.

by deciqai3 installs3 stars

Escape the scarcity trap — diagnose bandwidth consumption and design protected slack to restore strategic capacity.

by deciqai1 installs2 stars

Diagnose which mental domain is holding you back before choosing a cognitive intervention.

by deciqai1 installs3 stars

Access ~12.4M US business registrations — LLCs, corps, formation dates, registered agents — free from 5 state open-data portals.

by deciqai1 installs3 stars

More from thcjp

Browse all skills

Generate and process images, videos, or audio by routing each request to an appropriate CLI model.

by dlazy

Routes prompts to an appropriate CLI model for speech, dialogue, music, sound effects, or voice cloning.

by dlazy

Query and manage Linear work items through GraphQL with managed OAuth authentication.

by thcjp

Query and manage Pipedrive deals, contacts, organizations, and activities via a managed OAuth proxy.

by thcjp

常见办公流程自动化中枢,覆盖文档处理、数据整理、邮件管理、日程协调、报表生成与工作流编排。 聚焦批量操作容错、格式保真、PII 脱敏、模板复用四大痛点,让繁琐办公一键稳妥完成。 核心能力: - 文档批处理:Word/PDF/Excel/PPT 批量生成、转换、合并拆分,含失败隔离与重试 - 数据整理:清洗、转换、...

by thcjp3 installs1 stars

基于Playwright的浏览器自动化CLI,支持签到、填表、截图与信息抓取,适合个人用户。Use when 需要提升效率、自动化流程、批量处理、工作流优化时使用。不适用于需要人工创意判断的任务。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。

by thcjp3 installs