backlog-mcp-server 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +440 -0
  3. package/README.md +501 -0
  4. package/build/backlog/backlogErrorHandler.js +8 -0
  5. package/build/backlog/customFields.js +16 -0
  6. package/build/backlog/parseBacklogAPIError.js +38 -0
  7. package/build/createTranslationHelper.js +28 -0
  8. package/build/handlers/builders/composeToolHandler.js +26 -0
  9. package/build/handlers/transformers/wrapWithErrorHandling.js +4 -0
  10. package/build/handlers/transformers/wrapWithFieldPicking.js +55 -0
  11. package/build/handlers/transformers/wrapWithTokenLimit.js +21 -0
  12. package/build/handlers/transformers/wrapWithToolResult.js +39 -0
  13. package/build/index.js +102 -0
  14. package/build/registerTools.js +37 -0
  15. package/build/tools/addIssue.js +94 -0
  16. package/build/tools/addIssueComment.js +44 -0
  17. package/build/tools/addProject.js +39 -0
  18. package/build/tools/addPullRequest.js +65 -0
  19. package/build/tools/addPullRequestComment.js +52 -0
  20. package/build/tools/addWiki.js +29 -0
  21. package/build/tools/countIssues.js +111 -0
  22. package/build/tools/deleteIssue.js +29 -0
  23. package/build/tools/deleteProject.js +29 -0
  24. package/build/tools/downloadDocumentAttachment.js +1 -0
  25. package/build/tools/dynamicTools/toolsets.js +103 -0
  26. package/build/tools/getCategories.js +30 -0
  27. package/build/tools/getCustomFields.js +37 -0
  28. package/build/tools/getDocument.js +20 -0
  29. package/build/tools/getDocumentTree.js +20 -0
  30. package/build/tools/getDocuments.js +25 -0
  31. package/build/tools/getGitRepositories.js +29 -0
  32. package/build/tools/getGitRepository.js +41 -0
  33. package/build/tools/getIssue.js +29 -0
  34. package/build/tools/getIssueComments.js +45 -0
  35. package/build/tools/getIssueTypes.js +30 -0
  36. package/build/tools/getIssues.js +155 -0
  37. package/build/tools/getMyself.js +14 -0
  38. package/build/tools/getNotifications.js +35 -0
  39. package/build/tools/getNotificationsCount.js +20 -0
  40. package/build/tools/getPriorities.js +13 -0
  41. package/build/tools/getProject.js +29 -0
  42. package/build/tools/getProjectList.js +23 -0
  43. package/build/tools/getPullRequest.js +44 -0
  44. package/build/tools/getPullRequestComments.js +60 -0
  45. package/build/tools/getPullRequests.js +65 -0
  46. package/build/tools/getPullRequestsCount.js +57 -0
  47. package/build/tools/getResolutions.js +13 -0
  48. package/build/tools/getSpace.js +14 -0
  49. package/build/tools/getUsers.js +14 -0
  50. package/build/tools/getWatchingListCount.js +17 -0
  51. package/build/tools/getWatchingListItems.js +17 -0
  52. package/build/tools/getWiki.js +21 -0
  53. package/build/tools/getWikiPages.js +37 -0
  54. package/build/tools/getWikisCount.js +29 -0
  55. package/build/tools/markNotificationAsRead.js +26 -0
  56. package/build/tools/resetUnreadNotificationCount.js +13 -0
  57. package/build/tools/tools.js +143 -0
  58. package/build/tools/updateIssue.js +116 -0
  59. package/build/tools/updateProject.js +57 -0
  60. package/build/tools/updatePullRequest.js +68 -0
  61. package/build/tools/updatePullRequestComment.js +51 -0
  62. package/build/types/mcp.js +1 -0
  63. package/build/types/result.js +3 -0
  64. package/build/types/tool.js +1 -0
  65. package/build/types/toolsets.js +1 -0
  66. package/build/types/zod/backlogOutputDefinition.js +468 -0
  67. package/build/utils/generateFieldsDescription.js +47 -0
  68. package/build/utils/resolveIdOrKey.js +25 -0
  69. package/build/utils/runToolSafely.js +18 -0
  70. package/build/utils/tokenCounter.js +11 -0
  71. package/build/utils/toolRegistrar.js +12 -0
  72. package/build/utils/toolsetUtils.js +48 -0
  73. package/build/utils/wrapServerWithToolRegistry.js +16 -0
  74. package/build/version.js +1 -0
  75. package/build/version.template.js +1 -0
  76. package/package.json +52 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Nulab Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,440 @@
1
+ # Backlog MCP Server(日本語版)
2
+
3
+ ![MIT License](https://img.shields.io/badge/license-MIT-green.svg)
4
+ ![Build](https://github.com/nulab/backlog-mcp-server/actions/workflows/ci.yml/badge.svg)
5
+ ![Last Commit](https://img.shields.io/github/last-commit/nulab/backlog-mcp-server.svg)
6
+
7
+ [🇬🇧 English README](./README.md)
8
+
9
+ Backlog API とやり取りするための Model Context Protocol(MCP)サーバーです。このサーバーは、Claude Desktop / Cline / Cursor などのAIエージェントを通じて、Backlog 上でプロジェクト、課題、Wikiページなどを管理するためのツールを提供します。
10
+
11
+ ## 主な機能
12
+
13
+ - プロジェクトツール(作成、読み取り、更新、削除)
14
+ - 課題とコメントの追跡(作成、更新、削除、一覧表示)
15
+ - Wikiページサポート
16
+ - Gitリポジトリとプルリクエストツール
17
+ - 通知ツール
18
+ - 最適化されたレスポンスのためのGraphQLスタイルのフィールド選択
19
+ - 大規模なレスポンスに対するトークン制限
20
+
21
+ ## 利用開始
22
+
23
+ ### 必要条件
24
+
25
+ - Docker
26
+ - APIアクセスが可能なBacklogアカウント
27
+ - BacklogアカウントのAPIキー
28
+
29
+ ### オプション1: Docker経由でのインストール
30
+
31
+ このMCPサーバーを使用する最も簡単な方法は、MCP設定を利用することです:
32
+
33
+ 1. MCP設定を開きます
34
+ 2. MCP設定セクションに移動します
35
+ 3. 次の設定を追加します:
36
+
37
+ ```json
38
+ {
39
+ "mcpServers": {
40
+ "backlog": {
41
+ "command": "docker",
42
+ "args": [
43
+ "run",
44
+ "--pull", "always",
45
+ "-i",
46
+ "--rm",
47
+ "-e", "BACKLOG_DOMAIN",
48
+ "-e", "BACKLOG_API_KEY",
49
+ "ghcr.io/nulab/backlog-mcp-server"
50
+ ],
51
+ "env": {
52
+ "BACKLOG_DOMAIN": "your-domain.backlog.com",
53
+ "BACKLOG_API_KEY": "your-api-key"
54
+ }
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ `your-domain.backlog.com` を実際のBacklogドメインに、`your-api-key` を実際のBacklog APIキーに置き換えてください。
61
+
62
+ ✅ `--pull always` を使用できない場合は、次のコマンドで手動でイメージを更新できます:
63
+
64
+ ```
65
+ docker pull ghcr.io/nulab/backlog-mcp-server:latest
66
+ ```
67
+
68
+ ### オプション2: 手動セットアップ (Node.js)
69
+
70
+ 1. クローンしてインストール:
71
+ ```bash
72
+ git clone https://github.com/nulab/backlog-mcp-server.git
73
+ cd backlog-mcp-server
74
+ npm install
75
+ npm run build
76
+ ```
77
+
78
+ 2. MCPとして使用するJSONを設定します:
79
+ ```json
80
+ {
81
+ "mcpServers": {
82
+ "backlog": {
83
+ "command": "node",
84
+ "args": [
85
+ "your-repository-location/build/index.js"
86
+ ],
87
+ "env": {
88
+ "BACKLOG_DOMAIN": "your-domain.backlog.com",
89
+ "BACKLOG_API_KEY": "your-api-key"
90
+ }
91
+ }
92
+ }
93
+ }
94
+ ```
95
+
96
+ ## ツール設定
97
+
98
+ `--enable-toolsets` コマンドラインフラグまたは `ENABLE_TOOLSETS` 環境変数を使用して、特定の **ツールセット** を選択的に有効または無効にすることができます。これにより、AIエージェントが利用できるツールをより細かく制御し、コンテキストサイズを削減するのに役立ちます。
99
+
100
+ ### 利用可能なツールセット
101
+
102
+ 次のツールセットが利用可能です(`"all"` が使用されるとデフォルトで有効になります):
103
+
104
+ | ツールセット | 説明 |
105
+ |-----------------|--------------------------------------------------------------------------------------|
106
+ | `space` | Backlogスペース設定と一般情報を管理するためのツール |
107
+ | `project` | プロジェクト、カテゴリ、カスタムフィールド、課題タイプを管理するためのツール |
108
+ | `issue` | 課題とそのコメントを管理するためのツール |
109
+ | `wiki` | Wikiページを管理するためのツール |
110
+ | `git` | Gitリポジトリとプルリクエストを管理するためのツール |
111
+ | `notifications` | ユーザー通知を管理するためのツール |
112
+ | `document` | ドキュメントおよびドキュメントツリーを参照するためのツール |
113
+
114
+ ### ツールセットの指定
115
+
116
+ 次の方法でツールセットのアクティベーションを制御できます:
117
+
118
+ CLI経由での使用:
119
+
120
+ ```bash
121
+ --enable-toolsets space,project,issue
122
+ ```
123
+
124
+ または環境変数経由:
125
+
126
+ ```
127
+ ENABLE_TOOLSETS="space,project,issue"
128
+ ```
129
+
130
+ `all` が指定された場合、利用可能なすべてのツールセットが有効になります。これはデフォルトの動作でもあります。
131
+
132
+ ツールセットリストがAIエージェントにとって大きすぎる場合や、特定のツールがパフォーマンスの問題を引き起こしている場合に、選択的なツールセットの使用が役立つことがあります。そのような場合、未使用のツールセットを無効にすると安定性が向上する可能性があります。
133
+
134
+ > 🧩 ヒント: `project` ツールセットは、他の多くのツールがエントリポイントとしてプロジェクトデータに依存しているため、強く推奨されます。
135
+
136
+ ### 動的なツールセット検出(実験的)
137
+
138
+ MCPサーバーをAIエージェントと共に使用している場合、実行時にツールセットの動的な検出を有効にすることができます:
139
+
140
+ CLI経由での有効化:
141
+
142
+ ```
143
+ --dynamic-toolsets
144
+ ```
145
+
146
+ または環境変数経由:
147
+
148
+ ```
149
+ -e DYNAMIC_TOOLSETS=1 \
150
+ ```
151
+
152
+ 動的ツールセットを有効にすると、LLMはツールインターフェースを介してオンデマンドでツールセットを一覧表示およびアクティブ化できるようになります。
153
+
154
+ ## 利用可能なツール
155
+
156
+ 以下のような Backlog 機能に対応するツールを提供しています:
157
+
158
+ [Available Tools セクションへ](https://github.com/nulab/backlog-mcp-server?tab=readme-ov-file#available-tools)
159
+
160
+ ## 使用例
161
+
162
+ MCPサーバーがAIエージェントで設定されると、会話で直接ツールを使用できます。以下にいくつかの例を示します:
163
+
164
+ - プロジェクトの一覧表示
165
+ ```
166
+ 私のBacklogプロジェクトをすべてリストアップしてください。
167
+ ```
168
+ - 新しい課題の作成
169
+ ```
170
+ PROJECT-KEYプロジェクトに「ログインページのエラーを修正」というタイトルの高優先度のバグ課題を作成してください。
171
+ ```
172
+ - プロジェクト詳細の取得
173
+ ```
174
+ PROJECT-KEYプロジェクトの詳細を表示してください。
175
+ ```
176
+ - Gitリポジトリの操作
177
+ ```
178
+ PROJECT-KEYプロジェクト内のすべてのGitリポジトリをリストアップしてください。
179
+ ```
180
+ - プルリクエストの管理
181
+ ```
182
+ PROJECT-KEYプロジェクトの「repo-name」リポジトリ内のすべてのオープンなプルリクエストを表示してください。
183
+ ```
184
+ ```
185
+ PROJECT-KEYプロジェクトの「repo-name」リポジトリで、ブランチ「feature/new-feature」から「main」への新しいプルリクエストを作成してください。
186
+ ```
187
+ - ウォッチアイテム
188
+ ```
189
+ 私がウォッチしているすべてのアイテムを表示してください。
190
+ ```
191
+
192
+ ### i18n / 説明のオーバーライド
193
+
194
+ **ホームディレクトリ** に `.backlog-mcp-serverrc.json` ファイルを作成することで、ツールの説明をオーバーライドできます。
195
+
196
+ ファイルには、ツール名をキーとし、新しい説明を値とするJSONオブジェクトを含める必要があります。
197
+ 例:
198
+
199
+ ```json
200
+ {
201
+ "TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "代替の説明文",
202
+ "TOOL_CREATE_PROJECT_DESCRIPTION": "Backlogに新しいプロジェクトを作成します"
203
+ }
204
+ ```
205
+
206
+ サーバー起動時、各ツールの最終的な説明は次の優先順位に基づいて決定されます:
207
+
208
+ 1. 環境変数(例:`BACKLOG_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION`)
209
+ 2. `.backlog-mcp-serverrc.json` 内のエントリ - サポートされる設定ファイル形式:.json、.yaml、.yml
210
+ 3. 組み込みのフォールバック値(英語)
211
+
212
+ サンプル設定:
213
+
214
+ ```json
215
+ {
216
+ "mcpServers": {
217
+ "backlog": {
218
+ "command": "docker",
219
+ "args": [
220
+ "run",
221
+ "-i",
222
+ "--rm",
223
+ "-e", "BACKLOG_DOMAIN",
224
+ "-e", "BACKLOG_API_KEY",
225
+ "-v", "/yourcurrentdir/.backlog-mcp-serverrc.json:/root/.backlog-mcp-serverrc.json:ro",
226
+ "ghcr.io/nulab/backlog-mcp-server"
227
+ ],
228
+ "env": {
229
+ "BACKLOG_DOMAIN": "your-domain.backlog.com",
230
+ "BACKLOG_API_KEY": "your-api-key"
231
+ }
232
+ }
233
+ }
234
+ }
235
+ ```
236
+
237
+ ### 現在の翻訳のエクスポート
238
+
239
+ `--export-translations` フラグを指定してバイナリを実行することで、現在のデフォルト翻訳(オーバーライドを含む)をエクスポートできます。
240
+
241
+ これにより、行ったカスタマイズを含むすべてのツール説明が標準出力に出力されます。
242
+
243
+ 例:
244
+
245
+ ```bash
246
+ docker run -i --rm ghcr.io/nulab/backlog-mcp-server node build/index.js --export-translations
247
+ ```
248
+
249
+ または
250
+
251
+ ```bash
252
+ npx github:nulab/backlog-mcp-server --export-translations
253
+ ```
254
+
255
+ ### 日本語翻訳テンプレートの使用
256
+ サンプルの日本語設定ファイルは次の場所に提供されています:
257
+
258
+ ```bash
259
+ translationConfig/.backlog-mcp-serverrc.json.example
260
+ ```
261
+
262
+ これを使用するには、ホームディレクトリに `.backlog-mcp-serverrc.json` としてコピーします:
263
+
264
+ その後、必要に応じてファイルを編集して説明をカスタマイズできます。
265
+
266
+ ### 環境変数の使用
267
+ または、環境変数を介してツールの説明をオーバーライドすることもできます。
268
+
269
+ 環境変数名は、ツールキーに基づいており、`BACKLOG_MCP_` がプレフィックスとして付き、大文字で記述されます。
270
+
271
+ 例:
272
+ `TOOL_ADD_ISSUE_COMMENT_DESCRIPTION` をオーバーライドするには:
273
+
274
+ ```json
275
+ {
276
+ "mcpServers": {
277
+ "backlog": {
278
+ "command": "docker",
279
+ "args": [
280
+ "run",
281
+ "-i",
282
+ "--rm",
283
+ "-e", "BACKLOG_DOMAIN",
284
+ "-e", "BACKLOG_API_KEY",
285
+ "-e", "BACKLOG_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION",
286
+ "ghcr.io/nulab/backlog-mcp-server"
287
+ ],
288
+ "env": {
289
+ "BACKLOG_DOMAIN": "your-domain.backlog.com",
290
+ "BACKLOG_API_KEY": "your-api-key",
291
+ "BACKLOG_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "代替の説明文"
292
+ }
293
+ }
294
+ }
295
+ }
296
+ ```
297
+
298
+ サーバーは起動時に設定ファイルを同期的に読み込みます。
299
+
300
+ 環境変数は常に設定ファイルよりも優先されます。
301
+
302
+ ## 高度な機能
303
+
304
+ ### ツール名のプレフィックス
305
+
306
+ 次の方法でツール名にプレフィックスを追加します:
307
+
308
+ ```
309
+ --prefix backlog_
310
+ ```
311
+
312
+ または環境変数経由:
313
+
314
+ ```
315
+ PREFIX="backlog_"
316
+ ```
317
+
318
+ これは、同じ環境で複数のMCPサーバーまたはツールを使用していて、名前の衝突を避けたい場合に特に便利です。たとえば、`get_project` は `backlog_get_project` になり、他のサービスによって提供される同様の名前のツールと区別できます。
319
+
320
+ ### レスポンスの最適化とトークン制限
321
+
322
+ #### フィールド選択(GraphQLスタイル)
323
+
324
+ ```
325
+ --optimize-response
326
+ ```
327
+
328
+ または環境変数:
329
+
330
+ ```
331
+ OPTIMIZE_RESPONSE=1
332
+ ```
333
+
334
+ 次に、特定のフィールドのみを要求します:
335
+
336
+ ```
337
+ get_project(projectIdOrKey: "PROJECT-KEY", fields: "{ name key description }")
338
+ ```
339
+
340
+ AIはフィールド選択を使用してレスポンスを最適化します:
341
+
342
+ ```
343
+ get_project(projectIdOrKey: "PROJECT-KEY", fields: "{ name key description }")
344
+ ```
345
+
346
+ 利点:
347
+ - 必要なフィールドのみを要求することでレスポンスサイズを削減
348
+ - 特定のデータポイントに焦点を当てる
349
+ - 大規模なレスポンスのパフォーマンスを向上
350
+
351
+ #### トークン制限
352
+
353
+ 大規模なレスポンスは、トークン制限を超えないように自動的に制限されます:
354
+ - デフォルト制限:50,000トークン
355
+ - `MAX_TOKENS` 環境変数で設定可能
356
+ - 制限を超えるレスポンスはメッセージと共に切り捨てられます
357
+
358
+ これを変更するには、次を使用します:
359
+
360
+ ```
361
+ MAX_TOKENS=10000
362
+ ```
363
+
364
+ レスポンスが制限を超えた場合、警告と共に切り捨てられます。
365
+ > 注:これはベストエフォートの緩和策であり、保証された強制ではありません。
366
+
367
+ ### 完全なカスタム設定例
368
+
369
+ このセクションでは、複数の環境変数を使用した高度な設定を示します。これらは実験的な機能であり、すべてのMCPクライアントでサポートされているとは限りません。これはMCP標準仕様の一部ではなく、注意して使用する必要があります。
370
+
371
+ ```json
372
+ {
373
+ "mcpServers": {
374
+ "backlog": {
375
+ "command": "docker",
376
+ "args": [
377
+ "run",
378
+ "-i",
379
+ "--rm",
380
+ "-e", "BACKLOG_DOMAIN",
381
+ "-e", "BACKLOG_API_KEY",
382
+ "-e", "MAX_TOKENS",
383
+ "-e", "OPTIMIZE_RESPONSE",
384
+ "-e", "PREFIX",
385
+ "-e", "ENABLE_TOOLSETS",
386
+ "ghcr.io/nulab/backlog-mcp-server"
387
+ ],
388
+ "env": {
389
+ "BACKLOG_DOMAIN": "your-domain.backlog.com",
390
+ "BACKLOG_API_KEY": "your-api-key",
391
+ "MAX_TOKENS": "10000",
392
+ "OPTIMIZE_RESPONSE": "1",
393
+ "PREFIX": "backlog_",
394
+ "ENABLE_TOOLSETS": "space,project,issue",
395
+ "ENABLE_DYNAMIC_TOOLSETS": "1"
396
+ }
397
+ }
398
+ }
399
+ }
400
+ ```
401
+
402
+ ## 開発
403
+
404
+ ### テストの実行
405
+
406
+ ```bash
407
+ npm test
408
+ ```
409
+
410
+ ### 新しいツールの追加
411
+
412
+ 1. 既存のツールのパターンに従って `src/tools/` に新しいファイルを作成します
413
+ 2. 対応するテストファイルを作成します
414
+ 3. 新しいツールを `src/tools/tools.ts` に追加します
415
+ 4. 変更をビルドしてテストします
416
+
417
+ ### コマンドラインオプション
418
+
419
+ サーバーはいくつかのコマンドラインオプションをサポートしています:
420
+
421
+ - `--export-translations`: すべての翻訳キーと値をエクスポート
422
+ - `--optimize-response`: GraphQLスタイルのフィールド選択を有効にする
423
+ - `--max-tokens=NUMBER`: レスポンスの最大トークン制限を設定
424
+ - `--prefix=STRING`: すべてのツール名に付加するオプションの文字列プレフィックス(デフォルト:"")
425
+ - `--enable-toolsets <toolsets...>`: 有効にするツールセットを指定します(カンマ区切りまたは複数の引数)。デフォルトは "all" です。
426
+ 例:`--enable-toolsets space,project` または `--enable-toolsets issue --enable-toolsets git`
427
+ 利用可能なツールセット:`space`、`project`、`issue`、`wiki`、`git`、`notifications`。
428
+
429
+ 例:
430
+ ```bash
431
+ node build/index.js --optimize-response --max-tokens=100000 --prefix="backlog_" --enable-toolsets space,issue
432
+ ```
433
+
434
+ ## ライセンス
435
+
436
+ このプロジェクトは [MITライセンス](./LICENSE) のもとでライセンスされています。
437
+
438
+ 注意:このツールはMITライセンスのもとで提供されており、**いかなる保証も公式サポートもありません**。
439
+ 内容を確認し、ニーズへの適合性を判断した上で、自己責任で使用してください。
440
+ 問題が発生した場合は、[GitHub Issues](../../issues) を通じて報告してください。