@flyle/ai-contact-center-mcp 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +53 -0
- package/README.md +111 -0
- package/dist/main.js +2207 -0
- package/generated/manifest.json +10586 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
Flyle AIコンタクトセンター MCP サーバー 使用許諾条件
|
|
2
|
+
|
|
3
|
+
本ソフトウェア(`@flyle/ai-contact-center-mcp`。以下「本ソフトウェア」)に関する著作権その他
|
|
4
|
+
の知的財産権は、株式会社Flyle(以下「当社」)に帰属します。本ソフトウェアは、以下の条件に同意
|
|
5
|
+
された場合に限りご使用いただけます。
|
|
6
|
+
|
|
7
|
+
1. 使用許諾
|
|
8
|
+
|
|
9
|
+
当社は、当社との間で Flyle AIコンタクトセンター(以下「本サービス」)の利用契約を締結して
|
|
10
|
+
いるお客様に対し、当該契約の有効期間中、本サービスを利用する目的に限り、本ソフトウェアを
|
|
11
|
+
使用する非独占的かつ譲渡不能の権利を許諾します。
|
|
12
|
+
|
|
13
|
+
本ソフトウェアの実行に必要な範囲での複製(パッケージレジストリからの取得および実行環境への
|
|
14
|
+
キャッシュを含みます)は、本許諾に含まれます。
|
|
15
|
+
|
|
16
|
+
2. 禁止事項
|
|
17
|
+
|
|
18
|
+
お客様は、前項に定める範囲を超えて本ソフトウェアを利用してはならず、特に次の行為を行っては
|
|
19
|
+
なりません。
|
|
20
|
+
|
|
21
|
+
(1) 第三者への再配布、貸与、販売、譲渡、公衆送信
|
|
22
|
+
(2) 改変、翻案、派生物の作成
|
|
23
|
+
(3) リバースエンジニアリング、逆コンパイル、逆アセンブル
|
|
24
|
+
(4) 著作権表示その他の権利に関する表示の削除または改変
|
|
25
|
+
|
|
26
|
+
3. 無保証
|
|
27
|
+
|
|
28
|
+
本ソフトウェアは現状有姿で提供されます。当社は、本ソフトウェアが特定の目的に適合すること、
|
|
29
|
+
および瑕疵がないことを保証しません。
|
|
30
|
+
|
|
31
|
+
4. 責任の制限
|
|
32
|
+
|
|
33
|
+
本ソフトウェアの使用または使用不能により生じた損害について、当社は責任を負いません。ただし、
|
|
34
|
+
当社の故意または重過失による場合はこの限りではありません。
|
|
35
|
+
|
|
36
|
+
5. 準拠法および関連規約
|
|
37
|
+
|
|
38
|
+
本許諾は日本法に準拠します。本ソフトウェアの使用には、次の規約が併せて適用されます。
|
|
39
|
+
|
|
40
|
+
- 利用規約: https://flyle.io/jp/terms
|
|
41
|
+
- プライバシーポリシー: https://flyle.io/jp/privacy-policy
|
|
42
|
+
- セキュリティポリシー: https://flyle.io/jp/security-policy
|
|
43
|
+
|
|
44
|
+
本許諾の定めと上記規約の定めとが矛盾する場合には、上記規約の定めが優先します。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
This software is proprietary and is NOT open source. It may be used only by customers
|
|
49
|
+
with an active Flyle AI Contact Center subscription, and solely for the purpose of using
|
|
50
|
+
that service. Redistribution, modification and reverse engineering are prohibited.
|
|
51
|
+
The Japanese text above is the governing version.
|
|
52
|
+
|
|
53
|
+
Copyright (c) 2026 Flyle, Inc. All rights reserved.
|
package/README.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# @flyle/ai-contact-center-mcp
|
|
2
|
+
|
|
3
|
+
Flyle AIコンタクトセンターの公開 API を、Claude Code などの MCP クライアントから呼ぶための **stdio MCP サーバー**。npm に公開するので、利用者はこのリポジトリを用意せず `npx` で起動できる。
|
|
4
|
+
公開 API の OpenAPI スナップショット(`apps/flygate/backend-ecs/public-api/openapi/v0.json`)から生成した操作表 `src/generated/manifest.json` の 1 行 = 1 ツール。表に無い操作は呼べない(任意 URL / 任意メソッドのプロキシは持たない)。
|
|
5
|
+
|
|
6
|
+
現在は試験的提供で、API キーを発行できるのは Flyle 社内メンバー(flyle.io ドメインのアカウント)に限られる。
|
|
7
|
+
|
|
8
|
+
MCP では、エージェントの設定取得・編集から、ナレッジやファイルの取り込み、プレビューの作成と完了確認、検証ケースの管理と試行、検証の実行・結果取得、改善分析と設定の再調整までを進められます。編集後はプレビューの作成完了を確認してから検証し、結果を確認して再調整してください。公開の実行・昇格・取消は提供していません(公開状態の参照は可能)。
|
|
9
|
+
|
|
10
|
+
`get_knowledge_document_original_content` はナレッジ原本を `FLYLE_AI_CONTACT_CENTER_MCP_OUTPUT_DIR` へ自動保存し、ファイルパスを返します。PDF / DOCX / PPTX などの本文は保存したファイルで確認します。Markdown / HTML / テキスト形式は、自動保存に加えて本文も応答の `text` に含まれます。
|
|
11
|
+
|
|
12
|
+
一覧の取得方式は各ツールの入力スキーマと応答に従います。cursor、limit と offset、ページングなしの全件取得があります。
|
|
13
|
+
|
|
14
|
+
改善要望の検証は、現在の設定・既存ケースの取得 → `create_eval_case` / `import_eval_cases` でケースを保存 → 変更前の検証 → 設定の修正または改善提案の選択適用 → プレビュー作成完了の確認 → 全ケースの再検証、の順に進めます。`create_improvement_analysis` は分析結果を返す操作で、ケースや設定の保存は行いません。提案の内容と適用プランを確認し、根拠のない条件を追加する変更は採用しないでください。実行受付後は `get_eval_run` と `list_eval_run_case_results` で完了と成否を確認します。
|
|
15
|
+
|
|
16
|
+
ファイル取込では `inspect_local_file` の `sizeBytes` を API の `byteSize`、`sha256Hex` を `checksumSha256` に渡します(`sha256Base64` ではありません)。同じ MCP 接続でアップロード URL を発行して `upload_file` を呼び、続けて `create_knowledge_import` を実行します。転送成功とナレッジ取込完了は別なので、取込と文書の処理状況も確認してください。
|
|
17
|
+
|
|
18
|
+
## 実行契約
|
|
19
|
+
|
|
20
|
+
| 項目 | 内容 |
|
|
21
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
22
|
+
| 認証先 | `FLYLE_AI_CONTACT_CENTER_API_BASE_URL` の origin だけに `Authorization: Bearer <key>` を送る。3xx は追跡しない |
|
|
23
|
+
| テナント | `FLYLE_AI_CONTACT_CENTER_TENANT_NAME` で固定。ツール引数に `tenantName` は無く、渡すと入力検証で弾く。全ツール結果の先頭(`content[0]`)に `{"tenantName": …}` を出し、サーバー説明文にも接続先を書く |
|
|
24
|
+
| 作業ディレクトリ | 起動時の作業ディレクトリ(cwd)を 1 テナント専用に束縛する(`.flyle-ai-contact-center-mcp/workspace.json` を排他作成)。別テナントに束縛済み・別テナントの作業ディレクトリの入れ子・ホームディレクトリ / ルートでは起動しない。操作ごとに束縛を確かめ、書き換えられていたら実行しない。`OUTPUT_DIR` / `FILE_ROOTS` は作業ディレクトリの中に限り、読むファイルも作業ディレクトリ内の別テナントの束縛配下なら拒否する。公開 API には作業ディレクトリの不透明 ID(ホスト名・OS ユーザー・realpath の sha256)を `x-flyle-client-workspace` で送り、サーバーが「同じ作業ディレクトリから 2 テナント」を検知する(設計書 §7.4) |
|
|
25
|
+
| 再送 | GET の JSON / 空応答だけ、429(`Retry-After` ≤ 30 秒)と接続失敗で 1 回。書き込み(POST / PUT / PATCH / DELETE)は一切再送しない |
|
|
26
|
+
| SSE | `x-response-kind: sse` の操作は終端まで収集してイベント列で返す(上限 15 分 / 10,000 イベント / 32 MiB。超えたら `truncated: true` と理由)。空行で確定していない末尾イベントは WHATWG どおり捨て、`discardedIncomplete: true` で伝える |
|
|
27
|
+
| binary | ZIP 等は `FLYLE_AI_CONTACT_CENTER_MCP_OUTPUT_DIR` に保存し、パス・バイト数・sha256 を返す |
|
|
28
|
+
| 署名付き URL | `x-transfer` の pointer が指す位置の URL だけを使う(注記の無い操作は本文中の URL を一切転送先にしない)。download はその場で保存(保存に失敗しても API 応答は返し、結果の `failedDownloads` に失敗種別を記して `download_file` で再試行できるよう登録する)、upload は `upload_file` ツール向けに 15 分・1 回限りで登録。認証ヘッダは付けず、ホストは `FLYLE_AI_CONTACT_CENTER_MCP_STORAGE_HOSTS` の許可リストに限る |
|
|
29
|
+
| ローカルファイル | `inspect_local_file` / `upload_file` が読めるのは `FLYLE_AI_CONTACT_CENTER_MCP_FILE_ROOTS` 配下だけ(シンボリックリンク越えも realpath で拒否。検証から open までに親ディレクトリを差し替える並行ローカル主体は脅威モデルに含めない) |
|
|
30
|
+
| 本文埋め込みファイル | `x-inline-files` の pointer が指す位置だけを扱う。入力(例 `create_preview_voice_turn` の `audio`、`create_preview_chat_turn` の `transcript[*].images[*].base64Data`)はツール引数にローカルファイルのパスを受け、MCP が読んで base64 にして送る(WAV は PCM 16bit / 24 kHz / mono をヘッダで検証、PCM 2 MiB 以内。画像はプレビューチャットが 10 MiB 以内、検証用画像(`create_eval_image`)が 2 MiB 以内)。出力(SSE の `audio_delta`、JSON 応答の `create_web_chat_voice_sample` の `voiceSample.audioChunks[*]`。いずれも PCM16LE / 24 kHz / mono)は連結して `FLYLE_AI_CONTACT_CENTER_MCP_OUTPUT_DIR` に WAV で保存し、結果にはパス・バイト数・sha256・再生時間だけを返す(JSON 本文側の base64 は保存先の案内文に置き換える。累積 32 MiB 上限) |
|
|
31
|
+
| SSE の成否 | `x-sse-outcome` を持つ操作は HTTP 200 / EOF だけで成功にしない。最初の終端イベント(例 `closed`)で判定を確定し、その前に必須イベント(例 `turn_done`)が揃い、失敗イベント(`error`)が無く、値比較を指定した契約では終端の値が成功値(`code=1000`)のときだけ `outcome: success`。正常終端前の `error` は終端欠落時も `failed`。失敗イベントも正常終端も無い EOF・打ち切りは `unknown`、異常終端は `failed` で、いずれも `isError: true`・自動再送なし |
|
|
32
|
+
| エラー | 公開 API の封筒 `{ error: { code, message, detail, requestId } }` を `isError: true` の構造化 payload でそのまま返す。API キーは stderr・payload のどこにも出さない |
|
|
33
|
+
| ログ | stdout は JSON-RPC 専用。ログは stderr に JSON 行(鍵は置換) |
|
|
34
|
+
|
|
35
|
+
## 設定(環境変数)
|
|
36
|
+
|
|
37
|
+
| 変数 | 必須 | 説明 |
|
|
38
|
+
| ------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------- |
|
|
39
|
+
| `FLYLE_AI_CONTACT_CENTER_API_BASE_URL` | ✔ | 公開 API の URL(https)。例 `https://api.flygate.flyle.io` |
|
|
40
|
+
| `FLYLE_AI_CONTACT_CENTER_TENANT_NAME` | ✔ | テナント名(URL の `/v0/tenants/{tenantName}`) |
|
|
41
|
+
| `FLYLE_AI_CONTACT_CENTER_API_KEY` | ✔ | サービスアカウントの API キー(`flyle_ai_contact_center_sa_…`) |
|
|
42
|
+
| `FLYLE_AI_CONTACT_CENTER_MCP_OUTPUT_DIR` | | ダウンロード先(作業ディレクトリ内に限る)。既定 `.flyle-ai-contact-center-mcp/downloads` |
|
|
43
|
+
| `FLYLE_AI_CONTACT_CENTER_MCP_FILE_ROOTS` | | アップロード元として読める根ディレクトリ(カンマ区切り。作業ディレクトリ内に限る)。既定は作業ディレクトリ |
|
|
44
|
+
| `FLYLE_AI_CONTACT_CENTER_MCP_STORAGE_HOSTS` | | 署名付き URL のホスト許可リスト(`.amazonaws.com` のようなサフィックス、または完全一致)。既定 `.amazonaws.com` |
|
|
45
|
+
| `FLYLE_AI_CONTACT_CENTER_MCP_ALLOW_INSECURE_HTTP` | | `1` で localhost への http を許す(ローカル開発専用) |
|
|
46
|
+
|
|
47
|
+
### Claude Code への登録例
|
|
48
|
+
|
|
49
|
+
テナントごとにディレクトリを分け(例 `~/flyle-cs/acme-corp`)、そのディレクトリの `.mcp.json`(project scope)に登録する。ユーザー scope(`~/.claude.json`)には置かない。サーバー名にテナント名を入れると Claude Code のツール名(`mcp__flyle-acc-acme-corp__…`)にも出る。
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"flyle-acc-acme-corp": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["-y", "@flyle/ai-contact-center-mcp"],
|
|
57
|
+
"env": {
|
|
58
|
+
"FLYLE_AI_CONTACT_CENTER_API_BASE_URL": "https://api.flygate.flyle.io",
|
|
59
|
+
"FLYLE_AI_CONTACT_CENTER_TENANT_NAME": "acme-corp",
|
|
60
|
+
"FLYLE_AI_CONTACT_CENTER_API_KEY": "flyle_ai_contact_center_sa_..."
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## ツールの構成
|
|
68
|
+
|
|
69
|
+
- **API 操作ツール**: `operationId` がそのままツール名(`list_agents` / `update_agent` / …)。入力 schema はパス変数・クエリ・ボディを 1 つのオブジェクトに平坦化したもの。`components` への参照は `$defs` に写して自己完結させる(再帰 schema を展開で壊さない。未定義の参照は生成時に例外)。
|
|
70
|
+
- 説明文に `HTTP: METHOD path`、必要権限(`x-permission`)、効果(`x-effect`: read / draft)、応答種別、再送禁止の注記を載せる。
|
|
71
|
+
- `annotations`: GET は `readOnlyHint`、DELETE は `destructiveHint`、GET / PUT / DELETE は `idempotentHint`。
|
|
72
|
+
- 本番へ即時反映する操作(`x-effect: live`。資格情報・秘密情報・電話番号・SIP・エージェント削除など)はツールにしない。複数顧客を扱う作業で誤操作が直ちに本番へ出るのを防ぐため。マニフェスト生成時に除外し、読み込み時も live を拒否する。
|
|
73
|
+
- **ローカルツール**: `inspect_local_file`(名前・サイズ・sha256 hex / base64・MIME)、`upload_file`(登録済み URL へ PUT)、`download_file`(登録済み URL から保存)。
|
|
74
|
+
|
|
75
|
+
## 配布
|
|
76
|
+
|
|
77
|
+
npm 公開パッケージなので、実行時に未公開の workspace 依存が残っていてはならない。`rolldown` で `dist/main.js` 1 枚に畳み、`@flyle-lib/utils` は畳み込む(`@modelcontextprotocol/server` は公開パッケージなので利用者側で解決させる)。
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
pnpm -F @flyle/ai-contact-center-mcp build
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
操作表は実行時に `import.meta.url` からの相対で読むため、build が `generated/manifest.json` へ複製する(`files` はこの `dist` と `generated`)。
|
|
84
|
+
|
|
85
|
+
## 操作表の更新
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
pnpm -F @flyle/ai-contact-center-mcp manifest:generate # openapi/v0.json → src/generated/manifest.json
|
|
89
|
+
pnpm -F @flyle/ai-contact-center-mcp manifest:check # CI 用。古いと非 0
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
OpenAPI 側で使う拡張は `x-response-kind`(json / empty / sse / binary)、`x-effect` と `x-live-impact`、`x-transfer { kind, urlPointer, headersPointer }`、`x-inline-files { input: [{ pointer, format: wav-pcm16 | base64, maxBytes, sampleRateHz?, channels? }], output: [{ event?, pointer, format: pcm16le | base64, sampleRateHz?, channels?, mediaType? }] }`、`x-sse-outcome { requiredEvents, terminalEvent, successPointer, successValue, failureEvents }`。無い操作は content-type から応答種別を推定し、効果は「注記なし」として扱う。`oneOf` の判別共用体ボディ(例 `create_knowledge_import`)は平坦化せず `body` 引数で全体を受ける。upload の PUT ヘッダは `headersPointer` が指す `uploadHeaders` だけを使う。
|
|
93
|
+
|
|
94
|
+
## テスト
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
pnpm -F @flyle/ai-contact-center-mcp test
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`tests/stdio.e2e.spec.ts` は `node src/main.ts` を子プロセスで起動し、偽の公開 API に対して initialize → tools/list → tools/call を通す。SDK の client パッケージには依存せず、行区切り JSON-RPC を直接話す。
|
|
101
|
+
|
|
102
|
+
## 大きな結果と SSE の完了判定
|
|
103
|
+
|
|
104
|
+
整形・秘密情報の伏せ字化後の JSON が 1,048,576 文字を超える場合、全文を compact JSON(改行なし)で `FLYLE_AI_CONTACT_CENTER_MCP_OUTPUT_DIR` に `<時刻>-<乱数>-<ツール名>.result.json` として排他作成します(1 ファイル 64 MiB まで)。ツール結果には保存先・バイト数・sha256・`format: "json"` と、整形表記の総文字数・先頭 4,096 文字(`preview`)を返します。全文は保存ファイルで確認してください。保存に成功した場合、元の `isError` は変わりません。保存に失敗した場合(書込不可・64 MiB 超過など)は `isError: true` で `error.kind = "result_not_saved"` と失敗種別を返し、`preview` と総文字数はそのまま同梱します。stderr に失敗種別だけを warn ログで残します。操作の状態を確認してから再実行してください。
|
|
105
|
+
|
|
106
|
+
`x-sse-outcome` の `successPointer` と `successValue` が両方 `null` の契約は、値比較をせず正常終端イベントで完了を判定します。チャットのプレビューは `done`、検証ケースの試行・改善分析・コネクター支援は `result` が正常終端です。検証品質の `finalStatus: FAILED` は試行自体の失敗ではありません。正常終端前の `error` は処理失敗、終端を確認できない切断・上限到達は結果不明として返し、自動再送しません。
|
|
107
|
+
|
|
108
|
+
## 依存
|
|
109
|
+
|
|
110
|
+
- `@modelcontextprotocol/server`(MCP TypeScript SDK v2。`fromJsonSchema` で JSON Schema をそのままツール入力に使うので zod は不要)
|
|
111
|
+
- `@flyle-lib/utils`(devDependencies。バンドルへ畳み込むので利用者には配らない)
|