OneSayドキュメント

ドキュメント

MCPガイド

プレビュー版:機能とAPIは変更される場合があります。

PDFはブラウザーの印刷ダイアログで作成します。ホスト型のエクスポートサービスではありません。

OneSay MCPサーバーを使うと、AIクライアントはModel Context Protocolを通じて、OneSayのプロジェクト、デバイス、ルーム、タスク、ログ、使用量を読み取り、範囲を限った少数の変更を依頼できます。サーバーは公開Control APIの上にある薄いレイヤーです。各ツールは公開APIのオペレーションまたはアクションを呼び出し、アカウントに何が許可されるかはControl APIが判断します。サーバーはStagingで利用できます。提供状況を参照してください。

MCPが音声を運ぶことはありません。音声はSDKを通じて扱います。OneSay Realtime WebSocket経由のタスク音声か、リアルタイム音声(RTC)です。

接続#

  • エンドポイント:https://<mcp host>/mcp。環境ごとに1つです。Stagingではhttps://mcp.staging.onesay.com/mcpです。
  • トランスポート:ステートレスなStreamable HTTP。サーバーはリクエスト間でセッションを保持しません。
  • プロトコル:MCP2026-07-28のみ。すべてのリクエストはMcp-Protocol-Version: 2026-07-28を送ります。それ以外のバージョンは、サポートするバージョンを示したうえでmcp_protocol_version_unsupportedで拒否します。
  • リクエストヘッダー:Mcp-Methodは本文のメソッドと一致する必要があり、tools/call、prompts/get、resources/readではMcp-Nameがツール名、プロンプト名、リソースURIと一致する必要があります。一致しない場合は、トークンを読む前にHTTP 400とJSON-RPCエラー-32020で応答します。

サインイン#

サーバーはOAuth 2.1の保護リソースです。保護リソースメタデータは/.well-known/oauth-protected-resource(および/.well-known/oauth-protected-resource/mcp)で提供され、その環境の認可サーバーを示します。

  • トークンなしで公開の検出ができます。R0ツール、クイックスタートのリソース、プロンプト、ツール・リソース・プロンプトの一覧です。
  • アカウントのデータにはトークンが必要です。R1またはR2のツール、あるいはクイックスタート以外のリソースには、このMCPリソースを対象とするBearerアクセストークンが必要です。トークンがない場合、サーバーはメタデータを指すWWW-Authenticateチャレンジ付きのHTTP 401で応答します。本文はリクエストIDを含むJSON-RPCエラーで、dataにはoauth_resource_invalidのエラーエンベロープが入ります。
  • 自分のトークンがControl APIに届くことはありません。Control APIを呼び出すたびに、サーバーはそのトークンを交換し(OAuth 2.0トークン交換、RFC 8693)、ユーザー本人を主体、MCPサービスをアクターとする短期トークンを取得します。元のトークンの期限が切れた後は交換を行いません。トークンを記録したり返したりすることもありません。

ツール#

各ツールにはリスク区分があります。クライアントに対して、読み取り専用のツールには読み取り専用のマークが、rooms.closeとtasks.cancelには破壊的な操作のマークが付いています。

リスクツール必要なもの
R0onesay.capabilities.list、onesay.capabilities.get、onesay.quickstarts.getなし:公開メタデータ
R1onesay.projects.list、onesay.projects.get、onesay.applications.list、onesay.devices.list、onesay.devices.get、onesay.devices.diagnose、onesay.rooms.get、onesay.tasks.get、onesay.logs.search、onesay.logs.timeline、onesay.usage.summaryトークンと、対応するAPIオペレーションが求めるグラント
R2onesay.rooms.create、onesay.rooms.close、onesay.tasks.cancelトークン、グラント、人間のユーザーの同意

R2のツールは、人間のユーザーがOneSayで同意した後にのみアクションを実行します。同意がない場合、呼び出しはmcp_confirmation_requiredを返し、何も変更しません。Stagingでは、R2のツールは現在無効になっており、mcp_tool_not_exposedで応答して何も変更しません。

リソース#

URIテンプレート読み取る内容
onesay://projects/{project_id}プロジェクト。onesay.projects.getと同じ
onesay://devices/{device_id}デバイスの状態。onesay.devices.getと同じ
onesay://tasks/{task_id}タスクの状態。onesay.tasks.getと同じ
onesay://docs/quickstarts/{name}クイックスタートのページ(javascriptまたはesp32)。公開

サーバーが一覧に示すのはテンプレートのみです。読み取り結果のttlMsは常に0なので、クライアントはすぐに古くなったものとして扱います。

プロンプト#

エラー#

ツールのエラーは、Control APIと同じOneSayエラーエンベロープを持ちます。

コード意味
oauth_resource_invalidトークンがない、無効、別のリソース向け、またはトークン交換で拒否された。
capability_authority_unavailableOneSayが現在アクセス権を確認できない。再試行してください。
mcp_confirmation_requiredR2の呼び出しに、まだ人間の同意がない。
consent_requiredControl APIが、アカウントがまだ与えていない同意を必要としている。
mcp_tool_input_invalid引数が欠けているか、ツールのスキーマと一致しない。
mcp_tool_not_exposedこのサーバーではそのツールが有効になっていない。
mcp_tool_output_invalidControl APIの応答が、ツールが返せない内容だった。

Control API自体のエラー(グラントの不足や存在しないリソースなど)は、元のコードのまま返します。正規リファレンスにすべてのコードが記載されています。

提供状況#

  • サーバーはStagingのhttps://mcp.staging.onesay.com/mcpで稼働しています。本番環境はまだ利用できません。
  • Stagingでは、R2のツールは無効になっており、mcp_tool_not_exposedで応答します。
  • ツール、プロンプト、リソースはリリースごとに固定されるため、サーバーは一覧の変更通知を送りません。
元のMarkdownを表示
# MCPガイド

OneSay MCPサーバーを使うと、AIクライアントはModel Context Protocolを通じて、OneSayのプロジェクト、デバイス、ルーム、タスク、ログ、使用量を読み取り、範囲を限った少数の変更を依頼できます。サーバーは公開Control APIの上にある薄いレイヤーです。各ツールは公開APIのオペレーションまたはアクションを呼び出し、アカウントに何が許可されるかはControl APIが判断します。サーバーはStagingで利用できます。[提供状況](#availability)を参照してください。

MCPが音声を運ぶことはありません。音声はSDKを通じて扱います。OneSay Realtime WebSocket経由のタスク音声か、リアルタイム音声(RTC)です。

## 接続

- **エンドポイント:**`https://<mcp host>/mcp`。環境ごとに1つです。Stagingでは`https://mcp.staging.onesay.com/mcp`です。
- **トランスポート:**ステートレスなStreamable HTTP。サーバーはリクエスト間でセッションを保持しません。
- **プロトコル:**MCP`2026-07-28`のみ。すべてのリクエストは`Mcp-Protocol-Version: 2026-07-28`を送ります。それ以外のバージョンは、サポートするバージョンを示したうえで`mcp_protocol_version_unsupported`で拒否します。
- **リクエストヘッダー:**`Mcp-Method`は本文のメソッドと一致する必要があり、`tools/call`、`prompts/get`、`resources/read`では`Mcp-Name`がツール名、プロンプト名、リソースURIと一致する必要があります。一致しない場合は、トークンを読む前にHTTP 400とJSON-RPCエラー`-32020`で応答します。

## サインイン

サーバーはOAuth 2.1の保護リソースです。保護リソースメタデータは`/.well-known/oauth-protected-resource`(および`/.well-known/oauth-protected-resource/mcp`)で提供され、その環境の認可サーバーを示します。

- **トークンなし**で公開の検出ができます。R0ツール、クイックスタートのリソース、プロンプト、ツール・リソース・プロンプトの一覧です。
- **アカウントのデータにはトークンが必要です。**R1またはR2のツール、あるいはクイックスタート以外のリソースには、このMCPリソースを対象とするBearerアクセストークンが必要です。トークンがない場合、サーバーはメタデータを指す`WWW-Authenticate`チャレンジ付きのHTTP 401で応答します。本文はリクエストIDを含むJSON-RPCエラーで、dataには`oauth_resource_invalid`のエラーエンベロープが入ります。
- **自分のトークンがControl APIに届くことはありません。**Control APIを呼び出すたびに、サーバーはそのトークンを交換し(OAuth 2.0トークン交換、RFC 8693)、ユーザー本人を主体、MCPサービスをアクターとする短期トークンを取得します。元のトークンの期限が切れた後は交換を行いません。トークンを記録したり返したりすることもありません。

## ツール

各ツールにはリスク区分があります。クライアントに対して、読み取り専用のツールには読み取り専用のマークが、`rooms.close`と`tasks.cancel`には破壊的な操作のマークが付いています。

| リスク | ツール | 必要なもの |
|---|---|---|
| R0 | `onesay.capabilities.list`、`onesay.capabilities.get`、`onesay.quickstarts.get` | なし:公開メタデータ |
| R1 | `onesay.projects.list`、`onesay.projects.get`、`onesay.applications.list`、`onesay.devices.list`、`onesay.devices.get`、`onesay.devices.diagnose`、`onesay.rooms.get`、`onesay.tasks.get`、`onesay.logs.search`、`onesay.logs.timeline`、`onesay.usage.summary` | トークンと、対応するAPIオペレーションが求めるグラント |
| R2 | `onesay.rooms.create`、`onesay.rooms.close`、`onesay.tasks.cancel` | トークン、グラント、人間のユーザーの同意 |

R2のツールは、人間のユーザーがOneSayで同意した後にのみアクションを実行します。同意がない場合、呼び出しは`mcp_confirmation_required`を返し、何も変更しません。Stagingでは、R2のツールは現在無効になっており、`mcp_tool_not_exposed`で応答して何も変更しません。

## リソース

| URIテンプレート | 読み取る内容 |
|---|---|
| `onesay://projects/{project_id}` | プロジェクト。`onesay.projects.get`と同じ |
| `onesay://devices/{device_id}` | デバイスの状態。`onesay.devices.get`と同じ |
| `onesay://tasks/{task_id}` | タスクの状態。`onesay.tasks.get`と同じ |
| `onesay://docs/quickstarts/{name}` | クイックスタートのページ(`javascript`または`esp32`)。公開 |

サーバーが一覧に示すのはテンプレートのみです。読み取り結果の`ttlMs`は常に0なので、クライアントはすぐに古くなったものとして扱います。

## プロンプト

- `build_voice_app`は[JavaScriptクイックスタート](JAVASCRIPT_QUICKSTART.md)に従います。
- `diagnose_device`は[デバイス診断](DEVICE_DIAGNOSTICS.md)ガイドに従います。

## エラー

ツールのエラーは、Control APIと同じOneSayエラーエンベロープを持ちます。

| コード | 意味 |
|---|---|
| `oauth_resource_invalid` | トークンがない、無効、別のリソース向け、またはトークン交換で拒否された。 |
| `capability_authority_unavailable` | OneSayが現在アクセス権を確認できない。再試行してください。 |
| `mcp_confirmation_required` | R2の呼び出しに、まだ人間の同意がない。 |
| `consent_required` | Control APIが、アカウントがまだ与えていない同意を必要としている。 |
| `mcp_tool_input_invalid` | 引数が欠けているか、ツールのスキーマと一致しない。 |
| `mcp_tool_not_exposed` | このサーバーではそのツールが有効になっていない。 |
| `mcp_tool_output_invalid` | Control APIの応答が、ツールが返せない内容だった。 |

Control API自体のエラー(グラントの不足や存在しないリソースなど)は、元のコードのまま返します。[正規リファレンス](../reference/generated/catalog.md)にすべてのコードが記載されています。

## 提供状況

- サーバーはStagingの`https://mcp.staging.onesay.com/mcp`で稼働しています。本番環境はまだ利用できません。
- Stagingでは、R2のツールは無効になっており、`mcp_tool_not_exposed`で応答します。
- ツール、プロンプト、リソースはリリースごとに固定されるため、サーバーは一覧の変更通知を送りません。