Connect your AI Agents to Jira Data Center & Server in minutes

Merge lets you securely connect your agents to Jira Data Center & Server and thousands of tools instantly
Jira Data Center & Server
Learn more about Merge Agent Handler

Available tools

add_comment

Add a comment to a Jira issue. Body is a plain-text string. Example: {'issue_key': 'PROJ-123', 'body': 'Comment'}.

get_comments

Get comments for a Jira issue

update_comment

Replace the body of an existing Jira comment. Call getcomments first to get a real commentid, which cannot be invented. comment_body is a plain-text string.

delete_comment

Delete a comment from a Jira issue

create_issue

Create a Jira issue. REQUIRED: project, issuetype, summary. ALWAYS call discoverissuerequiredfields first — its 'fields' list contains field IDs and allowedvalues needed for the payload. Map each required custom field to its ID, e.g. 'customfield_11623': {'id': '12093'}. Do NOT dump custom field data into description — use the correct field IDs.

get_issue

Get Jira issue details using the issue key

update_issue

Update a Jira issue. Required: issuekey. Optional: summary, description, environment, priority, issuetype, assignee, labels, components, fixVersions, duedate, custom fields (customfield*), or a nested 'fields' object. description/environment are plain-text strings. Only provided fields are updated; an explicit null clears a custom field.

delete_issue

Delete a Jira issue

link_issues

Link two Jira issues. REQUIRED: outwardissue (FROM), inwardissue (TO), linktype. Common types: 'Duplicate' (marks FROM as duplicate of TO), 'Relates', 'Blocks'. Example: {'outwardissue': 'PROJ-1', 'inwardissue': 'PROJ-2', 'linktype': 'Duplicate'}

transition_issue

Transition a Jira issue to a new status. Provide either transitionid or transitionname. Example: {'issuekey': 'PROJ-123', 'transitionname': 'In Progress', 'comment': 'Starting work'}

search_issues

Search Jira issues using JQL or structured filters. IMPORTANT: By DEFAULT, searches ALL statuses (including Done, Closed) unless explicitly filtered. Use 'resolution' field to filter open issues if needed. DIRECT JQL: {'jql': 'project = PROJ AND status = "Done"'}. STRUCTURED: {'project': 'PROJ', 'textsearch': 'x47'}. For open issues only, add 'resolution': 'Unresolved'. Unbounded search query is not allowed; at least one parameter must be provided. Supports offset pagination (startat, maxresults), date filters (createdafter, updatedafter), text search (textsearch, summarycontains), labels, priority, and field customization (fields, expand). Returns issues plus startat/total/islast -- pass startat + len(issues) as the next start_at to page.

get_issue_transitions

Get available transitions for a Jira issue

discover_issue_required_fields

Discover required fields for Jira issue creation. Always call this tool ahead of create_issue.

list_statuses

List all workflow statuses in Jira. READ-ONLY: Creating statuses via API is NOT supported - use Jira UI to add custom statuses like 'In Review', then use this to verify.

get_project_statuses

Get workflow statuses available for a specific project. Use this to verify if custom statuses like 'In Review' are configured before using transition_issue.

get_issue_attachments

Get all attachments from an issue. Returns list with attachment ID, filename, size, author, created date. Use attachment IDs with delete_attachment().

delete_attachment

Delete an attachment by ID. REQUIRED: attachmentId from getissueattachments(). Requires 'Delete All Attachments' or 'Delete Own Attachments' project permission.

add_attachment

Add an attachment to a Jira issue. REQUIRED: issueKey, filename, contentBase64 (base64-encoded file). Optional: contentType (MIME type). Returns attachment ID and metadata.

get_projects

List and filter Jira projects. Filters: query (name/key contains), keys, id, typekey (software/servicedesk/business), categoryid, status (live/archived). orderby: key, name, category (prefix '-' for descending). expand adds description/lead/issueTypes/url/projectKeys. Paginated via startat/maxresults (default 50, max 100). Use to discover project keys for createissue/searchissues.

get_project

Get a specific Jira project by key or ID

get_project_issue_types

Get issue types for a specific project

get_project_components

Get all components for a Jira project. Returns component names, IDs, descriptions, lead users, and assignee info. Components organize issues (e.g., 'Frontend', 'Backend'). Example: getprojectcomponents(project_key='PROJ')

get_project_versions

Get versions for a specific project

get_priorities

Get all available priorities. Returns list with 'id', 'name', 'description' fields. Use these values when setting priority in createissue or updateissue. Format: {"name": "High"} or {"id": "3"}.

get_project_templates

Get project templates installed on this Jira instance for a project type. Returns list with 'templateKey' and 'name' (e.g., 'com.pyxis.greenhopper.jira:gh-scrum-template'). Pass templateKey as createproject's projecttemplatekey. Call this BEFORE createproject; an empty list means that project type is not available here.

create_project

Create Jira project. REQUIRED: key (2-10 uppercase), name, projectTypeKey ('software'/'business'/'servicedesk'), projectTemplateKey (from getprojecttemplates), lead (username, from getcurrentuser/searchusers). Input at top level, NO 'fields' wrapper. Requires the 'Administer Jira' global permission.

update_project

Update a Jira project. All parameters are optional. Only provided fields will be updated. Changing key or schemes requires 'Administer Jira' permission, otherwise 'Administer Projects' permission is sufficient. Example: {'projectIdOrKey': 'PROJ', 'name': 'New Name', 'description': 'Updated description'}.

delete_project

Delete a Jira project. WARNING: This is a destructive operation. Cannot delete archived projects - restore them first via Jira UI. Requires 'Administer Jira' global permission. Example: {'projectIdOrKey': 'PROJ', 'enableUndo': false}.

move_issues_to_sprint

Move issues to sprint. Max 50 issues. Requires sprintid and issuekeys. Optional ranking. Sprint must be active or future. Requires 'Manage Sprints' permission. Use getboardsprints to find sprint IDs.

move_issues_to_backlog

Move issues to backlog. Max 50 issues. Removes from future/active sprints. Requires issue_keys. Use to unassign issues from sprints. Requires 'Manage Sprints' permission and valid license.

get_board_sprints

List sprints for board. Returns sprint IDs, names, states, dates. Filter by state: active, future, closed. Pagination supported. Use to find sprint IDs for move operations.

get_sprint

Get sprint details. Requires sprint_id. Returns state, dates, goal, board ID. Use to check sprint status before moving issues.

create_board

Create Jira board (scrum/kanban). Required: name, type (scrum/kanban), filter_id. Filter must ORDER BY Rank for issue reordering. Returns board ID. Requires 'Create shared objects' permission for shared boards.

get_boards

List all Jira boards. Filter by type (scrum/kanban), name, or project. Pagination supported. Returns board IDs, names, types. Use to discover board IDs for sprint operations.

get_board

Get Jira board details. Requires boardid. Returns name, type, location, configuration. Use getboards to find board IDs.

get_active_sprint

Get the active sprint for a Jira project by project key. Iterates boards for the project in API order (up to 20 boards) and returns the first active sprint found. Use this instead of manually calling getboards and getboard_sprints.

search_users

Search for Jira users. Requires at least one of: query (e.g., 'john') or username to search for users.

get_user

Get a specific Jira user by username

get_current_user

Get the current authenticated user

get_user_assignee_suggestions

Get user assignee suggestions for an issue or project

get_user_groups

Get groups that a user belongs to

validate_credential

Validate Jira Data Center credentials. Verifies credentials during setup.

add_worklog

Log work on a Jira issue. Requires issuekey and timespent (Jira duration, e.g. '1h 30m'). Optional comment is a plain-text string. adjustestimate controls the remaining estimate ('auto' Jira default, 'leave', 'new', 'manual'). Example: {'issuekey': 'PROJ-123', 'time_spent': '2h', 'comment': 'Investigated the bug'}

get_worklogs

Get worklog entries for a Jira issue

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Jira Data Center & Server  MCP server

FAQs on using Merge's Jira Data Center & Server  MCP server

Explore other MCP servers built and managed by Merge

unify
Unify
unily
Unily
vercel
Vercel
vestaboard
Vestaboard
visualping
VisualPing
warp
Warp
weather
Weather
webflow
Webflow
whoop
WHOOP
wikipedia
Wikipedia
wix
Wix
wordpress
WordPress
workday
Workday
x
X
xero
Xero
yelp
Yelp
youtrack
YouTrack
youtube
YouTube
zendesk
Zendesk
zendesk_sell
Zendesk Sell
zohocrm
Zoho CRM
zohodesk
Zoho Desk
zoom
Zoom
zoominfo
ZoomInfo

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now