owner-clone-ai-mcp 1.8.0 → 1.9.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 +195 -3
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -97,13 +97,34 @@ const TOOLS = [
|
|
|
97
97
|
// AIパートナー関連(読み取り)
|
|
98
98
|
{
|
|
99
99
|
name: 'load_agent',
|
|
100
|
-
description:
|
|
100
|
+
description: `AIパートナーの設定(システムプロンプト・ルール・対話フロー)と関連ナレッジを取得します。
|
|
101
|
+
AIパートナーに設定されたナレッジ参照モードでナレッジを検索し、Claude Codeがそのパートナーの人格・知識で回答できるようにします。追加のAI課金は発生しません。
|
|
102
|
+
|
|
103
|
+
■ queryパラメータは必ずユーザーの質問文をそのまま渡すこと(要約・言い換え禁止)。
|
|
104
|
+
セマンティック検索の精度がqueryの文字列に直接依存するため。
|
|
105
|
+
|
|
106
|
+
■ ナレッジ参照モード別の呼び出し戦略(AIパートナー設定で自動決定):
|
|
107
|
+
|
|
108
|
+
【full_text モード】(knowledge_semantic_search=false)
|
|
109
|
+
→ セッション開始時に1回だけ呼べばOK。
|
|
110
|
+
返ってくるナレッジ全文は毎回同じ(クエリ非依存)なので、
|
|
111
|
+
Claude Codeのコンテキストに記憶される。2回目以降はload_agentを呼ばずに
|
|
112
|
+
記憶済みナレッジから直接回答できる。query省略可。
|
|
113
|
+
|
|
114
|
+
【semantic モード】(デフォルト)
|
|
115
|
+
→ 質問ごとに呼ぶ。queryに質問文を渡すと関連チャンクが変わる。
|
|
116
|
+
|
|
117
|
+
【smart_full_text モード】
|
|
118
|
+
→ 質問ごとに呼ぶ。queryに質問文を渡す。
|
|
119
|
+
|
|
120
|
+
【two_step_rag モード】
|
|
121
|
+
→ 質問ごとに呼ぶ。queryに質問文を渡す(クエリ最適化はバックエンドで自動対応)。`,
|
|
101
122
|
annotations: { readOnlyHint: true },
|
|
102
123
|
inputSchema: {
|
|
103
124
|
type: 'object',
|
|
104
125
|
properties: {
|
|
105
126
|
id: { type: 'string', description: 'AIパートナーのID(list_agent_presetsで確認)' },
|
|
106
|
-
query: { type: 'string', description: '
|
|
127
|
+
query: { type: 'string', description: 'ユーザーの質問文をそのまま渡す(full_textモードは省略可。他モードは必須)' },
|
|
107
128
|
},
|
|
108
129
|
required: ['id'],
|
|
109
130
|
},
|
|
@@ -750,6 +771,98 @@ diagnostic_questions / diagnostic_results を渡すと全データが置換さ
|
|
|
750
771
|
required: ['id', 'step_index'],
|
|
751
772
|
},
|
|
752
773
|
},
|
|
774
|
+
// プロジェクト管理
|
|
775
|
+
{
|
|
776
|
+
name: 'list_projects',
|
|
777
|
+
description: `プロジェクト一覧を取得します。各プロジェクトのタスク件数と、Chatwork通知設定の紐付け状況を含みます。
|
|
778
|
+
プロジェクトはタスク・スケジュール・ワークフローの実行単位として使用します。
|
|
779
|
+
approval_notify_setting_id が設定されている場合、承認タスク作成時にそのChatworkルームへ通知されます。`,
|
|
780
|
+
annotations: { readOnlyHint: true },
|
|
781
|
+
inputSchema: { type: 'object', properties: {} },
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
name: 'get_project',
|
|
785
|
+
description: `指定したプロジェクトの詳細とタスク一覧(最新50件)を取得します。
|
|
786
|
+
Chatwork連携が設定されている場合は、設定名とルームIDも返します。`,
|
|
787
|
+
annotations: { readOnlyHint: true },
|
|
788
|
+
inputSchema: {
|
|
789
|
+
type: 'object',
|
|
790
|
+
properties: {
|
|
791
|
+
id: { type: 'string', description: 'プロジェクトID' },
|
|
792
|
+
},
|
|
793
|
+
required: ['id'],
|
|
794
|
+
},
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
name: 'create_project',
|
|
798
|
+
description: `プロジェクトを新規作成します。【書き込み権限付きキーが必要】
|
|
799
|
+
|
|
800
|
+
■ 各フィールドの役割:
|
|
801
|
+
• name: プロジェクト名(必須)
|
|
802
|
+
• description: 目的・概要のメモ(省略可)
|
|
803
|
+
• color: 管理画面での表示カラー。カラーコード(例: #3b82f6)で指定(省略可)
|
|
804
|
+
• status: 進行状況。"active"(進行中)/ "completed"(完了)/ "archived"(アーカイブ)。デフォルト: "active"
|
|
805
|
+
• due_date: プロジェクトの期限日。ISO8601形式(例: 2026-12-31)(省略可)
|
|
806
|
+
• approval_notify_setting_id: 承認タスク発生時にChatwork通知するための設定ID。
|
|
807
|
+
list_chatwork_settings で確認したIDを指定。承認フローのあるプロジェクトで設定推奨。`,
|
|
808
|
+
annotations: { destructiveHint: false, idempotentHint: false },
|
|
809
|
+
inputSchema: {
|
|
810
|
+
type: 'object',
|
|
811
|
+
properties: {
|
|
812
|
+
name: { type: 'string', description: 'プロジェクト名(必須)' },
|
|
813
|
+
description: { type: 'string', description: 'プロジェクトの目的・概要(省略可)' },
|
|
814
|
+
color: { type: 'string', description: 'カラーコード(例: #3b82f6)省略可' },
|
|
815
|
+
status: { type: 'string', description: '進行状況: active(進行中)/ completed(完了)/ archived(アーカイブ)。デフォルト: active', enum: ['active', 'completed', 'archived'] },
|
|
816
|
+
due_date: { type: 'string', description: '期限日 ISO8601形式(例: 2026-12-31)省略可' },
|
|
817
|
+
approval_notify_setting_id: { type: 'string', description: '承認通知先ChatworkのID(list_chatwork_settingsで確認)省略可' },
|
|
818
|
+
},
|
|
819
|
+
required: ['name'],
|
|
820
|
+
},
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
name: 'update_project',
|
|
824
|
+
description: `既存のプロジェクトを更新します。【書き込み権限付きキーが必要】
|
|
825
|
+
指定したフィールドのみ更新され、省略したフィールドは現在値を維持します。
|
|
826
|
+
due_date や approval_notify_setting_id を null に設定すると値をクリアできます。
|
|
827
|
+
各フィールドの意味は create_project と同じです。`,
|
|
828
|
+
annotations: { destructiveHint: false, idempotentHint: true },
|
|
829
|
+
inputSchema: {
|
|
830
|
+
type: 'object',
|
|
831
|
+
properties: {
|
|
832
|
+
id: { type: 'string', description: 'プロジェクトID(list_projectsで確認)' },
|
|
833
|
+
name: { type: 'string', description: '新しいプロジェクト名(省略時は変更なし)' },
|
|
834
|
+
description: { type: 'string', description: '新しい説明(省略時は変更なし)' },
|
|
835
|
+
color: { type: 'string', description: '新しいカラーコード(省略時は変更なし)' },
|
|
836
|
+
status: { type: 'string', description: '新しい進行状況: active / completed / archived(省略時は変更なし)', enum: ['active', 'completed', 'archived'] },
|
|
837
|
+
due_date: { type: 'string', description: '新しい期限日(null でクリア、省略時は変更なし)' },
|
|
838
|
+
approval_notify_setting_id: { type: 'string', description: '新しいChatwork通知設定ID(null でクリア、省略時は変更なし)' },
|
|
839
|
+
},
|
|
840
|
+
required: ['id'],
|
|
841
|
+
},
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
name: 'delete_project',
|
|
845
|
+
description: 'プロジェクトを削除します。【書き込み権限付きキーが必要】この操作は元に戻せません。関連タスクの扱いはDB設定に準じます。',
|
|
846
|
+
annotations: { destructiveHint: true, idempotentHint: false },
|
|
847
|
+
inputSchema: {
|
|
848
|
+
type: 'object',
|
|
849
|
+
properties: {
|
|
850
|
+
id: { type: 'string', description: '削除するプロジェクトID' },
|
|
851
|
+
},
|
|
852
|
+
required: ['id'],
|
|
853
|
+
},
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
name: 'list_chatwork_settings',
|
|
857
|
+
description: `有効なChatwork連携設定の一覧を取得します(APIトークンは除外)。
|
|
858
|
+
返される id は以下の場面で使用します:
|
|
859
|
+
• create_project / update_project の approval_notify_setting_id — 承認タスクのChatwork通知先
|
|
860
|
+
• create_workflow / update_workflow のステップ内 chatwork_setting_id — アクションの送信先
|
|
861
|
+
• execute_workflow_action の chatwork_setting_id — 直接実行時の送信先
|
|
862
|
+
room_id フィールドはChatworkのルームIDです(設定名と合わせて目的のルームを特定してください)。`,
|
|
863
|
+
annotations: { readOnlyHint: true },
|
|
864
|
+
inputSchema: { type: 'object', properties: {} },
|
|
865
|
+
},
|
|
753
866
|
// 書き込みツール(読み書き可能キーが必要)
|
|
754
867
|
{
|
|
755
868
|
name: 'create_knowledge',
|
|
@@ -1204,6 +1317,85 @@ async function executeTool(name, args) {
|
|
|
1204
1317
|
return `✅ ${data.message || JSON.stringify(data)}`;
|
|
1205
1318
|
}
|
|
1206
1319
|
|
|
1320
|
+
case 'list_projects': {
|
|
1321
|
+
const data = await callApi('/projects');
|
|
1322
|
+
if (!data.projects || data.projects.length === 0) return 'プロジェクトが登録されていません。';
|
|
1323
|
+
const lines = data.projects.map(p =>
|
|
1324
|
+
`- [${p.id}] ${p.name} [${p.status}]` +
|
|
1325
|
+
(p.due_date ? ` 期限:${p.due_date.slice(0, 10)}` : '') +
|
|
1326
|
+
` タスク:${p.task_count ?? 0}件` +
|
|
1327
|
+
(p.approval_notify_setting_id ? ` Chatwork通知:あり` : '') +
|
|
1328
|
+
(p.description ? `\n ${p.description}` : '')
|
|
1329
|
+
);
|
|
1330
|
+
return `プロジェクト一覧(${data.projects.length}件):\n\n${lines.join('\n')}`;
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
case 'get_project': {
|
|
1334
|
+
const data = await callApi(`/projects/${args.id}`);
|
|
1335
|
+
const parts = [
|
|
1336
|
+
`名前: ${data.name}`,
|
|
1337
|
+
`ステータス: ${data.status}`,
|
|
1338
|
+
data.due_date ? `期限: ${data.due_date.slice(0, 10)}` : '',
|
|
1339
|
+
data.description ? `説明: ${data.description}` : '',
|
|
1340
|
+
data.color ? `カラー: ${data.color}` : '',
|
|
1341
|
+
data.chatwork_setting_name ? `Chatwork通知先: ${data.chatwork_setting_name} (room_id: ${data.chatwork_room_id})` : '',
|
|
1342
|
+
`\nID: ${data.id}`,
|
|
1343
|
+
`作成: ${data.created_at?.slice(0, 10)}`,
|
|
1344
|
+
].filter(Boolean);
|
|
1345
|
+
let result = parts.join('\n');
|
|
1346
|
+
if (data.tasks && data.tasks.length > 0) {
|
|
1347
|
+
const taskLines = data.tasks.map(t =>
|
|
1348
|
+
` • [${t.id}] ${t.title} [${t.status}/${t.priority}]` +
|
|
1349
|
+
(t.due_date ? ` 期限:${t.due_date.slice(0, 10)}` : '')
|
|
1350
|
+
);
|
|
1351
|
+
result += `\n\nタスク(${data.tasks.length}件):\n${taskLines.join('\n')}`;
|
|
1352
|
+
} else {
|
|
1353
|
+
result += '\n\nタスク: なし';
|
|
1354
|
+
}
|
|
1355
|
+
return result;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
case 'create_project': {
|
|
1359
|
+
const body = {};
|
|
1360
|
+
const pFields = ['name', 'description', 'color', 'status', 'due_date', 'approval_notify_setting_id'];
|
|
1361
|
+
pFields.forEach(f => { if (args[f] !== undefined) body[f] = args[f]; });
|
|
1362
|
+
const data = await callApi('/projects', {
|
|
1363
|
+
method: 'POST',
|
|
1364
|
+
body: JSON.stringify(body),
|
|
1365
|
+
});
|
|
1366
|
+
return `✅ ${data.message}\nID: ${data.id}\n名前: ${data.name}\nステータス: ${data.status}` +
|
|
1367
|
+
(data.due_date ? `\n期限: ${data.due_date.slice(0, 10)}` : '');
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
case 'update_project': {
|
|
1371
|
+
const body = {};
|
|
1372
|
+
const pTextFields = ['name', 'description', 'color', 'status'];
|
|
1373
|
+
pTextFields.forEach(f => { if (args[f] !== undefined) body[f] = args[f]; });
|
|
1374
|
+
const pNullable = ['due_date', 'approval_notify_setting_id'];
|
|
1375
|
+
pNullable.forEach(f => { if (args[f] !== undefined) body[f] = args[f]; });
|
|
1376
|
+
const data = await callApi(`/projects/${args.id}`, {
|
|
1377
|
+
method: 'PATCH',
|
|
1378
|
+
body: JSON.stringify(body),
|
|
1379
|
+
});
|
|
1380
|
+
return `✅ ${data.message}\nID: ${data.id}`;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
case 'delete_project': {
|
|
1384
|
+
const data = await callApi(`/projects/${args.id}`, { method: 'DELETE' });
|
|
1385
|
+
return `✅ ${data.message}\n削除したプロジェクト: ${data.deleted?.name} (ID: ${data.deleted?.id})`;
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
case 'list_chatwork_settings': {
|
|
1389
|
+
const data = await callApi('/chatwork-settings');
|
|
1390
|
+
if (!data.settings || data.settings.length === 0) return 'Chatwork連携設定が登録されていません。管理画面「設定 → 外部連携 → ChatWork」から設定してください。';
|
|
1391
|
+
const lines = data.settings.map(s =>
|
|
1392
|
+
`- [${s.id}] ${s.name} (room_id: ${s.room_id || '未設定'})` +
|
|
1393
|
+
(s.ai_agent_enabled ? ' AI対応' : '') +
|
|
1394
|
+
(s.ai_provider ? ` [${s.ai_provider}]` : '')
|
|
1395
|
+
);
|
|
1396
|
+
return `Chatwork設定一覧(${data.settings.length}件):\n\n${lines.join('\n')}\n\n※ セキュリティのためAPIトークンは表示されません。`;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1207
1399
|
default:
|
|
1208
1400
|
throw new Error(`Unknown tool: ${name}`);
|
|
1209
1401
|
}
|
|
@@ -1212,7 +1404,7 @@ async function executeTool(name, args) {
|
|
|
1212
1404
|
// ── MCPサーバー起動 ────────────────────────────────────────────
|
|
1213
1405
|
async function main() {
|
|
1214
1406
|
const server = new Server(
|
|
1215
|
-
{ name: 'owner-clone-ai', version: '1.
|
|
1407
|
+
{ name: 'owner-clone-ai', version: '1.9.0' },
|
|
1216
1408
|
{ capabilities: { tools: {} } }
|
|
1217
1409
|
);
|
|
1218
1410
|
|