@tk_wfl/o2n-mcp-server 0.1.2 → 0.2.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/dist/index.js CHANGED
@@ -1,18 +1,54 @@
1
1
  #!/usr/bin/env node
2
- import path from 'node:path';
2
+ import crypto from 'node:crypto';
3
3
  import { promises as fs } from 'node:fs';
4
4
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
5
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
6
  import { z } from 'zod';
7
- import { scanVault, runMigration, NotionClient, NotionApi, StateStore, writeReport, buildReport, reportPath, statePath, loadCredentials, } from '@tk_wfl/o2n-core';
7
+ import { scanVault, runMigration, NotionClient, NotionApi, StateStore, writeReport, buildReport, reportPath, statePath, loadCredentials, assertObsidianVault, NotAnObsidianVaultError, VaultNotAllowedError, parseStateFile, planHash, } from '@tk_wfl/o2n-core';
8
8
  import { loadOrCreatePlan, savePlan } from './plan-store.js';
9
9
  import { getJob, setJob } from './jobs.js';
10
10
  const server = new McpServer({ name: 'o2n-mcp-server', version: '0.1.0' });
11
11
  function text(content) {
12
12
  return { content: [{ type: 'text', text: content }] };
13
13
  }
14
+ const PREPARE_TTL_MS = 10 * 60 * 1000;
15
+ const preparedMigrations = new Map();
16
+ function allowedVaultRoots() {
17
+ const raw = process.env.O2N_ALLOWED_VAULTS;
18
+ if (!raw)
19
+ return null;
20
+ const roots = raw.split(',').map((p) => p.trim()).filter(Boolean);
21
+ return roots.length > 0 ? roots : null;
22
+ }
23
+ function mcpWriteEnabled() {
24
+ return process.env.O2N_ENABLE_MCP_WRITE === '1';
25
+ }
26
+ function writeTokenMatches(token) {
27
+ const configured = process.env.O2N_MCP_WRITE_TOKEN;
28
+ return configured !== undefined && configured.length >= 16 && token === configured;
29
+ }
30
+ /** vaultPathが実際にObsidian vaultらしいディレクトリでなければエラーを返す(任意パスアクセス対策) */
31
+ async function guardVaultPath(vaultPath) {
32
+ try {
33
+ const roots = allowedVaultRoots();
34
+ if (!roots) {
35
+ return { error: text('O2N_ALLOWED_VAULTS が未設定のため、MCPからのvaultアクセスを拒否しました。許可するvaultの実パスをカンマ区切りで設定してください。') };
36
+ }
37
+ const resolved = await assertObsidianVault(vaultPath, { allowedVaultRoots: roots });
38
+ return { error: null, vaultPath: resolved };
39
+ }
40
+ catch (err) {
41
+ if (err instanceof NotAnObsidianVaultError || err instanceof VaultNotAllowedError) {
42
+ return { error: text(err.message) };
43
+ }
44
+ throw err;
45
+ }
46
+ }
14
47
  server.tool('scan_vault', 'Obsidian vaultを走査してインベントリ要約を返す。副作用なし(読み取りのみ)。', { vaultPath: z.string().describe('Obsidian vaultの絶対パス') }, async ({ vaultPath }) => {
15
- const inventory = await scanVault(vaultPath);
48
+ const guard = await guardVaultPath(vaultPath);
49
+ if (guard.error)
50
+ return guard.error;
51
+ const inventory = await scanVault(guard.vaultPath);
16
52
  const summary = {
17
53
  vaultPath: inventory.vaultPath,
18
54
  noteCount: inventory.notes.length,
@@ -29,7 +65,10 @@ server.tool('get_plan', '現在の移行計画を返す。存在しなければ
29
65
  vaultPath: z.string().describe('Obsidian vaultの絶対パス'),
30
66
  parentPageId: z.string().optional().describe('移行先のNotion親ページID(未指定なら既存計画の値を使う)'),
31
67
  }, async ({ vaultPath, parentPageId }) => {
32
- const plan = await loadOrCreatePlan(vaultPath, parentPageId);
68
+ const guard = await guardVaultPath(vaultPath);
69
+ if (guard.error)
70
+ return guard.error;
71
+ const plan = await loadOrCreatePlan(guard.vaultPath, parentPageId);
33
72
  return text(JSON.stringify(plan, null, 2));
34
73
  });
35
74
  const folderPlanSchema = z.object({
@@ -37,36 +76,76 @@ const folderPlanSchema = z.object({
37
76
  mode: z.enum(['page_tree', 'database']),
38
77
  suggestionReason: z.string().optional(),
39
78
  });
40
- server.tool('update_plan', '移行計画を部分更新する(folders・parentPageId・skipListなど)。', {
79
+ server.tool('update_plan', '移行計画を部分更新する(folders・parentPageId・skipListなど)。O2N_ENABLE_MCP_WRITE=1 と確認トークンが必要。', {
41
80
  vaultPath: z.string().describe('Obsidian vaultの絶対パス'),
42
81
  patch: z
43
82
  .object({
44
83
  parentPageId: z.string().optional(),
45
84
  folders: z.array(folderPlanSchema).optional(),
46
85
  skipList: z.array(z.string()).optional(),
86
+ confirmationToken: z.string().optional(),
47
87
  })
48
88
  .describe('計画への部分更新'),
49
89
  }, async ({ vaultPath, patch }) => {
50
- const plan = await loadOrCreatePlan(vaultPath);
90
+ const guard = await guardVaultPath(vaultPath);
91
+ if (guard.error)
92
+ return guard.error;
93
+ if (!mcpWriteEnabled())
94
+ return text('MCPからの計画更新は無効です。O2N_ENABLE_MCP_WRITE=1 を設定してください。');
95
+ if (!patch.confirmationToken || !writeTokenMatches(patch.confirmationToken))
96
+ return text('confirmationToken が一致しないため、計画更新を拒否しました。');
97
+ const plan = await loadOrCreatePlan(guard.vaultPath);
51
98
  if (patch.parentPageId)
52
99
  plan.parentPageId = patch.parentPageId;
53
100
  if (patch.folders)
54
101
  plan.folders = patch.folders;
55
102
  if (patch.skipList)
56
103
  plan.skipList = patch.skipList;
57
- await savePlan(vaultPath, plan);
104
+ await savePlan(guard.vaultPath, plan);
58
105
  return text(JSON.stringify(plan, null, 2));
59
106
  });
60
- server.tool('start_migration', '移行を開始する(バックグラウンド実行)。呼び出し前に必ずユーザーへ移行内容(対象vault・移行先ページ・dry-runか否か)を提示し、' +
61
- '明示的な確認を得ること。ユーザーの明示的な確認なしに呼び出さないこと。進捗は migration_status で確認する。', {
107
+ server.tool('prepare_migration', '移行内容を固定し、commit_migrationで使用するrequestIdを返す。ここではNotionへの書き込みを開始しない。', {
62
108
  vaultPath: z.string().describe('Obsidian vaultの絶対パス'),
63
109
  parentPageId: z.string().describe('移行先のNotion親ページID'),
64
- dryRun: z.boolean().default(false).describe('trueの場合、書き込みAPIを呼ばずシミュレーションのみ行う'),
110
+ dryRun: z.boolean().default(true).describe('trueの場合、書き込みAPIを呼ばずシミュレーションのみ行う'),
65
111
  }, async ({ vaultPath, parentPageId, dryRun }) => {
66
- const resolved = path.resolve(vaultPath);
112
+ const guard = await guardVaultPath(vaultPath);
113
+ if (guard.error)
114
+ return guard.error;
115
+ const resolved = guard.vaultPath;
116
+ if (!dryRun && !mcpWriteEnabled()) {
117
+ return text('MCPからの本実行は無効です。O2N_ENABLE_MCP_WRITE=1 と O2N_MCP_WRITE_TOKEN を設定し、commit_migrationで確認トークンを渡してください。');
118
+ }
119
+ const inventory = await scanVault(resolved);
120
+ const plan = await loadOrCreatePlan(resolved, parentPageId);
121
+ const request = {
122
+ requestId: crypto.randomUUID(),
123
+ vaultPath: resolved,
124
+ parentPageId: plan.parentPageId,
125
+ planHash: planHash(plan),
126
+ noteCount: inventory.notes.length,
127
+ attachmentCount: inventory.attachments.length,
128
+ dryRun,
129
+ createdAt: Date.now(),
130
+ };
131
+ preparedMigrations.set(request.requestId, request);
132
+ return text(JSON.stringify({
133
+ requestId: request.requestId,
134
+ vaultPath: request.vaultPath,
135
+ parentPageId: request.parentPageId,
136
+ dryRun: request.dryRun,
137
+ noteCount: request.noteCount,
138
+ attachmentCount: request.attachmentCount,
139
+ planHash: request.planHash,
140
+ commitInstructions: dryRun
141
+ ? 'commit_migration に requestId を渡すとdry-runを開始します。'
142
+ : '本実行には O2N_ENABLE_MCP_WRITE=1 と O2N_MCP_WRITE_TOKEN に一致する confirmationToken が必要です。',
143
+ }, null, 2));
144
+ });
145
+ async function startMigrationJob(resolved, parentPageId, dryRun) {
67
146
  const existing = getJob(resolved);
68
147
  if (existing?.status === 'running') {
69
- return text(`既に移行が実行中です(進捗 ${existing.done}/${existing.total})。migration_status で確認してください。`);
148
+ return `既に移行が実行中です(進捗 ${existing.done}/${existing.total})。migration_status で確認してください。`;
70
149
  }
71
150
  const inventory = await scanVault(resolved);
72
151
  const plan = await loadOrCreatePlan(resolved, parentPageId);
@@ -79,7 +158,14 @@ server.tool('start_migration', '移行を開始する(バックグラウンド
79
158
  throw new Error('Notionと連携されていません。CLIで `o2n login` を実行するか、NOTION_TOKEN を設定してください。');
80
159
  const client = new NotionClient({ token, dryRun });
81
160
  const api = new NotionApi(client);
82
- const state = await StateStore.load(resolved, plan.parentPageId, { readOnly: dryRun });
161
+ const me = dryRun ? undefined : await api.getMe();
162
+ const state = await StateStore.load(resolved, plan.parentPageId, {
163
+ readOnly: dryRun,
164
+ planHash: planHash(plan),
165
+ notionWorkspaceId: dryRun ? undefined : (me?.bot?.workspace_name ?? 'unknown-workspace'),
166
+ notionBotId: dryRun ? undefined : (me?.id ?? 'unknown-bot'),
167
+ allowUnsignedState: false,
168
+ });
83
169
  const entries = await runMigration({
84
170
  vaultPath: resolved,
85
171
  plan,
@@ -114,16 +200,52 @@ server.tool('start_migration', '移行を開始する(バックグラウンド
114
200
  });
115
201
  }
116
202
  })();
117
- return text(`移行を開始しました(${dryRun ? 'dry-run' : '本実行'})。対象: ${inventory.notes.length}ノート・${inventory.attachments.length}添付。` +
203
+ return (`移行を開始しました(${dryRun ? 'dry-run' : '本実行'})。対象: ${inventory.notes.length}ノート・${inventory.attachments.length}添付。` +
118
204
  `推定所要時間: 約${Math.ceil(estimateSeconds / 60)}分。migration_status で進捗を確認してください。`);
205
+ }
206
+ server.tool('commit_migration', 'prepare_migrationで固定した内容を実行する。dry-run以外はO2N_MCP_WRITE_TOKENと一致するconfirmationTokenが必須。', {
207
+ requestId: z.string().describe('prepare_migrationが返したrequestId'),
208
+ confirmationToken: z.string().optional().describe('本実行時にO2N_MCP_WRITE_TOKENと一致している必要がある確認トークン'),
209
+ }, async ({ requestId, confirmationToken }) => {
210
+ const prepared = preparedMigrations.get(requestId);
211
+ if (!prepared)
212
+ return text('requestId が見つかりません。prepare_migration をやり直してください。');
213
+ if (Date.now() - prepared.createdAt > PREPARE_TTL_MS) {
214
+ preparedMigrations.delete(requestId);
215
+ return text('requestId の有効期限が切れました。prepare_migration をやり直してください。');
216
+ }
217
+ if (!prepared.dryRun) {
218
+ if (!mcpWriteEnabled())
219
+ return text('MCPからの本実行は無効です。O2N_ENABLE_MCP_WRITE=1 を設定してください。');
220
+ if (!confirmationToken || !writeTokenMatches(confirmationToken))
221
+ return text('confirmationToken が一致しないため、本実行を拒否しました。');
222
+ }
223
+ const inventory = await scanVault(prepared.vaultPath);
224
+ const plan = await loadOrCreatePlan(prepared.vaultPath, prepared.parentPageId);
225
+ if (planHash(plan) !== prepared.planHash || inventory.notes.length !== prepared.noteCount || inventory.attachments.length !== prepared.attachmentCount) {
226
+ preparedMigrations.delete(requestId);
227
+ return text('prepare_migration後に計画またはvault内容が変わったため、実行を拒否しました。prepare_migrationをやり直してください。');
228
+ }
229
+ preparedMigrations.delete(requestId);
230
+ return text(await startMigrationJob(prepared.vaultPath, prepared.parentPageId, prepared.dryRun));
231
+ });
232
+ server.tool('start_migration', '廃止済み。安全な2段階フローの prepare_migration → commit_migration を使用してください。', {
233
+ vaultPath: z.string().describe('Obsidian vaultの絶対パス'),
234
+ parentPageId: z.string().describe('移行先のNotion親ページID'),
235
+ dryRun: z.boolean().default(true).describe('互換性のための引数。実行はされません。'),
236
+ }, async () => {
237
+ return text('start_migration は安全上の理由で無効化されました。prepare_migration で内容を固定し、commit_migration で実行してください。');
119
238
  });
120
239
  server.tool('migration_status', '進行中/完了した移行の進捗(done / failed / pending件数、現在のパス)を返す。', { vaultPath: z.string().describe('Obsidian vaultの絶対パス') }, async ({ vaultPath }) => {
121
- const resolved = path.resolve(vaultPath);
240
+ const guard = await guardVaultPath(vaultPath);
241
+ if (guard.error)
242
+ return guard.error;
243
+ const resolved = guard.vaultPath;
122
244
  const job = getJob(resolved);
123
245
  let stateSummary = {};
124
246
  try {
125
247
  const raw = await fs.readFile(statePath(resolved), 'utf-8');
126
- const state = JSON.parse(raw);
248
+ const state = parseStateFile(JSON.parse(raw));
127
249
  stateSummary = Object.values(state.notes).reduce((acc, n) => {
128
250
  acc[n.status] = (acc[n.status] ?? 0) + 1;
129
251
  return acc;
@@ -135,8 +257,11 @@ server.tool('migration_status', '進行中/完了した移行の進捗(done /
135
257
  return text(JSON.stringify({ job: job ?? { status: 'not_started' }, noteStatusCounts: stateSummary }, null, 2));
136
258
  });
137
259
  server.tool('get_report', 'レポート(.o2n/report.md)の内容を返す。', { vaultPath: z.string().describe('Obsidian vaultの絶対パス') }, async ({ vaultPath }) => {
260
+ const guard = await guardVaultPath(vaultPath);
261
+ if (guard.error)
262
+ return guard.error;
138
263
  try {
139
- const content = await fs.readFile(reportPath(vaultPath), 'utf-8');
264
+ const content = await fs.readFile(reportPath(guard.vaultPath), 'utf-8');
140
265
  return text(content);
141
266
  }
142
267
  catch {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plan-store.d.ts","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM5E,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAYvG;AAED,wBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF"}
1
+ {"version":3,"file":"plan-store.d.ts","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMhG,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAYvG;AAED,wBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF"}
@@ -1,13 +1,13 @@
1
1
  import { promises as fs } from 'node:fs';
2
2
  import path from 'node:path';
3
- import { scanVault, buildPlan } from '@tk_wfl/o2n-core';
3
+ import { scanVault, buildPlan, parseMigrationPlan } from '@tk_wfl/o2n-core';
4
4
  function planPath(vaultPath) {
5
5
  return path.join(vaultPath, '.o2n', 'plan.json');
6
6
  }
7
7
  export async function loadOrCreatePlan(vaultPath, parentPageId) {
8
8
  try {
9
9
  const raw = await fs.readFile(planPath(vaultPath), 'utf-8');
10
- const plan = JSON.parse(raw);
10
+ const plan = parseMigrationPlan(JSON.parse(raw));
11
11
  if (parentPageId)
12
12
  plan.parentPageId = parentPageId;
13
13
  return plan;
@@ -1 +1 @@
1
- {"version":3,"file":"plan-store.js","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAsB,MAAM,kBAAkB,CAAC;AAE5E,SAAS,QAAQ,CAAC,SAAiB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,YAAqB;IAC7E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAC9C,IAAI,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,IAAmB;IACnE,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"plan-store.js","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAsB,MAAM,kBAAkB,CAAC;AAEhG,SAAS,QAAQ,CAAC,SAAiB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,YAAqB;IAC7E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,IAAmB;IACnE,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tk_wfl/o2n-mcp-server",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "o2n(Obsidian→Notion移行ツール)のローカルMCPサーバー",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -25,7 +25,8 @@
25
25
  "dist"
26
26
  ],
27
27
  "publishConfig": {
28
- "access": "public"
28
+ "access": "public",
29
+ "provenance": true
29
30
  },
30
31
  "scripts": {
31
32
  "build": "tsc -p tsconfig.json && chmod +x dist/index.js",
@@ -33,7 +34,7 @@
33
34
  "typecheck": "tsc -p tsconfig.json --noEmit"
34
35
  },
35
36
  "dependencies": {
36
- "@tk_wfl/o2n-core": "^0.1.0",
37
+ "@tk_wfl/o2n-core": "^0.2.0",
37
38
  "@modelcontextprotocol/sdk": "^1.9.0",
38
39
  "zod": "^4.4.3"
39
40
  },