Skip to content

Add Desktop Extensions (DXT) support with manifest and build workflow #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,23 @@ docker pull ghcr.io/nulab/backlog-mcp-server:latest
}
```

### オプション3: Desktop Extension (DXT)

Claude Desktopユーザー向けに、ワンクリックインストール用のDesktop Extensionを作成できます:

1. Desktop Extensionパッケージを作成:
```bash
# manifest.jsonを初期化(まだ存在しない場合)
dxt init

# 拡張機能をパッケージ化
dxt pack
```

2. 生成された `.dxt` ファイルをダブルクリックするか、拡張機能メニューを使用してClaude Desktopにインストールします。

Desktop Extensionには、サーバー設定と利用可能なツールを定義する `manifest.json` ファイルが含まれており、エンドユーザーにとってシームレスなインストールを実現します。

## ツール設定

`--enable-toolsets` コマンドラインフラグまたは `ENABLE_TOOLSETS` 環境変数を使用して、特定の **ツールセット** を選択的に有効または無効にすることができます。これにより、AIエージェントが利用できるツールをより細かく制御し、コンテキストサイズを削減するのに役立ちます。
Expand Down Expand Up @@ -424,6 +441,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
Expand Down
48 changes: 41 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -93,6 +93,23 @@ 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. Create a Desktop Extension package:
```bash
# Initialize manifest (if not already present)
dxt init

# Package the extension
dxt pack
```

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.

## 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.
Expand Down Expand Up @@ -240,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
Expand All @@ -263,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
{
Expand Down Expand Up @@ -300,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
Expand Down Expand Up @@ -480,6 +497,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
Expand All @@ -489,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).
204 changes: 204 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
Loading