owner-clone-ai-mcp 1.13.2 → 1.14.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/index.js +98 -9
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1019,7 +1019,7 @@ room_id フィールドはChatworkのルームIDです(設定名と合わせ
|
|
|
1019
1019
|
},
|
|
1020
1020
|
{
|
|
1021
1021
|
name: 'update_knowledge_folder',
|
|
1022
|
-
description: '
|
|
1022
|
+
description: 'ナレッジフォルダの名前・カラー・説明を変更します。【書き込み権限付きキーが必要】',
|
|
1023
1023
|
annotations: { destructiveHint: false, idempotentHint: true },
|
|
1024
1024
|
inputSchema: {
|
|
1025
1025
|
type: 'object',
|
|
@@ -1027,6 +1027,7 @@ room_id フィールドはChatworkのルームIDです(設定名と合わせ
|
|
|
1027
1027
|
id: { type: 'string', description: '更新するフォルダのID' },
|
|
1028
1028
|
name: { type: 'string', description: '新しいフォルダ名(省略時は変更なし)' },
|
|
1029
1029
|
color: { type: 'string', description: '新しいカラー(省略時は変更なし)' },
|
|
1030
|
+
description: { type: 'string', description: 'フォルダの説明(省略時は変更なし)' },
|
|
1030
1031
|
},
|
|
1031
1032
|
required: ['id'],
|
|
1032
1033
|
},
|
|
@@ -1109,7 +1110,7 @@ room_id フィールドはChatworkのルームIDです(設定名と合わせ
|
|
|
1109
1110
|
},
|
|
1110
1111
|
{
|
|
1111
1112
|
name: 'update_knowledge',
|
|
1112
|
-
description: '既存のナレッジを更新します。【書き込み権限付きキーが必要】本文を変更した場合は自動的に再ベクトル化されます。',
|
|
1113
|
+
description: '既存のナレッジを更新します。【書き込み権限付きキーが必要】本文を変更した場合は自動的に再ベクトル化されます。folder_id でフォルダ移動も可能(null で未分類に移動)。',
|
|
1113
1114
|
annotations: { destructiveHint: false, idempotentHint: true },
|
|
1114
1115
|
inputSchema: {
|
|
1115
1116
|
type: 'object',
|
|
@@ -1118,6 +1119,7 @@ room_id フィールドはChatworkのルームIDです(設定名と合わせ
|
|
|
1118
1119
|
title: { type: 'string', description: '新しいタイトル(省略時は変更なし)' },
|
|
1119
1120
|
text_content: { type: 'string', description: '新しい本文(省略時は変更なし)' },
|
|
1120
1121
|
category: { type: 'string', description: '新しいカテゴリ(省略時は変更なし)' },
|
|
1122
|
+
folder_id: { type: 'string', description: '移動先フォルダID(null または省略で変更なし、空文字列で未分類へ移動)' },
|
|
1121
1123
|
},
|
|
1122
1124
|
required: ['id'],
|
|
1123
1125
|
},
|
|
@@ -1134,6 +1136,69 @@ room_id フィールドはChatworkのルームIDです(設定名と合わせ
|
|
|
1134
1136
|
required: ['id'],
|
|
1135
1137
|
},
|
|
1136
1138
|
},
|
|
1139
|
+
{
|
|
1140
|
+
name: 'generate_folder_description',
|
|
1141
|
+
description: `指定フォルダのナレッジ内容をAIが分析し、フォルダ説明を自動生成します。【書き込み権限付きキーが必要・AIコスト発生】
|
|
1142
|
+
|
|
1143
|
+
⚠️ 【必須】このツールを呼ぶ前に、必ずユーザーへ実行方法を確認してください ⚠️
|
|
1144
|
+
フォルダ説明の生成には2つの方法があります。ユーザーが明示的に選択するまでこのツールを呼んではいけません。
|
|
1145
|
+
|
|
1146
|
+
【方法A】Owner Clone AI で生成(このツール)
|
|
1147
|
+
- Owner Clone AI サーバーのAIがフォルダ内ナレッジを読み込んで説明を生成
|
|
1148
|
+
- save=true を指定すると生成後に自動でフォルダに保存
|
|
1149
|
+
|
|
1150
|
+
【方法B】Claude Code が直接実行
|
|
1151
|
+
- list_knowledge_items(folder_id=xxx) でフォルダ内容を取得
|
|
1152
|
+
- Claude Code 自身が内容を分析して説明を生成
|
|
1153
|
+
- update_knowledge_folder(id=xxx, description="生成した説明") で保存
|
|
1154
|
+
|
|
1155
|
+
ユーザーに「方法A(Owner Clone AIで生成)」「方法B(Claude Codeが直接実行)」のどちらにするか確認し、
|
|
1156
|
+
「方法A」を選んだ場合のみこのツールを呼んでください。`,
|
|
1157
|
+
annotations: { destructiveHint: false, idempotentHint: false },
|
|
1158
|
+
inputSchema: {
|
|
1159
|
+
type: 'object',
|
|
1160
|
+
properties: {
|
|
1161
|
+
folder_id: { type: 'string', description: '説明を生成するフォルダのID' },
|
|
1162
|
+
provider: { type: 'string', description: 'AIプロバイダー(claude / openai / gemini / openrouter / groq。デフォルト: openai)', enum: ['claude', 'openai', 'gemini', 'openrouter', 'groq'] },
|
|
1163
|
+
model: { type: 'string', description: '使用モデル(省略時はプロバイダーのデフォルトモデル)' },
|
|
1164
|
+
save: { type: 'boolean', description: '生成後にフォルダへ自動保存するか(デフォルト: false)' },
|
|
1165
|
+
},
|
|
1166
|
+
required: ['folder_id'],
|
|
1167
|
+
},
|
|
1168
|
+
},
|
|
1169
|
+
{
|
|
1170
|
+
name: 'ai_reorganize_folders',
|
|
1171
|
+
description: `全フォルダとナレッジをAIが分析し、より適切なフォルダへの移動提案を生成します。【書き込み権限付きキーが必要・AIコスト発生】
|
|
1172
|
+
フォルダに説明(description)が設定されていると提案精度が向上します。
|
|
1173
|
+
|
|
1174
|
+
⚠️ 【必須】このツールを呼ぶ前に、必ずユーザーへ実行方法を確認してください ⚠️
|
|
1175
|
+
フォルダ整理には2つの方法があります。ユーザーが明示的に選択するまでこのツールを呼んではいけません。
|
|
1176
|
+
|
|
1177
|
+
【方法A】Owner Clone AI で実行(このツール)
|
|
1178
|
+
- Owner Clone AI サーバーのAIが全フォルダ・ナレッジを分析して移動提案を返す
|
|
1179
|
+
- 提案一覧を受け取り、承認した提案を update_knowledge(id, folder_id=to_folder_id) で実行
|
|
1180
|
+
|
|
1181
|
+
【方法B】Claude Code が直接実行
|
|
1182
|
+
- list_knowledge_folders() でフォルダ一覧を取得
|
|
1183
|
+
- list_knowledge_items() でナレッジ一覧を取得
|
|
1184
|
+
- Claude Code 自身が内容を分析して移動先を提案
|
|
1185
|
+
- ユーザー承認後、update_knowledge(id=xxx, folder_id=xxx) で移動を実行
|
|
1186
|
+
|
|
1187
|
+
ユーザーに「方法A(Owner Clone AIで実行)」「方法B(Claude Codeが直接実行)」のどちらにするか確認し、
|
|
1188
|
+
「方法A」を選んだ場合のみこのツールを呼んでください。
|
|
1189
|
+
|
|
1190
|
+
■ 提案の実行方法:
|
|
1191
|
+
返ってきた proposals の各アイテムについて、ユーザーが承認したものを
|
|
1192
|
+
update_knowledge(id=item_id, folder_id=to_folder_id) で実行してください。`,
|
|
1193
|
+
annotations: { destructiveHint: false, idempotentHint: false },
|
|
1194
|
+
inputSchema: {
|
|
1195
|
+
type: 'object',
|
|
1196
|
+
properties: {
|
|
1197
|
+
provider: { type: 'string', description: 'AIプロバイダー(claude / openai / gemini / openrouter / groq。デフォルト: openai)', enum: ['claude', 'openai', 'gemini', 'openrouter', 'groq'] },
|
|
1198
|
+
model: { type: 'string', description: '使用モデル(省略時はプロバイダーのデフォルトモデル)' },
|
|
1199
|
+
},
|
|
1200
|
+
},
|
|
1201
|
+
},
|
|
1137
1202
|
];
|
|
1138
1203
|
|
|
1139
1204
|
// ── ツール実行 ─────────────────────────────────────────────────
|
|
@@ -1175,7 +1240,7 @@ async function executeTool(name, args) {
|
|
|
1175
1240
|
case 'list_knowledge_folders': {
|
|
1176
1241
|
const data = await callApi('/knowledge-folders');
|
|
1177
1242
|
if (!data.folders || data.folders.length === 0) return 'フォルダが作成されていません。';
|
|
1178
|
-
const lines = data.folders.map(f => `- [${f.id}] ${f.name}`);
|
|
1243
|
+
const lines = data.folders.map(f => `- [${f.id}] ${f.name}${f.description ? `\n 説明: ${f.description}` : ''}`);
|
|
1179
1244
|
return `フォルダ一覧(${data.folders.length}件):\n\n${lines.join('\n')}`;
|
|
1180
1245
|
}
|
|
1181
1246
|
|
|
@@ -1343,9 +1408,9 @@ async function executeTool(name, args) {
|
|
|
1343
1408
|
case 'update_knowledge_folder': {
|
|
1344
1409
|
const data = await callApi(`/knowledge-folders/${args.id}`, {
|
|
1345
1410
|
method: 'PUT',
|
|
1346
|
-
body: JSON.stringify({ name: args.name, color: args.color }),
|
|
1411
|
+
body: JSON.stringify({ name: args.name, color: args.color, ...(args.description !== undefined ? { description: args.description } : {}) }),
|
|
1347
1412
|
});
|
|
1348
|
-
return `✅ ${data.message}\nID: ${data.id}\nフォルダ名: ${data.name}`;
|
|
1413
|
+
return `✅ ${data.message}\nID: ${data.id}\nフォルダ名: ${data.name}${data.description ? `\n説明: ${data.description}` : ''}`;
|
|
1349
1414
|
}
|
|
1350
1415
|
|
|
1351
1416
|
case 'reorder_knowledge_folders': {
|
|
@@ -1396,14 +1461,15 @@ async function executeTool(name, args) {
|
|
|
1396
1461
|
|
|
1397
1462
|
case 'update_knowledge': {
|
|
1398
1463
|
const body = {};
|
|
1399
|
-
if (args.title)
|
|
1400
|
-
if (args.text_content)
|
|
1401
|
-
if (args.category)
|
|
1464
|
+
if (args.title) body.title = args.title;
|
|
1465
|
+
if (args.text_content) body.text_content = args.text_content;
|
|
1466
|
+
if (args.category) body.category = args.category;
|
|
1467
|
+
if (args.folder_id !== undefined) body.folder_id = args.folder_id || null;
|
|
1402
1468
|
const data = await callApi(`/knowledge/${args.id}`, {
|
|
1403
1469
|
method: 'PATCH',
|
|
1404
1470
|
body: JSON.stringify(body),
|
|
1405
1471
|
});
|
|
1406
|
-
return `✅ ${data.message}\nID: ${data.id}\nタイトル: ${data.title}\n更新日時: ${data.updated_at}`;
|
|
1472
|
+
return `✅ ${data.message}\nID: ${data.id}\nタイトル: ${data.title}\n更新日時: ${data.updated_at}${data.folder_id ? `\nフォルダID: ${data.folder_id}` : '\nフォルダ: 未分類'}`;
|
|
1407
1473
|
}
|
|
1408
1474
|
|
|
1409
1475
|
case 'delete_knowledge': {
|
|
@@ -1411,6 +1477,29 @@ async function executeTool(name, args) {
|
|
|
1411
1477
|
return `✅ ${data.message}\n削除したナレッジ: ${data.deleted.title} (ID: ${data.deleted.id})`;
|
|
1412
1478
|
}
|
|
1413
1479
|
|
|
1480
|
+
case 'generate_folder_description': {
|
|
1481
|
+
const data = await callApi(`/knowledge-folders/${args.folder_id}/generate-description`, {
|
|
1482
|
+
method: 'POST',
|
|
1483
|
+
body: JSON.stringify({ provider: args.provider, model: args.model, save: args.save }),
|
|
1484
|
+
});
|
|
1485
|
+
const saveNote = data.saved ? '(フォルダに保存済み)' : '(未保存 — update_knowledge_folder で保存可能)';
|
|
1486
|
+
return `✅ ${data.message}\nフォルダ名: ${data.folder_name}\n\n生成された説明 ${saveNote}:\n${data.description}`;
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
case 'ai_reorganize_folders': {
|
|
1490
|
+
const data = await callApi('/knowledge-folders/ai-reorganize', {
|
|
1491
|
+
method: 'POST',
|
|
1492
|
+
body: JSON.stringify({ provider: args.provider, model: args.model }),
|
|
1493
|
+
});
|
|
1494
|
+
if (!data.proposals || data.proposals.length === 0) {
|
|
1495
|
+
return `✅ 分析完了。現在の配置は適切です。移動の提案はありません。`;
|
|
1496
|
+
}
|
|
1497
|
+
const lines = data.proposals.map((p, i) =>
|
|
1498
|
+
`[${i + 1}] ${p.item_title}\n ID: ${p.item_id}\n ${p.from_folder_name} → ${p.to_folder_name}(移動先ID: ${p.to_folder_id})\n 理由: ${p.reason}`
|
|
1499
|
+
);
|
|
1500
|
+
return `✅ ${data.message}\n\n【移動提案一覧】\n${lines.join('\n\n')}\n\n--- 承認した提案を実行するには ---\nupdate_knowledge(id=<item_id>, folder_id=<to_folder_id>) を各提案について呼んでください。`;
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1414
1503
|
case 'list_schedules': {
|
|
1415
1504
|
const params = new URLSearchParams();
|
|
1416
1505
|
if (args.from) params.set('from', args.from);
|