owner-clone-ai-mcp 1.77.1 → 1.78.1
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/domains/skills.js +10 -1
- package/domains/video.js +4 -4
- package/index.js +8 -1
- package/package.json +1 -1
package/domains/skills.js
CHANGED
|
@@ -190,7 +190,7 @@ is_admin_published / allowed_plan_ids はAdmin権限がある場合のみ反映
|
|
|
190
190
|
display_name: { type: 'string', description: '表示名(日本語OK)' },
|
|
191
191
|
description: { type: 'string', description: 'スキルの用途説明' },
|
|
192
192
|
prompt_template: { type: 'string', description: 'スキル実行時の指示テキスト。prepare_skill(Claude Code自律実行)で使う場合はMCPツール呼び出し指示を含めてよい。invoke_skill(サーバー実行)で使う場合はテキスト処理の指示のみ。' },
|
|
193
|
-
parameters: { type: 'array', items: { type: 'object' }, description: '
|
|
193
|
+
parameters: { type: 'array', items: { type: 'object' }, description: '⚠️ 配列全体を置き換える。1つ追加・変更するだけの場合も、まず get_skill の「パラメータ定義(生JSON)」をそのままコピーし、そこへ追加・変更して全件渡すこと(整形テキストから書き直すと options / input_type / hidden が失われて選択肢が壊れる)。[{name, description, required, default_value, input_type, options(input_type=select時の選択肢文字列配列), hidden}]' },
|
|
194
194
|
knowledge_item_ids: { type: 'array', items: { type: 'string' }, description: '参照するナレッジのID一覧(UUID文字列)。配列全体を置き換える' },
|
|
195
195
|
knowledge_folder_ids: { type: 'array', items: { type: 'string' }, description: '参照するナレッジフォルダID一覧(UUID文字列)。配列全体を置き換える' },
|
|
196
196
|
preset_id: { type: 'integer', description: 'AIパートナーのID(整数)。null を渡すと解除' },
|
|
@@ -488,6 +488,12 @@ const handlers = {
|
|
|
488
488
|
const paramStr = params.length
|
|
489
489
|
? params.map(p => ` - ${p.name}${p.required ? '(必須)' : '(任意)'}: ${p.description || ''}${p.default_value ? ` [デフォルト: ${p.default_value}]` : ''}`).join('\n')
|
|
490
490
|
: ' なし';
|
|
491
|
+
// ⚠️ 2026-10-01: 上の整形は name / 必須任意 / description / default_value だけで、
|
|
492
|
+
// options(select の選択肢)・input_type・hidden が落ちていた。
|
|
493
|
+
// update_skill の parameters は **配列全体の置き換え** なので、1つ足すだけでも
|
|
494
|
+
// 取得できない options を推測で書き直すことになり、選択肢が壊れる危険があった。
|
|
495
|
+
// そのまま update_skill に渡せる生JSONを併記する。
|
|
496
|
+
const paramJson = params.length ? JSON.stringify(params, null, 2) : '[]';
|
|
491
497
|
const isGoal = s.skill_type === 'agent_goal';
|
|
492
498
|
return [
|
|
493
499
|
`ID: ${s.id}`,
|
|
@@ -504,6 +510,9 @@ const handlers = {
|
|
|
504
510
|
`プロンプトテンプレート:\n${s.prompt_template || 'なし'}`,
|
|
505
511
|
]),
|
|
506
512
|
`パラメータ:\n${paramStr}`,
|
|
513
|
+
// ⚠️ update_skill の parameters は配列全体の置き換え。1つ足すときも**このJSONをそのままコピーして
|
|
514
|
+
// 末尾に追加**する。整形テキストから書き直すと options / input_type / hidden が失われる
|
|
515
|
+
`パラメータ定義(生JSON・update_skill にそのまま渡せる):\n${paramJson}`,
|
|
507
516
|
`ナレッジ指定アイテム数: ${(s.knowledge_item_ids || []).length}件`,
|
|
508
517
|
`ナレッジ指定フォルダ数: ${(s.knowledge_folder_ids || []).length}件`,
|
|
509
518
|
`AIパートナー: ${s.preset_name || 'なし'}`,
|
package/domains/video.js
CHANGED
|
@@ -64,7 +64,7 @@ const tools = [
|
|
|
64
64
|
title: { type: 'string' },
|
|
65
65
|
timeline: { type: 'object', description: 'タイムラインJSON(全置換・形式は get_video_timeline_spec)' },
|
|
66
66
|
deck_id: { type: 'string', description: '参照スライドデッキの差し替え。スライドを作り直した場合はここで新しいデッキIDを指定し、timeline 側の各クリップの deckId も同じ値に揃えてください(尺やタイミングはそのまま保てます)' },
|
|
67
|
-
base_updated_at: { type: 'string', description: 'get_video_project で取得した updated_at
|
|
67
|
+
base_updated_at: { type: 'string', description: 'get_video_project で取得した updated_at。渡すと、その後にユーザーが編集画面で保存していた場合に上書きせずエラー(409)を返します(推奨)。⚠️ 409 の本文には最新の updated_at と changed(違いのある層: telop/audio/video など)、meta_only(違いが素材のメタ情報だけか)が入ります。meta_only:true は編集画面がファイルを割り当てただけの公算が高く、返ってきた updated_at をそのまま base_updated_at に入れて再送して差し支えありません。changed に自分が書き換える層が挙がっているときは、get_video_project で取り込んでから判断してください。なお同じ内容を再送した場合は 409 ではなく unchanged:true の成功が返るため、リトライは安全です' },
|
|
68
68
|
}, required: ['id'] },
|
|
69
69
|
},
|
|
70
70
|
{
|
|
@@ -92,7 +92,7 @@ const tools = [
|
|
|
92
92
|
gain: { type: 'number', description: '音量(1=100%・BGMは0.3程度)' },
|
|
93
93
|
muted: { type: 'boolean', description: 'video のとき true でその動画の音を使わない' },
|
|
94
94
|
media_id: { type: 'string', description: '複数の素材を使い分けるときの識別子(省略時は type から自動)' },
|
|
95
|
-
base_updated_at: { type: 'string', description: '競合防止(get_video_project の updated_at
|
|
95
|
+
base_updated_at: { type: 'string', description: '競合防止(get_video_project の updated_at)。⚠️ 409 の本文に最新 updated_at / changed(違いのある層)/ meta_only が入る。meta_only:true はそのまま再送可。同一内容の再送は 409 にならず unchanged:true の成功が返る' },
|
|
96
96
|
}, required: ['id', 'type', 'file_name'] },
|
|
97
97
|
},
|
|
98
98
|
{
|
|
@@ -116,7 +116,7 @@ const tools = [
|
|
|
116
116
|
lead_sec: { type: 'number', description: '発話より何秒早く出すか(既定0.4)' },
|
|
117
117
|
max_chars: { type: 'number', description: '1行の最大文字数。超えたら自動で改行する(既定20)' },
|
|
118
118
|
replace: { type: 'boolean', description: 'true=既存のテロップを置き換える(省略=追加)' },
|
|
119
|
-
base_updated_at: { type: 'string', description: '競合防止(get_video_project の updated_at
|
|
119
|
+
base_updated_at: { type: 'string', description: '競合防止(get_video_project の updated_at)。⚠️ 409 の本文に最新 updated_at / changed(違いのある層)/ meta_only が入る。meta_only:true はそのまま再送可。同一内容の再送は 409 にならず unchanged:true の成功が返る' },
|
|
120
120
|
}, required: ['id', 'srt'] },
|
|
121
121
|
},
|
|
122
122
|
{
|
|
@@ -130,7 +130,7 @@ const tools = [
|
|
|
130
130
|
media_id: { type: 'string', description: '同じ種類が複数あるときの絞り込み(mediaId)' },
|
|
131
131
|
clips: { type: 'array', items: { type: 'object' }, description: 'そのトラックのクリップ配列(全置換)。形式は get_video_timeline_spec' },
|
|
132
132
|
remove: { type: 'boolean', description: 'true=このトラックを削除する' },
|
|
133
|
-
base_updated_at: { type: 'string', description: '競合防止(get_video_project の updated_at
|
|
133
|
+
base_updated_at: { type: 'string', description: '競合防止(get_video_project の updated_at)。⚠️ 409 の本文に最新 updated_at / changed(違いのある層)/ meta_only が入る。meta_only:true はそのまま再送可。同一内容の再送は 409 にならず unchanged:true の成功が返る' },
|
|
134
134
|
}, required: ['id', 'type'] },
|
|
135
135
|
},
|
|
136
136
|
{
|
package/index.js
CHANGED
|
@@ -35,6 +35,8 @@ const HANDLERS = Object.assign({}, ...allDomains.map(d => d.handlers));
|
|
|
35
35
|
// adminOnly ツール(標準AIパートナー操作など)は、接続キーがAdminの時だけ tools/list に出す。
|
|
36
36
|
// 取得失敗時は安全側で「非Admin扱い=隠す」。ツール返却時は非標準フィールド adminOnly を除去。
|
|
37
37
|
const { callApi } = require('./lib/api');
|
|
38
|
+
// 配布物の版数(serverInfo で返す)。ハードコードするとずれるので package.json から読む
|
|
39
|
+
const PKG_VERSION = require('./package.json').version;
|
|
38
40
|
let _isAdminCache = null;
|
|
39
41
|
async function keyIsAdmin() {
|
|
40
42
|
if (_isAdminCache !== null) return _isAdminCache;
|
|
@@ -53,7 +55,12 @@ async function executeTool(name, args) {
|
|
|
53
55
|
// ── MCPサーバー起動 ────────────────────────────────────────────
|
|
54
56
|
async function main() {
|
|
55
57
|
const server = new Server(
|
|
56
|
-
|
|
58
|
+
// ⚠️ 2026-10-01: ここが '1.11.0' で固定されており、package.json(実際の版)と
|
|
59
|
+
// ずれていた。MCPのハンドシェイクで返る版が実物と違うと、
|
|
60
|
+
// 「どの版が動いているか」を利用者側から確認できず、版数トラブルの切り分けができない
|
|
61
|
+
// (1.77.1 の公開直後にCDN伝播待ちで 404 になった件で実際に困った)。
|
|
62
|
+
// package.json から読むことで、以後ずれない。
|
|
63
|
+
{ name: 'owner-clone-ai', version: PKG_VERSION },
|
|
57
64
|
{ capabilities: { tools: {} } }
|
|
58
65
|
);
|
|
59
66
|
|