
こんにちは、CINC開発本部です!
せっかくmcp-goで作成したMCPサーバを利用してもらうに当たって、今まではバイナリファイルを配置して、設定ファイルにバイナリファイルへのパスを直書きしてもらう必要があり、これが非エンジニアの方には負荷が高く設定が面倒で手間になるという状態でした。
つい先日AnthoropicからDesktopExtensionsが発表されて、ClaudeDesktopに対してはドラッグ&ドロップでMCPのインストールができる様になったとのことで試してみたところ、設定次第で環境変数等の設定もClaudeDesktopのGUI上で行えるようになり、導入のハードルがぐっと下がっていました。
今回は、その際に確認したdxtファイルの作成方法とインストール手順についてまとめました。
Desktop Extensions
ローカルにMCPサーバをインストールするために必要な一式をまとめた.dxtファイルを作成し、それをClaudeDesktopにドロップする事でインストールが可能になります。
また、manifest.jsonの設定次第で、envやargumentsに渡す内容をClaudeDesktopのGUI上で設定できる様になるため、設定ファイルを直接編集する必要がなくなります。
.dxtファイルの内部にはMCPサーバーのバイナリと、サーバに関する設定を記述したmanifest.jsonが入っています。
DesktopExtensionsの詳細な仕様に関しては下記をご参照いただければと思います。
- Claude Desktop Extensions: One-click MCP server installation for Claude Desktop \ Anthropic
- GitHub - anthropics/dxt: Desktop Extensions: One-click local MCP server installation in desktop apps
dxtファイルを作成する
mcp-goで作成した実行形式ファイルを利用するdxtファイルを作成していきます。
今回はwindows用のバイナリと、mac用のバイナリを両方含めてどちらでも使えるインストーラーを作成します。
また、PIYOという環境変数を必須で受け取る様に設定することにします。
(実際にはAPIKey等を受け取る形になるケースが多いと思います。)
インストーラー作成のためのディレクトリ(今回はtestmcpというディレクトリを用意しました)を用意してその下にファイルを配置します。
実行形式ファイルの名前はtestmcp.exe(windows用)とtestmcp(mac用)としています。
testmcp
├── manifest.json
└── server/
├── testmcp.exe
└── testmcp
manifest.jsonの作成
manifest.jsonを書いていきます。
次のような内容になります。
{ "dxt_version": "0.1", "name": "mcptest", "version": "1.0.0", "description": "DXTテスト", "author": { "name": "CINC開発部" }, "server": { "type": "binary", "entry_point": "", "mcp_config": { "command": "${__dirname}/server/mcptest.exe", "env": {"PIYO":"${user_config.piyo}"}, "platform_overrides":{ "darwin": { "command": "${__dirname}/server/mcptest" } } } }, "tools_generated": true, "prompts_generated": true, "user_config":{ "piyo":{ "type": "string", "title": "piyo msg", "description": "piyoツールから参照します。", "sensitive": true, "required": true } } }
記述内容について解説していきます。
... "dxt_version": "0.1", "name": "mcptest", "version": "1.0.0", "description": "DXTテスト", "author": { "name": "CINC開発部" }, ...
こちらはメタ情報になります。
任意に設定して下さい。
versionは1以上を設定する必要があるようです。
次にMCPサーバに関する設定です。
... "server": { "type": "binary", "entry_point": "", "mcp_config": { "command": "${__dirname}/server/mcptest.exe", "env": {"PIYO":"${user_config.piyo}"}, "platform_overrides":{ "darwin": { "command": "${__dirname}/server/mcptest" } } } }, ...
... "type": "binary", ...
mcp-goで作成したバイナリを利用してもらうので
typeはbinaryとしています。
...
"entry_point": "",
...
entry_pointは空にしています。
これはMCPサーバをnode.jsで実行する際に必要となるパラメータで、MCPサーバがバイナリの場合は不要なのですが、現状manifest.jsonの仕様として必須なので空文字で残している状態です。
次にmcp_configの中身についてです。
... "command": "${__dirname}/server/mcptest.exe", ...
こちらは、MCPサーバを起動する際のコマンドになります。
${__dirname}は拡張機能を解凍したディレクトリのフルパスに置き換えられます。
実行形式のバイナリへのパスを設定すればいいので、 ${__dirname}/server/mcptest.exe としています。
windows用の実行形式ファイルを指定していますが、今回はwindows用とmac用のバイナリを別々に用意していますので、mac用の実行形式ファイルへのパスの設定も必要になります。そちらは後述します。
... "env": {"PIYO":"${user_config.piyo}"}, ...
こちらはenvに設定する値となります。
MCPサーバはこちらの値を環境変数に設定して実行されるので、MCPサーバ側は環境変数から値を取り出すことが可能です。${user_config.piyo}は後述になりますが、user_configに設定したpiyoの値で置き換えられます。
... "platform_overrides":{ "darwin": { "command": "${__dirname}/server/mcptest" } } ...
こちらがwindowsとmacの両対応をするに当たって必要な記述になっています。
実行環境のプラットフォームによって、上書きする内容を記述できます。今回はdarwin環境では、commandの値を ${__dirname}/server/mcptest にする。という対応を行っており、これによってwindowsとmacで別々のバイナリを実行させることが可能です。
... "tools_generated": true, "prompts_generated": true, ...
こちらは、manifestファイル内で定義している以外のツール及びプロンプトを生成するかどうかという値になります。デフォルトはどちらもfalseですが、MCPサーバ側でlistで返す定義を読み込んで利用する場合にはtrueにしておく必要があります。
機能を制限したい場合にはfalseにしておき、マニフェスト内に使用可能にしたいツールやプロンプトのみを設定しておくとよいかと思います。
... "user_config":{ "piyo":{ "type": "string", "title": "piyo msg", "description": "piyoツールから参照します。", "sensitive": true, "required": true } } ...
ユーザが設定可能な項目についての設定となります。
こちらの設定をする事で、GUI上からユーザの入力した値を設定値として受け取って利用する事が可能です。
今回は、"piyo"という設定値について、
- "type": "string" -> 文字列で設定
- "sensitive": true -> 入力をマスクして安全に保存する(デフォルトはfalse)
- "required": true -> 入力必須とする(デフォルトはfalse)
としています。ここは"piyo"以外にも複数の値を設定することが可能です。
.dxtファイルの作成
manifestファイルを作成したら、dxtを作成します。testmcpディレクトリ下で次のコマンドを実行すればOKです。
$ npx @anthropic-ai/dxt pack
npxを利用しているので、事前にnode.jsのインストールが必要です。
実行すると、同ディレクトリ内に testmcp.dxt というファイルが出来上がると思います。
出力ファイル名を変更したい場合には
Usage: dxt pack [options] [directory] [output]
となっていますので
$ npx @anthropic-ai/dxt pack . piyo.dxt
の様にディレクトリと出力ファイル名をして実行して下さい。
ClaudeDesktopへのインストール
出来上がったtestmcp.dxtをClaudeDesktopにインストールします。
"設定"から"エクステンション"を選択し、dxtファイルをドラッグします。

すると、対象の拡張機能のインストール画面に切り替わります。

"インストール"を選択します。

拡張機能を有効するために、必須項目として設定している項目について入力が求められます。
piyo msgを入力します。"sensitive": trueとしているので、入力はマスクされています。入力を完了して、保存すると

機能の有効化ができる様になります。機能を有効化したところ

macではこの様なエラーが表示されました。
これは、インストールしたバイナリの実行権限が無いからなので、実行権限を付与する必要があります。

</>ボタンをクリックする事で、拡張機能をインストールしたフォルダを開くことが可能です。

対象の実行形式ファイルに対して実行権限を付与して下さい。実行権限を付与したらClaudeDesktopを再起動するか、無効化してから有効化して、再度拡張機能を読み込んで下さい。
これでインストールしたMCPサーバが利用できるようになります。
manifest.jsonのその他の項目についてはこちらでご確認下さい。
参考: dxt/MANIFEST.md at main · anthropics/dxt · GitHub
2025/07/07 現在
windowsの場合に spawn EPERM というエラーが出てしまうケースが有るようです。その場合には、改めて一度管理者として実行する事で実行できるようになるようです。(すいません、こちらは再現性がなく確認しきれていません)
ENVの取得
manifest.jsonの中でPIYOという環境変数を設定していましたので、下記のように、環境変数PIYOを読み込んで出力するようにしたpiyoツールを用意しています。
func PiyoToolHandlerFunc( ctx context.Context, request mcp.CallToolRequest, ) (*mcp.CallToolResult, error) { msg := fmt.Sprintf("piyoに設定されたのは %s です。", os.Getenv("PIYO")) return &mcp.CallToolResult{ Content: []mcp.Content{ mcp.TextContent{ Type: "text", Text: msg, }, }, }, nil }
実行したところ

無事環境変数に設定していた値が取得できている事が確認できました。
まとめ
DesktopExtensionsを利用することで、設定ファイルを直接いじることなくMCPサーバの利用ができる様になるので、展開がしやすくなりました。
権限周りの問題があるのでそこだけ少し手間ですが、設定ファイルにパスを記述したりするのに比べると大分楽になりました。
環境変数の設定もGUI上から設定したり書き換えたりがしやすくなったので、そちらも助かります。
ClaudeDesktopを利用している人向けにMCPサーバを配布するのであればDXTにしておくのが楽そうですね。