by hainanzhao
Integrate GitLab & Jira for seamless merge reviews, pipelines, issue tracking, and unified search for better project coo
Integrates GitLab and Jira APIs to let AI assistants manage merge requests, pipelines, issues, and tickets across both platforms with unified search.
You can install GitLab & Jira in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.
MIT
GitLab & Jira is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.
Add new capabilities to Claude beyond text generation
Example
Access external data sources, execute code, interact with tools and services
Transform Claude from chatbot to action-taking agent
Provide Claude with access to relevant context and data
Example
Load project documentation, access knowledge bases, query databases
Get more accurate, context-aware responses
Automate multi-step workflows combining AI and external tools
Example
Research → Summarize → Create document → Send notification
Complete complex tasks end-to-end without manual steps
Share your MCP server with the developer community
Useful MCP listing: GitLab & Jira is the kind of server we cite when onboarding engineers to host + tool permissions.
Strong directory entry: GitLab & Jira surfaces stars and publisher context so we could sanity-check maintenance before adopting.
GitLab & Jira is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.
GitLab & Jira reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
GitLab & Jira reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
GitLab & Jira is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
We evaluated GitLab & Jira against two servers with overlapping tools; this profile had the clearer scope statement.
We wired GitLab & Jira into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.
I recommend GitLab & Jira for teams standardizing on MCP; the explainx.ai page compares cleanly with sibling servers.
GitLab & Jira has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
showing 1-10 of 49
A Model Context Protocol (MCP) server for GitLab and Jira integration. This server allows AI agents like gemini-cli to interact with your GitLab and Jira instances.
Install the package globally:
npm i -g mcp-gitlab-jira
Set up environment variables:
# GitLab
export GITLAB_URL="https://your-gitlab-instance.com"
export GITLAB_ACCESS_TOKEN="your-personal-access-token"
# Jira
export ATLASSIAN_SITE_NAME="your-atlassian-site-name"
export ATLASSIAN_USER_EMAIL="[email protected]"
export ATLASSIAN_API_TOKEN="your-jira-api-token"
Test the server manually:
# Test that the server starts without errors
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | mcp-gitlab-jira
The server should start and log "GitLab/Jira MCP server started" to stderr.
Create or update your MCP configuration file (usually ~/.mcp/config.json or similar):
{
"mcpServers": {
"gitlab-jira-mcp": {
"command": "mcp-gitlab-jira",
"env": {
"GITLAB_URL": "https://your-gitlab-instance.com",
"GITLAB_ACCESS_TOKEN": "your-personal-access-token",
"ATLASSIAN_SITE_NAME": "your-atlassian-site-name",
"ATLASSIAN_USER_EMAIL": "[email protected]",
"ATLASSIAN_API_TOKEN": "your-jira-api-token"
}
}
}
}
You can also run this MCP server in a Docker container using the pre-built image from Docker Hub.
The Docker images are automatically built and published to Docker Hub for each release:
hainanzhao/mcp-gitlab-jira:latesthainanzhao/mcp-gitlab-jira:v0.1.2, hainanzhao/mcp-gitlab-jira:v0.1.1, etc.The images are built for multiple architectures: linux/amd64 and linux/arm64 (Apple Silicon compatible).
Pull and run the Docker container:
docker run -d --name mcp-gitlab-jira-container \
-e GITLAB_URL="https://your-gitlab-instance.com" \
-e GITLAB_ACCESS_TOKEN="your-personal-access-token" \
-e ATLASSIAN_SITE_NAME="your-atlassian-site-name" \
-e ATLASSIAN_USER_EMAIL="[email protected]" \
-e ATLASSIAN_API_TOKEN="your-jira-api-token" \
hainanzhao/mcp-gitlab-jira:latest
Alternative: Run without persistent container (one-time execution):
docker run --rm -i \
-e GITLAB_URL="https://your-gitlab-instance.com" \
-e GITLAB_ACCESS_TOKEN="your-personal-access-token" \
-e ATLASSIAN_SITE_NAME="your-atlassian-site-name" \
-e ATLASSIAN_USER_EMAIL="[email protected]" \
-e ATLASSIAN_API_TOKEN="your-jira-api-token" \
hainanzhao/mcp-gitlab-jira:latest
You have two options for using the Docker container with MCP clients:
First, start the container as shown above, then update your MCP configuration file. The env block is empty because the necessary environment variables are passed directly to the container using the -e flag in the docker run command.
{
"mcpServers": {
"gitlab-jira-mcp": {
"command": "docker",
"args": ["exec", "-i", "mcp-gitlab-jira-container", "npm", "start"],
"env": {}
}
}
}
This runs a new container for each MCP session:
{
"mcpServers": {
"gitlab-jira-mcp": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "GITLAB_URL=https://your-gitlab-instance.com",
"-e", "GITLAB_ACCESS_TOKEN=your-personal-access-token",
"-e", "ATLASSIAN_SITE_NAME=your-atlassian-site-name",
"-e", "[email protected]",
"-e", "ATLASSIAN_API_TOKEN=your-jira-api-token",
"hainanzhao/mcp-gitlab-jira:latest"
],
"env": {}
}
}
}
gitlab_get_merge_request_details: Fetches detailed information about a GitLab Merge Request, including file diffs.gitlab_get_file_content: Fetches the content of a specific file at a given SHA in a GitLab project.gitlab_add_comment_to_merge_request: Adds a comment to a GitLab Merge Request. Can be a general comment, a reply to an existing discussion, or an inline comment on a specific line.gitlab_list_merge_requests: Lists merge requests for a given GitLab project.gitlab_assign_reviewers_to_merge_request: Assigns reviewers to a GitLab Merge Request.gitlab_list_project_members: Lists all members (contributors) of a given GitLab project.gitlab_list_project_members_by_project_name: Lists all members (contributors) of a given GitLab project by project name.gitlab_list_projects_by_name: Filters GitLab projects by name using a fuzzy, case-insensitive match.gitlab_list_all_projects: Lists all accessible GitLab projects.gitlab_list_all_releases: Fetches releases for a given GitLab project.gitlab_list_releases_since_version: Filters releases for a given GitLab project since a specific version.gitlab_get_user_id_by_username: Retrieves the GitLab user ID for a given username.gitlab_get_user_activities: Fetches activities for a given GitLab user by their username, optionally filtered by date.gitlab_get_project_pipelines: Gets pipelines for a GitLab project, optionally filtered by branch/ref.gitlab_get_merge_request_pipelines: Gets pipelines for a specific GitLab Merge Request.gitlab_get_pipeline_details: Gets detailed information about a specific pipeline.gitlab_get_pipeline_jobs: Gets jobs for a specific pipeline.gitlab_get_job_logs: Gets logs for a specific job.gitlab_trigger_pipeline: Triggers a new pipeline for a specific branch/ref.gitlab_retry_pipeline: Retries a failed pipeline.gitlab_cancel_pipeline: Cancels a running pipeline.gitlab_list_branches: Lists all branches in a GitLab project.gitlab_create_branch: Creates a new branch in a GitLab project.gitlab_delete_branch: Deletes a branch from a GitLab project.gitlab_get_branch_details: Gets detailed information about a specific branch.gitlab_list_project_issues: Lists issues in a GitLab project.gitlab_get_issue_details: Gets detailed information about a specific GitLab issue.gitlab_create_issue: Creates a new issue in a GitLab project.gitlab_update_issue: Updates an existing GitLab issue.gitlab_close_issue: Closes a GitLab issue.gitlab_add_comment_to_issue: Adds a comment to a GitLab issue.gitlab_get_issue_comments: Gets comments for a GitLab issue.jira_get_ticket_details: Fetches comprehensive information about a Jira ticket with flattened fields, including all custom fields with user-friendly names. Automatically filters out empty values and less useful fields (attachments, avatars). Returns both system and custom fields in a clean, flat structure.jira_get_ticket_comments: Fetches comments for a Jira ticket.jira_add_comment_to_ticket: Adds a comment to a Jira ticket.jira_search_tickets_by_jql: Searches for Jira tickets using a JQL (Jira Query Language) string.jira_create_ticket: Creates a new Jira ticket with given fields.jira_get_available_transitions: Fetches available transitions for a Jira ticket.jira_update_ticket: Updates a Jira ticket summary, description, labels.jira_update_custom_fields: Updates custom fields on a Jira ticket.jira_update_ticket_priority: Updates the priority value for a Jira ticket. Automatically finds the priority custom field (case-insensitive search for "Priority" or "priority"), fetches the allowed values for that field, and matches the provided priority name using fuzzy string matching. Accepts values like "Critical", "High", "Medium", "Low", etc., and will find the best match from the predefined options.jira_update_ticket_sprint: Updates the sprint value for a Jira ticket. Automatically finds the sprint custom field (case-insensitive search for "Sprint" or "sprint"), fetches available sprints from the project's boards, and matches the provided sprint name using fuzzy string matching. Accepts values like "Sprint 1", "Bug Fix Sprint", etc.,Prerequisites
Time Estimate
15-60 minutes depending on server complexity
Steps
Troubleshooting
✓ Do
✗ Don't
💡 Pro Tips
Architecture
Model Context Protocol standardizes how AI hosts (Claude, Cursor) communicate with external tools and data sources through server implementations.
Protocols
Compatibility
✓ Use when
Use when you need Claude to access external data, execute actions, or integrate with tools. Best for extending AI capabilities beyond conversation.
✗ Avoid when
Avoid when native integrations exist (use official APIs directly), for real-time critical systems, or when security/compliance requires zero external dependencies.