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.
Files changed (2) hide show
  1. package/index.js +195 -3
  2. 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: 'AIパートナーの設定(システムプロンプト・ルール・対話フロー)と関連ナレッジを取得します。AIパートナーに設定されたナレッジ参照モード(semantic/full_text/two_step_rag/smart_full_text)でナレッジを検索し、Claude Codeがそのパートナーの人格・知識で回答できるようにします。追加のAI課金は発生しません。',
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.8.0' },
1407
+ { name: 'owner-clone-ai', version: '1.9.0' },
1216
1408
  { capabilities: { tools: {} } }
1217
1409
  );
1218
1410
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "owner-clone-ai-mcp",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "MCP server for Owner Clone AI — exposes knowledge and agent presets to Claude Code",
5
5
  "main": "index.js",
6
6
  "bin": {