
backlogの公式MCPサーバーでお知らせの一覧を取得する
こんばんは、製造ビジネステクノロジー部の夏目です。
今回はnulabさんがbacklogの公式MCPサーバーを公開したので試してみます。
backlog-mcp-server
nulabさんが公式で出したbacklogのMCPサーバー。
backlogでできることはほとんどできそうなくらい多くの機能があります。
他にも今まで試したMCPサーバーとは異なる二つの特徴があります。
- Docker動かすことを推奨している
- Descriptionを日本語に変更できる
前者はもともとできることは知っていましたが、Dockerでの使用を推奨するのは初めて見ました。
後者は、正確に言うとDescriptionを任意の文字列に変更できます。
そのための日本語のテンプレートを公式が用意しています。
使ってみる
- MCPサーバーを設定する
- 使ってみる
1. MCPサーバーを設定する
日本語用のテンプレートをダウンロードする
Descriptionを日本語にするために、テンプレートを落としてきます。
Download raw File
とツールチップが表示されるボタンをクリックします。
ダウンロードしたファイルの(フル)パスは後で使うので控えておきます。
API Keyを発行する
backlogのダッシュボードを表示します。
右上の自身のアイコンをクリックし、 個人設定
をクリックします。
API
をクリックします。
必要があれば メモ
に何か書きます。
登録
をクリックします。
APIキーが発行されました。
コピー
列のクリップボードアイコンをクリックしてコピーをし、控えておきます。
MCPサーバーを設定する
{
"mcpServers": {
"backlog": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "BACKLOG_DOMAIN",
"-e", "BACKLOG_API_KEY",
"-v", "<ダウンロードしたファイルのフルパス>:/root/.backlog-mcp-serverrc.json:ro",
"ghcr.io/nulab/backlog-mcp-server"
],
"env": {
"BACKLOG_DOMAIN": "xxxx.backlog.com",
"BACKLOG_API_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
先ほどダウンロードしたファイルのフルパスは <ダウンロードしたファイルのフルパス>
に記載してください。
backlog-mcp-serverではホームディレクトリに .backlog-mcp-serverrc.json
があると、ここに記載された値でDescriptionの値を更新できます。
Dockerで動かすのでrootユーザーのホームディレクトリ /root/
に置くように書きます。
BACKLOG_DOMAIN
は使用するbacklogのドメイン xxx.backlog.com
(xxx
の部分は組織毎に異なる)を書きます。
BACKLOG_API_KEY
には先ほど控えたAPIキーを書きます。
これで設定は完了です。
おまけ
自分の環境ではRancher Desktopを使い、自分で環境変数を設定してDockerを使っています。
それが理由なのか、上記の設定では動かすことができませんでした。
command
に which docker
の実行結果を書いてあげると自分の環境では動きました。
2. 使ってみる
ツールを確認する
Descriptionを日本語にしたので確認をします。
Claude Desktopのチャット欄下部の金槌のアイコンをクリックします。
Descriptionが日本語になっていることがわかります。
スペースとプロジェクトの情報を取得する
プロンプト
Backlogのスペース情報を取得してください
結果
Backlogのスペース情報を取得します。
get_space
リクエスト{}
レスポンス{ "spaceKey": "cm-yn-mcp", "name": "CM夏目", "ownerId": 1926739, "lang": "ja", "timezone": "Asia/Tokyo", "reportSendTime": "00:00:00", "textFormattingRule": "markdown", "created": "2025-04-28T06:09:48Z", "updated": "2025-04-28T06:09:59Z" }
Backlogのスペース情報を取得しました。以下が詳細です:
- スペースキー: cm-yn-mcp
- スペース名: CM夏目
- オーナーID: 1926739
- 言語: 日本語
- タイムゾーン: アジア/東京
- レポート送信時間: 00:00:00
- テキスト書式ルール: Markdown
- 作成日時: 2025年4月28日 06:09:48 (UTC)
- 更新日時: 2025年4月28日 06:09:59 (UTC)
スペースについて取得ができました。
次にプロジェクトの情報を取得してみます。
プロンプト
Backlogで参加しているプロジェクトの情報を取得してください
結果
参加しているプロジェクトの情報を取得します。
get_project_list
リクエスト{}
レスポンス[ { "id": 632306, "projectKey": "MCPTRIAL", "name": "mcp-trial", "chartEnabled": false, "useResolvedForChart": false, "subtaskingEnabled": false, "projectLeaderCanEditProjectLeader": false, "useWiki": true, "useDocument": false, "useFileSharing": true, "useWikiTreeView": true, "useSubversion": false, "useGit": false, "useOriginalImageSizeAtWiki": false, "textFormattingRule": "markdown", "archived": false, "displayOrder": 20000, "useDevAttributes": false } ]
現在参加しているプロジェクトの情報は以下の通りです:
- プロジェクトID: 632306
- プロジェクトキー: MCPTRIAL
- プロジェクト名: mcp-trial
- 詳細情報:
- チャート機能: 無効
- サブタスク機能: 無効
- Wiki機能: 有効
- ファイル共有機能: 有効
- Wikiツリービュー: 有効
- Git連携: 無効
- テキスト書式ルール: Markdown
- アーカイブ状態: アーカイブされていない
現在、このスペース内では1つのプロジェクト「mcp-trial」に参加していることが確認できました。
プロジェクトについても取得できました。
自分の担当の課題を取得する
プロンプト
自分が担当する課題は何がありますか?
結果
自分が担当している課題を確認します。まず自分のユーザー情報を取得した後、担当課題を検索します。
get_myself
リクエスト{}
レスポンス{ "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }
get_issues
リクエスト{ `assigneeId`: [ 1926739 ] }
レスポンス[ { "id": 105290556, "projectId": 632306, "issueKey": "MCPTRIAL-3", "keyId": 3, "issueType": { "id": 3348901, "projectId": 632306, "name": "タスク", "color": "#7ea800", "displayOrder": 0 }, "summary": "CI/CDの構築", "description": "GithubにリポジトリにGithub Actionsで構築する", "resolution": null, "priority": { "id": 4, "name": "低" }, "status": { "id": 2, "projectId": 632306, "name": "処理中", "color": "#4488c5", "displayOrder": 2000 }, "assignee": { "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }, "category": [], "versions": [], "milestone": [], "startDate": null, "dueDate": null, "estimatedHours": null, "actualHours": null, "parentIssueId": null, "createdUser": { "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }, "created": "2025-04-28T09:56:49Z", "updatedUser": { "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }, "updated": "2025-04-28T09:58:43Z", "customFields": [], "attachments": [], "sharedFiles": [], "externalFileLinks": [], "stars": [] }, { "id": 105287495, "projectId": 632306, "issueKey": "MCPTRIAL-2", "keyId": 2, "issueType": { "id": 3348901, "projectId": 632306, "name": "タスク", "color": "#7ea800", "displayOrder": 0 }, "summary": "ブログを書く", "description": "", "resolution": null, "priority": { "id": 3, "name": "中" }, "status": { "id": 2, "projectId": 632306, "name": "処理中", "color": "#4488c5", "displayOrder": 2000 }, "assignee": { "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }, "category": [], "versions": [], "milestone": [], "startDate": null, "dueDate": null, "estimatedHours": null, "actualHours": null, "parentIssueId": null, "createdUser": { "id": 1927200, "userId": "*9sIPugUI4R", "name": "テストユーザー", "roleType": 2, "lang": "ja", "mailAddress": "natsume.yuta+backlog-mcp-001@classmethod.jp", "nulabAccount": { "nulabId": "bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob", "name": "テストユーザー", "uniqueId": "natsumeyutabacklog-mcp-001", "iconUrl": "https://apps.nulab.com/account/bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob/photo/large?t=1745832282" }, "keyword": "テストユーザー TESUTOYU-ZA-", "lastLoginTime": "2025-04-28T09:24:54Z" }, "created": "2025-04-28T09:26:48Z", "updatedUser": { "id": 1927200, "userId": "*9sIPugUI4R", "name": "テストユーザー", "roleType": 2, "lang": "ja", "mailAddress": "natsume.yuta+backlog-mcp-001@classmethod.jp", "nulabAccount": { "nulabId": "bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob", "name": "テストユーザー", "uniqueId": "natsumeyutabacklog-mcp-001", "iconUrl": "https://apps.nulab.com/account/bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob/photo/large?t=1745832282" }, "keyword": "テストユーザー TESUTOYU-ZA-", "lastLoginTime": "2025-04-28T09:24:54Z" }, "updated": "2025-04-28T09:26:48Z", "customFields": [], "attachments": [], "sharedFiles": [], "externalFileLinks": [], "stars": [] } ]
現在、あなた(夏目祐樹さん)が担当している課題は2件あります:
MCPTRIAL-3: CI/CDの構築
- 状態: 処理中
- 優先度: 低
- 説明: GithubにリポジトリにGithub Actionsで構築する
- 作成日: 2025年4月28日
MCPTRIAL-2: ブログを書く
- 状態: 処理中
- 優先度: 中
- 作成日: 2025年4月28日
どちらの課題も「mcp-trial」プロジェクト内のタスクで、現在「処理中」の状態になっています。
自分が担当の課題を取得できました。
この後に課題の 取得/追加/更新 をやろうとしたのですが、Claude Desktopがクラッシュしてしまいました。
VS CodeのCopilot Agent Modeでは問題なく動いたのでClaude Desktop側の問題のようです。
(ログを確認しても、MCPサーバーへのリクエストが行われていなかったことからもClaude Desktop側の問題だと判断します)
通知の一覧を取得する
個人的にうれしい、通知を取得するToolを試してみます。
プロンプト
通知が来ていますか?
結果
通知の状況を確認します。
get_notifications
リクエスト{}
レスポンス[ { "id": 516946078, "alreadyRead": false, "reason": 1, "resourceAlreadyRead": false, "project": { "id": 632306, "projectKey": "MCPTRIAL", "name": "mcp-trial", "chartEnabled": false, "useResolvedForChart": false, "subtaskingEnabled": false, "projectLeaderCanEditProjectLeader": false, "useWiki": true, "useDocument": false, "useFileSharing": true, "useWikiTreeView": true, "useOriginalImageSizeAtWiki": false, "textFormattingRule": "markdown", "archived": false, "displayOrder": 20000, "useDevAttributes": false }, "issue": { "id": 105287495, "projectId": 632306, "issueKey": "MCPTRIAL-2", "keyId": 2, "issueType": { "id": 3348901, "projectId": 632306, "name": "タスク", "color": "#7ea800", "displayOrder": 0 }, "summary": "ブログを書く", "description": "", "resolution": null, "priority": { "id": 3, "name": "中" }, "status": { "id": 2, "projectId": 632306, "name": "処理中", "color": "#4488c5", "displayOrder": 2000 }, "assignee": { "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }, "category": [], "versions": [], "milestone": [], "startDate": null, "dueDate": null, "estimatedHours": null, "actualHours": null, "parentIssueId": null, "createdUser": { "id": 1927200, "userId": "*9sIPugUI4R", "name": "テストユーザー", "roleType": 2, "lang": "ja", "mailAddress": "natsume.yuta+backlog-mcp-001@classmethod.jp", "nulabAccount": { "nulabId": "bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob", "name": "テストユーザー", "uniqueId": "natsumeyutabacklog-mcp-001", "iconUrl": "https://apps.nulab.com/account/bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob/photo/large?t=1745832282" }, "keyword": "テストユーザー TESUTOYU-ZA-", "lastLoginTime": "2025-04-28T09:24:54Z" }, "created": "2025-04-28T09:26:48Z", "updatedUser": { "id": 1927200, "userId": "*9sIPugUI4R", "name": "テストユーザー", "roleType": 2, "lang": "ja", "mailAddress": "natsume.yuta+backlog-mcp-001@classmethod.jp", "nulabAccount": { "nulabId": "bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob", "name": "テストユーザー", "uniqueId": "natsumeyutabacklog-mcp-001", "iconUrl": "https://apps.nulab.com/account/bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob/photo/large?t=1745832282" }, "keyword": "テストユーザー TESUTOYU-ZA-", "lastLoginTime": "2025-04-28T09:24:54Z" }, "updated": "2025-04-28T09:26:48Z", "customFields": [], "attachments": [], "sharedFiles": [], "externalFileLinks": [], "stars": [] }, "comment": { "id": 534455643, "projectId": 632306, "issueId": 105287495, "content": null, "changeLog": [ { "field": "notification", "newValue": null, "originalValue": null, "attachmentInfo": null, "attributeInfo": null, "notificationInfo": { "type": "issue.create" } } ], "createdUser": { "id": 1927200, "userId": "*9sIPugUI4R", "name": "テストユーザー", "roleType": 2, "lang": "ja", "mailAddress": "natsume.yuta+backlog-mcp-001@classmethod.jp", "nulabAccount": { "nulabId": "bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob", "name": "テストユーザー", "uniqueId": "natsumeyutabacklog-mcp-001", "iconUrl": "https://apps.nulab.com/account/bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob/photo/large?t=1745832282" }, "keyword": "テストユーザー TESUTOYU-ZA-", "lastLoginTime": "2025-04-28T09:24:54Z" }, "created": "2025-04-28T09:26:48Z", "updated": "2025-04-28T09:26:48Z", "stars": [], "notifications": [ { "id": 516946078, "alreadyRead": false, "reason": 1, "user": { "id": 1926739, "userId": "AAP9FJlnOX", "name": "夏目祐樹", "roleType": 1, "lang": "ja", "mailAddress": "natsume.yuta+mcp@classmethod.jp", "nulabAccount": { "nulabId": "78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE", "name": "夏目祐樹", "uniqueId": "natsumeyutamcp", "iconUrl": "https://apps.nulab.com/account/78mDLhOH9EkPUSLcHNRtIac6DLcXqQwci58NoMXuTHD6fN1WZE/photo/large?t=1745858063" }, "keyword": "夏目祐樹 NATUMEYUUKI", "lastLoginTime": "2025-04-28T16:35:07Z" }, "resourceAlreadyRead": false } ] }, "pullRequest": null, "pullRequestComment": null, "sender": { "id": 1927200, "userId": "*9sIPugUI4R", "name": "テストユーザー", "roleType": 2, "lang": "ja", "mailAddress": "natsume.yuta+backlog-mcp-001@classmethod.jp", "nulabAccount": { "nulabId": "bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob", "name": "テストユーザー", "uniqueId": "natsumeyutabacklog-mcp-001", "iconUrl": "https://apps.nulab.com/account/bSTip94TW3hefEMvzLzMDg0IHA08ZpU4UiXYO4ZWehtgjyjzob/photo/large?t=1745832282" }, "keyword": "テストユーザー TESUTOYU-ZA-", "lastLoginTime": "2025-04-28T09:24:54Z" }, "created": "2025-04-28T09:26:48Z" } ]
はい、1件の未読通知があります:
テストユーザーさんが「ブログを書く」(MCPTRIAL-2)という課題を作成し、あなたが担当者として設定されました。この通知は2025年4月28日に作成され、まだ読まれていない状態です。
課題の詳細:
- 課題キー: MCPTRIAL-2
- タイトル: ブログを書く
- ステータス: 処理中
- 優先度: 中
- 作成者: テストユーザー
通知の一覧を取得できました。
この後に通知を既読にしようとしたのですが、リクエスト内容がToolの定義から見ても問題なかったのに、 Unkown error: Unexpected end of JSON input
とエラーが出ました。
また、何度か試しているうちに既読になっていました (その間一度も成功はしていません)。
まとめ
backlogのMCPサーバーを試してみました。
他にも色々なToolが定義されているので試してもらえると幸いです。