Jira MCP connector v1.3 with agile, bulk operations, and attachments
June 04, 2026
The v1.1 release of my Jira connector covered the basics: 15 REST operations and 13 MCP tools, mostly issue search and lifecycle. v1.3 turns it into a full Jira surface for Power Platform — 91 REST operations and 50 MCP tools, with Jira Software agile, bulk issue operations, multipart file attachments, watchers, votes, worklogs, filter CRUD, and a lot more.
You can find the complete code in my SharingIsCaring repository.
What’s new since v1.1
The v1.2 release added GetIssueByKey, filter search, users-by-project, async task get/cancel, and accessible resources list. v1.3 is the bigger jump:
- Jira Software agile — boards, sprints, epics
- Bulk issue operations —
BulkCreateIssues,BulkFetchIssues - Engagement — watchers, votes, issue links
- Worklogs — full CRUD
- File attachments — multipart upload, metadata, delete
- Filters — full CRUD plus my filters and favourites
- Project versions and components — full CRUD
- Groups and status catalog
- Cross-reference suffixes on dependent MCP tools so agents know which discovery tool to call first
Total: 32 new MCP tools (now 50), and 76 new REST operations (now 91).
REST operations
The 91 operations are split across the two Jira API surfaces.
Jira Platform (/rest/api/3)
| Group | Operations |
|---|---|
| Projects | ListProjects, SearchProjects, GetProject, GetProjectVersions, CreateVersion, GetVersion, UpdateVersion, DeleteVersion, GetProjectComponents, CreateComponent, GetComponent, UpdateComponent, DeleteComponent, GetStatuses, GetProjectRoles, GetProjectStatuses |
| Issues | SearchIssues, GetIssue, CreateIssue, UpdateIssue, DeleteIssue, AssignIssue, GetEditIssueMeta, NotifyIssue, BulkCreateIssues, BulkFetchIssues, ArchiveIssues, UnarchiveIssues, ListIssueTypes |
| Comments | ListComments, AddComment, GetComment, UpdateComment, DeleteComment |
| Transitions | GetTransitions, TransitionIssue |
| Watchers and votes | GetIssueWatchers, AddWatcher, RemoveWatcher, GetVotes, AddVote, RemoveVote |
| Issue links | LinkIssues, GetIssueLink, DeleteIssueLink, GetIssueLinkTypes |
| Worklogs | AddWorklog, GetIssueWorklogs, UpdateWorklog, DeleteWorklog |
| Attachments | UploadAttachment, GetAttachmentMetadata, DeleteAttachment |
| Filters | ListFilters, GetFilter, CreateFilter, UpdateFilter, DeleteFilter, GetMyFilters, GetFavouriteFilters, SetFilterFavourite, DeleteFilterFavourite |
| Users, groups, fields | GetUser, SearchUsers, ListUsersByProject, FindGroups, GetGroupMembers, ListFields |
| Async tasks | GetTask, CancelTask |
| OAuth | ListAccessibleResources |
| MCP | InvokeMCP |
Jira Agile (/rest/agile/1.0)
| Group | Operations |
|---|---|
| Boards | ListBoards, GetBoard, GetBoardConfiguration, GetBoardIssues, GetBoardBacklog, GetBoardProjects |
| Sprints | ListBoardSprints, GetSprint, CreateSprint, UpdateSprint, DeleteSprint, GetSprintIssues, MoveIssuesToSprint, MoveIssuesToBacklog |
| Epics | ListBoardEpics, GetEpic, GetEpicIssues, MoveIssuesToEpic, RemoveIssuesFromEpic |
That’s enough surface for scheduled syncs that sweep issues, sprints, and worklogs into Dataverse, scheduled flows that close out sprints, and triggered automations that link issues across projects.
MCP tools for Copilot Studio
50 tools across discovery, issues, comments, transitions, engagement, filters, project metadata, async tasks, and agile.
Discovery
jira_list_projects, jira_search_projects, jira_get_project, jira_get_project_versions, jira_get_project_components, jira_list_issue_types, jira_list_project_roles, jira_list_project_statuses, jira_get_issue_link_types, jira_search_users, jira_list_users_by_project, jira_list_filters, jira_list_accessible_resources
Issues
jira_search_issues, jira_get_issue, jira_create_issue, jira_create_issue_simple, jira_update_issue, jira_delete_issue, jira_assign_issue, jira_bulk_create_issues, jira_bulk_fetch_issues
Comments and transitions
jira_list_comments, jira_add_comment, jira_get_transitions, jira_transition_issue
Engagement
jira_get_watchers, jira_add_watcher, jira_remove_watcher, jira_link_issues, jira_add_worklog, jira_get_issue_worklogs, jira_upload_attachment
Filters
jira_get_filter, jira_create_filter, jira_update_filter, jira_delete_filter
Project versions and components
jira_create_version, jira_create_component
Async tasks
jira_get_task, jira_cancel_task
Agile (Jira Software)
jira_list_boards, jira_get_board_issues, jira_get_board_backlog, jira_list_board_sprints, jira_list_board_epics, jira_create_sprint, jira_update_sprint, jira_get_sprint_issues, jira_move_issues_to_sprint
Cross-reference suffixes for agents
When an agent has 50 tools to choose from, it needs to know which discovery tool to call first. Every dependent tool in v1.3 carries a short cross-reference in its description so the orchestrator can chain calls without guessing.
For example:
jira_get_issueadvises callingjira_search_issuesfirstjira_transition_issueadvises callingjira_get_transitionsfirstjira_update_sprintadvises callingjira_list_board_sprintsfirstjira_move_issues_to_sprintadvises callingjira_search_issuesfor the issue keys andjira_list_board_sprintsfor the sprint ID
The result: an agent prompt like “close sprint 42 and move the open issues to the next sprint” resolves into a clean three-step chain without trial and error.
Bulk issue operations
jira_bulk_create_issues and jira_bulk_fetch_issues wrap the Jira bulk endpoints so an agent or flow can create or read up to the Atlassian per-request cap in one call.
Sample bulk create payload:
{
"issueUpdates": [
{
"fields": {
"project": { "key": "PROJ" },
"summary": "Migrate auth to OAuth 2.1",
"issuetype": { "name": "Story" }
}
},
{
"fields": {
"project": { "key": "PROJ" },
"summary": "Update connector docs",
"issuetype": { "name": "Task" }
}
}
]
}
Bulk fetch takes a list of issue IDs or keys and returns them in a single response, so a triggered flow can hydrate a batch of issues without firing one HTTP call per record.
Multipart attachments
UploadAttachment (REST) and jira_upload_attachment (MCP) both accept a JSON body with the file as base64:
{
"filename": "report.pdf",
"contentBase64": "JVBERi0xLjQK...",
"contentType": "application/pdf"
}
The connector:
- Validates the base64 payload and enforces a 10 MB cap on the decoded size
- Builds a
multipart/form-datarequest with the file part namedfile - Sets
X-Atlassian-Token: no-checkto bypass the Jira XSRF check (required by the attachments API) - Forwards the user’s OAuth bearer token
- POSTs to
/rest/api/3/issue/{issueIdOrKey}/attachments
contentType defaults to application/octet-stream when omitted. That lets a Power Automate flow that just pulled a file from SharePoint or OneDrive forward it straight into a Jira issue with no extra steps.
Agile workflows in Copilot Studio
With boards, sprints, and epics in scope, an agent can run scrum master patterns end to end:
User: “Show me the active sprint for board 1 and list any issues still open”
Agent: Calls jira_list_board_sprints filtered to active state, then jira_get_sprint_issues and filters by status.
User: “Move all unfinished issues from sprint 42 to sprint 43”
Agent: Chains jira_get_sprint_issues, jira_move_issues_to_sprint.
User: “Create a new sprint called Hardening for board 1”
Agent: Calls jira_create_sprint with the board ID it remembered from earlier in the conversation.
Auto-pagination and enhanced search
The v1.1 enhanced search behavior carries forward unchanged. SearchIssues and jira_search_issues use the cursor-based POST /rest/api/3/search/jql endpoint. Set the optional limit parameter to trigger server-side auto-pagination across Jira pages, or omit it for a single page (backward-compatible default).
jira_list_comments uses the same opt-in limit pattern over the classic startAt / maxResults model.
If you need an issue count from the new search endpoint, call POST /rest/api/3/search/approximate-count. The cursor-based endpoint intentionally drops total for performance.
OAuth scopes
The connector still requests three scopes:
read:jira-workwrite:jira-workread:jira-user
Jira Software (agile) operations are gated by the same read:jira-work and write:jira-work scopes, so the agile additions need no new permissions. If your Atlassian app uses finer-grained agile scopes (read:sprint:jira-software, for example), add them in the developer console and update apiProperties.json to match.
Setup
1. Create an Atlassian OAuth 2.0 (3LO) app
- Go to the Atlassian developer console.
- Create a new OAuth 2.0 (3LO) app.
- Add this redirect URL:
https://global.consent.azure-apim.net/redirect - Copy the Client ID and Client Secret.
2. Import the connector
- In the Power Platform Maker portal, go to Custom connectors > Import an OpenAPI file.
- Import
apiDefinition.swagger.json. - On the Code tab, paste the contents of
script.csxand toggle the code on. - Save the connector.
3. Create a connection
Create a connection using the OAuth 2.0 popup with the Client ID and Client Secret from your Atlassian app.
4. Add to Copilot Studio
- In Copilot Studio, open your agent.
- Add this connector as an action (MCP server).
- Test with prompts like “List Jira projects”, “Search Jira issues with JQL”, or “Show me board 1’s active sprint”.
Application Insights
To enable telemetry, set the APP_INSIGHTS_INSTRUMENTATION_KEY constant in script.csx. Telemetry is silently skipped when the placeholder value is unchanged.
Events tracked:
RequestReceivedRequestCompletedRequestErrorMcpRequestReceivedMcpToolCallStartedMcpToolCallCompletedMcpToolCallError
That gives you per-tool latency, error rates, and call volume across all 91 REST operations and 50 MCP tools.
Try it yourself
The complete connector code is in my SharingIsCaring repository:
- apiDefinition.swagger.json — OpenAPI specification
- script.csx — Connector script with MCP tools and telemetry
- apiProperties.json — Connector metadata
- readme.md — Full documentation