jiradatacenter-mcp
MCP server for Jira Data Center / Server (self-hosted Jira, REST API v2) that exposes core work-item project-management operations (platform + Agile) as MCP tools.
README
jiradatacenter-mcp
MCP server for Jira Data Center / Server (self-hosted Jira, REST API v2) — exposes core work-item project-management operations (platform + Agile) as MCP tools.
Overview
- Stateless HTTP service. No credentials are ever persisted — each request supplies its own site URL and Basic Auth credentials via headers, used only for the lifetime of that single request.
- Supports concurrent requests; per-request credential isolation is done
via Python
contextvars, not a global/shared client instance. - Entry points:
POST /mcp(MCP protocol) andGET /health(health check). - Default port:
8080(configurable viaMCP_HTTP_PORT).
Scope
214 tools across 34 categories, covering the platform REST API
(/rest/api/2/...) plus the Agile REST API (/rest/agile/1.0/...,
board/sprint/epic).
MSPbots' own stored integration config for this vendor is a
pre-generic-framework (legacy) integration — all 17 of its configured
endpoints return an entirely empty apiConfig (method: None, url: None, params: [], headers: [], migrationStatus: "0"), because the real
endpoint logic lives in backend Java code, not the generic config API.
So MSPbots' 17 endpoint names were used only as a guide to which
resource categories matter (issue, project, comment, worklog, board,
sprint, etc.); actual paths/params/methods were sourced entirely from
Atlassian's own official documentation:
- Platform API (180 ops kept): parsed from Atlassian's official
machine-readable WADL spec for Jira 9.4.0
(
https://docs.atlassian.com/software/jira/docs/api/REST/9.4.0/jira-rest-plugin.wadl, 387 total operations), filtered down to core work-item/project-management categories per explicit user scope decision — full coverage forissue,version,filter,component,comment,worklog,issueLink(Type),priority,resolution,status(category),search/jql,field(s),myself,mypreferences,mypermissions/permissions,securitylevel,groups,groupuserpicker,projectCategory,projectvalidate,customField(Option)s,serverInfo; partial coverage (a curated operation allowlist) forissuetype,project,user,role,group,dashboard— excluding admin/scheme/system-level operations (workflow scheme, permission scheme, avatar, reindex, plugin management, etc.) as out of scope. - Agile API (34 ops): manually curated from Atlassian's HTML docs at
https://docs.atlassian.com/jira-software/REST/9.4.0/— no WADL is published for this API. Query parameter names for list endpoints follow the documented pagination convention (startAt/maxResults) plus the well-documented issue-search filters (jql/validateQuery/fields/expand) used consistently across board/epic/sprint "issues for X" endpoints.
Authentication
Jira Data Center/Server uses HTTP Basic Authentication
(Authorization: Basic base64(username:password)) — confirmed against
the credentials MSPbots stores for this integration (its token field is
literally base64(username:password), not a separate secret). This
server builds that header itself from the raw username/password on every
request; the site's base URL is also per-tenant (each MSPbots tenant may
point at a different Jira instance), so it is supplied as a header too,
not a fixed environment variable.
HEADER 授权参数说明
| Header | 类型 | 是否必填 | 默认值 | 枚举值 | 字段描述 | Example |
|---|---|---|---|---|---|---|
X-Jira-Site |
string | 是 | 无 | 无 | Jira 实例地址(域名或完整 URL,缺省协议时自动补全为 https://) | jira.example.com |
X-Jira-Username |
string | 是 | 无 | 无 | Basic Auth 用户名 | api_user |
X-Jira-Password |
string | 是 | 无 | 无 | Basic Auth 密码 | Sample_Passw0rd! |
Missing any header returns 401:
{
"error": "Missing credentials",
"message": "This server requires the X-Jira-Site, X-Jira-Username and X-Jira-Password headers",
"required_headers": ["X-Jira-Site", "X-Jira-Username", "X-Jira-Password"],
"optional_headers": []
}
Environment Variables
| Variable | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
MCP_HTTP_PORT |
int | 否 | 8080 |
HTTP 监听端口 |
MCP_HTTP_HOST |
string | 否 | 0.0.0.0 |
HTTP 监听地址 |
MCP Endpoint
POST /mcp— MCP protocol (streamable HTTP transport)GET /health— health check, returns{"status": "ok", "service": "jiradatacenter-mcp", "transport": "http"}
Tool List
Tool names are jira_<category>_<operationId>, derived from the WADL
<method id="..."> / manually-curated Agile operation_id. body
parameters are accepted as a generic dict — see the Jira Server REST
API reference (linked below) for each resource's exact JSON schema.
| Category | Tool | 功能 | 方法+路径 | 参数 |
|---|---|---|---|---|
| agile | jira_agile_create_board |
Create board. | POST /rest/agile/1.0/board | body(必填) |
| agile | jira_agile_create_sprint |
Create sprint. | POST /rest/agile/1.0/sprint | body(必填) |
| agile | jira_agile_delete_board |
Delete board. | DELETE /rest/agile/1.0/board/{boardId} | board_id(必填) |
| agile | jira_agile_delete_sprint |
Delete sprint. | DELETE /rest/agile/1.0/sprint/{sprintId} | sprint_id(必填) |
| agile | jira_agile_estimate_issue_for_board |
Estimate issue for board. | PUT /rest/agile/1.0/issue/{issueIdOrKey}/estimation | issue_id_or_key(必填), board_id(必填), body(必填) |
| agile | jira_agile_get_all_boards |
Get all boards. | GET /rest/agile/1.0/board | start_at(可选), max_results(可选), type(可选), name(可选), project_key_or_id(可选) |
| agile | jira_agile_get_all_sprints_for_board |
Get all sprints for a board. | GET /rest/agile/1.0/board/{boardId}/sprint | board_id(必填), start_at(可选), max_results(可选), state(可选) |
| agile | jira_agile_get_all_versions_for_board |
Get all versions for a board. | GET /rest/agile/1.0/board/{boardId}/version | board_id(必填), start_at(可选), max_results(可选), released(可选) |
| agile | jira_agile_get_board |
Get board. | GET /rest/agile/1.0/board/{boardId} | board_id(必填) |
| agile | jira_agile_get_configuration |
Get board configuration. | GET /rest/agile/1.0/board/{boardId}/configuration | board_id(必填) |
| agile | jira_agile_get_epic |
Get epic. | GET /rest/agile/1.0/epic/{epicIdOrKey} | epic_id_or_key(必填) |
| agile | jira_agile_get_epics |
Get epics. | GET /rest/agile/1.0/board/{boardId}/epic | board_id(必填), start_at(可选), max_results(可选), done(可选) |
| agile | jira_agile_get_issue_agile |
Get issue (Agile view). | GET /rest/agile/1.0/issue/{issueIdOrKey} | issue_id_or_key(必填) |
| agile | jira_agile_get_issue_estimation_for_board |
Get issue estimation for board. | GET /rest/agile/1.0/issue/{issueIdOrKey}/estimation | issue_id_or_key(必填), board_id(必填) |
| agile | jira_agile_get_issues_for_backlog |
Get issues for backlog. | GET /rest/agile/1.0/board/{boardId}/backlog | board_id(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_for_board |
Get issues for board. | GET /rest/agile/1.0/board/{boardId}/issue | board_id(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_for_board_epic |
Get issues for epic (within a board). | GET /rest/agile/1.0/board/{boardId}/epic/{epicId}/issue | board_id(必填), epic_id(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_for_epic |
Get issues for epic. | GET /rest/agile/1.0/epic/{epicIdOrKey}/issue | epic_id_or_key(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_for_sprint |
Get issues for sprint. | GET /rest/agile/1.0/sprint/{sprintId}/issue | sprint_id(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_for_sprint_on_board |
Get issues for a sprint (within a board). | GET /rest/agile/1.0/board/{boardId}/sprint/{sprintId}/issue | board_id(必填), sprint_id(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_without_epic |
Get issues without epic. | GET /rest/agile/1.0/epic/none/issue | start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_issues_without_epic_for_board |
Get issues without epic (within a board). | GET /rest/agile/1.0/board/{boardId}/epic/none/issue | board_id(必填), start_at(可选), max_results(可选), jql(可选), validate_query(可选), fields(可选), expand(可选) |
| agile | jira_agile_get_projects_for_board |
Get projects associated with a board. | GET /rest/agile/1.0/board/{boardId}/project | board_id(必填), start_at(可选), max_results(可选) |
| agile | jira_agile_get_sprint |
Get sprint. | GET /rest/agile/1.0/sprint/{sprintId} | sprint_id(必填) |
| agile | jira_agile_move_issues_to_backlog |
Move issues to backlog. | POST /rest/agile/1.0/backlog/issue | body(必填) |
| agile | jira_agile_move_issues_to_epic |
Move issues to epic. | POST /rest/agile/1.0/epic/{epicIdOrKey}/issue | epic_id_or_key(必填), body(必填) |
| agile | jira_agile_move_issues_to_sprint |
Move issues to sprint. | POST /rest/agile/1.0/sprint/{sprintId}/issue | sprint_id(必填), body(必填) |
| agile | jira_agile_partially_update_epic |
Partially update epic (Agile-specific fields only — use the platform issue API for other fields). | POST /rest/agile/1.0/epic/{epicIdOrKey} | epic_id_or_key(必填), body(必填) |
| agile | jira_agile_partially_update_sprint |
Partially update sprint. | POST /rest/agile/1.0/sprint/{sprintId} | sprint_id(必填), body(必填) |
| agile | jira_agile_rank_epics |
Rank epics. | PUT /rest/agile/1.0/epic/{epicIdOrKey}/rank | epic_id_or_key(必填), body(必填) |
| agile | jira_agile_rank_issues |
Rank issues. | PUT /rest/agile/1.0/issue/rank | body(必填) |
| agile | jira_agile_remove_issues_from_epic |
Remove issues from epic. | POST /rest/agile/1.0/epic/none/issue | body(必填) |
| agile | jira_agile_swap_sprint |
Swap sprint. | POST /rest/agile/1.0/sprint/{sprintId}/swap | sprint_id(必填), body(必填) |
| agile | jira_agile_update_sprint |
Update sprint (full). | PUT /rest/agile/1.0/sprint/{sprintId} | sprint_id(必填), body(必填) |
| attachment | jira_attachment_expand_for_humans |
Tries to expand an attachment. Output is human-readable and subject to change. | GET /rest/api/2/attachment/{id}/expand/human | id(必填) |
| attachment | jira_attachment_expand_for_machines |
Tries to expand an attachment. Output is raw and should be backwards-compatible through the course of time. | GET /rest/api/2/attachment/{id}/expand/raw | id(必填) |
| attachment | jira_attachment_get_attachment |
Returns the meta-data for an attachment, including the URI of the actual attached file. | GET /rest/api/2/attachment/{id} | id(必填) |
| attachment | jira_attachment_get_attachment_meta |
Returns the meta information for an attachments, specifically if they are enabled and the maximum upload size. | GET /rest/api/2/attachment/meta | 无 |
| attachment | jira_attachment_remove_attachment |
Remove an attachment from an issue. | DELETE /rest/api/2/attachment/{id} | id(必填) |
| comment | jira_comment_delete_property |
Removes the property from the comment identified by the key or by the id. Ths user removing the property is required. | DELETE /rest/api/2/comment/{commentId}/properties/{propertyKey} | comment_id(必填), property_key(必填) |
| comment | jira_comment_get_properties_keys |
Returns the keys of all properties for the comment identified by the key or by the id. | GET /rest/api/2/comment/{commentId}/properties | comment_id(必填) |
| comment | jira_comment_get_property |
Returns the value of the property with a given key from the comment identified by the key or by the id. The user who retrieves. | GET /rest/api/2/comment/{commentId}/properties/{propertyKey} | comment_id(必填), property_key(必填) |
| comment | jira_comment_set_property |
Sets the value of the specified comment's property. | PUT /rest/api/2/comment/{commentId}/properties/{propertyKey} | comment_id(必填), property_key(必填), body(必填) |
| component | jira_component_create_component |
Create a component via POST. | POST /rest/api/2/component | body(必填) |
| component | jira_component_delete |
Delete a project component. | DELETE /rest/api/2/component/{id} | id(必填), move_issues_to(可选) |
| component | jira_component_get_component |
Returns a project component. | GET /rest/api/2/component/{id} | id(必填) |
| component | jira_component_get_component_related_issues |
Returns counts of issues related to this component. | GET /rest/api/2/component/{id}/relatedIssueCounts | id(必填) |
| component | jira_component_get_paginated_components |
Returns paginated list of filtered active components. | GET /rest/api/2/component/page | start_at(可选), max_results(可选), query(可选), project_ids(可选) |
| component | jira_component_update_component |
Modify a component via PUT. Any fields present in the PUT will override existing values. As a convenience, if a field. | PUT /rest/api/2/component/{id} | id(必填), body(必填) |
| customfieldoption | jira_customFieldOption_get_custom_field_option |
Returns a full representation of the Custom Field Option that has the given id. | GET /rest/api/2/customFieldOption/{id} | id(必填) |
| customfields | jira_customFields_bulk_delete_custom_fields |
bulkDeleteCustomFields. | DELETE /rest/api/2/customFields | ids(可选) |
| customfields | jira_customFields_get_custom_field_options |
Returns custom field's options defined in a given context composed of projects and issue types. | GET /rest/api/2/customFields/{customFieldId}/options | custom_field_id(必填), project_ids(可选), issue_type_ids(可选), query(可选), max_results(可选) |
| customfields | jira_customFields_get_custom_fields |
getCustomFields. | GET /rest/api/2/customFields | start_at(可选), max_results(可选), search(可选), project_ids(可选), screen_ids(可选), types(可选), sort_order(可选), sort_column(可选), last_value_update(可选) |
| dashboard | jira_dashboard_get_dashboard |
Returns a single dashboard. | GET /rest/api/2/dashboard/{id} | id(必填) |
| dashboard | jira_dashboard_list |
Returns a list of all dashboards, optionally filtering them. | GET /rest/api/2/dashboard | filter(可选), start_at(可选), max_results(可选) |
| field | jira_field_create_custom_field |
Creates a custom field using a definition (object encapsulating custom field data). | POST /rest/api/2/field | body(必填) |
| field | jira_field_get_fields |
Returns a list of all fields, both System and Custom. | GET /rest/api/2/field | 无 |
| filter | jira_filter_add_share_permission |
Adds a share permissions to the given filter. Adding a global permission removes all previous permissions from the filter. | POST /rest/api/2/filter/{id}/permission | id(必填), body(必填) |
| filter | jira_filter_create_filter |
Creates a new filter, and returns newly created filter. | POST /rest/api/2/filter | body(必填), expand(可选) |
| filter | jira_filter_default_columns |
Returns the default columns for the given filter. Currently logged in user will be used as. | GET /rest/api/2/filter/{id}/columns | id(必填) |
| filter | jira_filter_delete_filter |
Delete a filter. | DELETE /rest/api/2/filter/{id} | id(必填) |
| filter | jira_filter_delete_share_permission |
Removes a share permissions from the given filter. | DELETE /rest/api/2/filter/{id}/permission/{permission-id} | id(必填), permission_id(必填) |
| filter | jira_filter_edit_filter |
Updates an existing filter, and returns its new value. | PUT /rest/api/2/filter/{id} | id(必填), body(必填), expand(可选) |
| filter | jira_filter_get_default_share_scope |
Returns the default share scope of the logged-in user. | GET /rest/api/2/filter/defaultShareScope | 无 |
| filter | jira_filter_get_favourite_filters |
Returns the favourite filters of the logged-in user. | GET /rest/api/2/filter/favourite | expand(可选) |
| filter | jira_filter_get_filter |
Returns a filter given an id. | GET /rest/api/2/filter/{id} | id(必填), expand(可选) |
| filter | jira_filter_get_share_permission |
Returns a single share permission of the given filter. | GET /rest/api/2/filter/{id}/permission/{permissionId} | permission_id(必填), id(必填) |
| filter | jira_filter_get_share_permissions |
Returns all share permissions of the given filter. | GET /rest/api/2/filter/{id}/permission | id(必填) |
| filter | jira_filter_reset_columns |
Resets the columns for the given filter such that the filter no longer has its own column config. | DELETE /rest/api/2/filter/{id}/columns | id(必填) |
| filter | jira_filter_set_columns |
Sets the default columns for the given filter. | PUT /rest/api/2/filter/{id}/columns | id(必填), body(必填) |
| filter | jira_filter_set_default_share_scope |
Sets the default share scope of the logged-in user. | PUT /rest/api/2/filter/defaultShareScope | body(必填) |
| group | jira_group_get_group |
Returns REST representation for the requested group. Allows to get list of active users belonging to the. | GET /rest/api/2/group | groupname(可选), expand(可选) |
| group | jira_group_get_users_from_group |
This resource returns a paginated list of users who are members of the specified group and its subgroups. | GET /rest/api/2/group/member | groupname(可选), include_inactive_users(可选), start_at(可选), max_results(可选) |
| groups | jira_groups_find_groups |
Returns groups with substrings matching a given query. This is mainly for use with. | GET /rest/api/2/groups/picker | query(可选), exclude(可选), max_results(可选), user_name(可选) |
| groupuserpicker | jira_groupuserpicker_find_users_and_groups |
Returns a list of users and groups matching query with highlighting. This resource cannot be accessed. | GET /rest/api/2/groupuserpicker | query(可选), max_results(可选), show_avatar(可选), field_id(可选), project_id(可选), issue_type_id(可选) |
| issue | jira_issue_add_attachment |
Add one or more attachments to an issue. | POST /rest/api/2/issue/{issueIdOrKey}/attachments | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_add_comment |
Adds a new comment to an issue. | POST /rest/api/2/issue/{issueIdOrKey}/comment | issue_id_or_key(必填), body(必填), expand(可选) |
| issue | jira_issue_add_vote |
Cast your vote in favour of an issue. | POST /rest/api/2/issue/{issueIdOrKey}/votes | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_add_watcher |
Adds a user to an issue's watcher list. | POST /rest/api/2/issue/{issueIdOrKey}/watchers | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_add_worklog |
Adds a new worklog entry to an issue. | POST /rest/api/2/issue/{issueIdOrKey}/worklog | issue_id_or_key(必填), body(必填), adjust_estimate(可选), new_estimate(可选), reduce_by(可选) |
| issue | jira_issue_archive_issue |
Archives an issue. | PUT /rest/api/2/issue/{issueIdOrKey}/archive | issue_id_or_key(必填), body(必填), notify_users(可选) |
| issue | jira_issue_archive_issues |
Archives a list of issues. | POST /rest/api/2/issue/archive | body(必填), notify_users(可选) |
| issue | jira_issue_assign |
Assigns an issue to a user. | PUT /rest/api/2/issue/{issueIdOrKey}/assignee | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_can_move_sub_task |
canMoveSubTask. | GET /rest/api/2/issue/{issueIdOrKey}/subtask/move | issue_id_or_key(必填) |
| issue | jira_issue_create_issue |
Creates an issue or a sub-task from a JSON representation. | POST /rest/api/2/issue | body(必填), update_history(可选) |
| issue | jira_issue_create_issues |
Creates issues or sub-tasks from a JSON representation. | POST /rest/api/2/issue/bulk | body(必填) |
| issue | jira_issue_create_or_update_remote_issue_link |
Creates or updates a remote issue link from a JSON representation. If a globalId is provided and a remote issue link. | POST /rest/api/2/issue/{issueIdOrKey}/remotelink | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_delete_comment |
Deletes an existing comment . | DELETE /rest/api/2/issue/{issueIdOrKey}/comment/{id} | issue_id_or_key(必填), id(必填) |
| issue | jira_issue_delete_issue |
Delete an issue. | DELETE /rest/api/2/issue/{issueIdOrKey} | issue_id_or_key(必填), delete_subtasks(可选) |
| issue | jira_issue_delete_property |
Removes the property from the issue identified by the key or by the id. Ths user removing the property is required. | DELETE /rest/api/2/issue/{issueIdOrKey}/properties/{propertyKey} | issue_id_or_key(必填), property_key(必填) |
| issue | jira_issue_delete_remote_issue_link_by_global_id |
Delete the remote issue link with the given global id on the issue. | DELETE /rest/api/2/issue/{issueIdOrKey}/remotelink | issue_id_or_key(必填), global_id(可选) |
| issue | jira_issue_delete_remote_issue_link_by_id |
Delete the remote issue link with the given id on the issue. | DELETE /rest/api/2/issue/{issueIdOrKey}/remotelink/{linkId} | link_id(必填), issue_id_or_key(必填) |
| issue | jira_issue_delete_worklog |
Deletes an existing worklog entry. | DELETE /rest/api/2/issue/{issueIdOrKey}/worklog/{id} | issue_id_or_key(必填), id(必填), adjust_estimate(可选), new_estimate(可选), increase_by(可选) |
| issue | jira_issue_do_transition |
Perform a transition on an issue. | POST /rest/api/2/issue/{issueIdOrKey}/transitions | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_edit_issue |
Edits an issue from a JSON representation. | PUT /rest/api/2/issue/{issueIdOrKey} | issue_id_or_key(必填), body(必填), notify_users(可选) |
| issue | jira_issue_get_comment |
Returns a single comment. | GET /rest/api/2/issue/{issueIdOrKey}/comment/{id} | issue_id_or_key(必填), id(必填), expand(可选) |
| issue | jira_issue_get_comments |
Returns all comments for an issue. | GET /rest/api/2/issue/{issueIdOrKey}/comment | issue_id_or_key(必填), start_at(可选), max_results(可选), order_by(可选), expand(可选) |
| issue | jira_issue_get_create_issue_meta_fields |
Returns the metadata for issue types used for creating issues. | GET /rest/api/2/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId} | issue_type_id(必填), project_id_or_key(必填), start_at(可选), max_results(可选) |
| issue | jira_issue_get_create_issue_meta_project_issue_types |
Returns the metadata for issue types used for creating issues. | GET /rest/api/2/issue/createmeta/{projectIdOrKey}/issuetypes | project_id_or_key(必填), start_at(可选), max_results(可选) |
| issue | jira_issue_get_edit_issue_meta |
Returns the meta data for editing an issue. | GET /rest/api/2/issue/{issueIdOrKey}/editmeta | issue_id_or_key(必填) |
| issue | jira_issue_get_issue |
Returns a full representation of the issue for the given issue key. | GET /rest/api/2/issue/{issueIdOrKey} | issue_id_or_key(必填), fields(可选), expand(可选), properties(可选), update_history(可选) |
| issue | jira_issue_get_issue_picker_resource |
Returns suggested issues which match the auto-completion query for the user which executes this request. This REST. | GET /rest/api/2/issue/picker | query(可选), current_jql(可选), current_issue_key(可选), current_project_id(可选), show_sub_tasks(可选), show_sub_task_parent(可选) |
| issue | jira_issue_get_issue_watchers |
Returns the list of watchers for the issue with the given key. | GET /rest/api/2/issue/{issueIdOrKey}/watchers | issue_id_or_key(必填) |
| issue | jira_issue_get_issue_worklog |
Returns all work logs for an issue. | GET /rest/api/2/issue/{issueIdOrKey}/worklog | issue_id_or_key(必填) |
| issue | jira_issue_get_properties_keys |
Returns the keys of all properties for the issue identified by the key or by the id. | GET /rest/api/2/issue/{issueIdOrKey}/properties | issue_id_or_key(必填) |
| issue | jira_issue_get_property |
Returns the value of the property with a given key from the issue identified by the key or by the id. The user who retrieves. | GET /rest/api/2/issue/{issueIdOrKey}/properties/{propertyKey} | issue_id_or_key(必填), property_key(必填) |
| issue | jira_issue_get_remote_issue_link_by_id |
Get the remote issue link with the given id on the issue. | GET /rest/api/2/issue/{issueIdOrKey}/remotelink/{linkId} | link_id(必填), issue_id_or_key(必填) |
| issue | jira_issue_get_remote_issue_links |
A REST sub-resource representing the remote issue links on the issue. | GET /rest/api/2/issue/{issueIdOrKey}/remotelink | issue_id_or_key(必填), global_id(可选) |
| issue | jira_issue_get_sub_tasks |
Returns an issue's subtask list. | GET /rest/api/2/issue/{issueIdOrKey}/subtask | issue_id_or_key(必填) |
| issue | jira_issue_get_transitions |
Get a list of the transitions possible for this issue by the current user, along with fields that are required and their types. | GET /rest/api/2/issue/{issueIdOrKey}/transitions | issue_id_or_key(必填), transition_id(可选) |
| issue | jira_issue_get_votes |
A REST sub-resource representing the voters on the issue. | GET /rest/api/2/issue/{issueIdOrKey}/votes | issue_id_or_key(必填) |
| issue | jira_issue_get_worklog |
Returns a specific worklog. | GET /rest/api/2/issue/{issueIdOrKey}/worklog/{id} | issue_id_or_key(必填), id(必填) |
| issue | jira_issue_move_sub_tasks |
Reorders an issue's subtasks by moving the subtask at index "from". | POST /rest/api/2/issue/{issueIdOrKey}/subtask/move | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_notify |
Sends a notification (email) to the list or recipients defined in the request. | POST /rest/api/2/issue/{issueIdOrKey}/notify | issue_id_or_key(必填), body(必填) |
| issue | jira_issue_remove_vote |
Remove your vote from an issue. (i.e. "unvote"). | DELETE /rest/api/2/issue/{issueIdOrKey}/votes | issue_id_or_key(必填) |
| issue | jira_issue_remove_watcher |
Removes a user from an issue's watcher list. | DELETE /rest/api/2/issue/{issueIdOrKey}/watchers | issue_id_or_key(必填), username(可选) |
| issue | jira_issue_restore_issue |
Restores an archived issue. | PUT /rest/api/2/issue/{issueIdOrKey}/restore | issue_id_or_key(必填), body(必填), notify_users(可选) |
| issue | jira_issue_set_property |
Sets the value of the specified issue's property. | PUT /rest/api/2/issue/{issueIdOrKey}/properties/{propertyKey} | issue_id_or_key(必填), property_key(必填), body(必填) |
| issue | jira_issue_update_comment |
Updates an existing comment using its JSON representation. | PUT /rest/api/2/issue/{issueIdOrKey}/comment/{id} | issue_id_or_key(必填), id(必填), body(必填), expand(可选) |
| issue | jira_issue_update_remote_issue_link |
Updates a remote issue link from a JSON representation. Any fields not provided are set to null. | PUT /rest/api/2/issue/{issueIdOrKey}/remotelink/{linkId} | link_id(必填), issue_id_or_key(必填), body(必填) |
| issue | jira_issue_update_worklog |
Updates an existing worklog entry. | PUT /rest/api/2/issue/{issueIdOrKey}/worklog/{id} | issue_id_or_key(必填), id(必填), body(必填), adjust_estimate(可选), new_estimate(可选) |
| issuelink | jira_issueLink_delete_issue_link |
Deletes an issue link with the specified id. | DELETE /rest/api/2/issueLink/{linkId} | link_id(必填) |
| issuelink | jira_issueLink_get_issue_link |
Returns an issue link with the specified id. | GET /rest/api/2/issueLink/{linkId} | link_id(必填) |
| issuelink | jira_issueLink_link_issues |
Creates an issue link between two issues. | POST /rest/api/2/issueLink | body(必填) |
| issuelinktype | jira_issueLinkType_create_issue_link_type |
Create a new issue link type. | POST /rest/api/2/issueLinkType | body(必填) |
| issuelinktype | jira_issueLinkType_delete_issue_link_type |
Delete the specified issue link type. | DELETE /rest/api/2/issueLinkType/{issueLinkTypeId} | issue_link_type_id(必填) |
| issuelinktype | jira_issueLinkType_get_issue_link_type |
Returns for a given issue link type id all information about this issue link type. | GET /rest/api/2/issueLinkType/{issueLinkTypeId} | issue_link_type_id(必填) |
| issuelinktype | jira_issueLinkType_get_issue_link_types |
Returns a list of available issue link types, if issue linking is enabled. | GET /rest/api/2/issueLinkType | 无 |
| issuelinktype | jira_issueLinkType_update_issue_link_type |
Update the specified issue link type. | PUT /rest/api/2/issueLinkType/{issueLinkTypeId} | issue_link_type_id(必填), body(必填) |
| issuetype | jira_issuetype_create_issue_type |
Creates an issue type from a JSON representation and adds the issue newly created issue type to the default issue. | POST /rest/api/2/issuetype | body(必填) |
| issuetype | jira_issuetype_delete_issue_type |
Deletes the specified issue type. If the issue type has any associated issues, these issues will be migrated to. | DELETE /rest/api/2/issuetype/{id} | id(必填), alternative_issue_type_id(可选) |
| issuetype | jira_issuetype_get_alternative_issue_types |
Returns a list of all alternative issue types for the given issue type id. The list will contain these issues types, to which. | GET /rest/api/2/issuetype/{id}/alternatives | id(必填) |
| issuetype | jira_issuetype_get_issue_all_types |
Returns a list of all issue types visible to the user. | GET /rest/api/2/issuetype | 无 |
| issuetype | jira_issuetype_get_issue_type |
Returns a full representation of the issue type that has the given id. | GET /rest/api/2/issuetype/{id} | id(必填) |
| issuetype | jira_issuetype_get_paginated_issue_types |
Returns paginated list of filtered issue types. | GET /rest/api/2/issuetype/page | start_at(可选), max_results(可选), query(可选), project_ids(可选) |
| issuetype | jira_issuetype_update_issue_type |
Updates the specified issue type from a JSON representation. | PUT /rest/api/2/issuetype/{id} | id(必填), body(必填) |
| jql | jira_jql_get_auto_complete |
Returns the auto complete data required for JQL searches. | GET /rest/api/2/jql/autocompletedata | 无 |
| jql | jira_jql_get_field_auto_complete_for_query_string |
Returns auto complete suggestions for JQL search. | GET /rest/api/2/jql/autocompletedata/suggestions | field_name(可选), field_value(可选), predicate_name(可选), predicate_value(可选) |
| mypermissions | jira_mypermissions_get_permissions |
Returns all permissions in the system and whether the currently logged in user has them. You can optionally provide a specific context to get permissions for. | GET /rest/api/2/mypermissions | project_key(可选), project_id(可选), issue_key(可选), issue_id(可选) |
| mypreferences | jira_mypreferences_get_preference |
Returns preference of the currently logged in user. Preference key must be provided as input parameter (key). The. | GET /rest/api/2/mypreferences | key(可选) |
| mypreferences | jira_mypreferences_remove_preference |
Removes preference of the currently logged in user. Preference key must be provided as input parameters (key). If. | DELETE /rest/api/2/mypreferences | key(可选) |
| mypreferences | jira_mypreferences_set_preference |
Sets preference of the currently logged in user. Preference key must be provided as input parameters (key). Value. | PUT /rest/api/2/mypreferences | body(必填), key(可选) |
| myself | jira_myself_change_my_password |
Modify caller password. | PUT /rest/api/2/myself/password | body(必填) |
| myself | jira_myself_get_user |
Returns currently logged user. This resource cannot be accessed anonymously. | GET /rest/api/2/myself | 无 |
| myself | jira_myself_update_user |
Modify currently logged user. The "value" fields present will override the existing value. | PUT /rest/api/2/myself | body(必填) |
| permissions | jira_permissions_get_all_permissions |
Returns all permissions that are present in the Jira instance - Global, Project and the global ones added by plugins. | GET /rest/api/2/permissions | 无 |
| priority | jira_priority_get_priorities_get_page |
Returns a list of all issue priorities. | GET /rest/api/2/priority/page | start_at(可选), max_results(可选), query(可选), project_ids(可选) |
| priority | jira_priority_get_priorities_get_priority |
Returns a list of all issue priorities. | GET /rest/api/2/priority | 无 |
| priority | jira_priority_get_priority |
Returns an issue priority. | GET /rest/api/2/priority/{id} | id(必填) |
| project | jira_project_archive_project |
Archives a project. | PUT /rest/api/2/project/{projectIdOrKey}/archive | project_id_or_key(必填), body(必填) |
| project | jira_project_create_project |
Creates a new project. | POST /rest/api/2/project | body(必填) |
| project | jira_project_delete_project |
Deletes a project. | DELETE /rest/api/2/project/{projectIdOrKey} | project_id_or_key(必填) |
| project | jira_project_get_accessible_project_type_by_key |
Returns the project type with the given key, if it is accessible to the logged in user. | GET /rest/api/2/project/type/{projectTypeKey}/accessible | project_type_key(必填) |
| project | jira_project_get_all_project_types |
Returns all the project types defined on the Jira instance, not taking into account whether. | GET /rest/api/2/project/type | 无 |
| project | jira_project_get_all_projects |
Returns all projects which are visible for the currently logged in user. If no user is logged in, it returns the. | GET /rest/api/2/project | expand(可选), recent(可选), include_archived(可选), browse_archive(可选) |
| project | jira_project_get_all_statuses |
Get all issue types with valid status values for a project. | GET /rest/api/2/project/{projectIdOrKey}/statuses | project_id_or_key(必填) |
| project | jira_project_get_project |
Contains a full representation of a project in JSON format. | GET /rest/api/2/project/{projectIdOrKey} | project_id_or_key(必填), expand(可选) |
| project | jira_project_get_project_components |
Contains a full representation of a the specified project's components. | GET /rest/api/2/project/{projectIdOrKey}/components | project_id_or_key(必填) |
| project | jira_project_get_project_role |
Returns the details for a given project role in a project. | GET /rest/api/2/project/{projectIdOrKey}/role/{id} | project_id_or_key(必填), id(必填) |
| project | jira_project_get_project_roles |
Returns all roles in the given project Id or key, with links to full details on each role. | GET /rest/api/2/project/{projectIdOrKey}/role | project_id_or_key(必填) |
| project | jira_project_get_project_type_by_key |
Returns the project type with the given key. | GET /rest/api/2/project/type/{projectTypeKey} | project_type_key(必填) |
| project | jira_project_get_project_versions |
Contains a full representation of a the specified project's versions. | GET /rest/api/2/project/{projectIdOrKey}/versions | project_id_or_key(必填), expand(可选) |
| project | jira_project_get_project_versions_paginated |
Returns all versions for the specified project. Results are paginated. | GET /rest/api/2/project/{projectIdOrKey}/version | project_id_or_key(必填), start_at(可选), max_results(可选), order_by(可选), expand(可选) |
| project | jira_project_get_security_levels_for_project |
Returns all security levels for the project that the current logged in user has access to. | GET /rest/api/2/project/{projectKeyOrId}/securitylevel | project_key_or_id(必填) |
| project | jira_project_restore_project |
Restore an archived project. | PUT /rest/api/2/project/{projectIdOrKey}/restore | project_id_or_key(必填), body(必填) |
| project | jira_project_update_project |
Updates a project. | PUT /rest/api/2/project/{projectIdOrKey} | project_id_or_key(必填), body(必填), expand(可选) |
| projectcategory | jira_projectCategory_create_project_category |
Create a project category via POST. | POST /rest/api/2/projectCategory | body(必填) |
| projectcategory | jira_projectCategory_get_all_project_categories |
Returns all project categories. | GET /rest/api/2/projectCategory | 无 |
| projectcategory | jira_projectCategory_get_project_category_by_id |
Contains a representation of a project category in JSON format. | GET /rest/api/2/projectCategory/{id} | id(必填) |
| projectcategory | jira_projectCategory_remove_project_category |
Delete a project category. | DELETE /rest/api/2/projectCategory/{id} | id(必填) |
| projectcategory | jira_projectCategory_update_project_category |
Modify a project category via PUT. Any fields present in the PUT will override existing values. As a convenience, if a field. | PUT /rest/api/2/projectCategory/{id} | id(必填), body(必填) |
| projectvalidate | jira_projectvalidate_get_project |
Validates a project key. | GET /rest/api/2/projectvalidate/key | key(可选) |
| resolution | jira_resolution_get_paginated_resolutions |
Returns paginated list of filtered resolutions. | GET /rest/api/2/resolution/page | start_at(可选), max_results(可选), query(可选) |
| resolution | jira_resolution_get_resolution |
Returns a resolution. | GET /rest/api/2/resolution/{id} | id(必填) |
| resolution | jira_resolution_get_resolutions |
Returns a list of all resolutions. | GET /rest/api/2/resolution | 无 |
| role | jira_role_get_project_role_actors_for_role |
Gets default actors for the given role. | GET /rest/api/2/role/{id}/actors | id(必填) |
| role | jira_role_get_project_roles |
Get all the ProjectRoles available in Jira. Currently this list is global. | GET /rest/api/2/role | 无 |
| role | jira_role_get_project_roles_by_id |
Get a specific ProjectRole available in Jira. | GET /rest/api/2/role/{id} | id(必填) |
| search | jira_search_search |
Searches for issues using JQL. | GET /rest/api/2/search | jql(可选), start_at(可选), max_results(可选), validate_query(可选), fields(可选), expand(可选) |
| search | jira_search_search_using_search_request |
Performs a search using JQL. | POST /rest/api/2/search | body(必填) |
| securitylevel | jira_securitylevel_get_issuesecuritylevel |
Returns a full representation of the security level that has the given id. | GET /rest/api/2/securitylevel/{id} | id(必填) |
| serverinfo | jira_serverInfo_get_server_info |
Returns general information about the current Jira server. | GET /rest/api/2/serverInfo | do_health_check(可选) |
| status | jira_status_get_paginated_statuses |
Returns paginated list of filtered statuses. | GET /rest/api/2/status/page | start_at(可选), max_results(可选), query(可选), project_ids(可选), issue_type_ids(可选) |
| status | jira_status_get_status |
Returns a full representation of the Status having the given id or name. | GET /rest/api/2/status/{idOrName} | id_or_name(必填) |
| status | jira_status_get_statuses |
Returns a list of all statuses. | GET /rest/api/2/status | 无 |
| statuscategory | jira_statuscategory_get_status_categories |
Returns a list of all status categories. | GET /rest/api/2/statuscategory | 无 |
| statuscategory | jira_statuscategory_get_status_category |
Returns a full representation of the StatusCategory having the given id or key. | GET /rest/api/2/statuscategory/{idOrKey} | id_or_key(必填) |
| user | jira_user_find_assignable_users |
Returns a list of users that match the search string. This resource cannot be accessed anonymously. | GET /rest/api/2/user/assignable/search | username(可选), project(可选), issue_key(可选), max_results(可选), action_descriptor_id(可选) |
| user | jira_user_find_bulk_assignable_users |
Returns a list of users that match the search string and can be assigned issues for all the given projects. | GET /rest/api/2/user/assignable/multiProjectSearch | username(可选), project_keys(可选), max_results(可选) |
| user | jira_user_find_users |
Returns a list of users that match the search string. This resource cannot be accessed anonymously. | GET /rest/api/2/user/search | username(可选), start_at(可选), max_results(可选), include_active(可选), include_inactive(可选) |
| user | jira_user_find_users_for_picker |
Returns a list of users matching query with highlighting. | GET /rest/api/2/user/picker | query(可选), max_results(可选), show_avatar(可选), exclude(可选) |
| user | jira_user_find_users_with_all_permissions |
Returns a list of active users that match the search string and have all specified permissions for the project or issue. | GET /rest/api/2/user/permission/search | username(可选), permissions(可选), issue_key(可选), project_key(可选), start_at(可选), max_results(可选) |
| user | jira_user_find_users_with_browse_permission |
Returns a list of active users that match the search string. This resource cannot be accessed anonymously. | GET /rest/api/2/user/viewissue/search | username(可选), issue_key(可选), project_key(可选), max_results(可选) |
| user | jira_user_get_user |
Returns a user. This resource cannot be accessed anonymously. | GET /rest/api/2/user | username(可选), key(可选), include_deleted(可选) |
| version | jira_version_create_or_update_remote_version_link_post_remotelink |
Create a remote version link via POST. The link's global ID will be taken from the. | POST /rest/api/2/version/{versionId}/remotelink | version_id(必填), body(必填) |
| version | jira_version_create_or_update_remote_version_link_post_remotelink_2 |
Create a remote version link via POST. The link's global ID will be taken from the. | POST /rest/api/2/version/{versionId}/remotelink/{globalId} | version_id(必填), global_id(必填), body(必填) |
| version | jira_version_create_version |
Create a version via POST. | POST /rest/api/2/version | body(必填) |
| version | jira_version_delete_delete_version |
Delete a project version. | DELETE /rest/api/2/version/{id} | id(必填), move_fix_issues_to(可选), move_affected_issues_to(可选) |
| version | jira_version_delete_post_remove_and_swap |
Delete a project version. | POST /rest/api/2/version/{id}/removeAndSwap | id(必填), body(必填) |
| version | jira_version_delete_remote_version_link |
Delete a specific remote version link with the given version ID and global ID. | DELETE /rest/api/2/version/{versionId}/remotelink/{globalId} | version_id(必填), global_id(必填) |
| version | jira_version_delete_remote_version_links_by_version_id |
Delete all remote version links for a given version ID. | DELETE /rest/api/2/version/{versionId}/remotelink | version_id(必填) |
| version | jira_version_get_paginated_versions |
Retrieve paginated collection of versions matching given query optionally filtered by given project IDs. | GET /rest/api/2/version | start_at(可选), max_results(可选), query(可选), project_ids(可选) |
| version | jira_version_get_remote_version_link |
A REST sub-resource representing a remote version link. | GET /rest/api/2/version/{versionId}/remotelink/{globalId} | version_id(必填), global_id(必填) |
| version | jira_version_get_remote_version_links |
Returns the remote version links for a given global ID. | GET /rest/api/2/version/remotelink | global_id(可选) |
| version | jira_version_get_remote_version_links_by_version_id |
Returns the remote version links associated with the given version ID. | GET /rest/api/2/version/{versionId}/remotelink | version_id(必填) |
| version | jira_version_get_version |
Returns a project version. | GET /rest/api/2/version/{id} | id(必填), expand(可选) |
| version | jira_version_get_version_related_issues |
Returns a bean containing the number of fixed in and affected issues for the given version. | GET /rest/api/2/version/{id}/relatedIssueCounts | id(必填) |
| version | jira_version_get_version_unresolved_issues |
Returns the number of unresolved issues for the given version. | GET /rest/api/2/version/{id}/unresolvedIssueCount | id(必填) |
| version | jira_version_merge |
Merge versions. | PUT /rest/api/2/version/{id}/mergeto/{moveIssuesTo} | move_issues_to(必填), id(必填), body(必填) |
| version | jira_version_move_version |
Modify a version's sequence within a project. | POST /rest/api/2/version/{id}/move | id(必填), body(必填) |
| version | jira_version_update_version |
Modify a version via PUT. Any fields present in the PUT will override existing values. As a convenience, if a field. | PUT /rest/api/2/version/{id} | id(必填), body(必填) |
| worklog | jira_worklog_get_ids_of_worklogs_deleted_since |
Returns worklogs id and delete time of worklogs that was deleted since given time. | GET /rest/api/2/worklog/deleted | since(可选) |
| worklog | jira_worklog_get_ids_of_worklogs_modified_since |
Returns worklogs id and update time of worklogs that was updated since given time. | GET /rest/api/2/worklog/updated | since(可选) |
| worklog | jira_worklog_get_worklogs_for_ids |
Returns worklogs for given worklog ids. Only worklogs to which the calling user has permissions, will be included in the result. | POST /rest/api/2/worklog/list | body(必填) |
测试示例
# Health check
curl -s http://localhost:8080/health
# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp \
-H "X-Jira-Site: jira.example.com" \
-H "X-Jira-Username: api_user" \
-H "X-Jira-Password: Sample_Passw0rd!" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: <session-id-from-initialize>" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "jira_myself_get_user",
"arguments": {}
}
}'
Self-test limitation (2026-07-29): the provided test account
(jira.mspbots.ai, user mspbots_api) could not be live-verified from
this build environment — direct requests to jira.mspbots.ai (both
through this server and via plain curl) consistently return a generic
404 page not found, and DNS resolves the host to a sandbox-local
address. This is consistent with MSPbots' internal servers being
RDP-only / network-isolated from this environment, not a bug in the
server itself. What was verified end-to-end from this environment:
the MCP protocol handshake, tools/list returning all 214 registered
tools, the 401 credential-gating behavior, and that a live call reaches
the constructed URL and receives an HTTP response (proving the
request/auth-header plumbing works) — only the vendor-side reachability
of the real instance could not be confirmed. A real functional
self-test against jira.mspbots.ai should be run from a network that
can actually reach it (e.g. via RDP to an MSPbots-internal host).
API Reference
- Platform API WADL: https://docs.atlassian.com/software/jira/docs/api/REST/9.4.0/jira-rest-plugin.wadl
- Platform API docs: https://docs.atlassian.com/software/jira/docs/api/REST/9.4.0/
- Agile API docs: https://docs.atlassian.com/jira-software/REST/9.4.0/
Known Gaps
- Scope was an explicit user decision: expand beyond MSPbots' literal 17 endpoints to core work-item/project-management categories, excluding admin/scheme/system categories (workflow scheme, permission scheme, avatar, reindex, plugin management, etc.).
bodyparameters are untyped (dict) rather than fully modeled — the Jira REST API reference documents the exact schema per resource, but reproducing all of them as typed Python parameters was out of scope for a 214-tool generation.- Live functional self-test could not be completed from this build
environment due to
jira.mspbots.aibeing unreachable here (see 测试示例 above for exactly what was and wasn't verified). - Several operations mutate or delete real data (
jira_issue_delete_issue,jira_project_delete_project,jira_project_archive_project,jira_version_delete_delete_version, etc.) — treat anyDELETE/destructivePOST/PUTtool as irreversible against a production Jira instance and confirm with a human before invoking.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。