mcpField
A
Atlassian Attachments

Atlassian Attachments

ローカル
github.com/alyiox生産性05 週間前に更新

Atlassian Attachments について

Atlassian Attachmentsは、Jira Cloudの添付ファイルを扱うMCPサーバーです。Jiraとローカルディスク間のファイル転送に加え、ADFメディア参照の解決を提供し、公式Atlassian MCPサーバーを補完します。

主な機能

  1. 01ID指定で添付ファイルを保存
  2. 02ローカルファイルを課題にアップロード
  3. 03添付ファイルのADF mediaIdを解決
  4. 04ID指定で添付ファイルを完全削除

活用シーン

  1. 01Jiraの画像やファイルをローカルに保存
  2. 02ローカルのレポートを課題に添付
  3. 03説明やコメント用のメディア参照を作成
  4. 04不要なJira添付ファイルを削除

MCP 対応

MCPサーバーとして、Jira Cloudの添付ファイルのダウンロード、アップロード、参照解決、削除ツールをMCPクライアントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"alyiox-mcp-atlassian-attachments": {
"command": "uvx",
"args": [
"mcp-atlassian-attachments"
],
"env": {
"ATLASSIAN_SITE_URL": "<ATLASSIAN_SITE_URL>",
"ATLASSIAN_EMAIL": "<ATLASSIAN_EMAIL>",
"ATLASSIAN_API_TOKEN": "<ATLASSIAN_API_TOKEN>"
}
}
}
}
起動コマンドuvx mcp-atlassian-attachments
設定が必要な環境変数
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_TOKENシークレットAtlassian Cloud API token. Used as the password in Basic auth. Can also be set in ~/.config/mcp-atlassian-attachments/config.json.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimcp-atlassian-attachments0.3.0

ツール

4

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
filenameanyいいえ省略した場合は、Jira のメタデータにあるファイル名を使用します。
overwritebooleanいいえtrue の場合は既存のファイルを置き換えます。false の場合、ファイルが存在すると失敗します。
output_dirstringはいファイルを保存するローカルディレクトリです。存在しない場合は自動的に作成されます。
attachment_idstringはいJira の添付ファイル ID(例:439535)。

詳細

MCP Jira 添付ファイル

CI PyPI Python 3.13+ License: MIT

Jira Cloud の添付ファイルを添付ファイル ID でローカルディスクにダウンロードし、ローカルファイルを Jira の課題に添付ファイルとしてアップロードするための Model Context Protocol (MCP) サーバーです。

Atlassian 公式 MCP サーバーを補完します。 Atlassian 公式 MCP サーバー は検索、課題管理、コンテンツ操作に対応していますが、Jira とローカルディスク間で添付ファイルを移動する機能はありません。このサーバーはその不足を補います。

要件: Python 3.13 以降、Atlassian Cloud アカウント、および少なくとも read:jira-work スコープを持つ API トークンが必要です。アップロードには write:jira-work も必要です。

認証

必要な権限だけにアクセスを制限するため、スコープ付きトークンをおすすめします。

注: 詳細な read:attachment:jira スコープだけでは不十分です。Jira の添付ファイルメタデータエンドポイント(/rest/api/3/attachment/{id})で課題レベルの権限を確認するには、read:jira-work が必要です。従来型の(スコープなし)API トークンも使用できます。

API トークンを作成する
  1. id.atlassian.com/manage-profile/security/api-tokens にアクセスします
  2. Create API token をクリックします
  3. "Create API token with scopes" を選択して read:jira-work を指定します(アップロードする場合は write:jira-work も追加します)。または、すべてのアクセス権限を持つ "Classic API token" を選択します
  4. 生成されたトークンをコピーします

クイックスタート

サーバーを最も手早く試すには、MCP Inspector を使用します。必須の環境変数を3つ設定して実行します。

公開済みパッケージから(クローン不要):

ATLASSIAN_SITE_URL=https://yourorg.atlassian.net \
[email protected] \
ATLASSIAN_API_TOKEN=your-api-token \
npx -y @modelcontextprotocol/inspector@latest uvx mcp-atlassian-attachments

ローカルクローンから:

ATLASSIAN_SITE_URL=https://yourorg.atlassian.net \
[email protected] \
ATLASSIAN_API_TOKEN=your-api-token \
npx -y @modelcontextprotocol/inspector@latest uv run mcp-atlassian-attachments

設定

環境変数を設定するか、設定ファイルを作成します。環境変数が優先されます。

環境変数:

export ATLASSIAN_SITE_URL="https://yourorg.atlassian.net"
export ATLASSIAN_EMAIL="[email protected]"
export ATLASSIAN_API_TOKEN="your-api-token"

設定ファイル(~/.config/mcp-atlassian-attachments/config.json):

{
  "site_url": "https://yourorg.atlassian.net",
  "email": "[email protected]",
  "api_token": "your-api-token"
}

ツール

ツール説明必須パラメーター
download_jira_attachmentJira の添付ファイルを ID でダウンロードします。attachment_id、output_dir
upload_jira_attachmentローカルファイルを Jira の課題に添付ファイルとしてアップロードします。issue_key、file_path
get_jira_attachment_reference既存の添付ファイルを ADF メディアノードに解決します。attachment_id
delete_jira_attachment添付ファイルを ID で完全に削除します。attachment_id
download_jira_attachment
パラメーター型説明
attachment_idstringJira の添付ファイル ID
output_dirstringファイルの保存先となるローカルディレクトリです。存在しない場合は自動的に作成されます。
filenamestring (optional)ファイル名を上書きします。省略するとメタデータのファイル名を使用します。
overwritebool (optional)既存のファイルを置き換えます。デフォルトは false です。

戻り値:

{
  "product": "jira",
  "attachmentId": "439535",
  "filename": "screenshot.png",
  "mimeType": "image/png",
  "size": 496724,
  "path": "/your/output/dir/screenshot.png",
  "attachmentUrl": "https://yourorg.atlassian.net/rest/api/3/attachment/content/439535"
}
upload_jira_attachment
パラメーター型説明
issue_keystringJira の課題キーまたは ID(例:PROJ-123)
file_pathstringアップロードするローカルファイルのパスです。ファイルが存在している必要があります。
filenamestring (optional)Jira に保存する名前です。省略するとローカルのファイル名を使用します。

戻り値:

{
  "product": "jira",
  "issueKey": "PROJ-123",
  "attachmentId": "600100",
  "filename": "report.png",
  "mimeType": "image/png",
  "size": 24581,
  "path": "/your/local/dir/report.png",
  "attachmentUrl": "https://yourorg.atlassian.net/rest/api/3/attachment/content/600100",
  "mediaId": "6df94659-caa7-4561-bbe3-6384ec534bba"
}

呼び出すたびに新しい添付ファイルが追加されます。同じ名前のファイルがあっても、Jira は置き換えません。サイトの添付ファイルサイズ上限を超えるアップロードは 413 エラーになります。

get_jira_attachment_reference
パラメーター型説明
attachment_idstringJira 添付ファイル ID

読み取り専用です。課題にすでに添付されているファイルの mediaId を返します。

{
  "product": "jira",
  "attachmentId": "439535",
  "filename": "screenshot.png",
  "mimeType": "image/png",
  "size": 496724,
  "attachmentUrl": "https://yourorg.atlassian.net/rest/api/3/attachment/content/439535",
  "mediaId": "6df94659-caa7-4561-bbe3-6384ec534bba"
}

アップロード後にこのツールを使う必要はありません。upload_jira_attachment がすでに mediaId を返すため、埋め込みのための追加呼び出しは不要です。

delete_jira_attachment
パラメーター型説明
attachment_idstring完全に削除する Jira 添付ファイル ID

write:jira-work が必要です。削除前にメタデータを読み取るため、結果には削除した内容が報告され、存在しない ID の場合は何も試みることなく失敗します。

{
  "product": "jira",
  "attachmentId": "481718",
  "filename": "delete-me.txt",
  "mimeType": "text/plain",
  "size": 31,
  "deleted": true
}

元に戻すことはできません。 Jira はファイルを完全に削除し、同じ ID に対する2回目の呼び出しは 404 で失敗します。

削除しても参照はクリーンアップされません。 添付ファイルが説明やコメントに埋め込まれていた場合、ADF メディアノードはそのまま残り、参照先のない状態になります。これは実際の課題で確認済みです。参照されているファイルを削除する場合は、ノードを自分で削除してください。

説明やコメントで添付ファイルを参照する

ファイルをアップロードすると添付されますが、説明やコメント内にはインラインで表示されません。表示するには ADF のメディアノードが必要です。このノードは数値の添付ファイル ID ではなく、ファイルの Media Services UUID で識別します。

{
  "type": "mediaSingle",
  "attrs": { "layout": "center" },
  "content": [
    {
      "type": "media",
      "attrs": {
        "type": "file",
        "id": "6df94659-caa7-4561-bbe3-6384ec534bba",
        "collection": "",
        "alt": "report.png"
      }
    }
  ]
}

Jira の添付ファイルメタデータエンドポイントではこの UUID を取得できないため、このサーバーが解決します。GET /rest/api/3/attachment/content/{id} は https://api.media.atlassian.com/file/{mediaId}/binary への 303 を返すため、リダイレクトをたどらずに Location ヘッダーを読み取れば、ダウンロードせずに UUID を取得できます。UUID はファイルが添付された時点で存在し、添付ファイルがどこかで参照されているかどうかには依存しません。

そのため、どちらのツールも mediaId を返します。課題へのノードの書き込みは、contentFormat: "adf" を受け付ける公式 Atlassian MCP サーバーなどの Jira コンテンツツールに意図的に任せています。このサーバーはファイルを移動しますが、課題の内容は編集しません。

  1. upload_jira_attachment → 結果から mediaId を取得します
  2. そこから作成したメディアノードをラップした ADF 本文でコメントを投稿します。
{
  "version": 1,
  "type": "doc",
  "content": [
    { "type": "paragraph", "content": [{ "type": "text", "text": "Latest run:" }] },
    { "type": "mediaSingle", "attrs": { "layout": "center" }, "content": [ "...the media node..." ] }
  ]
}

説明の場合は、既存の ADF を読み取り、ノードを追加して、ドキュメント全体を書き戻します。PUT /rest/api/3/issue/{key} はフィールドに追記するのではなく、置き換えます。

注意事項:

  • media ノードだけでは表示されません。mediaSingle(単一ファイル)、mediaGroup(ファイルカードのリスト)、または mediaInline(インラインチップ)でラップする必要があります。
  • Jira の課題添付ファイルでは、collection は "" です。
  • メディアノードの width/height は省略可能で、固有のピクセルサイズを設定します。この値が反映されるのは mediaSingle 内だけです。
  • mediaId はベストエフォートです。リダイレクトを読み取れない場合は null が返されますが、アップロード自体は成功します。
よりシンプルな代替手段:v2 wiki マークアップ

古い v2 エンドポイントでは、引き続き wiki マークアップを受け付け、サーバー側で ADF に変換します。添付ファイルはファイル名で解決されるため、メディア UUID は不要です。

POST /rest/api/2/issue/PROJ-123/comment
{ "body": "See attached: !report.png|thumbnail!" }

Jira はこれを、正しい UUID が設定された media ノードとして保存します。2026 年 8 月時点で Jira Cloud での動作を確認済みです。

稼働中の課題で確認した、知っておくべき動作が 2 つあります。

  • 実際の寸法ではなく、固定のプレースホルダーが使われます。 画像にかかわらず、変換時には常に width: 200, height: 183 が書き込まれます。64x48 と 8x8 の PNG は、どちらも 200x183 で返されました。!file|width=300! は幅を設定しますが、高さは 183 のままなので、ADF を自分で記述しない限りアスペクト比が崩れます。
  • 同じファイル名が複数ある場合、最も古いファイルが解決されます。 ambiguous.png という名前の添付ファイルが 2 つある場合、!ambiguous.png! は最初にアップロードされたファイルを解決しました。画像を「更新」するために同じ名前で再アップロードしても、古いファイルが表示され続けます。

明示的に指定したい場合は mediaId を優先してください。同名ファイルがあっても曖昧にならず、実際の寸法を設定でき、v3/ADF(公式 Atlassian MCP サーバーが書き込む形式)でも動作し、Atlassian が将来的に廃止する可能性のあるレガシーパスにも依存しません。

MCP ホストの設定

次の内容を MCP ホストの設定ファイルに追加します。JSON は Cursor(.cursor/mcp.json)、Claude Desktop(claude_desktop_config.json)、Claude Code(.claude.json)で共通です。

{
  "mcpServers": {
    "atlassian": {
      "command": "uvx",
      "args": ["mcp-atlassian-attachments"],
      "env": {
        "ATLASSIAN_SITE_URL": "https://yourorg.atlassian.net",
        "ATLASSIAN_EMAIL": "[email protected]",
        "ATLASSIAN_API_TOKEN": "your-api-token"
      }
    }
  }
}

セキュリティ

  • ATLASSIAN_API_TOKEN がログに記録されたり、エラーメッセージに含まれたりすることはありません。
  • 計算された Authorization ヘッダーが、ツールの出力やエラーに表示されることはありません。
  • ファイルの書き込み先は、指定された output_dir 内に限定されます。
  • ダウンロード時と Jira に送信する名前の両方で、パストラバーサルを防ぐためにファイル名がサニタイズされます。
  • アップロードでは file_path のファイルだけを正確に読み取り、それ以外は送信しません。

テスト

uv run pytest tests/ -v

ロードマップ

  • download_confluence_attachment_tool — Confluence Cloud では別の API(/wiki/api/v2/)と別の識別子モデルが使われます。今後のリリースで対応予定です。

ライセンス

MIT。詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。