MCP server for Atlassian Jira and Confluence with built-in corporate proxy bypass, self-signed certificate handling, and PAT authentication
Project description
mcp-jira-confluence-corp
A Model Context Protocol server for Atlassian Jira and Confluence, designed for corporate networks. It transparently bypasses system HTTP proxies for internal domains, handles self-signed certificates, and supports Personal Access Token (PAT) authentication.
Why this package exists
Generic MCP servers like mcp-atlassian work well against Atlassian Cloud but
struggle inside many corporate environments where:
- A global
HTTP_PROXYorHTTPS_PROXY(typically an SSH tunnel for a cloud API) silently intercepts on-prem traffic and causes timeouts. - Internal Jira and Confluence instances use self-signed TLS certificates.
- The only available credential is a Personal Access Token rather than a username/password pair.
mcp-jira-confluence-corp addresses all three by:
- Clearing
HTTP_PROXY-style environment variables on client construction. - Listing internal domains that should bypass any proxy (via the
MCP_BYPASS_DOMAINSenvironment variable orProxyConfig.bypass_domains). - Disabling SSL verification by default (configurable via
verify_ssl). - Accepting PATs through
JIRA_PERSONAL_TOKEN/CONFLUENCE_PERSONAL_TOKEN.
Installation
pip install mcp-jira-confluence-corp
Or run it without installing using uvx:
uvx mcp-jira-confluence-corp
Configuration
The server is configured through environment variables:
| Variable | Description |
|---|---|
JIRA_URL |
Base URL of your Jira instance |
JIRA_PERSONAL_TOKEN |
Personal Access Token for Jira |
JIRA_USERNAME / JIRA_TOKEN |
Optional Basic Auth pair (alternative to PAT) |
CONFLUENCE_URL |
Base URL of your Confluence instance |
CONFLUENCE_PERSONAL_TOKEN |
Personal Access Token for Confluence |
MCP_BYPASS_DOMAINS |
Comma-separated list of internal domains to bypass any proxy. Supports *.example.com wildcards. |
MCP client configuration
{
"mcpServers": {
"jira-confluence": {
"command": "uvx",
"args": ["mcp-jira-confluence-corp"],
"env": {
"JIRA_URL": "https://jira.example.com",
"JIRA_PERSONAL_TOKEN": "<your-token>",
"CONFLUENCE_URL": "https://confluence.example.com",
"CONFLUENCE_PERSONAL_TOKEN": "<your-token>",
"MCP_BYPASS_DOMAINS": "*.example.com,internal.corp",
"HTTP_PROXY": "",
"HTTPS_PROXY": ""
}
}
}
}
Available tools
Jira (read-only)
| Tool | Description |
|---|---|
jira_get_issue |
Get a Jira issue by key |
jira_search_issues |
Search issues using JQL with pagination |
jira_get_issue_comments |
List comments on an issue |
jira_get_issue_transitions |
List available workflow transitions |
jira_get_issue_changelog |
Get issue history (status, field changes) |
jira_list_projects |
List accessible projects |
jira_get_project |
Get details of a specific project |
jira_get_user |
Get a user profile |
Jira (write)
| Tool | Description |
|---|---|
jira_create_issue |
Create a new issue |
jira_update_issue |
Update fields of an existing issue |
jira_add_comment |
Add a comment to an issue |
jira_transition_issue |
Move an issue through its workflow |
jira_assign_issue |
Assign or unassign an issue |
Confluence (read-only)
| Tool | Description |
|---|---|
confluence_get_page |
Get a page by ID |
confluence_get_page_by_title |
Get a page by title and space |
confluence_search |
Search using CQL |
confluence_get_page_children |
List child pages |
confluence_get_page_comments |
List page comments |
confluence_get_page_labels |
List labels applied to a page |
confluence_list_spaces |
List Confluence spaces |
Confluence (write)
| Tool | Description |
|---|---|
confluence_create_page |
Create a new page |
confluence_update_page |
Update an existing page |
confluence_add_comment |
Add a comment to a page |
confluence_add_label |
Add a label to a page |
confluence_remove_label |
Remove a label from a page |
All tools support both markdown (default) and json response formats for
human-readability vs. programmatic consumption.
Programmatic usage
JiraConfluenceClient is a thin wrapper around
atlassian-python-api and is
fully usable outside of the MCP server.
from mcp_jira_confluence import JiraConfluenceClient
client = JiraConfluenceClient()
issue = client.get_issue("PROJ-123")
print(issue["fields"]["summary"])
page = client.get_page("123456")
print(page["title"])
client.update_page(
page_id="123456",
title="Release notes",
body="<p>Updated content in Confluence Storage Format.</p>",
)
Customizing proxy bypass
from mcp_jira_confluence import JiraConfluenceClient, ProxyConfig
proxy_config = ProxyConfig(
bypass_domains=["*.example.com", "internal.corp"],
verify_ssl=False,
)
client = JiraConfluenceClient(proxy_config=proxy_config)
Development
git clone https://github.com/mshegolev/mcp-jira-confluence-corp.git
cd mcp-jira-confluence-corp
pip install -e ".[dev]"
pytest tests/
ruff check src/
black --check src/
Releasing
This project uses PyPI Trusted Publishing, so no API tokens are stored in GitHub.
- Bump the version in
pyproject.toml. - Update
CHANGELOG.md. - Tag the release:
git tag v0.1.1 && git push --tags. - Create a GitHub release — the publish workflow runs automatically.
License
Author
Mikhail Shegolev — mshegolev@gmail.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_jira_confluence_corp-0.2.0.tar.gz.
File metadata
- Download URL: mcp_jira_confluence_corp-0.2.0.tar.gz
- Upload date:
- Size: 27.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b611bcf42b13062f0e4661b1546105b06bb8a0d42c3916fa4dc526e86b48b37c
|
|
| MD5 |
639a984b97a534b93870934769bc8368
|
|
| BLAKE2b-256 |
f797f48cac9a562d3964a2528573840aa95008767d03f18840ec257a9d4d922d
|
Provenance
The following attestation bundles were made for mcp_jira_confluence_corp-0.2.0.tar.gz:
Publisher:
publish.yml on mshegolev/mcp-jira-confluence-corp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_jira_confluence_corp-0.2.0.tar.gz -
Subject digest:
b611bcf42b13062f0e4661b1546105b06bb8a0d42c3916fa4dc526e86b48b37c - Sigstore transparency entry: 1538846493
- Sigstore integration time:
-
Permalink:
mshegolev/mcp-jira-confluence-corp@2edadb688732eb054e5893cc23107a8b79501f34 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mshegolev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2edadb688732eb054e5893cc23107a8b79501f34 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcp_jira_confluence_corp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mcp_jira_confluence_corp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 30.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ef0ad82e3c017de5c8410167d726e02d3c686bb9e1759d4f8476906c5e53430
|
|
| MD5 |
3c49fe07af65b9b008697e5027ca465b
|
|
| BLAKE2b-256 |
522ab9b98a0bd8dc7e48bf6c428699ca4458e970cb4f112212a0779500457d52
|
Provenance
The following attestation bundles were made for mcp_jira_confluence_corp-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on mshegolev/mcp-jira-confluence-corp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_jira_confluence_corp-0.2.0-py3-none-any.whl -
Subject digest:
5ef0ad82e3c017de5c8410167d726e02d3c686bb9e1759d4f8476906c5e53430 - Sigstore transparency entry: 1538846593
- Sigstore integration time:
-
Permalink:
mshegolev/mcp-jira-confluence-corp@2edadb688732eb054e5893cc23107a8b79501f34 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mshegolev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2edadb688732eb054e5893cc23107a8b79501f34 -
Trigger Event:
release
-
Statement type: