jira-confluence-mcp
This MCP server provides unified read/write access to Jira Cloud tickets and Confluence Cloud pages, enabling search, retrieval, and updates. It automatically downloads log attachments from tickets into a shared directory for the companion Log Intelligence MCP to ingest.
README
Jira + Confluence MCP
A single MCP server that gives the Rapid7 SI Triage agent read/write access to Jira Cloud (tickets, attachments, comments, search) and Confluence Cloud (the historical knowledge base of runbooks and postmortems). Combining both Atlassian products in one server is natural: they share the same auth and host, and the triage workflow uses them together.
A key side effect lives here: when the agent fetches a ticket, this server auto-downloads log-like attachments into a shared directory that the companion Log Intelligence MCP then ingests.
Tools
Jira
| Tool | Purpose |
|---|---|
get_ticket(ticket_id, download_logs?) |
Fetch + normalise a ticket (summary, description, comments, attachments, product/components, environment). Auto-downloads log attachments unless download_logs=false. |
get_attachment(ticket_id, attachment_id) |
Download a specific attachment by id into the ticket's log dir. |
search_tickets(jql, max_results=25) |
JQL search — used to find similar historical defects. |
post_comment(ticket_id, body) |
Post a comment (write; guarded). |
update_ticket_field(ticket_id, field, value) |
Update one field (write; guarded). |
Confluence
| Tool | Purpose |
|---|---|
search_confluence(query, max_results=10, cql?) |
CQL/text search of the KB. Returns ranked, normalised results (title, url, excerpt, relevance) — the same shape as Jira search so the agent handles both uniformly. |
get_page(page_id) |
Fetch a page as clean plain text (storage-format markup stripped) + metadata. Cached. |
get_child_pages(page_id) |
List direct child pages (walk a runbook space). |
Auth & configuration
Atlassian Cloud uses HTTP Basic auth with email:api_token (base64). Secrets
come from the environment only — never hardcoded. Copy .env.example to .env:
ATLASSIAN_BASE_URL=https://asgspratapsingh.atlassian.net
ATLASSIAN_EMAIL=asgspratapsingh@gmail.com
ATLASSIAN_API_TOKEN=<create at id.atlassian.com/manage-profile/security/api-tokens>
SI_DATA_DIR=./si_data
ATLASSIAN_BASE_URL may be any URL from your site — it's normalised to the site
origin automatically (e.g. …atlassian.net/jira/for-you?tab=x →
https://…atlassian.net).
Write safety. DRY_RUN=1 refuses all writes (read-only). ALLOW_WRITES=0
refuses writes even when not in dry-run. Both post_comment and
update_ticket_field respect these guards.
Attachment download. AUTO_DOWNLOAD_LOGS=1 (default) downloads attachments
whose name ends in LOG_ATTACHMENT_SUFFIXES (.log,.txt,.gz,.out,.err) or that
are text/plain, up to MAX_ATTACHMENT_MB (50). Files land in
SI_DATA_DIR/logs/<ticket_id>/.
The HTTP client retries 429/5xx with exponential backoff (honouring
Retry-After), controlled by HTTP_MAX_RETRIES and HTTP_TIMEOUT.
Install & run
cd jira-confluence-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e . # installs mcp, httpx, uvicorn
cp .env.example .env # fill in ATLASSIAN_API_TOKEN
# stdio:
python -m jira_confluence_mcp --transport stdio
# HTTP (streamable-http at http://127.0.0.1:8080/mcp):
python -m jira_confluence_mcp --transport http
Register with an MCP client (stdio example)
{
"mcpServers": {
"jira-confluence": {
"command": "python",
"args": ["-m", "jira_confluence_mcp", "--transport", "stdio"],
"env": {
"ATLASSIAN_BASE_URL": "https://asgspratapsingh.atlassian.net",
"ATLASSIAN_EMAIL": "asgspratapsingh@gmail.com",
"ATLASSIAN_API_TOKEN": "…",
"SI_DATA_DIR": "/absolute/path/to/si_data"
}
}
}
}
How it coordinates with the Log Intelligence MCP
Set SI_DATA_DIR to the same absolute path for both servers.
si_data/
logs/<ticket_id>/… # THIS server writes downloaded attachments here
# the Log Intelligence MCP reads + indexes them
Flow: get_ticket(EA-123) here → files appear in logs/EA-123/ →
ingest_ticket_logs("EA-123") on the Log MCP → agent queries logs →
delete_ticket_logs("EA-123") cleans up.
Ports
This server's HTTP transport defaults to 8080; the Log Intelligence MCP uses 8081, so both can run simultaneously.
Tests
pytest # in the POC environment
python tests/_runner.py # offline harness when pytest isn't installed
Covers auth-header construction, base-URL normalisation, ADF→text flattening, ticket normalisation, log-attachment filtering, Confluence storage-format stripping, search-result normalisation, CQL escaping, and — via a stub HTTP transport (so no network is needed) — ticket fetch with auto-download, JQL search normalisation, write guards, Confluence search/get_page/caching, and child-page listing. 19 tests, all offline.
Live Jira/Confluence calls and running the MCP over a real transport need network access and the
mcp/httpxpackages installed, which the build sandbox blocks. The tests validate all request-building and response-handling logic against real payloads through the stubbed transport.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。