This server downloads Jira and Confluence Cloud attachment files to disk using attachment IDs. It's designed to complement the official Atlassian MCP server, which handles search and issue management but doesn't support pulling down actual attachment files. You authenticate with an API token (scoped or classic), then call download_jira_attachment with an ID and output directory. It handles filename sanitization, optional overwrites, and returns a JSON response with file metadata and local path. Requires Python 3.13+ and at least the read:jira:work scope. Confluence attachment support is on the roadmap but not yet implemented.
A Model Context Protocol (MCP) server for downloading Jira Cloud attachments by attachment ID to local disk.
Supplement to the official Atlassian MCP server. The official Atlassian MCP server covers search, issue management, and content operations but does not support downloading attachment files to disk. This server fills that gap.
Requirements: Python 3.13+, an Atlassian Cloud account, and an API token with at least the read:jira-work scope.
Scoped tokens are recommended to limit access to exactly the permissions needed.
Note: The granular
read:attachment:jirascope is not sufficient — Jira's attachment metadata endpoint (/rest/api/3/attachment/{id}) requiresread:jira-workto resolve issue-level permissions. A classic (unscoped) API token also works.
read:jira-work scope, or choose "Classic API token" for full accessThe fastest way to try the server is with the MCP Inspector. Set the three required environment variables and run:
From the published package (no clone needed):
ATLASSIAN_SITE_URL=https://yourorg.atlassian.net \
ATLASSIAN_EMAIL=your.email@example.com \
ATLASSIAN_API_TOKEN=your-api-token \
npx -y @modelcontextprotocol/inspector uvx mcp-atlassian-attachments
From a local clone:
ATLASSIAN_SITE_URL=https://yourorg.atlassian.net \
ATLASSIAN_EMAIL=your.email@example.com \
ATLASSIAN_API_TOKEN=your-api-token \
npx -y @modelcontextprotocol/inspector uv run mcp-atlassian-attachments
Set environment variables or create a config file. Environment variables take priority.
Environment variables:
export ATLASSIAN_SITE_URL="https://yourorg.atlassian.net"
export ATLASSIAN_EMAIL="your.email@example.com"
export ATLASSIAN_API_TOKEN="your-api-token"
Config file (~/.config/mcp-atlassian-attachments/config.json):
{
"site_url": "https://yourorg.atlassian.net",
"email": "your.email@example.com",
"api_token": "your-api-token"
}
| Tool | Description | Required params |
|---|---|---|
download_jira_attachment | Download a Jira attachment by ID. | attachment_id, output_dir |
| Parameter | Type | Description |
|---|---|---|
attachment_id | string | Jira attachment ID |
output_dir | string | Local directory for the saved file. Created automatically if it does not exist. |
filename | string (optional) | Override filename. Uses metadata filename when omitted. |
overwrite | bool (optional) | Replace an existing file. Defaults to false. |
The tool returns a JSON object:
{
"product": "jira",
"attachmentId": "439535",
"filename": "screenshot.png",
"mimeType": "image/png",
"size": 496724,
"path": "/your/output/dir/screenshot.png",
"sourceUrl": "https://yourorg.atlassian.net/rest/api/3/attachment/content/439535"
}
Add the following to your MCP host's config file. The JSON is the same for Cursor (.cursor/mcp.json), Claude Desktop (claude_desktop_config.json), and Claude Code (.claude.json).
{
"mcpServers": {
"atlassian": {
"command": "uvx",
"args": ["mcp-atlassian-attachments"],
"env": {
"ATLASSIAN_SITE_URL": "https://yourorg.atlassian.net",
"ATLASSIAN_EMAIL": "your.email@example.com",
"ATLASSIAN_API_TOKEN": "your-api-token"
}
}
}
}
ATLASSIAN_API_TOKEN is never logged or included in error messages.Authorization header is never exposed in tool output or errors.output_dir.uv run pytest tests/ -v
download_confluence_attachment_tool — Confluence Cloud uses a different API (/wiki/api/v2/) and a different identifier model. Planned for a future release.MIT. See LICENSE.
ATLASSIAN_SITE_URLAtlassian Cloud site URL, for example https://yourorg.atlassian.net. Must be HTTPS. Can also be set in ~/.config/mcp-atlassian-attachments/config.json.
ATLASSIAN_EMAILEmail address used for Atlassian Cloud Basic auth. Can also be set in ~/.config/mcp-atlassian-attachments/config.json.
ATLASSIAN_API_TOKENsecretAtlassian Cloud API token. Used as the password in Basic auth. Can also be set in ~/.config/mcp-atlassian-attachments/config.json.
ray0907/git-mcp-server
cyanheads/git-mcp-server
io.github.b1ff/atlassian-dc-mcp-bitbucket
io.github.b1ff/atlassian-dc-mcp-jira
com.mcparmory/atlassian-jira
sirlordt/vscode-terminal-mcp