mcpField
D
Dubber

Dubber

ローカル
github.comコミュニケーション06 日前に更新

Dubber について

Dubber は、Dubber の通話録音や通信データを扱うチーム向けの MCP サーバーです。録音、コンプライアンスメタデータ、アカウント・ユーザー管理、通知、Dub.Point 連携のツールを提供します。

主な機能

  1. 01録音のアップロード・取得・一覧表示
  2. 02録音メタデータとタグの管理
  3. 03アカウント・グループ・ユーザー管理
  4. 04REST-hook 通知の設定
  5. 05Dub.Point レコードへのアクセス

活用シーン

  1. 01期間を指定した録音の確認
  2. 02録音へのコンプライアンスタグ追加
  3. 03Dubber のユーザーとグループの管理
  4. 04Dub.Point の通信データをワークフローに接続

MCP 対応

録音、コンプライアンスデータ、アカウント・ユーザー管理、通知、Dub.Point を扱う 37 個の Dubber ツールを MCP クライアントに公開します。stdio と HTTP のトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"wyre-ai-dubber": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DUBBER_CLIENT_ID",
"-e",
"DUBBER_CLIENT_SECRET",
"-e",
"DUBBER_AUTH_ID",
"-e",
"DUBBER_AUTH_TOKEN",
"-e",
"DUBBER_REGION",
"-e",
"DUBBER_BASE_URL",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-ai/dubber-mcp:v1.1.0"
],
"env": {
"DUBBER_CLIENT_ID": "<DUBBER_CLIENT_ID>",
"DUBBER_CLIENT_SECRET": "<DUBBER_CLIENT_SECRET>",
"DUBBER_AUTH_ID": "<DUBBER_AUTH_ID>",
"DUBBER_AUTH_TOKEN": "<DUBBER_AUTH_TOKEN>",
"DUBBER_REGION": "<DUBBER_REGION>",
"DUBBER_BASE_URL": "<DUBBER_BASE_URL>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンドdocker run -i --rm -e DUBBER_CLIENT_ID -e DUBBER_CLIENT_SECRET -e DUBBER_AUTH_ID -e DUBBER_AUTH_TOKEN -e DUBBER_REGION -e DUBBER_BASE_URL -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/dubber-mcp:v1.1.0
設定が必要な環境変数
DUBBER_CLIENT_IDMashery application key (developer.dubber.net)
DUBBER_CLIENT_SECRETシークレットMashery application secret
DUBBER_AUTH_IDシークレットDubber Auth ID (Dubber portal → API tab)
DUBBER_AUTH_TOKENシークレットDubber Auth Token (Dubber portal → API tab)
DUBBER_REGIONAPI region segment, e.g. 'sandbox' for testing.
DUBBER_BASE_URLFull API base URL override (env mode only; overrides DUBBER_REGION)
MCP_TRANSPORTTransport mode. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.
AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.
LOG_LEVELLog verbosity: debug, info, warn, error

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/wyre-ai/dubber-mcp:v1.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

dubber-mcp

Dubber 用 MCP サーバーです。通話録音のアップロード/取得、コンプライアンスメタデータとタグ、グループ/アカウント/ユーザー管理、REST フック(webhook)通知、Dub.Point テレコムシステム(例:BroadWorks)との連携に対応しています。

分割された v2 SDK(@modelcontextprotocol/server / /node / /client ^2.0.0-beta.5)を使用し、MCP 2026-07-28 仕様に基づいて構築されています。2 世代のクライアントへの同時対応として、createMcpHandler({ legacy: 'stateless' }) の背後に共有の McpServerFactory を配置し、2025 年世代の initialize ハンドシェイククライアント(現在の WYRE ゲートウェイ)と最新の 2026-07-28 エンベロープクライアントの両方に、同一で決定的な 37 個のツールを提供します。GHCR コンテナのみで提供されます(MCPB バンドルはありません)。Dubber クライアントは @wyre-ai/node-dubber です。

ツール(37 個、フラット)

  • コア:dubber_test_connection。
  • グループ:dubber_groups_get、dubber_groups_create_child、 dubber_groups_list_unidentified_recordings、dubber_groups_create_unidentified_recording。
  • アカウント:dubber_accounts_create、dubber_accounts_get、dubber_accounts_update。
  • 録音:dubber_recordings_list、dubber_recordings_create、dubber_recordings_get、 dubber_recordings_get_waveform、dubber_recordings_update_metadata、 dubber_recordings_add_tags、dubber_recordings_initiate_multipart_upload、 dubber_recordings_get_upload_target、dubber_recordings_complete_upload。 使用制限あり:dubber_recordings_delete(⚠ 破壊的)、dubber_recordings_delete_tags (⚠ 重大な影響あり)。 dubber_recordings_list は、新しい順に録音を一覧表示します。limit(1~500、デフォルトは 100)、offset、 cursor、query、dubPointId/teamId、および start_time の期間を指定できます。詳しくは 録音の一覧表示 をご覧ください。
  • ユーザー:dubber_users_list、dubber_users_create、dubber_users_get、 dubber_users_update。使用制限あり:dubber_users_delete(⚠ 破壊的)。
  • プロフィール:dubber_profile_get。
  • 通知(REST フック):dubber_notifications_list、dubber_notifications_create、 dubber_notifications_get、dubber_notifications_update、dubber_notifications_activate、 dubber_notifications_list_unclaimed。使用制限あり:dubber_notifications_delete(⚠ 重大な影響あり)。
  • Dub.Point:dubber_dub_points_list、dubber_dub_points_create、dubber_dub_points_get、 dubber_dub_points_find。
  • OAuth:使用制限ありの dubber_oauth_revoke_token(⚠ 重大な影響あり)。

認証情報

4つの値がすべて必須です。いずれも人間のログイン情報ではありません(下記の「ベンダー固有の注意事項」を参照)。

環境変数(env モード)ゲートウェイヘッダー(AUTH_MODE=gateway)取得元
DUBBER_CLIENT_IDX-Dubber-Client-IdMashery アプリケーションキー(developer.dubber.net)
DUBBER_CLIENT_SECRETX-Dubber-Client-SecretMashery アプリケーションシークレット
DUBBER_AUTH_IDX-Dubber-Auth-IdDubber ポータル → API タブ
DUBBER_AUTH_TOKENX-Dubber-Auth-TokenDubber ポータル → API タブ
DUBBER_REGION(任意、デフォルトは sandbox)X-Dubber-Regionapi.dubber.net/<region>/v1 を選択します
DUBBER_BASE_URL(任意)なし(意図的)env モードのみで使用する完全な上書き値

ゲートウェイモードでは、必須の4つのヘッダーのいずれかが欠けているリクエストには、MCP ハンドラーが実行される前に 401(JSON-RPC エラー -32001)が返されます。環境変数の認証情報へのフォールバックは行われません。また、ヘッダーで指定されたベース URL も全面的に拒否されます(env モードのみで使用可能)。そのため、呼び出し元がクライアントシークレットを別のホストに送信させることはできません。空のヘッダー値や複数回指定されたヘッダー値は、未指定として扱われます。

/health と /healthz は引き続き認証不要で、認証情報も読み取りません。stdio トランスポートでは CONDUIT_S2S_SECRET は使用されません。

変数必須説明
CONDUIT_S2S_SECRETHTTP では必須サービス間シークレットです。空の場合、または既知のプレースホルダー(changeme、secret、replace-me、replace-with-a-real-secret、その他のサンプル値)の場合、HTTP サーバーはエラーをログに記録して、ゼロ以外の終了コードで終了します。openssl rand -hex 32 で生成してください。設定されていない場合、Compose は起動しません。この値がログに記録されることはありません。
MCP_ALLOW_INSECURE_DEVいいえCONDUIT_S2S_SECRET なしで HTTP を起動する場合に限り、ローカル開発用として厳密に 1 に設定します。プロセスは警告をログに記録し、X-Gateway-S2S の検証を行わず、127.0.0.1 のみでバインドします。ループバック以外の MCP_HTTP_HOST(0.0.0.0 を含む)は無視され、上書きがログに記録されます。既知のプレースホルダーシークレットを指定した場合は、引き続き起動が拒否されます。
MCP_HTTP_HOSTいいえ有効な CONDUIT_S2S_SECRET が設定されている場合のバインドアドレスです。未設定の場合は、従来のコンテナのバインド先である 0.0.0.0 が維持されます。イメージと Compose は、コンテナ内で 0.0.0.0 を設定します。
MCP_HTTP_PORTいいえHTTP ポートです。デフォルトは 8080 です。
AUTH_MODEいいえgateway(Docker イメージおよび Compose)または env です。ゲートウェイモードでは、各 /mcp リクエストに4つの X-Dubber-* 認証情報ヘッダーが必要で、DUBBER_* へのフォールバックは行いません。env は、S2S 認証に成功した後にのみこれらの環境変数を使用します。未設定の場合は env になります(イメージ外の stdio とシングルテナント HTTP)。
HTTP 認証

MCP_TRANSPORT=http かつ CONDUIT_S2S_SECRET が設定されている場合、/health と /healthz を除くすべてのリクエストに X-Gateway-S2S が必要です。検証処理は src/s2s-verify.ts の verifyS2sHeader です。ヘッダー値は t=<unix seconds>,v1=<hex> の形式で、<hex> は CONDUIT_S2S_SECRET をキーとして リテラル文字列 t=<unix seconds> の HMAC-SHA256 を計算した値です(小文字の16進数64文字)。 タイムスタンプはサーバー時刻から300秒以内でなければなりません。ヘッダーがない場合や 無効な場合は、ベンダーの認証情報を読み取る前に HTTP 401 が返されます。

TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')
curl -sS http://127.0.0.1:8080/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H "X-Gateway-S2S: t=${TS},v1=${SIG}" \
  -H "X-Dubber-Client-Id: $DUBBER_CLIENT_ID" \
  -H "X-Dubber-Client-Secret: $DUBBER_CLIENT_SECRET" \
  -H "X-Dubber-Auth-Id: $DUBBER_AUTH_ID" \
  -H "X-Dubber-Auth-Token: $DUBBER_AUTH_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

AUTH_MODE=gateway の場合、/mcp には X-Dubber-Client-Id、X-Dubber-Client-Secret、 X-Dubber-Auth-Id、X-Dubber-Auth-Token も必要です(X-Dubber-Region は任意です)。これらのヘッダーのみが、そのリクエストの認証情報として使用されます。AUTH_MODE=env の場合も署名付きの X-Gateway-S2S ヘッダーが必要で、その後、環境変数の DUBBER_* が使用されます。

実行

export NODE_AUTH_TOKEN=$(gh auth token)   # GitHub Packages auth for @wyre-ai/*
npm install
npm run build
node dist/index.js                        # stdio (default)
# HTTP refuses to start until CONDUIT_S2S_SECRET is set
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" MCP_TRANSPORT=http node dist/index.js
# Local HTTP only, without a service-to-service secret (always binds 127.0.0.1)
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 node dist/index.js
npm run smoke                             # proves both protocol eras serve the same tools

Docker(fleet law に従い linux/amd64)。イメージはコンテナ内で 0.0.0.0(MCP_HTTP_HOST)をリッスンし、デフォルトは AUTH_MODE=gateway です。ポートはループバックに公開し、実際の S2S シークレットを渡してください。gateway モードでは、Dubber の認証情報はリクエストごとにヘッダーとして渡され、環境変数からは読み込まれません。

docker build --platform linux/amd64 --build-arg GITHUB_TOKEN=$(gh auth token) -t dubber-mcp .
docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -p 127.0.0.1:8080:8080 \
  dubber-mcp

CONDUIT_S2S_SECRET が設定されていない場合、Compose は起動を拒否します。gateway サービスは AUTH_MODE=gateway を設定し、DUBBER_CLIENT_ID、DUBBER_CLIENT_SECRET、DUBBER_AUTH_ID、DUBBER_AUTH_TOKEN を注入せず、127.0.0.1:8080:8080 を公開します。

CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up

シングルテナント HTTP(AUTH_MODE=env)でも S2S シークレットが必要です。その後、DUBBER_* 変数を使用します。これは上記の gateway Compose サービスとは別の構成です。

docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -e AUTH_MODE=env \
  -e DUBBER_CLIENT_ID=... -e DUBBER_CLIENT_SECRET=... \
  -e DUBBER_AUTH_ID=... -e DUBBER_AUTH_TOKEN=... \
  -p 127.0.0.1:8080:8080 \
  dubber-mcp

エリシテーションと破壊的操作への同意

確認が必要なツールは、実行前に必ず確認を求めます。エリシテーションは SDK v2 の MRTR 境界を利用します。ハンドラーは input_required の結果を返し、2026-07-28 クライアントがそれを満たして再試行します。また、SDK のレガシー shim は、2025 年代のステートフル接続(stdio)に対してサーバー側でこれを満たします。読み取りと確認はすべて、Dubber への単一の変更呼び出しより前に行われます。

プロンプトを表示できない呼び出し元(WYRE Conduit gateway が接続する方法である、ステートレスなレガシー HTTP リクエストを含む)は、フェイルクローズします。確認が必要なツールを実行するには、呼び出しに "confirm_destructive_action": true が含まれていなければなりません。この引数はプロンプトを表示できない場合にのみ参照され、対話型ユーザーに表示される確認を省略することはありません。

録音の一覧表示と時間範囲

Dubber の録音エンドポイントが受け付けるのは count(最大 100)、page(最大 5 ページ)、before_id カーソル、query のみです。limit/offset や日付フィルターはなく、不明なパラメーターは黙って無視されます。そのため、dubber_recordings_list は Dubber 自体をページングし(count=100、before_id を連鎖)、残りの処理をサーバー側で行います。

  • limit(1~500、デフォルト 100):返される一致録音の最大数。offset(≥0):スキップする一致録音(新しい順)の数。
  • startTimeFrom(開始時刻を含む)/startTimeTo(日時の場合は終了時刻を含まない。日付のみの値の場合はその日全体を含む):ISO 8601 形式。オフセットがない場合は UTC です。取得後、各録音の start_time に対してフィルターを適用します。start_time を解析できない録音は除外され、excludedUnparseableStartTime にカウントされます。メルボルンの夏時間(AEDT、+11:00)における週次取得(月~金): startTimeFrom=2026-10-19T00:00:00+11:00、startTimeTo=2026-10-24T00:00:00+11:00、limit=500。
  • dubPointId/teamId(省略可能。前後の空白を除去し、空でない値を指定。各ページのリクエストで Dubber の dub_point/team として送信され、filters にも含まれます):1 回の呼び出しにつき、1 つの dub point または 1 つのチームを指定します。Dubber は両方の組み合わせを許可しないため、両方を渡すとエラーになります。Dubber の録音にはユーザーを直接指定するフィルターがありません。特定の技術者の週次録音を取得するには、dubber_dub_points_list でそのユーザーの dub point ID を調べます(各 dub point の user は /users/<USER_ID> で終わる URL です)。その後、dub point ごとに 1 回呼び出します。cursor は同じ dubPointId/teamId とともに再利用する必要があります。
  • 各呼び出しでの Dubber リクエストは最大 25 件です(録音を 2,500 件スキャン)。この上限、または limit によってスキャンが早期終了した場合、hasMore は true になり、nextCursor が設定されます。ギャップや重複なく続きを取得するには、cursor=<nextCursor>、offset=<remainingOffset>(スキップ中にスキャン上限に達した場合を除き 0)、および同じフィルターを指定して再度呼び出します。 scanCapReached は、上限に達したことが終了理由かどうかを示します。startTimeFrom が設定されている場合、録音の開始時刻がその値より前のページを丸ごと 1 ページ取得すると、スキャンは停止します。
  • 結果:{ recordings, returned, hasMore, nextCursor, remainingOffset, scanned, requests, scanCapReached, filters, note }。

ハンドラーは、@wyre-ai/node-dubber 1.0.0(型付きパラメーターは {limit, offset})を通じて、単一のキャストで Dubber のパラメーターを送信します。count/before_id/query に型を定義した SDK リリースを採用したら、キャストを削除してください。

ここに反映されているベンダー固有の仕様

  • 人間用パスワードを使わないパスワードグラント認証。 OAuth トークンリクエストのusername/passwordには、個人のログイン情報ではなく、ポータルの API タブにある Dubber Auth ID/Dubber Auth Token のペアを指定します。docs/DESIGN.md §3 を参照してください。
  • リージョンごとにホストが異なり、本番環境に共通のデフォルトはありません。 sandboxは無料でセルフサービス利用できます。本番環境では、Dubber に確認したリージョンのhttps://api.dubber.net/<region>/v1を使用します。誤ったホストを指定すると、気づかないまま別のテナントに接続します。
  • ダウンロード可能な API 仕様書はありません。 すべてのエンドポイントと認証フローは、稼働中の/io-docsコンソールと公式 Getting Started Guide を使って確認しました。レスポンスボディの完全な形式については、node-dubberのsrc/types/index.tsに記載された、最善努力による最低限の定義であり、網羅性を保証するものではありません。docs/DESIGN.md §4 とCONTRIBUTING.mdを参照してください。
  • リフレッシュトークンフローは実装されていません。 Dubber のレスポンスにはrefresh_tokenが含まれますが、その仕様は検証可能な形でどこにも記載されていません。このクライアントは、有効期限が切れたときに同じパスワードグラントでトークンを再取得します。同じ制約下で node-kpn が採用している既存の方式に準じています。

ライセンス

Apache-2.0 © WYRE Technology

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。