From df70292a47863ff56d35d69fec26fb8d83e68458 Mon Sep 17 00:00:00 2001 From: pppp606 Date: Mon, 30 Jun 2025 14:16:48 +0900 Subject: [PATCH 1/2] Update desktop extensions support --- README.ja.md | 39 ++++++ README.md | 39 ++++++ manifest.json | 204 +++++++++++++++++++++++++++++ package-lock.json | 318 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 5 files changed, 598 insertions(+), 3 deletions(-) create mode 100644 manifest.json diff --git a/README.ja.md b/README.ja.md index a04fd44..6f41886 100644 --- a/README.ja.md +++ b/README.ja.md @@ -93,6 +93,28 @@ docker pull ghcr.io/nulab/backlog-mcp-server:latest } ``` +### オプション3: Desktop Extension (DXT) + +Claude Desktopユーザー向けに、ワンクリックインストール用のDesktop Extensionを作成できます: + +1. DXT CLIツールをインストール: + ```bash + npm install -g @anthropic-ai/dxt + ``` + +2. Desktop Extensionパッケージを作成: + ```bash + # manifest.jsonを初期化(まだ存在しない場合) + dxt init + + # 拡張機能をパッケージ化 + dxt pack + ``` + +3. 生成された `.dxt` ファイルをダブルクリックするか、拡張機能メニューを使用してClaude Desktopにインストールします。 + +Desktop Extensionには、サーバー設定と利用可能なツールを定義する `manifest.json` ファイルが含まれており、エンドユーザーにとってシームレスなインストールを実現します。 + ## ツール設定 `--enable-toolsets` コマンドラインフラグまたは `ENABLE_TOOLSETS` 環境変数を使用して、特定の **ツールセット** を選択的に有効または無効にすることができます。これにより、AIエージェントが利用できるツールをより細かく制御し、コンテキストサイズを削減するのに役立ちます。 @@ -424,6 +446,23 @@ npm test 例:`--enable-toolsets space,project` または `--enable-toolsets issue --enable-toolsets git` 利用可能なツールセット:`space`、`project`、`issue`、`wiki`、`git`、`notifications`。 +### Desktop Extension開発 + +Desktop Extensionの開発には、DXT CLIツールを使用できます: + +```bash +# 新しいmanifest.jsonを初期化(対話式) +npx dxt init + +# 現在のmanifest.jsonを検証 +npx dxt validate + +# 拡張機能を.dxtファイルにパッケージ化 +npx dxt pack +``` + +`manifest.json` ファイルは、Desktop Extensionインストール用の拡張機能メタデータ、サーバー設定、利用可能なツールを定義します。 + 例: ```bash node build/index.js --optimize-response --max-tokens=100000 --prefix="backlog_" --enable-toolsets space,issue diff --git a/README.md b/README.md index dd9b149..c65a2db 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,28 @@ docker pull ghcr.io/nulab/backlog-mcp-server:latest } ``` +### Option 3: Desktop Extension (DXT) + +For Claude Desktop users, you can create a Desktop Extension for one-click installation: + +1. Install the DXT CLI tool: + ```bash + npm install -g @anthropic-ai/dxt + ``` + +2. Create a Desktop Extension package: + ```bash + # Initialize manifest (if not already present) + dxt init + + # Package the extension + dxt pack + ``` + +3. Install the generated `.dxt` file in Claude Desktop by double-clicking it or using the Extensions menu. + +The Desktop Extension includes a `manifest.json` file that defines the server configuration and available tools, making installation seamless for end users. + ## Tool Configuration You can selectively enable or disable specific **toolsets** using the `--enable-toolsets` command-line flag or the `ENABLE_TOOLSETS` environment variable. This allows better control over which tools are available to the AI agent and helps reduce context size. @@ -480,6 +502,23 @@ The server supports several command line options: Example: `--enable-toolsets space,project` or `--enable-toolsets issue --enable-toolsets git` Available toolsets: `space`, `project`, `issue`, `wiki`, `git`, `notifications`. +### Desktop Extension Development + +For developing Desktop Extensions, you can use the DXT CLI tools: + +```bash +# Initialize a new manifest.json (interactive) +npx dxt init + +# Validate the current manifest.json +npx dxt validate + +# Package the extension into a .dxt file +npx dxt pack +``` + +The `manifest.json` file defines the extension metadata, server configuration, and available tools for Desktop Extension installation. + Example: ```bash node build/index.js --optimize-response --max-tokens=100000 --prefix="backlog_" --enable-toolsets space,issue diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..6ef16e9 --- /dev/null +++ b/manifest.json @@ -0,0 +1,204 @@ +{ + "dxt_version": "0.1", + "name": "backlog-mcp-server", + "version": "0.1.1", + "display_name": "Backlog MCP Server", + "description": "Model Context Protocol server for interacting with the Backlog API. Provides tools for managing projects, issues, Wiki pages, and more on Backlog through AI agents.", + "author": { + "name": "Nulab", + "url": "https://github.com/nulab/backlog-mcp-server" + }, + "server": { + "type": "node", + "entry_point": "build/index.js", + "mcp_config": { + "command": "node", + "args": ["${__dirname}/build/index.js"] + } + }, + "user_config": { + "BACKLOG_DOMAIN": { + "type": "string", + "title": "Backlog Domain", + "description": "Your Backlog domain (e.g., your-company.backlog.com)", + "required": true + }, + "BACKLOG_API_KEY": { + "type": "string", + "title": "Backlog API Key", + "description": "Your Backlog API key", + "required": true, + "sensitive": true + } + }, + "tools": [ + { + "name": "getProjectList", + "description": "Get list of projects" + }, + { + "name": "getProject", + "description": "Get specific project details" + }, + { + "name": "addProject", + "description": "Create a new project" + }, + { + "name": "updateProject", + "description": "Update an existing project" + }, + { + "name": "deleteProject", + "description": "Delete a project" + }, + { + "name": "getIssues", + "description": "Get list of issues" + }, + { + "name": "getIssue", + "description": "Get specific issue details" + }, + { + "name": "addIssue", + "description": "Create a new issue" + }, + { + "name": "updateIssue", + "description": "Update an existing issue" + }, + { + "name": "deleteIssue", + "description": "Delete an issue" + }, + { + "name": "countIssues", + "description": "Count issues matching criteria" + }, + { + "name": "getIssueComments", + "description": "Get comments for an issue" + }, + { + "name": "addIssueComment", + "description": "Add a comment to an issue" + }, + { + "name": "getWikiPages", + "description": "Get list of Wiki pages" + }, + { + "name": "getWiki", + "description": "Get specific Wiki page content" + }, + { + "name": "addWiki", + "description": "Create a new Wiki page" + }, + { + "name": "getPullRequests", + "description": "Get list of pull requests" + }, + { + "name": "getPullRequest", + "description": "Get specific pull request details" + }, + { + "name": "addPullRequest", + "description": "Create a new pull request" + }, + { + "name": "updatePullRequest", + "description": "Update an existing pull request" + }, + { + "name": "getPullRequestComments", + "description": "Get comments for a pull request" + }, + { + "name": "addPullRequestComment", + "description": "Add a comment to a pull request" + }, + { + "name": "updatePullRequestComment", + "description": "Update a pull request comment" + }, + { + "name": "getNotifications", + "description": "Get user notifications" + }, + { + "name": "getNotificationsCount", + "description": "Get count of notifications" + }, + { + "name": "markNotificationAsRead", + "description": "Mark a notification as read" + }, + { + "name": "resetUnreadNotificationCount", + "description": "Reset unread notification count" + }, + { + "name": "getUsers", + "description": "Get list of users" + }, + { + "name": "getMyself", + "description": "Get current user information" + }, + { + "name": "getSpace", + "description": "Get space information" + }, + { + "name": "getCategories", + "description": "Get project categories" + }, + { + "name": "getIssueTypes", + "description": "Get issue types" + }, + { + "name": "getPriorities", + "description": "Get issue priorities" + }, + { + "name": "getResolutions", + "description": "Get issue resolutions" + }, + { + "name": "getCustomFields", + "description": "Get custom fields" + }, + { + "name": "getGitRepositories", + "description": "Get Git repositories" + }, + { + "name": "getGitRepository", + "description": "Get specific Git repository" + }, + { + "name": "getWatchingListItems", + "description": "Get watching list items" + }, + { + "name": "getWatchingListCount", + "description": "Get watching list count" + }, + { + "name": "getWikisCount", + "description": "Get Wiki pages count" + }, + { + "name": "getPullRequestsCount", + "description": "Get pull requests count" + } + ], + "compatibility": { + "platforms": ["win32", "darwin", "linux"], + "node_version": ">=18.0.0" + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 51e54df..552a198 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "backlog-mcp-server": "build/index.js" }, "devDependencies": { + "@anthropic-ai/dxt": "^0.2.0", "@eslint/js": "^9.24.0", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", @@ -55,6 +56,272 @@ "node": ">=6.0.0" } }, + "node_modules/@anthropic-ai/dxt": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@anthropic-ai/dxt/-/dxt-0.2.0.tgz", + "integrity": "sha512-HWxNE32f1nzHVMqYq0HWdI1+KFHX58l0a7SjJ90CKhz9j/NesOVig1/TM1xXVjZ0ShzDbGi1hQD6iZ5aJir9Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "^6.0.1", + "commander": "^13.1.0", + "fflate": "^0.8.2", + "node-forge": "^1.3.1", + "zod": "^3.24.4" + }, + "bin": { + "dxt": "dist/cli/cli.js" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/checkbox": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-3.0.1.tgz", + "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/confirm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-4.0.1.tgz", + "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/core": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/editor": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-3.0.1.tgz", + "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/expand": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-3.0.1.tgz", + "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/input": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-3.0.1.tgz", + "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/number": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-2.0.1.tgz", + "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/password": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-3.0.1.tgz", + "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/prompts": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-6.0.1.tgz", + "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^3.0.1", + "@inquirer/confirm": "^4.0.1", + "@inquirer/editor": "^3.0.1", + "@inquirer/expand": "^3.0.1", + "@inquirer/input": "^3.0.1", + "@inquirer/number": "^2.0.1", + "@inquirer/password": "^3.0.1", + "@inquirer/rawlist": "^3.0.1", + "@inquirer/search": "^2.0.1", + "@inquirer/select": "^3.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/rawlist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-3.0.1.tgz", + "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/search": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-2.0.1.tgz", + "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/select": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-3.0.1.tgz", + "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.2.1", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@anthropic-ai/dxt/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -1927,6 +2194,16 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "22.14.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", @@ -1960,6 +2237,13 @@ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", @@ -2930,6 +3214,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -4227,6 +4521,13 @@ "node": "^12.20 || >= 14.13" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -6364,6 +6665,16 @@ "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", "dev": true }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -8785,9 +9096,10 @@ } }, "node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", + "version": "3.25.67", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", + "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 3c7ea20..b0ba610 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "zod": "^3.24.3" }, "devDependencies": { + "@anthropic-ai/dxt": "^0.2.0", "@eslint/js": "^9.24.0", "@release-it/conventional-changelog": "^10.0.1", "@types/jest": "^29.5.14", From dfbadf8131f3ad66a9c9cefc6c8cfcc702b31f58 Mon Sep 17 00:00:00 2001 From: pppp606 Date: Mon, 30 Jun 2025 15:10:22 +0900 Subject: [PATCH 2/2] Update README --- README.ja.md | 11 +++-------- README.md | 25 ++++++++++--------------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/README.ja.md b/README.ja.md index 6f41886..8fb480c 100644 --- a/README.ja.md +++ b/README.ja.md @@ -97,21 +97,16 @@ docker pull ghcr.io/nulab/backlog-mcp-server:latest Claude Desktopユーザー向けに、ワンクリックインストール用のDesktop Extensionを作成できます: -1. DXT CLIツールをインストール: - ```bash - npm install -g @anthropic-ai/dxt - ``` - -2. Desktop Extensionパッケージを作成: +1. Desktop Extensionパッケージを作成: ```bash # manifest.jsonを初期化(まだ存在しない場合) dxt init - + # 拡張機能をパッケージ化 dxt pack ``` -3. 生成された `.dxt` ファイルをダブルクリックするか、拡張機能メニューを使用してClaude Desktopにインストールします。 +2. 生成された `.dxt` ファイルをダブルクリックするか、拡張機能メニューを使用してClaude Desktopにインストールします。 Desktop Extensionには、サーバー設定と利用可能なツールを定義する `manifest.json` ファイルが含まれており、エンドユーザーにとってシームレスなインストールを実現します。 diff --git a/README.md b/README.md index c65a2db..46bd51a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ![Build](https://github.com/nulab/backlog-mcp-server/actions/workflows/ci.yml/badge.svg) ![Last Commit](https://img.shields.io/github/last-commit/nulab/backlog-mcp-server.svg) -[📘 日本語でのご利用ガイド](./README.ja.md) +[📘 日本語でのご利用ガイド](./README.ja.md) A Model Context Protocol (MCP) server for interacting with the Backlog API. This server provides tools for managing projects, issues, wiki pages, and more in Backlog through AI agents like Claude Desktop / Cline / Cursor etc. @@ -97,21 +97,16 @@ docker pull ghcr.io/nulab/backlog-mcp-server:latest For Claude Desktop users, you can create a Desktop Extension for one-click installation: -1. Install the DXT CLI tool: - ```bash - npm install -g @anthropic-ai/dxt - ``` - -2. Create a Desktop Extension package: +1. Create a Desktop Extension package: ```bash # Initialize manifest (if not already present) dxt init - + # Package the extension dxt pack ``` -3. Install the generated `.dxt` file in Claude Desktop by double-clicking it or using the Extensions menu. +2. Install the generated `.dxt` file in Claude Desktop by double-clicking it or using the Extensions menu. The Desktop Extension includes a `manifest.json` file that defines the server configuration and available tools, making installation seamless for end users. @@ -262,14 +257,14 @@ Create a new pull request from branch "feature/new-feature" to "main" in the rep ``` - Watching Items ``` -Show me all items I'm watching +Show me all items I'm watching ``` ### i18n / Overriding Descriptions You can override the descriptions of tools by creating a `.backlog-mcp-serverrc.json` file in your **home directory**. -The file should contain a JSON object with the tool names as keys and the new descriptions as values. +The file should contain a JSON object with the tool names as keys and the new descriptions as values. For example: ```json @@ -285,7 +280,7 @@ When the server starts, it determines the final description for each tool based 2. Entries in `.backlog-mcp-serverrc.json` - Supported configuration file formats: .json, .yaml, .yml 3. Built-in fallback values (English) -Sample config: +Sample config: ```json { @@ -322,7 +317,7 @@ Example: docker run -i --rm ghcr.io/nulab/backlog-mcp-server node build/index.js --export-translations ``` -or +or ```bash npx github:nulab/backlog-mcp-server --export-translations @@ -528,6 +523,6 @@ node build/index.js --optimize-response --max-tokens=100000 --prefix="backlog_" This project is licensed under the [MIT License](./LICENSE). -Please note: This tool is provided under the MIT License **without any warranty or official support**. -Use it at your own risk after reviewing the contents and determining its suitability for your needs. +Please note: This tool is provided under the MIT License **without any warranty or official support**. +Use it at your own risk after reviewing the contents and determining its suitability for your needs. If you encounter any issues, please report them via [GitHub Issues](../../issues).