Channels

Jira

The Jira channel provides bidirectional sync between Open Astra agents and Jira projects. Agents receive issue creation, update, and comment events via webhooks — and post responses back as issue comments via the Jira REST API. Configuration is stored per-workspace in the database via the jira_sync_configs table.

Requirements

  • A Jira Cloud or Server instance with API access
  • A Jira API token (Atlassian account → Security → API tokens)
  • A webhook configured in Jira pointing to your Open Astra gateway

Setup

Unlike most channels that use environment variables, Jira is configured per-workspace through the database. Create a sync config via the API:

bash
# Configure via API (requires JWT auth)
# Jira sync configs are stored per-workspace in the database

POST /jira/config
{
  "workspaceId": "ws-123",
  "jiraBaseUrl": "https://your-team.atlassian.net",
  "apiToken": "your-jira-api-token",
  "projectKey": "PROJ",
  "agentId": "code-review-agent",
  "enabled": true
}
FieldDescription
jiraBaseUrlYour Jira instance URL (e.g., https://your-team.atlassian.net)
apiTokenJira API token for posting comments back
projectKeyJira project key to scope events (e.g., PROJ)
agentIdThe agent that handles incoming Jira events
enabledToggle the sync on or off without deleting the config

Webhook setup

text
# Jira webhook configuration
# Settings → System → WebHooks → Create a WebHook
# Webhook URL: https://your-domain.com/jira/webhook
# Select events:
#   ✓ Issue: created, updated
#   ✓ Comment: created

Point the webhook at /jira/webhook on your Open Astra gateway. The adapter validates incoming payloads and extracts issue keys using a strict regex pattern (PROJ-123 format).

All outbound calls to the Jira base URL are routed through the SSRF guard to prevent server-side request forgery.

Handled events

Webhook eventAgent receives
jira:issue_createdIssue key, summary, description, status, priority, reporter
jira:issue_updatedIssue key, summary, description, status, priority, actor
comment_createdIssue key, issue summary, comment body, author

How events reach the agent

Jira events are normalized into human-readable text before being passed to the agent loop:

text
# Jira event → agent text format

# Issue created
"[Jira Issue Created] PROJ-123: Fix login timeout
Description (up to 2000 chars)...
Status: In Progress | Priority: High
Reporter: jane-doe"

# Issue updated
"[Jira Issue Updated] PROJ-123: Fix login timeout
Description (up to 2000 chars)...
Status: Done | Priority: High
Changed by: john-smith"

# Comment added
"[Jira Comment on: PROJ-123 — Fix login timeout]
Comment body (up to 2000 chars)...
Author: jane-doe"

Issue descriptions and comment bodies are truncated at 2,000 characters. The actor's display name from the webhook payload is used as the sender identifier.

Bidirectional responses

After the agent loop completes, the adapter posts the agent's response as a comment on the originating Jira issue via the REST API at /jira/comment. The issue key (PROJ-123) serves as the conversation key.

Security

  • All outbound calls to Jira are SSRF-guarded — blocked URLs receive a 403 response
  • Issue keys are validated with a strict regex pattern before processing
  • API tokens are stored in the database per-workspace, not in environment variables
💡For local development, use ngrok to expose your gateway. Jira webhooks require a publicly reachable HTTPS endpoint.

See also: Channels Overview for shared slash commands and how the channel adapter system works.