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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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