owner-clone-ai-mcp 2.1.3 → 2.1.7

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.
@@ -179,7 +179,7 @@ text_content(自由テキスト)か、content(カテゴリ別の構造化
179
179
  操作(operations 配列・複数可・上から順に適用。1つでも失敗したら全体を保存しない=安全):
180
180
  • replace_text {find, replace}: 完全一致置換。既定は「全体で1件のみ一致」が条件(複数一致はエラー=誤置換防止。全て置換するときだけ replace_all:true)
181
181
  • replace_after {anchor, new_text}: anchor はそのまま残し、その直後から末尾までを差し替え
182
- • replace_between {from_anchor, to_anchor, new_text}: 両anchorは残し、間だけを差し替え
182
+ • replace_between {from_anchor, to_anchor, new_text}: 両anchorは残し、間だけを差し替え(new_text は replace という名前でも受理。未指定はエラー・削除は "" を明示)
183
183
  • append {text}: 末尾に追記(field 省略時は body)
184
184
  • set_field {field, value}: 指定フィールドの値だけ差し替え(他フィールドは無改変)
185
185
  各操作に field(対象フィールド名)を指定可。省略時は本文系の全文字列フィールドを横断して検索します。画像・資料・配列フィールド(images/files/services等)は対象外(update_knowledge を使用)。
@@ -397,9 +397,37 @@ text_content(自由テキスト)か、content(カテゴリ別の構造化
397
397
  },
398
398
  },
399
399
  },
400
+ {
401
+ name: 'list_knowledge_revision_notes',
402
+ description: `ナレッジに付けられた修正指示(人間が画面で入れた指摘)の一覧を取得します。
403
+ quote=該当箇所の引用・para_index=段落位置・instruction=指示本文・author_name=誰が・status=open/resolved。
404
+ 反映した指示は resolve_knowledge_revision_note で解決済みにしてください。quoteが本文に見つからない場合は整形記号を無視して照合し、それでも不一致なら未解決のまま理由を報告します(黙って無視しない)。`,
405
+ annotations: { readOnlyHint: true },
406
+ inputSchema: { type: 'object', properties: { knowledge_id: { type: 'string', description: '対象ナレッジのID' } }, required: ['knowledge_id'] },
407
+ },
408
+ {
409
+ name: 'resolve_knowledge_revision_note',
410
+ description: '修正指示を反映済み(resolved)にします【書き込み権限付きキーが必要】。新規バージョン作成モードでは applied_knowledge_id に作成した新ナレッジIDを渡してください。',
411
+ annotations: { destructiveHint: false, idempotentHint: true },
412
+ inputSchema: { type: 'object', properties: {
413
+ note_id: { type: 'string' },
414
+ applied_knowledge_id: { type: 'string', description: '反映先の新ナレッジID(任意)' },
415
+ }, required: ['note_id'] },
416
+ },
400
417
  ];
401
418
 
402
419
  const handlers = {
420
+ async list_knowledge_revision_notes(args) {
421
+ const d = await callApi(`/knowledge/${args.knowledge_id}/revision-notes`);
422
+ const lines = (d.notes || []).map((n, i) =>
423
+ `${i + 1}. [${n.status}] (${n.target_type}${n.quote ? `|引用:「${String(n.quote).slice(0, 60)}」` : n.para_index != null ? `|段落${n.para_index + 1}` : ''}) ${n.instruction}|👤${n.author_name || '-'}|id:${n.id}`);
424
+ return `✍️ 修正指示 ${lines.length}件\n${lines.join('\n') || '(指示はありません)'}\n\n${d.guide || ''}`;
425
+ },
426
+ async resolve_knowledge_revision_note(args) {
427
+ const body = args.applied_knowledge_id ? { applied_knowledge_id: args.applied_knowledge_id } : {};
428
+ await callApi(`/knowledge/revision-notes/${args.note_id}/resolve`, { method: 'POST', body: JSON.stringify(body) });
429
+ return `✅ 修正指示 ${args.note_id} を解決済みにしました`;
430
+ },
403
431
  async search_knowledge(args) {
404
432
  const data = await callApi('/knowledge/search', {
405
433
  method: 'POST',
@@ -30,7 +30,8 @@ Chatwork連携が設定されている場合は、設定名とルームIDも返
30
30
  • color: 管理画面での表示カラー(例: #3b82f6)(省略可)
31
31
  • status: active(進行中)/ completed(完了)/ archived(アーカイブ)。デフォルト: active
32
32
  • due_date: プロジェクトの期限日。ISO8601形式(省略可)
33
- • approval_notify_setting_id: 承認タスク発生時にChatwork通知するための設定ID(省略可)`,
33
+ • approval_notify_setting_id: 承認タスク発生時にChatwork通知するための設定ID(省略可)
34
+ • root_goal: プロジェクトOSのルートゴール {title, purpose, done_criteria}。指定すると分解(plan_project_goals)まで一撃で進められる(省略可)`,
34
35
  annotations: { destructiveHint: false, idempotentHint: false },
35
36
  inputSchema: {
36
37
  type: 'object',
@@ -41,6 +42,7 @@ Chatwork連携が設定されている場合は、設定名とルームIDも返
41
42
  status: { type: 'string', enum: ['active', 'completed', 'archived'], description: '進行状況: active(デフォルト)/ completed / archived' },
42
43
  due_date: { type: 'string', description: '期限日 ISO8601形式(例: 2026-12-31)省略可' },
43
44
  approval_notify_setting_id: { type: 'string', description: '承認通知先ChatworkのID(list_chatwork_settingsで確認)省略可' },
45
+ root_goal: { type: 'object', description: 'ルートゴール {title(必須), purpose, done_criteria}。指定するとプロジェクトOSで分解可能な状態まで一撃で作成', properties: { title: { type: 'string' }, purpose: { type: 'string' }, done_criteria: { type: 'string' } } },
44
46
  },
45
47
  required: ['name'],
46
48
  },
@@ -122,7 +124,7 @@ const handlers = {
122
124
 
123
125
  async create_project(args) {
124
126
  const body = {};
125
- const pFields = ['name', 'description', 'color', 'status', 'due_date', 'approval_notify_setting_id'];
127
+ const pFields = ['name', 'description', 'color', 'status', 'due_date', 'approval_notify_setting_id', 'root_goal'];
126
128
  pFields.forEach(f => { if (args[f] !== undefined) body[f] = args[f]; });
127
129
  const data = await callApi('/projects', { method: 'POST', body: JSON.stringify(body) });
128
130
  return `✅ ${data.message}\nID: ${data.id}\n名前: ${data.name}\nステータス: ${data.status}` +
@@ -136,6 +136,9 @@ assignee_id を調べるために使います。先頭はオーナー自身(ro
136
136
  assignee_id: { type: 'string', description: '担当者のメンバーID(list_team_members のUUID。空文字で担当者解除)' },
137
137
  assignee_name: { type: 'string', description: '担当者の名前(部分一致)。"解除"で担当者を外す。オーナー(APIキーの持ち主)も名前で指定でき、"自分" と書けばオーナー。⚠️ オーナーとメンバーの両方に部分一致すると候補一覧のエラーになるため、フルネームか assignee_id を使う' },
138
138
  project_id: { type: 'string', description: '紐づけるプロジェクトのID(list_projects のUUID。空文字で解除)' },
139
+ owner_note: { type: 'string', description: 'オーナーの補足指示(作業指示書で本文より優先。空文字で削除)' },
140
+ department: { type: 'string', description: '実行部署名(プロジェクトOSの【部署】定義の名前。空文字で解除)' },
141
+ resource_refs: { type: 'array', items: { type: 'object' }, description: 'このタスクで使うもの [{type: knowledge|skill|agent, name, id?}]。丸ごと置き換え・ナレッジは棚にも自動掲載' },
139
142
  },
140
143
  required: ['id'],
141
144
  },
@@ -262,7 +265,7 @@ const handlers = {
262
265
 
263
266
  async update_task(args) {
264
267
  const body = {};
265
- ['title','body','priority','due_date','status','assignee_id','assignee_name','project_id']
268
+ ['title','body','priority','due_date','status','assignee_id','assignee_name','project_id','owner_note','department','resource_refs']
266
269
  .forEach(f => { if (args[f] !== undefined) body[f] = args[f]; });
267
270
  const data = await callApi(`/tasks/${args.id}`, { method: 'PATCH', body: JSON.stringify(body) });
268
271
  return `✅ ${data.message}\nID: ${data.id}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "owner-clone-ai-mcp",
3
- "version": "2.1.3",
3
+ "version": "2.1.7",
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": {