Skip to main content
Glama
panitw

jira-pm-mcp

by panitw

jira-pm-mcp

An MCP server that wraps the JIRA Cloud REST API for AI-driven agile project management. Designed to be run as a daily batch by an AI agent (e.g. via OpenClaw) to monitor sprint health, sync labels, flag risks, and write audit receipts.

Requirements

  • Node.js 20+

  • JIRA Cloud instance

  • API token with edit-issues and add-comments permissions on the target projects

Related MCP server: Jira MCP Integration

Setup

npm install
npm run build

Environment variables

Variable

Required

Description

JIRA_BASE_URL

yes

Base URL of your JIRA instance (e.g. https://yourcompany.atlassian.net)

JIRA_EMAIL

yes

Email address tied to the API token

JIRA_API_TOKEN

yes

JIRA Cloud API token

PORT

no

When set, starts an HTTP/SSE server on this port instead of stdio

Transport modes

The server supports two transport modes selected at startup.

stdio (default)

The server process is spawned and managed by the MCP client. Env vars are passed through the client config. Best for local single-user setups.

{
  "mcpServers": {
    "jira-pm": {
      "command": "node",
      "args": ["/path/to/jira-pm-mcp/dist/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://yourcompany.atlassian.net",
        "JIRA_EMAIL": "you@company.com",
        "JIRA_API_TOKEN": "your-token"
      }
    }
  }
}

HTTP/SSE

The server runs as a persistent HTTP process. The MCP client connects to it via SSE. Best for running the server as a system service or Docker container shared across multiple clients.

Start the server:

export JIRA_BASE_URL=https://yourcompany.atlassian.net
export JIRA_EMAIL=you@company.com
export JIRA_API_TOKEN=your-token
export PORT=3000
node dist/index.js

Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "jira-pm": {
      "url": "http://localhost:3000/sse"
    }
  }
}

Endpoints:

Endpoint

Method

Description

/sse

GET

SSE stream — MCP client connects here

/message?sessionId=<id>

POST

MCP message delivery (used internally by client)

/health

GET

Liveness probe — returns {"status":"ok","sessions":<n>}


Tools

setup_project

Configure a project for PM Agent monitoring. Must be run before any other tools. Validates connectivity and write permissions, then stores configuration as a YAML comment on the Root Epic and registers the project locally.

Parameter

Type

Required

Description

project_key

string

yes

JIRA project key (e.g. PROJ)

root_epic_key

string

yes

Key of the root epic that parents all cross-project tasks (e.g. PROJ-1)

board_id

number

no

JIRA board ID (optional, for validation only)

epic_link_field

string

no

JQL field for child tasks. "Epic Link" (default, classic projects) or "parent" (next-gen/team-managed)

active_statuses

string[]

no

Status names that count as in-progress. Default: In Progress, In Review, Code Review, In Testing

committed_date

string

no

Project delivery deadline YYYY-MM-DD. Enables delivery risk and velocity tracking.

story_points_field

string

no

Custom field key for story points. Default: customfield_10016

Returns: A checklist of validation results (root_epic, fix_versions, write_permissions, config_written) plus the config comment ID.


list_projects

List all projects registered with the PM Agent, with their configuration summary.

No parameters.

Returns: Array of projects with project_key, root_epic_key, committed_date, epic_link_field, active_statuses, and config_available.


list_fix_versions

List all fixVersions (sprints) for a project. Identifies the currently active sprint and how far through it we are.

Parameter

Type

Required

Description

project_key

string

yes

JIRA project key

Returns: Array of versions with name, label_equivalent (spaces replaced with hyphens), start_date, release_date, is_active, is_released, and elapsed_pct.


get_sprint_health

Read-only full sprint health snapshot. Builds the full dependency graph — stories → blocking tasks → dates and status — without making any changes to JIRA. Safe to call at any time.

Parameter

Type

Required

Description

project_key

string

yes

JIRA project key

fix_version

string

yes

fixVersion name identifying the sprint

Returns:

  • Sprint metadata (dates, elapsed_pct, committed_date)

  • Summary counts (total_stories, stories_with_no_tasks, stories_past_sprint_end, tasks_missing_dates, orphaned_tasks)

  • Per-story breakdown: effective_completion_date (max end date across blocking tasks), past_sprint_end, past_committed_date, has_date_gap, and the full list of blocking tasks with their dates, assignees, and current pm-* labels

  • orphaned_tasks: tasks under the root epic that don't block any story in this sprint


run_sprint_audit

Run the daily PM audit for a sprint. This is the main write tool — it applies all label and date changes to JIRA and writes an audit receipt to the Root Epic.

Parameter

Type

Required

Description

project_key

string

yes

JIRA project key

fix_version

string

yes

fixVersion name identifying the sprint

dry_run

boolean

no

If true, compute all changes but do not write to JIRA (default: false)

What it does (in order):

  1. Sync sprint labels — adds the sprint label (fixVersion with spaces → hyphens) to all blocking tasks in the sprint

  2. Compute task flags — evaluates each blocking task and applies pm-flag-* labels:

    • Date slip: end date past sprint boundary (pm-flag-critical-date-slip, pm-flag-warn-date-approaching)

    • Commitment risk: end date past committed_date (pm-flag-task-beyond-commitment)

    • Not started: task in Backlog/Todo at mid-sprint (pm-flag-critical-not-started, pm-flag-warn-not-started)

    • Stalled: no status change for more than stalled_threshold_days (pm-flag-warn-stalled)

  3. Compute story flags — evaluates each story:

    • Stories whose effective_completion_date slips past the sprint end or committed_date (pm-flag-story-at-risk, pm-flag-story-beyond-commitment)

    • Stories with missing blocking tasks (pm-flag-missing-tasks)

    • Stories with date gaps between blocking tasks (pm-flag-date-gap)

    • Stories recommended for deferral (pm-flag-recommend-defer)

  4. Update story due dates — sets each story's duedate to its effective_completion_date (max end date of blocking tasks)

  5. Velocity calculation — if committed_date is set, samples up to 5 past released sprints, computes average velocity, and projects expected completion date

  6. Write audit receipt — posts a YAML receipt comment to the Root Epic

Tasks with pm-acknowledged are skipped entirely (human override).

Returns: Summary of changes made, label_changes, story_date_changes, tasks_needing_dates, defer_recommendations, velocity result, and receipt_comment_id.


rollback_audit

Reverse the label and story date changes made by a previous run_sprint_audit. Reads the audit receipt from the Root Epic and applies the inverse diff. Never removes pm-acknowledged labels.

Parameter

Type

Required

Description

project_key

string

yes

JIRA project key

audit_timestamp

string

no

Timestamp from the receipt to roll back (e.g. 2026-02-22T06-00-00-000Z). Defaults to the most recent audit.

Returns: rolled_back_audit, changes_reversed, errors, and rollback_receipt_comment_id.


search_issues

Escape hatch for ad-hoc JQL queries. Returns a page of matching issues with key, summary, status, assignee, labels, fixVersions, and due date. Use the high-level tools (get_sprint_health, run_sprint_audit) for routine PM operations.

Parameter

Type

Required

Description

jql

string

yes

JQL query string

start_at

number

no

Pagination offset (default: 0)

max_results

number

no

Results per page, max 100 (default: 50)

fields

string[]

no

Specific field keys to return

Returns: total, start_at, max_results, returned, and issues array.


pm-* label taxonomy

The agent owns the full pm-* label namespace. All managed labels are cleared and recomputed on each audit run. The one exception is pm-acknowledged — set by a human to suppress all agent flags on that issue; the agent never removes it.

Label

Applied to

Meaning

pm-acknowledged

Task or Story

Human override — agent skips this issue entirely

pm-flag-critical-date-slip

Task

End date is past the sprint boundary

pm-flag-warn-date-approaching

Task

End date is within the last 20% of the sprint

pm-flag-task-beyond-commitment

Task

End date is past committed_date

pm-flag-critical-not-started

Task

Still in Backlog/Todo past the 50% sprint mark

pm-flag-warn-not-started

Task

Still in Backlog/Todo past the 25% sprint mark

pm-flag-warn-stalled

Task

No status change for more than stalled_threshold_days

pm-flag-shared-task

Task

Task blocks stories in multiple projects

pm-flag-story-at-risk

Story

effective_completion_date is past sprint end

pm-flag-story-beyond-commitment

Story

effective_completion_date is past committed_date

pm-flag-delivery-at-risk

Story

Velocity projection shows project won't meet committed_date

pm-flag-missing-tasks

Story

Story has no blocking tasks linked

pm-flag-date-gap

Story

Gap exists between consecutive blocking task date windows

pm-flag-recommend-defer

Story

Story is unlikely to complete in time; defer recommended

Sprint labels (e.g. SIT-27-02-2026) are also applied to blocking tasks by the audit — these are derived from fixVersion names with spaces replaced by hyphens.


Authority model

Action

Who

Set task start/end dates

Human only

Set story due date

PM Agent (auto-set to effective_completion_date)

Add/remove pm-flag-* labels

PM Agent

Add sprint label to tasks

PM Agent

Add pm-acknowledged

Human only

Remove pm-acknowledged

Human only

Create fixVersions

Human only

Sprint planning (assign stories to fixVersion)

Human only

Architecture

src/
  server.ts           — MCP server entry point, registers all tools
  tools/              — One file per MCP tool
  jira/               — JIRA REST API client wrappers (client, search, issues, versions, comments)
  audit/              — Core audit logic (graph, flags, velocity, receipt)
  config/             — Project config schema, JIRA-backed storage, local registry
  utils/              — Labels, dates, JQL builder

Configuration is stored as a YAML comment on the Root Epic in JIRA (prefixed with ## pm-agent-config), making it portable and version-controlled alongside the project. A local .jira-pm-registry.json maps project_key → root_epic_key to bootstrap config reads without a prior JIRA call.

Available Tools

4 tools
run_sprint_auditA

Run the daily PM audit for a sprint. Syncs sprint labels on blocking tasks, computes and applies pm-* risk flags, auto-updates story due dates to effective_completion_date, calculates velocity if committed_date is configured, and writes an audit receipt to the Root Epic. Supports dry_run mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoIf true, compute all changes but do not write to JIRA
fix_versionYesfixVersion name identifying the sprint
project_keyYesJIRA project key

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It details the entire workflow: syncing labels, computing risk flags, updating due dates, calculating velocity if certain conditions are met, writing a receipt, and supporting a dry_run mode. This is comprehensive, though it could mention destructiveness or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences: the first defines the tool's core purpose, and the second enumerates specific actions. Every phrase contributes essential information, with no wasted words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the actions, it lacks details about return values (no output schema) and error conditions. Prerequisites like project setup are not mentioned, but the sibling tools list includes setup_project, hinting at dependencies. The description is adequate for a daily audit tool but leaves some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters have full schema descriptions (100% coverage), so baseline is 3. The description adds value by explaining the effect of dry_run ('compute but do not write') and contextualizing fix_version as the sprint identifier. This enriches understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs a daily PM audit for a sprint, listing specific actions like syncing labels, computing risk flags, updating due dates, calculating velocity, and writing an audit receipt. This specificity distinguishes it from sibling tools such as sync_sprint_tasks, which likely focus on task-level operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a daily usage context but does not explicitly state when to use this tool versus alternatives like sync_sprint_tasks or search_issues. No explicit exclusions or alternative recommendations are provided, though the 'daily PM audit' framing offers some guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_issuesA

Escape hatch for ad-hoc JQL queries. Returns a page of matching issues with key, summary, status, assignee, labels, and fixVersions. Use high-level tools (get_sprint_health, run_sprint_audit) for routine PM operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYesJQL query string
fieldsNoSpecific field keys to return. Defaults to common fields.
start_atNoPagination offset
max_resultsNoResults per page (max 100)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes return behavior (a page of matching issues with specific fields) but doesn't disclose pagination details, side effects, or auth requirements beyond what schema implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences only: first states purpose and output, second gives usage guidance. No wasted words, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters and no output schema, the description covers purpose, return fields, and usage context. It lacks examples or JQL syntax guidance, but is sufficient for ad-hoc queries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with descriptions for all 4 parameters. The description adds no additional parameter details beyond the schema, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it's an 'Escape hatch for ad-hoc JQL queries,' specifying the verb (search) and resource (issues). It lists return fields and distinguishes from high-level tools like get_sprint_health and run_sprint_audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (ad-hoc JQL queries) and when not (use high-level tools for routine PM operations). Names two alternatives, providing clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setup_projectA

Configure a project for PM Agent monitoring. Validates the root epic, board, fixVersions, and write permissions. Stores config as a YAML comment on the Root Epic. Must be run before any audit tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
board_idNoJIRA board ID (optional)
project_keyYesJIRA project key (e.g. PROJ)
root_epic_keyYesKey of the root epic that parents all cross-project tasks (e.g. PROJ-1)
committed_dateNoOptional project delivery deadline (YYYY-MM-DD). Enables delivery risk and velocity checks.
active_statusesNoStatus names that mean work is actively in progress. Defaults to: In Progress, In Review, Code Review, In Testing.
epic_link_fieldNoJQL field for finding child tasks. setup_project will auto-detect the working field by probing JIRA — candidates tried in order: provided value → parentEpic → parent.Epic Link
story_points_fieldNoJIRA custom field key for story points.customfield_10016

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses validation actions and config storage as a YAML comment. However, it does not describe error handling, side effects, or return behavior, leaving some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two sentences. The first sentence states the core purpose, the second details actions and requirements. No unnecessary information; front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters and no output schema, the description covers core behavior but omits return values and error scenarios. For a configuration tool, understanding success/failure conditions is important, so completeness is adequate but not outstanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that parameters are validated and config is stored as a YAML comment, which goes beyond schema descriptions. This enhances understanding of how parameters are used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Configure a project for PM Agent monitoring.' It details specific actions (validates root epic, board, fixVersions, write permissions) and distinguishes from sibling tools like run_sprint_audit by noting it is a setup prerequisite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Must be run before any audit tools,' providing clear when-to-use guidance. While it does not mention when-not-to-use or alternatives, the prerequisite nature is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_sprint_tasksA

Sync blocking task priorities and sprint labels to match user stories in a sprint. For each story in the sprint, finds all blocking Tasks and: (1) upgrades task priority if lower than the story priority, (2) adds the sprint label if missing. Excludes tasks with "SIT" or "UAT" in their summary. Supports resumable execution via a temp state file.

ParametersJSON Schema
NameRequiredDescriptionDefault
sprint_nameYesfixVersion name identifying the sprint (e.g. "SIT-20/03/2026")
project_keysYesList of JIRA project keys to search for stories

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description discloses key behaviors: it modifies priorities (upgrades if lower), adds sprint labels, excludes tasks with 'SIT' or 'UAT', and supports resumable execution via a temp state file. This provides good transparency, though it could mention potential side effects or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, each earning its place: purpose, action details, exclusion and resumability. It is front-loaded with the primary goal and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-step sync, no output schema, no annotations), the description covers the main behaviors, exclusions, and resumable execution. It is mostly complete, though missing details on error handling or idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes both parameters with 100% coverage (sprint_name as fixVersion name, project_keys as JIRA project keys). The description adds overall context but does not provide additional parameter-level detail beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb and resource: 'Sync blocking task priorities and sprint labels to match user stories in a sprint.' It details the actions (upgrade priority, add label) and exclusions, making the purpose unambiguous and distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the context (syncing tasks within a sprint) and what the tool does step-by-step, but it does not explicitly state when to use this tool versus alternatives like run_sprint_audit or search_issues. The usage is implied but not contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.0
    • First observedrun_sprint_audit
    • First observedsearch_issues
    • First observedsetup_project
    • First observedsync_sprint_tasks

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: setup_project for configuration, run_sprint_audit for comprehensive sprint audit, sync_sprint_tasks for blocking task synchronization, and search_issues as an ad-hoc JQL escape hatch. No two tools overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (setup_project, run_sprint_audit, sync_sprint_tasks, search_issues), making the naming predictable and easy to understand.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose as a PM monitoring assistant. Each tool serves a necessary function (setup, audit, sync, search), and the count fits comfortably within the typical 3-15 range.

Completeness4/5

The tool set covers the core PM workflow: configuration, audit, task synchronization, and ad-hoc queries. However, it references a 'get_sprint_health' tool that is not provided, and lacks tools for direct issue creation or manual updates, leaving minor gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Jira Cloud through the REST API, supporting project management, issue operations (create, read, update, delete), JQL search, task assignments, and status transitions.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides comprehensive access to Jira Cloud and Data Center instances for managing issues, epics, and attachments with AI-optimized data cleaning. It supports relationship tracking and dual transport modes via STDIO and Streamable HTTP.
    640
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/panitw/jira-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server