DeepSeek Harness プラグインの作り方
hello-world の Context 関数からデュアルランタイムの MCP Apps プラグインまで、スクリーンショット付き 9 ステップ。契約・Schema・インストールコマンドをすべて提示します。
最終更新: 2026-09-14
DeepSeek Harness の機能は、小さな hello ツールから本格的なインタラクティブ UI まですべてプラグインとして提供されます。そして自分でプラグインを書くハードルは見た目より低いのです。必要なのは Context を受け取る関数、いくつかのエクスポート、そして Schema。このウォークスルーでは、空のフォルダからチャット内で動く MCP Apps プラグインまでの、実際の開発の流れを追います。
9 ステップで全工程をカバーします。プラグインとは何か、最小契約、Host と Client の 2 つのランタイム、load・run・dispose のライフサイクル、実際のリポジトリ構成、ホストエントリーと Config Schema、そして自分の profile にプラグインをインストール・宣言・検証する正確なコマンドです。
9 ステップで DeepSeek Harness プラグインを作る
- 1
プラグインがどこに接続するのかを見る
DeepSeek Harness は Cordis を基盤にしており、プラグインとは Context を受け取る関数です。依存するサービスを宣言し、その Context に新しい機能を登録し、アンインストール時のクリーンアップはフレームワークに任せます。モデルセッションツールも Web インターフェースもこの境界から接続します。スライドにはコードで拡張できる対象——モデル、ツール、MCP、Web Client——が描かれています。

4 つの拡張対象がハーネスのコアに収まります。プラグインは、そのどれにでも能力を追加する手段です。動画の 0:13 で見る 
プラグインとはこの Context を受け取る関数です。宣言し、登録し、クリーンアップはフレームワークに任せます。動画の 0:25 で見る - 2
最小の動くプラグインから始める
チュートリアルの hello 例に必要なのは 3 つだけです。ロード可能なモジュールエントリー(export const name = 'hello')、Context を受け取る apply(ctx) 関数の中で機能を登録すること——ここでは ctx.tools.add で名前をオウム返しする hello ツールを追加——そしてプラグインが設定を取る場合のみ、Schema.object で組み立てた Config をエクスポートすること。Harness はこの Schema を検証し、管理画面に対応するフィールドを表示します。それ以外はすべて任意です。

このファイル全体が動くプラグインです。エントリー、apply 関数、任意の Config Schema。動画の 1:00 で見る - 3
Host か Client か両方か——ライフサイクルは同じ
区別すべきランタイムは 2 つあります。Host は DeepSeek Harness を動かすバックエンドプロセスで、ネットワーク接続とツールが使うキーを管理します。ブラウザーの Harness Web UI は Client で、コンポーネントとインタラクティブな画面を担います。hello プラグインは Host のみ——ツールを登録し、結果の表示はチャットに任せます。UI を持つプラグインは Client エントリーを追加し、独自の inject と apply を宣言します。どちらでも、各エントリーは自分のランタイムで apply を実行し、アンインストール時には Context が登録済みのものをまとめて破棄します。

Host エントリーは必須、Client エントリーは任意。どちらも同じ 3 段階のライフサイクルを走ります。動画の 1:45 で見る 
RUN は apply 関数が働く瞬間です。両ランタイムから見える場所に機能を登録します。動画の 1:20 で見る - 4
公開済みプラグインのフォルダ構成を研究する
コードを書く前に、公開されているプラグインの構成を見てみましょう。sugarforever/dsh-mcp-apps リポジトリは、ソースコード・examples・tests・docs・パッケージ設定をルートに置き、src/ の下を config・connection・protocol・rpc・tools・client に分けています。すべての行を読む必要はありません。src/index.ts、src/config.ts、src/client/ の 3 点を押さえれば、どの DSH プラグインも読み解けます。

公開済みプラグインは契約を index.ts、検証を config.ts、ブラウザー側を client/ に置きます。動画の 2:05 で見る - 5
ホストエントリーを書く:name、inject、Config、apply
src/index.ts を開いて公開契約を宣言します。export const name がプラグインを識別し、export const inject は依存するサービスを列挙します——MCP Apps プラグインは ['tools', 'connection'] を要求しています。export const Config は検証を Harness に委任します。apply(ctx, config) は Context と検証済みの設定を受け取り、RPC 接続やツール登録といった永続的なリソースは ctx.effect で包みます。これによりアンインストール時に Harness がまとめて解放します。この数行が、ホストプラグインとフレームワークの間の必須インターフェースです。

ホストファイルは @deepseek-ai/cordis の import に続き、3 つの契約エクスポート、そして apply で始まります。動画の 2:34 で見る 
公開契約は 4 つのエクスポートです——name、inject、Config、apply。動画の 2:55 で見る - 6
ユーザーが埋められる Config Schema を用意する
src/config.ts でチュートリアルのプラグインは 1 つの Schema union で 2 つのトランスポート分岐を記述します。stdio(command・args・env)と streamable-http(url 必須、headers 任意)、さらに serverName(必須)、toolCallTimeoutMs(デフォルト 60000)、failOnStartupError(デフォルト false)といった共通フィールドです。開発者がインターフェースと Schema を実装し、ユーザーは値を埋めるだけ——リポジトリの examples/streamable-http.cordis.yml がまさにその記入用インスタンスです。

1 つの Schema union が両トランスポートをカバーし、必須・デフォルトの各フィールドが管理画面を形作ります。動画の 3:05 で見る 
examples ファイルをこうして同梱すれば、ユーザーはそのまま書き写すだけで使えます。動画の 3:35 で見る - 7
プラグインを web profile にインストールする
プラグインのリポジトリをクローンし、DSH_HOME を拡張したい Harness のホームに向けて、パッケージを web profile に追加します。デモでは npx @deepseek-ai/dsh plugin --profile web add <パス> を実行し、ローカルフォルダを profile にリンクして added 1 package と確認表示させます。別の profile にインストールした場合は、同じ add コマンドをその profile に対して実行してください。
$git clone https://github.com/sugarforever/dsh-mcp-apps.git$cd dsh-mcp-apps$export DSH_HOME=/tmp/dsh-video-home$npx @deepseek-ai/dsh plugin --profile web add /path/to/dsh-mcp-apps
参考リポジトリから始めます。クローンしたら依存関係をインストールしましょう。動画の 5:37 で見る 
add コマンドがプラグインを web profile にリンクします。他に設定するものはまだありません。動画の 5:40 で見る - 8
cordis.patch.yaml にインスタンスを宣言する
パッケージを追加しただけでは不十分です。インスタンス化を指示する patch エントリーが必要です。profile の cordis.patch.yaml(ここでは $DSH_HOME/profiles/web/cordis.patch.yaml)に、一意な id、プラグインのパッケージ名('@sugarforever/dsh-mcp-apps')、そして config(serverName、transport: streamable-http、MCP サーバーの url、failOnStartupError)を挿入します。Harness は起動時にこの patch を読み込み、プラグインを自動でロードします。

この patch エントリーこそが、起動時に Harness にプラグインをインスタンス化させる仕組みです。動画の 5:49 で見る - 9
Harness Web を起動し、ツールが動くのを見る
同じ DSH_HOME で Harness Web を起動し、127.0.0.1:3080 を開きます。エージェントに 2048 を頼むと、モデルはプラグインが公開したリモートツールを呼び出し、Host が結果をプラグインがプリロードしたサンドボックス UI に送り、遊べる 2048 ボードがチャット内に表示されます。インストール・設定・検証、これで全工程完了です。

モデルはプラグインが公開したリモートツールを見つけ、自ら呼び出しを決めます。手動の配線は不要です。動画の 6:10 で見る 
プラグインの Client エントリーがツールの結果をチャット内のインタラクティブ UI に変えました。動画の 6:15 で見る
DeepSeek Harness プラグイン作成の FAQ
初めてプラグインを書く開発者の本音の疑問。
一文でいうと、DeepSeek Harness プラグインとは?
Cordis の Context を受け取る関数です。依存するサービスを宣言し、その Context に新しい機能——モデルツール、サービス、UI——を登録し、アンインストール時には登録したものすべてをフレームワークが解放してくれます。
DSH プラグインに最低限必要なものは?
3 つです。ロード可能なモジュールエントリー、Context を受け取る apply(ctx) 関数、そして apply 内で登録する少なくとも 1 つの機能——チュートリアルの hello プラグインは ctx.tools.add でツールを 1 つ追加するだけです。エクスポートした Config Schema は任意で、プラグインが設定を取る場合にのみ必要です。
DeepSeek Harness プラグインを作るのに TypeScript は必須?
チュートリアルの参照プラグインは TypeScript 製です。export const name = 'mcp-apps'、inject の配列、Schema.object(...) はいずれも TypeScript のイディオムで、そのリポジトリをクローンするのが最速の始め方です。契約自体はモジュールのエクスポートにすぎないため概念は転用できますが、このページの例はすべて TypeScript です。
Harness は起動時にどうやってプラグインをロードする?
3 ステップです。DSH_HOME を Harness のホームに向ける。npx @deepseek-ai/dsh plugin --profile web add <パス> でパッケージを profile に追加する。その profile の cordis.patch.yaml に insert エントリーを書き、プラグイン名と設定を記入する。Harness は起動時に patch を読み、プラグインを自動でロードします。Harness 側のコード変更は不要です。
DSH プラグインでリモート MCP サーバーをラップできる?
はい、まさにそのケーススタディです。ホストエントリーが stdio または Streamable HTTP の MCP サーバーに接続し、ctx.effect の中でリモートツールを Harness のモデルツールとして登録します。Config Schema がトランスポートの分岐を公開するので、ユーザーは cordis.patch.yaml に serverName・transport・url を記入するだけです。
プラグインを取り除いたとき、接続の後片付けは誰がする?
フレームワークです——Context を通して登録している限り。永続的な接続やツール登録を ctx.effect で包めば、DISPOSE 段階がアンインストール時にまとめて解放します。チュートリアルがモジュールレベルのグローバル変数に接続を置かないのはこのためです。
関連ガイド
コンセプトからディレクトリまで、プラグインエコシステムの残りをまとめて確認。
DeepSeek Harness プラグイン開発
コンセプトリファレンス。機能レイヤー、契約、プラグインの拡張点。
ガイドを読むDeepSeek Harness プラグインとは?
メンタルモデル。プラグインで何が拡張でき、skill と何が違うのか。
ガイドを読むDeepSeek Harness プラグインのインストール
コミュニティプラグインを見つけて npm や GitHub から追加する手順。
ガイドを読むDeepSeek Harness スキルのインストール
もう 1 つの拡張形態。スキルは数分でインストールして検証できます。
ガイドを読むDeepSeek Harness プラグインディレクトリ
自分で書く前に、既存のプラグインが何をできるのかを見てみましょう。
ガイドを読むノーコードの道:会話でプラグインを作る
アイデアひとこと、共同作成した仕様、Creator モード——チャットから出ずに使えるパネルまで。
ガイドを読む出典とクレジット
スクリーンショットはこの公開画面収録から取得したものです。各画像は元動画の該当する瞬間へ直接リンクし、上のステップ解説は私たち自身の文章です。
