Jira Admin MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JIRA_EMAIL | Yes | The Atlassian account email that owns the API token | |
| JIRA_DRY_RUN | No | true simulates all writes (POST/PUT/DELETE) and returns the payload that would be sent, without calling Jira. Defaults to false. | false |
| JIRA_BASE_URL | Yes | Your Jira Cloud base URL, e.g. https://your-company.atlassian.net | |
| JIRA_API_TOKEN | Yes | API token from https://id.atlassian.com/manage-profile/security/api-tokens |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| jira_issues_searchA | Search Jira issues using JQL. Use this to find issues matching criteria. Prefer targeted JQL over broad searches. Not this when you know the exact issue key: use jira_issues_get instead. Returns: {total, issues: [{key, summary, status, assignee, ...}], next_page_token} |
| jira_issues_getA | Get a single Jira issue by key. Use this when you know the exact issue key. Not this for searching: use jira_issues_search with JQL instead. Returns: {key, summary, status, issue_type, assignee, reporter, priority, project, ...} |
| jira_issues_createA | Create a new Jira issue. Use jira_issues_get_createmeta first to check required fields for the project/issue type. Custom fields must use their field ID (customfield_XXXXX). Returns: {key, id} of the created issue. |
| jira_issues_updateA | Update fields on an existing Jira issue. For select/dropdown: {'value': 'Option'}. For users: {'accountId': '...'}. Use jira_issues_get first to check current values. Returns: {success, issue_key} |
| jira_issues_transitionA | Transition a Jira issue to a new status. Automatically resolves the transition ID from the target status name. Use jira_issues_get_transitions to see available transitions first. Returns: {success, issue_key, from_status, to_status} |
| jira_issues_assignA | Assign a Jira issue to a user, or unassign it. Use jira_users_search first to look up the account ID. Returns: {success, issue_key, assignee_account_id} |
| jira_issues_get_transitionsA | Get available workflow transitions for an issue. Use this before jira_issues_transition to see valid target statuses. Returns: {issue_key, transitions: [{id, name, to_status}]} |
| jira_issues_get_createmetaA | Get metadata for creating issues in a project. Without issue_type_id: returns available issue types. With issue_type_id: returns required and optional fields for that type. Use this before jira_issues_create to understand required fields. Returns: {project_key, issue_types: [...]} or {project_key, issue_type, required_fields: [...], optional_fields: [...]} |
| jira_issues_deleteA | Delete a Jira issue permanently. This is irreversible. Use with caution: confirm with an admin before deleting. Set delete_subtasks=True to also delete all subtasks. Returns: {success, issue_key} |
| jira_issues_linkA | Create a link between two Jira issues. Example: link_issues('PROJ-1', 'PROJ-2', 'Blocks') means PROJ-2 blocks PROJ-1. Use jira_issue_link_types_list to see available link types with inward/outward labels. Returns: {success, inward_issue, outward_issue, link_type} |
| jira_issues_get_changelogA | Get the changelog (audit history) of an issue. Shows who changed what fields and when. Useful for auditing. Returns: {issue_key, total, changes: [{created, author, items: [{field, from, to}]}]} |
| jira_issues_bulk_createA | Create multiple Jira issues in one call (up to 50). Each issue in the list needs at minimum: project_key, issue_type, summary. Optional: description, assignee_account_id, priority, labels, custom_fields. Returns: {created: [{key, id}], errors: [...]} |
| jira_comments_listA | List comments on a Jira issue. Returns comments with author, body, and timestamps. Sorted newest-first by default. Returns: {issue_key, total, comments: [{id, author, body, created, updated}]} |
| jira_comments_addA | Add a comment to a Jira issue. Accepts plain text (auto-converted) or raw ADF JSON. Returns: {id, issue_key, author, created} |
| jira_users_searchA | Search for Jira users by email or display name. Always use this to look up a user's account_id before adding them to groups or assigning issues. Not this when you already have the account_id: use jira_users_get instead. Returns: {total, users: [{account_id, display_name, email, active}]} |
| jira_users_getA | Get details for a specific Jira user by account ID. Use jira_users_search to find the account_id first. Returns: {account_id, display_name, email, active, groups} |
| jira_groups_listA | List Jira groups, optionally filtered by name. Common groups: jira-administrators, jira-developers, jira-project-leads. Returns: {total, groups: [{name, group_id, member_count}]} |
| jira_groups_get_membersA | Get members of a Jira group. Returns: {group_name, total, members: [{account_id, display_name, email, active}]} |
| jira_groups_add_userA | Add a user to a Jira group. Always verify user identity first with jira_users_search. Returns: {success, group_name, account_id} |
| jira_groups_remove_userA | Remove a user from a Jira group. Verify user identity first. Removing from permission-granting groups may lock the user out. Returns: {success, group_name, account_id} |
| jira_groups_createA | Create a new Jira group. Group names should follow convention: lowercase with hyphens. Returns: {name, group_id} |
| jira_groups_deleteA | Delete a Jira group permanently. This removes the group and all its membership associations. Users are NOT deleted: only the group itself. Returns: {success, group_name} |
| jira_projects_listA | List Jira projects, optionally filtered by name or key. Returns: {total, projects: [{id, key, name, project_type, lead}]} |
| jira_projects_getA | Get full project details including lead, issue types, and description. Returns: {id, key, name, project_type, lead, description, issue_types, category} |
| jira_projects_get_statusesA | Get all statuses available in a project, grouped by issue type. Returns: {project_key, issue_types: [{name, statuses: [{id, name, category}]}]} |
| jira_projects_get_rolesA | Get project roles and their actors (users/groups). Returns: {project_key, roles: [{name, id, actors: [{display_name, type, name}]}]} |
| jira_projects_update_roleA | Add or remove an actor (user or group) from a project role. Use jira_projects_get_roles first to find the role_id. Returns: {success, project_key, role_id, action, actor_value} |
| jira_projects_get_versionsA | Get versions (releases) for a project. Returns: {project_key, total, versions: [{id, name, description, released, release_date, archived}]} |
| jira_projects_create_versionA | Create a new version (release) in a project. Returns: {id, name, project_key} |
| jira_projects_get_featuresA | Get features and their states for a project. Shows which project features are enabled/disabled (e.g. backlog, board, calendar, security). Returns: {project_key, features: [{feature, state, toggle_locked}]} |
| jira_projects_get_notification_schemeA | Get the notification scheme assigned to a project. Returns: {project_key, scheme_id, scheme_name, description} |
| jira_projects_get_categoriesA | List all project categories. Categories group projects for organization (e.g. 'Engineering', 'Marketing'). Returns: {total, categories: [{id, name, description}]} |
| jira_permissions_list_schemesA | List all permission schemes in the Jira instance. Use jira_permissions_get_scheme to see grants in a specific scheme. Returns: {total, schemes: [{id, name, description}]} |
| jira_permissions_get_schemeA | Get a permission scheme with all its permission grants. Common permission keys: BROWSE_PROJECTS, EDIT_ISSUES, CREATE_ISSUES, ASSIGN_ISSUES, TRANSITION_ISSUES, ADD_COMMENTS, ADMINISTER_PROJECTS, DELETE_ISSUES. Returns: {id, name, description, permissions: [{permission, holder_type, holder_value}]} |
| jira_permissions_add_grantA | Add a permission grant to a permission scheme. Verify the scheme is not shared with other projects before modifying. Returns: {success, scheme_id, permission, holder_type} |
| jira_permissions_assign_schemeA | Assign a permission scheme to a project. Replaces the current scheme. Verify the new scheme has all required permissions before assigning. Returns: {success, project_key, scheme_id} |
| jira_fields_searchA | Search for Jira fields (custom and system). Use this to find field IDs (customfield_XXXXX) for custom fields by name before referencing them in other tools. Returns: {total, fields: [{id, name, custom, schema_type}]} |
| jira_fields_get_contextsA | Get contexts for a custom field. Contexts determine which projects/issue types the field appears in. Returns: {field_id, contexts: [{id, name, description, is_global_context, is_any_issue_type}]} |
| jira_fields_get_optionsA | Get options for a custom field in a specific context. For select/dropdown fields, returns the available option values. Returns: {field_id, context_id, options: [{id, value, disabled}]} |
| jira_fields_manage_optionsA | Add, update, or reorder options for a custom field. Use jira_fields_get_options first to see existing options and their IDs. Returns: {success, field_id, context_id, action} |
| jira_fields_create_contextA | Create a new context for a custom field, optionally scoped on creation. A context determines which projects/issue types a field appears in, and owns its own set of options. projectIds/issueTypeIds are applied in the same create call. Returns: {success, field_id, context: {id, name, project_ids, issue_type_ids}} |
| jira_fields_update_contextA | Rename or re-describe a custom field context. Returns: {success, field_id, context_id} |
| jira_fields_delete_contextA | Delete a custom field context permanently. Deletes the context and all of its options. Confirm first. Returns: {success, field_id, context_id} |
| jira_fields_assign_context_projectsA | Scope a custom field context to specific projects. Note: assigning projects converts a global context into a project-scoped one. Returns: {success, field_id, context_id, project_ids} |
| jira_fields_remove_context_projectsA | Remove projects from a custom field context's scope. Returns: {success, field_id, context_id, removed_project_ids} |
| jira_fields_add_context_issuetypesB | Restrict a custom field context to specific issue types. Returns: {success, field_id, context_id, issue_type_ids} |
| jira_fields_remove_context_issuetypesA | Remove issue types from a custom field context. Returns: {success, field_id, context_id, removed_issue_type_ids} |
| jira_fields_get_project_mappingA | Show which projects each context of a custom field is scoped to. Use this to audit field scope, e.g. confirm a custom field's context is correctly scoped to the intended projects. Returns: {field_id, mappings: [{context_id, project_id, is_global_context}]} |
| jira_workflows_searchA | Search for workflows in the Jira instance. Returns: {total, workflows: [{id, name, description, statuses}]} |
| jira_workflows_get_schemesA | List workflow schemes. Returns: {total, schemes: [{id, name, description, default_workflow}]} |
| jira_workflows_get_scheme_mappingsA | Get issue type to workflow mappings in a workflow scheme. Shows which workflow is used for each issue type. Returns: {scheme_id, default_workflow, mappings: [{issue_type, workflow}]} |
| jira_workflows_get_scheme_project_usagesA | List the projects that use a given workflow scheme. SAFETY: run this before editing a scheme. If more than one project uses it, edits affect all of them: create a dedicated scheme or work on a draft instead. Returns: {scheme_id, project_count, project_ids, shared} |
| jira_workflows_set_scheme_issuetypeA | Map an issue type to a workflow within a workflow scheme. For in-use (shared) schemes the live edit auto-creates a draft that must then be published with jira_workflows_publish_scheme_draft. Returns: {success, scheme_id, issue_type_id, workflow, edited_draft} |
| jira_workflows_delete_scheme_issuetypeA | Remove an issue type's workflow mapping from a workflow scheme. The issue type falls back to the scheme's default workflow. Returns: {success, scheme_id, issue_type_id, edited_draft} |
| jira_workflows_create_scheme_draftA | Create a draft of a workflow scheme so it can be edited safely. Use a draft when a scheme is in active use; edit the draft, then publish it with jira_workflows_publish_scheme_draft. Returns: {success, scheme_id, draft: {id, name}} |
| jira_workflows_publish_scheme_draftA | Publish a workflow scheme draft, making its changes live. If the draft removes statuses that issues currently sit on, Jira requires status_mappings to relocate those issues. Returns: {success, scheme_id, validated_only} or validation result |
| jira_issuetypes_listA | List issue types, optionally filtered by project. Returns: {total, issue_types: [{id, name, description, subtask, hierarchy_level}]} |
| jira_issuetypes_get_schemesA | List issue type schemes. Returns: {total, schemes: [{id, name, description, default_issue_type_id}]} |
| jira_issuetypes_get_scheme_mappingsA | Get issue types in an issue type scheme. Returns: {scheme_id, mappings: [{issue_type_id}]} |
| jira_screens_listA | List Jira screens, optionally filtered by name. Returns: {total, screens: [{id, name, description}]} |
| jira_screens_get_fieldsA | Get fields on a screen, optionally for a specific tab. Returns: {screen_id, tabs: [{id, name, fields: [{id, name}]}]} |
| jira_screens_get_schemesA | List screen schemes. Returns: {total, schemes: [{id, name, description}]} |
| jira_bulk_edit_issuesA | Bulk edit fields on multiple Jira issues. All issues get the same field values set. For batch operations like bulk-setting labels, priorities, or custom fields. Returns: {success, updated_count} or dry_run info. |
| jira_bulk_transition_issuesA | Bulk transition multiple issues to a new status. All issues must have an available transition to the target status. Automatically resolves transition IDs. Returns: {success, transitioned_count, target_status} |
| jira_filters_searchA | Search for saved JQL filters. Returns: {total, filters: [{id, name, jql, owner, favourite_count}]} |
| jira_filters_createA | Create a new saved JQL filter. The filter is owned by the authenticated user. Share permissions can be managed separately via the Jira UI. Returns: {id, name, jql} |
| jira_filters_getA | Get a single saved JQL filter by ID. Returns: {id, name, jql, description, owner, owner_account_id, favourite_count, share_permissions} |
| jira_filters_updateA | Update an existing saved JQL filter's name, JQL, or description. Jira requires name + jql on every update, so unspecified fields are pre-fetched and re-sent unchanged. Returns: {success, id, name, jql} |
| jira_filters_deleteA | Delete a saved JQL filter permanently. Boards and dashboards backed by this filter will break. Confirm first. Returns: {success, filter_id} |
| jira_filters_change_ownerB | Change the owner of a saved JQL filter. Returns: {success, filter_id, new_owner_account_id} |
| jira_filters_get_sharesA | List the share permissions of a saved JQL filter. Returns: {filter_id, total, shares: [{id, type, group, project, role}]} |
| jira_filters_add_shareA | Add a share permission to a saved JQL filter. Requires that you OWN the filter. To share a filter you do not own, use jira_filters_force_add_share instead. Returns: {success, filter_id, share} |
| jira_filters_remove_shareA | Remove a share permission from a saved JQL filter. Returns: {success, filter_id, permission_id} |
| jira_filters_force_add_shareA | Add a share to a filter you do NOT own, via the admin owner-swap workaround. overrideSharePermissions only works on READs (JRACLOUD-60899), so to WRITE a share onto another user's filter this does:
|
| jira_issue_link_types_listA | List all available issue link types. Shows link types like Blocks, Cloners, Duplicate, Relates, etc. Each type has an inward and outward label. Use the 'name' field with jira_issues_link to create links. Returns: {total, link_types: [{id, name, inward, outward}]} |
| jira_statuses_searchA | Search for statuses across the Jira instance. Returns statuses with their category (TO_DO, IN_PROGRESS, DONE). Use jira_projects_get_statuses for statuses grouped by issue type in a project. Returns: {total, statuses: [{id, name, category, project_key}]} |
| jira_tasks_get_statusA | Poll the status of a long-running async Jira task. Returns: {task_id, kind, status, progress_percent, result, message, submitted, started, finished, elapsed_ms} |
| jira_tasks_cancelA | Request cancellation of a running generic async task. Only applies to /task/{id} tasks that are cancellable; bulk-queue tasks cannot be cancelled this way. Returns: {success, task_id, note} |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/its-qusai-nasr/jira-admin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server