backlogの公式MCPサーバーでお知らせの一覧を取得する

backlogの公式MCPサーバーでお知らせの一覧を取得する

Clock Icon2025.04.29

こんばんは、製造ビジネステクノロジー部の夏目です。

今回はnulabさんがbacklogの公式MCPサーバーを公開したので試してみます。

backlog-mcp-server

https://github.com/nulab/backlog-mcp-server

nulabさんが公式で出したbacklogのMCPサーバー。

backlogでできることはほとんどできそうなくらい多くの機能があります。

他にも今まで試したMCPサーバーとは異なる二つの特徴があります。

  • Docker動かすことを推奨している
  • Descriptionを日本語に変更できる

前者はもともとできることは知っていましたが、Dockerでの使用を推奨するのは初めて見ました。

後者は、正確に言うとDescriptionを任意の文字列に変更できます。
そのための日本語のテンプレートを公式が用意しています。

使ってみる

  1. MCPサーバーを設定する
  2. 使ってみる

1. MCPサーバーを設定する

日本語用のテンプレートをダウンロードする

Descriptionを日本語にするために、テンプレートを落としてきます。

https://github.com/nulab/backlog-mcp-server/blob/main/translationConfig/.backlog-mcp-serverrc.json.example

a0ae37e8-3397-4b2d-8a80-6df6609754f0

Download raw File とツールチップが表示されるボタンをクリックします。

ダウンロードしたファイルの(フル)パスは後で使うので控えておきます。

API Keyを発行する

backlogのダッシュボードを表示します。

097d7f86-61f3-4492-a03b-555cb5782bc5

右上の自身のアイコンをクリックし、 個人設定 をクリックします。

55c292e2-cda0-48b5-89fa-82271ffacef9

API をクリックします。

4b143908-ecba-444f-951d-2485b79f141d

必要があれば メモ に何か書きます。

登録 をクリックします。

0f308055-b8e1-4ea9-a30a-5baf0fb04384

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を使っています。

それが理由なのか、上記の設定では動かすことができませんでした。

commandwhich dockerの実行結果を書いてあげると自分の環境では動きました。

2. 使ってみる

ツールを確認する

Descriptionを日本語にしたので確認をします。

62e11cd8-4871-45df-8046-4a9d29b06f00

Claude Desktopのチャット欄下部の金槌のアイコンをクリックします。

1bd267c7-2706-45fe-aca9-1af12c20d032

Descriptionが日本語になっていることがわかります。

スペースとプロジェクトの情報を取得する

d8cacc53-1a9e-4a79-bd8c-f4270ba18944

プロンプト

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)

スペースについて取得ができました。

次にプロジェクトの情報を取得してみます。

cff34d5c-ceb6-417d-83d9-fc4e92c8fb3d

プロンプト

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」に参加していることが確認できました。

プロジェクトについても取得できました。

自分の担当の課題を取得する

8d392e1c-143f-4e3f-b8f7-b449de6fc478

プロンプト

自分が担当する課題は何がありますか?

結果

自分が担当している課題を確認します。まず自分のユーザー情報を取得した後、担当課題を検索します。

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件あります:

  1. MCPTRIAL-3: CI/CDの構築

    • 状態: 処理中
    • 優先度: 低
    • 説明: GithubにリポジトリにGithub Actionsで構築する
    • 作成日: 2025年4月28日
  2. MCPTRIAL-2: ブログを書く

    • 状態: 処理中
    • 優先度: 中
    • 作成日: 2025年4月28日

どちらの課題も「mcp-trial」プロジェクト内のタスクで、現在「処理中」の状態になっています。

自分が担当の課題を取得できました。

この後に課題の 取得/追加/更新 をやろうとしたのですが、Claude Desktopがクラッシュしてしまいました。
VS CodeのCopilot Agent Modeでは問題なく動いたのでClaude Desktop側の問題のようです。
(ログを確認しても、MCPサーバーへのリクエストが行われていなかったことからもClaude Desktop側の問題だと判断します)

通知の一覧を取得する

個人的にうれしい、通知を取得するToolを試してみます。

046387c5-d7e9-4f3c-925e-d62748185fdf

プロンプト

通知が来ていますか?

結果

通知の状況を確認します。

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が定義されているので試してもらえると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.