contentbase 0.4.0 → 0.4.1

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 (322) hide show
  1. package/dist/adapters/node-fs.d.ts +17 -0
  2. package/dist/adapters/node-fs.d.ts.map +1 -0
  3. package/dist/adapters/node-fs.js +71 -0
  4. package/dist/adapters/node-fs.js.map +1 -0
  5. package/dist/ast-query.d.ts +44 -0
  6. package/dist/ast-query.d.ts.map +1 -0
  7. package/dist/ast-query.js +95 -0
  8. package/dist/ast-query.js.map +1 -0
  9. package/dist/base-model.d.ts +8 -0
  10. package/dist/base-model.d.ts.map +1 -0
  11. package/dist/base-model.js +12 -0
  12. package/dist/base-model.js.map +1 -0
  13. package/dist/cli/commands/action.d.ts +2 -0
  14. package/dist/cli/commands/action.d.ts.map +1 -0
  15. package/dist/cli/commands/action.js +73 -0
  16. package/dist/cli/commands/action.js.map +1 -0
  17. package/dist/cli/commands/api/endpoints/actions.d.ts +13 -0
  18. package/dist/cli/commands/api/endpoints/actions.d.ts.map +1 -0
  19. package/dist/cli/commands/api/endpoints/actions.js +28 -0
  20. package/dist/cli/commands/api/endpoints/actions.js.map +1 -0
  21. package/dist/cli/commands/api/endpoints/doc.d.ts +5 -0
  22. package/dist/cli/commands/api/endpoints/doc.d.ts.map +1 -0
  23. package/dist/cli/commands/api/endpoints/doc.js +186 -0
  24. package/dist/cli/commands/api/endpoints/doc.js.map +1 -0
  25. package/dist/cli/commands/api/endpoints/docs-index.d.ts +8 -0
  26. package/dist/cli/commands/api/endpoints/docs-index.d.ts.map +1 -0
  27. package/dist/cli/commands/api/endpoints/docs-index.js +23 -0
  28. package/dist/cli/commands/api/endpoints/docs-index.js.map +1 -0
  29. package/dist/cli/commands/api/endpoints/document.d.ts +47 -0
  30. package/dist/cli/commands/api/endpoints/document.d.ts.map +1 -0
  31. package/dist/cli/commands/api/endpoints/document.js +146 -0
  32. package/dist/cli/commands/api/endpoints/document.js.map +1 -0
  33. package/dist/cli/commands/api/endpoints/documents.d.ts +35 -0
  34. package/dist/cli/commands/api/endpoints/documents.d.ts.map +1 -0
  35. package/dist/cli/commands/api/endpoints/documents.js +56 -0
  36. package/dist/cli/commands/api/endpoints/documents.js.map +1 -0
  37. package/dist/cli/commands/api/endpoints/index.d.ts +22 -0
  38. package/dist/cli/commands/api/endpoints/index.d.ts.map +1 -0
  39. package/dist/cli/commands/api/endpoints/index.js +38 -0
  40. package/dist/cli/commands/api/endpoints/index.js.map +1 -0
  41. package/dist/cli/commands/api/endpoints/inspect.d.ts +10 -0
  42. package/dist/cli/commands/api/endpoints/inspect.d.ts.map +1 -0
  43. package/dist/cli/commands/api/endpoints/inspect.js +15 -0
  44. package/dist/cli/commands/api/endpoints/inspect.js.map +1 -0
  45. package/dist/cli/commands/api/endpoints/models.d.ts +5 -0
  46. package/dist/cli/commands/api/endpoints/models.d.ts.map +1 -0
  47. package/dist/cli/commands/api/endpoints/models.js +9 -0
  48. package/dist/cli/commands/api/endpoints/models.js.map +1 -0
  49. package/dist/cli/commands/api/endpoints/query.d.ts +40 -0
  50. package/dist/cli/commands/api/endpoints/query.d.ts.map +1 -0
  51. package/dist/cli/commands/api/endpoints/query.js +106 -0
  52. package/dist/cli/commands/api/endpoints/query.js.map +1 -0
  53. package/dist/cli/commands/api/endpoints/root.d.ts +5 -0
  54. package/dist/cli/commands/api/endpoints/root.d.ts.map +1 -0
  55. package/dist/cli/commands/api/endpoints/root.js +7 -0
  56. package/dist/cli/commands/api/endpoints/root.js.map +1 -0
  57. package/dist/cli/commands/api/endpoints/search-reindex.d.ts +10 -0
  58. package/dist/cli/commands/api/endpoints/search-reindex.d.ts.map +1 -0
  59. package/dist/cli/commands/api/endpoints/search-reindex.js +38 -0
  60. package/dist/cli/commands/api/endpoints/search-reindex.js.map +1 -0
  61. package/dist/cli/commands/api/endpoints/search-status.d.ts +7 -0
  62. package/dist/cli/commands/api/endpoints/search-status.d.ts.map +1 -0
  63. package/dist/cli/commands/api/endpoints/search-status.js +33 -0
  64. package/dist/cli/commands/api/endpoints/search-status.js.map +1 -0
  65. package/dist/cli/commands/api/endpoints/search.d.ts +24 -0
  66. package/dist/cli/commands/api/endpoints/search.d.ts.map +1 -0
  67. package/dist/cli/commands/api/endpoints/search.js +61 -0
  68. package/dist/cli/commands/api/endpoints/search.js.map +1 -0
  69. package/dist/cli/commands/api/endpoints/semantic-search.d.ts +28 -0
  70. package/dist/cli/commands/api/endpoints/semantic-search.d.ts.map +1 -0
  71. package/dist/cli/commands/api/endpoints/semantic-search.js +76 -0
  72. package/dist/cli/commands/api/endpoints/semantic-search.js.map +1 -0
  73. package/dist/cli/commands/api/endpoints/text-search.d.ts +17 -0
  74. package/dist/cli/commands/api/endpoints/text-search.d.ts.map +1 -0
  75. package/dist/cli/commands/api/endpoints/text-search.js +55 -0
  76. package/dist/cli/commands/api/endpoints/text-search.js.map +1 -0
  77. package/dist/cli/commands/api/endpoints/validate.d.ts +12 -0
  78. package/dist/cli/commands/api/endpoints/validate.d.ts.map +1 -0
  79. package/dist/cli/commands/api/endpoints/validate.js +27 -0
  80. package/dist/cli/commands/api/endpoints/validate.js.map +1 -0
  81. package/dist/cli/commands/api/helpers.d.ts +8 -0
  82. package/dist/cli/commands/api/helpers.d.ts.map +1 -0
  83. package/dist/cli/commands/api/helpers.js +89 -0
  84. package/dist/cli/commands/api/helpers.js.map +1 -0
  85. package/dist/cli/commands/console.d.ts +2 -0
  86. package/dist/cli/commands/console.d.ts.map +1 -0
  87. package/dist/cli/commands/console.js +117 -0
  88. package/dist/cli/commands/console.js.map +1 -0
  89. package/dist/cli/commands/create.d.ts +2 -0
  90. package/dist/cli/commands/create.d.ts.map +1 -0
  91. package/dist/cli/commands/create.js +185 -0
  92. package/dist/cli/commands/create.js.map +1 -0
  93. package/dist/cli/commands/embed.d.ts +2 -0
  94. package/dist/cli/commands/embed.d.ts.map +1 -0
  95. package/dist/cli/commands/embed.js +231 -0
  96. package/dist/cli/commands/embed.js.map +1 -0
  97. package/dist/cli/commands/export.d.ts +2 -0
  98. package/dist/cli/commands/export.d.ts.map +1 -0
  99. package/dist/cli/commands/export.js +55 -0
  100. package/dist/cli/commands/export.js.map +1 -0
  101. package/dist/cli/commands/extract.d.ts +2 -0
  102. package/dist/cli/commands/extract.d.ts.map +1 -0
  103. package/dist/cli/commands/extract.js +149 -0
  104. package/dist/cli/commands/extract.js.map +1 -0
  105. package/dist/cli/commands/help.d.ts +2 -0
  106. package/dist/cli/commands/help.d.ts.map +1 -0
  107. package/dist/cli/commands/help.js +58 -0
  108. package/dist/cli/commands/help.js.map +1 -0
  109. package/dist/cli/commands/index.d.ts +18 -0
  110. package/dist/cli/commands/index.d.ts.map +1 -0
  111. package/dist/cli/commands/index.js +19 -0
  112. package/dist/cli/commands/index.js.map +1 -0
  113. package/dist/cli/commands/init.d.ts +2 -0
  114. package/dist/cli/commands/init.d.ts.map +1 -0
  115. package/dist/cli/commands/init.js +82 -0
  116. package/dist/cli/commands/init.js.map +1 -0
  117. package/dist/cli/commands/inspect.d.ts +2 -0
  118. package/dist/cli/commands/inspect.d.ts.map +1 -0
  119. package/dist/cli/commands/inspect.js +53 -0
  120. package/dist/cli/commands/inspect.js.map +1 -0
  121. package/dist/cli/commands/mcp.d.ts +2 -0
  122. package/dist/cli/commands/mcp.d.ts.map +1 -0
  123. package/dist/cli/commands/mcp.js +92 -0
  124. package/dist/cli/commands/mcp.js.map +1 -0
  125. package/dist/cli/commands/search.d.ts +2 -0
  126. package/dist/cli/commands/search.d.ts.map +1 -0
  127. package/dist/cli/commands/search.js +212 -0
  128. package/dist/cli/commands/search.js.map +1 -0
  129. package/dist/cli/commands/serve.d.ts +2 -0
  130. package/dist/cli/commands/serve.d.ts.map +1 -0
  131. package/dist/cli/commands/serve.js +298 -0
  132. package/dist/cli/commands/serve.js.map +1 -0
  133. package/dist/cli/commands/summary.d.ts +2 -0
  134. package/dist/cli/commands/summary.d.ts.map +1 -0
  135. package/dist/cli/commands/summary.js +58 -0
  136. package/dist/cli/commands/summary.js.map +1 -0
  137. package/dist/cli/commands/teach.d.ts +2 -0
  138. package/dist/cli/commands/teach.d.ts.map +1 -0
  139. package/dist/cli/commands/teach.js +80 -0
  140. package/dist/cli/commands/teach.js.map +1 -0
  141. package/dist/cli/commands/text-search.d.ts +2 -0
  142. package/dist/cli/commands/text-search.d.ts.map +1 -0
  143. package/dist/cli/commands/text-search.js +125 -0
  144. package/dist/cli/commands/text-search.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +2 -0
  146. package/dist/cli/commands/update.d.ts.map +1 -0
  147. package/dist/cli/commands/update.js +167 -0
  148. package/dist/cli/commands/update.js.map +1 -0
  149. package/dist/cli/commands/validate.d.ts +2 -0
  150. package/dist/cli/commands/validate.d.ts.map +1 -0
  151. package/dist/cli/commands/validate.js +129 -0
  152. package/dist/cli/commands/validate.js.map +1 -0
  153. package/dist/cli/index.d.ts +3 -0
  154. package/dist/cli/index.d.ts.map +1 -0
  155. package/dist/cli/index.js +84 -0
  156. package/dist/cli/index.js.map +1 -0
  157. package/dist/cli/load-collection.d.ts +7 -0
  158. package/dist/cli/load-collection.d.ts.map +1 -0
  159. package/dist/cli/load-collection.js +201 -0
  160. package/dist/cli/load-collection.js.map +1 -0
  161. package/dist/cli/registry.d.ts +17 -0
  162. package/dist/cli/registry.d.ts.map +1 -0
  163. package/dist/cli/registry.js +16 -0
  164. package/dist/cli/registry.js.map +1 -0
  165. package/dist/cnotes +0 -0
  166. package/dist/collection.d.ts +145 -0
  167. package/dist/collection.d.ts.map +1 -0
  168. package/dist/collection.js +684 -0
  169. package/dist/collection.js.map +1 -0
  170. package/dist/define-model.d.ts +45 -0
  171. package/dist/define-model.d.ts.map +1 -0
  172. package/dist/define-model.js +106 -0
  173. package/dist/define-model.js.map +1 -0
  174. package/dist/document.d.ts +119 -0
  175. package/dist/document.d.ts.map +1 -0
  176. package/dist/document.js +418 -0
  177. package/dist/document.js.map +1 -0
  178. package/dist/extract-sections.d.ts +46 -0
  179. package/dist/extract-sections.d.ts.map +1 -0
  180. package/dist/extract-sections.js +153 -0
  181. package/dist/extract-sections.js.map +1 -0
  182. package/dist/index.d.ts +28 -0
  183. package/dist/index.d.ts.map +1 -0
  184. package/dist/index.js +31 -0
  185. package/dist/index.js.map +1 -0
  186. package/dist/mcp/helpers.d.ts +14 -0
  187. package/dist/mcp/helpers.d.ts.map +1 -0
  188. package/dist/mcp/helpers.js +7 -0
  189. package/dist/mcp/helpers.js.map +1 -0
  190. package/dist/mcp/model-info.d.ts +2 -0
  191. package/dist/mcp/model-info.d.ts.map +1 -0
  192. package/dist/mcp/model-info.js +94 -0
  193. package/dist/mcp/model-info.js.map +1 -0
  194. package/dist/mcp/prompts.d.ts +2 -0
  195. package/dist/mcp/prompts.d.ts.map +1 -0
  196. package/dist/mcp/prompts.js +180 -0
  197. package/dist/mcp/prompts.js.map +1 -0
  198. package/dist/mcp/readme.d.ts +2 -0
  199. package/dist/mcp/readme.d.ts.map +1 -0
  200. package/dist/mcp/readme.js +71 -0
  201. package/dist/mcp/readme.js.map +1 -0
  202. package/dist/mcp/resources.d.ts +2 -0
  203. package/dist/mcp/resources.d.ts.map +1 -0
  204. package/dist/mcp/resources.js +85 -0
  205. package/dist/mcp/resources.js.map +1 -0
  206. package/dist/mcp/server.d.ts +18 -0
  207. package/dist/mcp/server.d.ts.map +1 -0
  208. package/dist/mcp/server.js +83 -0
  209. package/dist/mcp/server.js.map +1 -0
  210. package/dist/mcp/tools/mutation.d.ts +2 -0
  211. package/dist/mcp/tools/mutation.d.ts.map +1 -0
  212. package/dist/mcp/tools/mutation.js +155 -0
  213. package/dist/mcp/tools/mutation.js.map +1 -0
  214. package/dist/mcp/tools/query.d.ts +2 -0
  215. package/dist/mcp/tools/query.d.ts.map +1 -0
  216. package/dist/mcp/tools/query.js +130 -0
  217. package/dist/mcp/tools/query.js.map +1 -0
  218. package/dist/mcp/tools/search.d.ts +2 -0
  219. package/dist/mcp/tools/search.d.ts.map +1 -0
  220. package/dist/mcp/tools/search.js +168 -0
  221. package/dist/mcp/tools/search.js.map +1 -0
  222. package/dist/model-instance.d.ts +11 -0
  223. package/dist/model-instance.d.ts.map +1 -0
  224. package/dist/model-instance.js +208 -0
  225. package/dist/model-instance.js.map +1 -0
  226. package/dist/node-shortcuts.d.ts +25 -0
  227. package/dist/node-shortcuts.d.ts.map +1 -0
  228. package/dist/node-shortcuts.js +67 -0
  229. package/dist/node-shortcuts.js.map +1 -0
  230. package/dist/parse.d.ts +45 -0
  231. package/dist/parse.d.ts.map +1 -0
  232. package/dist/parse.js +98 -0
  233. package/dist/parse.js.map +1 -0
  234. package/dist/query/collection-query.d.ts +39 -0
  235. package/dist/query/collection-query.d.ts.map +1 -0
  236. package/dist/query/collection-query.js +184 -0
  237. package/dist/query/collection-query.js.map +1 -0
  238. package/dist/query/index.d.ts +8 -0
  239. package/dist/query/index.d.ts.map +1 -0
  240. package/dist/query/index.js +5 -0
  241. package/dist/query/index.js.map +1 -0
  242. package/dist/query/operators.d.ts +3 -0
  243. package/dist/query/operators.d.ts.map +1 -0
  244. package/dist/query/operators.js +18 -0
  245. package/dist/query/operators.js.map +1 -0
  246. package/dist/query/query-builder.d.ts +34 -0
  247. package/dist/query/query-builder.d.ts.map +1 -0
  248. package/dist/query/query-builder.js +84 -0
  249. package/dist/query/query-builder.js.map +1 -0
  250. package/dist/query/query-dsl.d.ts +36 -0
  251. package/dist/query/query-dsl.d.ts.map +1 -0
  252. package/dist/query/query-dsl.js +195 -0
  253. package/dist/query/query-dsl.js.map +1 -0
  254. package/dist/relationships/belongs-to.d.ts +9 -0
  255. package/dist/relationships/belongs-to.d.ts.map +1 -0
  256. package/dist/relationships/belongs-to.js +34 -0
  257. package/dist/relationships/belongs-to.js.map +1 -0
  258. package/dist/relationships/has-many.d.ts +23 -0
  259. package/dist/relationships/has-many.d.ts.map +1 -0
  260. package/dist/relationships/has-many.js +136 -0
  261. package/dist/relationships/has-many.js.map +1 -0
  262. package/dist/relationships/index.d.ts +26 -0
  263. package/dist/relationships/index.d.ts.map +1 -0
  264. package/dist/relationships/index.js +32 -0
  265. package/dist/relationships/index.js.map +1 -0
  266. package/dist/relationships/types.d.ts +2 -0
  267. package/dist/relationships/types.d.ts.map +1 -0
  268. package/dist/relationships/types.js +2 -0
  269. package/dist/relationships/types.js.map +1 -0
  270. package/dist/search/document-inputs.d.ts +30 -0
  271. package/dist/search/document-inputs.d.ts.map +1 -0
  272. package/dist/search/document-inputs.js +52 -0
  273. package/dist/search/document-inputs.js.map +1 -0
  274. package/dist/search/luca-semantic-search.d.ts +27 -0
  275. package/dist/search/luca-semantic-search.d.ts.map +1 -0
  276. package/dist/search/luca-semantic-search.js +56 -0
  277. package/dist/search/luca-semantic-search.js.map +1 -0
  278. package/dist/section.d.ts +21 -0
  279. package/dist/section.d.ts.map +1 -0
  280. package/dist/section.js +21 -0
  281. package/dist/section.js.map +1 -0
  282. package/dist/types.d.ts +185 -0
  283. package/dist/types.d.ts.map +1 -0
  284. package/dist/types.js +2 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/index.d.ts +9 -0
  287. package/dist/utils/index.d.ts.map +1 -0
  288. package/dist/utils/index.js +8 -0
  289. package/dist/utils/index.js.map +1 -0
  290. package/dist/utils/inflect.d.ts +6 -0
  291. package/dist/utils/inflect.d.ts.map +1 -0
  292. package/dist/utils/inflect.js +75 -0
  293. package/dist/utils/inflect.js.map +1 -0
  294. package/dist/utils/match-pattern.d.ts +25 -0
  295. package/dist/utils/match-pattern.d.ts.map +1 -0
  296. package/dist/utils/match-pattern.js +52 -0
  297. package/dist/utils/match-pattern.js.map +1 -0
  298. package/dist/utils/normalize-headings.d.ts +8 -0
  299. package/dist/utils/normalize-headings.d.ts.map +1 -0
  300. package/dist/utils/normalize-headings.js +19 -0
  301. package/dist/utils/normalize-headings.js.map +1 -0
  302. package/dist/utils/parse-table.d.ts +7 -0
  303. package/dist/utils/parse-table.d.ts.map +1 -0
  304. package/dist/utils/parse-table.js +17 -0
  305. package/dist/utils/parse-table.js.map +1 -0
  306. package/dist/utils/read-directory.d.ts +5 -0
  307. package/dist/utils/read-directory.d.ts.map +1 -0
  308. package/dist/utils/read-directory.js +29 -0
  309. package/dist/utils/read-directory.js.map +1 -0
  310. package/dist/utils/stringify-ast.d.ts +6 -0
  311. package/dist/utils/stringify-ast.d.ts.map +1 -0
  312. package/dist/utils/stringify-ast.js +8 -0
  313. package/dist/utils/stringify-ast.js.map +1 -0
  314. package/dist/utils/strip-markdown.d.ts +11 -0
  315. package/dist/utils/strip-markdown.d.ts.map +1 -0
  316. package/dist/utils/strip-markdown.js +48 -0
  317. package/dist/utils/strip-markdown.js.map +1 -0
  318. package/dist/validator.d.ts +10 -0
  319. package/dist/validator.d.ts.map +1 -0
  320. package/dist/validator.js +55 -0
  321. package/dist/validator.js.map +1 -0
  322. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,GAAG,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;IAChC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,CAAA;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB;;;GA4B9E;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB;;;GAuD7E"}
@@ -0,0 +1,83 @@
1
+ import { loadCollection } from '../cli/load-collection.js';
2
+ import { registerResources } from './resources.js';
3
+ import { registerQueryTools } from './tools/query.js';
4
+ import { registerSearchTools } from './tools/search.js';
5
+ import { registerMutationTools } from './tools/mutation.js';
6
+ import { registerPrompts } from './prompts.js';
7
+ export async function createMcpServer(container, options) {
8
+ const collection = await loadCollection({
9
+ contentFolder: options.contentFolder,
10
+ modulePath: options.modulePath,
11
+ });
12
+ const modelDefs = collection.modelDefinitions;
13
+ console.error(`[cnotes mcp] Loaded collection: ${collection.rootPath}`);
14
+ console.error(`[cnotes mcp] Models: ${modelDefs.map((d) => d.name).join(', ') || '(none)'}`);
15
+ console.error(`[cnotes mcp] Documents: ${collection.available.length}`);
16
+ const mcpServer = container.server('mcp', {
17
+ transport: options.transport,
18
+ port: options.port,
19
+ serverName: 'contentbase',
20
+ serverVersion: '1.0.0',
21
+ mcpCompat: options.mcpCompat,
22
+ stdioCompat: options.stdioCompat,
23
+ });
24
+ // Register all capabilities
25
+ registerResources(mcpServer, collection);
26
+ registerQueryTools(mcpServer, collection);
27
+ registerSearchTools(mcpServer, collection, container);
28
+ registerMutationTools(mcpServer, collection);
29
+ registerPrompts(mcpServer, collection);
30
+ return { mcpServer, collection };
31
+ }
32
+ export async function startMcpServer(container, options) {
33
+ const envCompat = process.env.MCP_HTTP_COMPAT?.toLowerCase();
34
+ const resolvedCompat = options.mcpCompat || (envCompat === 'codex' ? 'codex' : 'standard');
35
+ const envStdioCompat = process.env.MCP_STDIO_COMPAT?.toLowerCase();
36
+ const resolvedStdioCompat = options.stdioCompat
37
+ || (envStdioCompat === 'codex' || envStdioCompat === 'auto' ? envStdioCompat : 'standard');
38
+ const { mcpServer, collection } = await createMcpServer(container, options);
39
+ await mcpServer.start({
40
+ transport: options.transport,
41
+ port: options.port,
42
+ mcpCompat: options.mcpCompat,
43
+ stdioCompat: options.stdioCompat,
44
+ });
45
+ if (options.transport === 'http') {
46
+ console.log(`\nContentbase MCP listening on http://localhost:${options.port}/mcp`);
47
+ console.log(`Transport: HTTP (Streamable)`);
48
+ console.log(`Compatibility: ${resolvedCompat}`);
49
+ }
50
+ else {
51
+ console.error(`[cnotes mcp] Server started (stdio transport)`);
52
+ console.error(`[cnotes mcp] Stdio compatibility: ${resolvedStdioCompat}`);
53
+ console.error(`[cnotes mcp] Tools: ${mcpServer._tools.size} | Resources: ${mcpServer._resources.size} | Prompts: ${mcpServer._prompts.size}`);
54
+ }
55
+ // File watching
56
+ if (options.watch !== false) {
57
+ const fileManager = container.feature('fileManager');
58
+ await fileManager.start({ rootPath: collection.rootPath });
59
+ await fileManager.watch();
60
+ const { debounce } = container.utils.lodash;
61
+ const refreshCollection = debounce(async () => {
62
+ try {
63
+ const before = collection.available.length;
64
+ await collection.load({ refresh: true });
65
+ const after = collection.available.length;
66
+ if (after !== before) {
67
+ console.error(`[watch] Collection refreshed: ${before} → ${after} documents`);
68
+ }
69
+ }
70
+ catch (err) {
71
+ console.error(`[watch] Refresh failed: ${err.message}`);
72
+ }
73
+ }, 500);
74
+ fileManager.on('file:change', (event) => {
75
+ if (/\.(md|mdx)$/i.test(event.path)) {
76
+ refreshCollection();
77
+ }
78
+ });
79
+ console.error(`[cnotes mcp] Watching for file changes in ${collection.rootPath}`);
80
+ }
81
+ return { mcpServer, collection };
82
+ }
83
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerMutationTools(mcpServer: any, collection: any): void;
2
+ //# sourceMappingURL=mutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/mutation.ts"],"names":[],"mappings":"AAMA,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,QAyKpE"}
@@ -0,0 +1,155 @@
1
+ import { z } from 'zod';
2
+ import matter from 'gray-matter';
3
+ import { errorResult, textResult } from '../helpers.js';
4
+ import { resolveModelDef } from '../../cli/commands/api/helpers.js';
5
+ import { validateDocument } from '../../index.js';
6
+ export function registerMutationTools(mcpServer, collection) {
7
+ const modelDefs = collection.modelDefinitions;
8
+ mcpServer.tool('validate', {
9
+ description: 'Validate a document against its model schema. Returns validation result with any errors. **ALWAYS call after create/update operations** to confirm the document conforms to its model.',
10
+ schema: z.object({
11
+ pathId: z.string().describe('Document path ID'),
12
+ model: z.string().optional().describe('Model name (auto-detected if omitted)'),
13
+ }),
14
+ handler: (args) => {
15
+ const doc = collection.document(args.pathId);
16
+ if (!doc)
17
+ return errorResult(`Document not found: ${args.pathId}`);
18
+ const def = args.model
19
+ ? resolveModelDef(collection, args.model)
20
+ : collection.findModelDefinition(args.pathId);
21
+ if (!def) {
22
+ return errorResult(`No model definition found for ${args.pathId}. Specify one with the model parameter.`);
23
+ }
24
+ const result = validateDocument(doc, def);
25
+ return textResult(JSON.stringify(result, null, 2));
26
+ },
27
+ });
28
+ mcpServer.tool('create_document', {
29
+ description: '**ALWAYS use this instead of writing markdown files directly.** Creates a new document with proper scaffolding from a model definition — generates correct frontmatter defaults and section headings. Call `validate` after creation.',
30
+ schema: z.object({
31
+ pathId: z.string().describe('Path ID for the new document (e.g. "epics/my-new-epic")'),
32
+ title: z.string().describe('Document title (used as the H1 heading)'),
33
+ meta: z.record(z.string(), z.any()).optional().describe('Frontmatter fields to set'),
34
+ model: z.string().optional().describe('Model name (auto-detected from pathId prefix if omitted)'),
35
+ }),
36
+ handler: async (args) => {
37
+ if (collection.available.includes(args.pathId)) {
38
+ return errorResult(`Document already exists: ${args.pathId}`);
39
+ }
40
+ const def = args.model
41
+ ? resolveModelDef(collection, args.model)
42
+ : collection.findModelDefinition(args.pathId);
43
+ const metaData = { ...(def?.defaults || {}), ...(args.meta || {}) };
44
+ const sectionHeadings = def
45
+ ? Object.values(def.sections || {}).map((s) => `## ${s.heading}\n\n`)
46
+ : [];
47
+ const body = [
48
+ `# ${args.title}`,
49
+ '',
50
+ ...sectionHeadings,
51
+ ].join('\n');
52
+ const content = matter.stringify(body, metaData);
53
+ await collection.saveItem(args.pathId, { content });
54
+ await collection.load({ refresh: true });
55
+ return textResult(JSON.stringify({
56
+ created: args.pathId,
57
+ model: def ? def.name : null,
58
+ meta: metaData,
59
+ }, null, 2));
60
+ },
61
+ });
62
+ mcpServer.tool('update_document', {
63
+ description: 'Update a document\'s frontmatter and/or replace its entire content body. Use for frontmatter changes. For section-level edits, prefer `update_section` instead. Call `validate` after.',
64
+ schema: z.object({
65
+ pathId: z.string().describe('Document path ID'),
66
+ meta: z.record(z.string(), z.any()).optional().describe('Frontmatter fields to merge (existing fields are preserved unless overridden)'),
67
+ content: z.string().optional().describe('New markdown content body (replaces everything after frontmatter)'),
68
+ }),
69
+ handler: async (args) => {
70
+ const doc = collection.document(args.pathId);
71
+ if (!doc)
72
+ return errorResult(`Document not found: ${args.pathId}`);
73
+ const currentMeta = { ...doc.meta };
74
+ const newMeta = args.meta ? { ...currentMeta, ...args.meta } : currentMeta;
75
+ const newContent = args.content ?? doc.content;
76
+ const fullContent = matter.stringify(newContent, newMeta);
77
+ await collection.saveItem(args.pathId, { content: fullContent });
78
+ await collection.load({ refresh: true });
79
+ return textResult(JSON.stringify({
80
+ updated: args.pathId,
81
+ meta: newMeta,
82
+ }, null, 2));
83
+ },
84
+ });
85
+ mcpServer.tool('update_section', {
86
+ description: 'Preferred way to edit document content. Surgically edit a specific section — replace, append, or remove. Target a section by its heading name. Call `validate` after.',
87
+ schema: z.object({
88
+ pathId: z.string().describe('Document path ID'),
89
+ heading: z.string().describe('Section heading text to target (e.g. "Overview", "Requirements")'),
90
+ action: z.enum(['replace', 'append', 'remove']).describe('What to do with the section'),
91
+ content: z.string().optional().describe('New content (required for replace/append, ignored for remove)'),
92
+ }),
93
+ handler: async (args) => {
94
+ let doc = collection.document(args.pathId);
95
+ if (!doc)
96
+ return errorResult(`Document not found: ${args.pathId}`);
97
+ switch (args.action) {
98
+ case 'replace': {
99
+ if (!args.content)
100
+ return errorResult('Content is required for replace action');
101
+ doc = doc.replaceSectionContent(args.heading, args.content);
102
+ break;
103
+ }
104
+ case 'append': {
105
+ if (!args.content)
106
+ return errorResult('Content is required for append action');
107
+ doc = doc.appendToSection(args.heading, args.content);
108
+ break;
109
+ }
110
+ case 'remove': {
111
+ doc = doc.removeSection(args.heading);
112
+ break;
113
+ }
114
+ }
115
+ const fullContent = matter.stringify(doc.content, doc.meta);
116
+ await collection.saveItem(args.pathId, { content: fullContent });
117
+ await collection.load({ refresh: true });
118
+ return textResult(JSON.stringify({
119
+ updated: args.pathId,
120
+ action: args.action,
121
+ heading: args.heading,
122
+ }, null, 2));
123
+ },
124
+ });
125
+ mcpServer.tool('delete_document', {
126
+ description: 'Delete a document from the collection permanently. Cannot be undone except through version control.',
127
+ schema: z.object({
128
+ pathId: z.string().describe('Document path ID to delete'),
129
+ }),
130
+ handler: async (args) => {
131
+ if (!collection.available.includes(args.pathId)) {
132
+ return errorResult(`Document not found: ${args.pathId}`);
133
+ }
134
+ await collection.deleteItem(args.pathId);
135
+ await collection.load({ refresh: true });
136
+ return textResult(JSON.stringify({ deleted: args.pathId }, null, 2));
137
+ },
138
+ });
139
+ mcpServer.tool('run_action', {
140
+ description: 'Execute a registered collection action by name.',
141
+ schema: z.object({
142
+ name: z.string().describe('Action name'),
143
+ args: z.array(z.any()).optional().describe('Arguments to pass to the action'),
144
+ }),
145
+ handler: async (toolArgs) => {
146
+ if (!collection.availableActions.includes(toolArgs.name)) {
147
+ return errorResult(`Unknown action: ${toolArgs.name}. Available: ${collection.availableActions.join(', ') || '(none)'}`);
148
+ }
149
+ const result = await collection.runAction(toolArgs.name, ...(toolArgs.args || []));
150
+ const text = typeof result === 'string' ? result : JSON.stringify(result, null, 2);
151
+ return textResult(text);
152
+ },
153
+ });
154
+ }
155
+ //# sourceMappingURL=mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation.js","sourceRoot":"","sources":["../../../src/mcp/tools/mutation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerQueryTools(mcpServer: any, collection: any): void;
2
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/query.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,QAqIjE"}
@@ -0,0 +1,130 @@
1
+ import { z } from 'zod';
2
+ import { errorResult, textResult } from '../helpers.js';
3
+ import { generateReadMe } from '../readme.js';
4
+ import { generateModelInfo } from '../model-info.js';
5
+ import { resolveModelDef, buildSchemaJSON } from '../../cli/commands/api/helpers.js';
6
+ import { queryDSLSchema, executeQueryDSL } from '../../query/query-dsl.js';
7
+ export function registerQueryTools(mcpServer, collection) {
8
+ const modelDefs = collection.modelDefinitions;
9
+ // -- read_me: entry-point guidance for AI agents --
10
+ const readMeContent = generateReadMe(collection, modelDefs);
11
+ mcpServer.tool('read_me', {
12
+ description: [
13
+ 'Returns the content collection guide. Call this BEFORE working with any documents.',
14
+ 'Contains model definitions, available tools, query syntax, and recommended workflow.',
15
+ 'Call this at the start of every session to understand the collection structure.',
16
+ ].join('\n'),
17
+ schema: z.object({}),
18
+ handler: () => textResult(readMeContent),
19
+ });
20
+ mcpServer.tool('inspect', {
21
+ description: 'Overview of the collection — registered models, document count, available actions. Call `read_me` first if this is your first interaction.',
22
+ schema: z.object({}),
23
+ handler: () => {
24
+ const schema = buildSchemaJSON(collection);
25
+ const overview = {
26
+ rootPath: collection.rootPath,
27
+ documentCount: collection.available.length,
28
+ models: Object.values(schema),
29
+ actions: collection.availableActions,
30
+ };
31
+ return textResult(JSON.stringify(overview, null, 2));
32
+ },
33
+ });
34
+ mcpServer.tool('get_model_info', {
35
+ description: 'Get detailed information about a single model — fields, sections, relationships, example document. Use when you need to understand a model before creating or editing its documents.',
36
+ schema: z.object({
37
+ model: z.string().describe('Model name or prefix'),
38
+ }),
39
+ handler: (args) => {
40
+ const def = resolveModelDef(collection, args.model);
41
+ if (!def) {
42
+ return errorResult(`Unknown model: ${args.model}. Available: ${modelDefs.map((d) => d.name).join(', ')}`);
43
+ }
44
+ return textResult(generateModelInfo(collection, def));
45
+ },
46
+ });
47
+ mcpServer.tool('list_documents', {
48
+ description: 'List all document path IDs in the collection, optionally filtered by model name or prefix. The prefix before the slash indicates the model.',
49
+ schema: z.object({
50
+ model: z.string().optional().describe('Filter by model name or prefix'),
51
+ }),
52
+ handler: (args) => {
53
+ let ids = collection.available;
54
+ if (args.model) {
55
+ const def = resolveModelDef(collection, args.model);
56
+ if (def) {
57
+ const prefix = def.prefix + '/';
58
+ ids = ids.filter((id) => id.startsWith(prefix));
59
+ }
60
+ else {
61
+ return errorResult(`Unknown model: ${args.model}. Available: ${modelDefs.map((d) => d.name).join(', ')}`);
62
+ }
63
+ }
64
+ return textResult(JSON.stringify(ids, null, 2));
65
+ },
66
+ });
67
+ mcpServer.tool('query', {
68
+ description: [
69
+ 'Query typed model instances with MongoDB-style filtering. See `read_me` output for full syntax reference.',
70
+ 'Where clause: keys are dot-notation paths, values are literals (implies $eq),',
71
+ 'arrays (implies $in), or operator objects like { "$gt": 5 }.',
72
+ 'Operators: $eq, $neq, $in, $notIn, $gt, $lt, $gte, $lte,',
73
+ '$contains, $startsWith, $endsWith, $regex, $exists.',
74
+ 'Supports sort, limit, offset, select, and method (fetchAll/first/last/count).',
75
+ ].join(' '),
76
+ schema: z.object({
77
+ model: z.string().describe('Model name to query'),
78
+ where: z.any().optional().describe('MongoDB-style where clause. Keys are field paths, values are literals (implicit $eq), arrays (implicit $in), or operator objects like { "$gt": 5 }. Also accepts legacy array format for backward compat.'),
79
+ sort: z.record(z.string(), z.enum(['asc', 'desc'])).optional().describe('Sort specification, e.g. { "meta.priority": "desc" }'),
80
+ select: z.array(z.string()).optional().describe('Fields to include in output (default: all)'),
81
+ related: z.array(z.string()).optional().describe('Relationship names to include in results (e.g. ["plans", "goal"])'),
82
+ scopes: z.array(z.string()).optional().describe('Named scopes to apply before filtering'),
83
+ limit: z.number().optional().describe('Maximum results to return'),
84
+ offset: z.number().optional().describe('Number of results to skip'),
85
+ method: z.enum(['fetchAll', 'first', 'last', 'count']).optional().describe('Terminal operation (default: fetchAll)'),
86
+ }),
87
+ handler: async (args) => {
88
+ try {
89
+ // Backward compat: convert legacy array-style where to MongoDB-style
90
+ let whereClause = args.where;
91
+ if (Array.isArray(whereClause)) {
92
+ const converted = {};
93
+ for (const cond of whereClause) {
94
+ const op = cond.operator || 'eq';
95
+ if (op === 'eq') {
96
+ converted[cond.path] = cond.value;
97
+ }
98
+ else if (op === 'notExists') {
99
+ converted[cond.path] = { $exists: false };
100
+ }
101
+ else if (op === 'exists') {
102
+ converted[cond.path] = { $exists: true };
103
+ }
104
+ else {
105
+ converted[cond.path] = { [`$${op}`]: cond.value };
106
+ }
107
+ }
108
+ whereClause = converted;
109
+ }
110
+ const dsl = queryDSLSchema.parse({
111
+ model: args.model,
112
+ where: whereClause,
113
+ sort: args.sort,
114
+ select: args.select,
115
+ related: args.related,
116
+ scopes: args.scopes,
117
+ limit: args.limit,
118
+ offset: args.offset,
119
+ method: args.method,
120
+ });
121
+ const result = await executeQueryDSL(collection, dsl);
122
+ return textResult(JSON.stringify(result, null, 2));
123
+ }
124
+ catch (error) {
125
+ return errorResult(error.message);
126
+ }
127
+ },
128
+ });
129
+ }
130
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/mcp/tools/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerSearchTools(mcpServer: any, collection: any, container: any): void;
2
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QA8KlF"}
@@ -0,0 +1,168 @@
1
+ import { z } from 'zod';
2
+ import { errorResult, textResult } from '../helpers.js';
3
+ import { resolveModelDef } from '../../cli/commands/api/helpers.js';
4
+ import { getInitializedSemanticSearch, hasSearchIndex as searchIndexExists } from '../../search/luca-semantic-search.js';
5
+ export function registerSearchTools(mcpServer, collection, container) {
6
+ let _semanticSearch = null;
7
+ function hasSearchIndex() {
8
+ return searchIndexExists(collection.rootPath);
9
+ }
10
+ async function getSemanticSearch() {
11
+ if (_semanticSearch?.state?.get('dbReady'))
12
+ return _semanticSearch;
13
+ _semanticSearch = await getInitializedSemanticSearch(container, collection.rootPath);
14
+ return _semanticSearch;
15
+ }
16
+ mcpServer.tool('search_content', {
17
+ description: 'Full-text regex search across all document content. Returns matching document IDs with context. Searches document body text, not metadata — for metadata filtering, use `query` instead.',
18
+ schema: z.object({
19
+ pattern: z.string().describe('Regex pattern to search for'),
20
+ model: z.string().optional().describe('Limit search to a specific model'),
21
+ caseSensitive: z.boolean().default(false).describe('Case-sensitive matching'),
22
+ }),
23
+ handler: (args) => {
24
+ const flags = args.caseSensitive ? 'g' : 'gi';
25
+ let regex;
26
+ try {
27
+ regex = new RegExp(args.pattern, flags);
28
+ }
29
+ catch (e) {
30
+ return errorResult(`Invalid regex: ${e.message}`);
31
+ }
32
+ let ids = collection.available;
33
+ if (args.model) {
34
+ const def = resolveModelDef(collection, args.model);
35
+ if (def) {
36
+ const prefix = def.prefix + '/';
37
+ ids = ids.filter((id) => id.startsWith(prefix));
38
+ }
39
+ }
40
+ const results = [];
41
+ for (const pathId of ids) {
42
+ const doc = collection.document(pathId);
43
+ const content = doc.content;
44
+ const matches = [];
45
+ for (const line of content.split('\n')) {
46
+ if (regex.test(line)) {
47
+ matches.push(line.trim());
48
+ }
49
+ regex.lastIndex = 0;
50
+ }
51
+ if (matches.length > 0) {
52
+ results.push({ pathId, matches: matches.slice(0, 10) });
53
+ }
54
+ }
55
+ return textResult(JSON.stringify(results, null, 2));
56
+ },
57
+ });
58
+ mcpServer.tool('text_search', {
59
+ description: 'Search file contents with pattern matching using ripgrep. Returns distinct file matches by default, or line-level detail with expanded=true.',
60
+ schema: z.object({
61
+ pattern: z.string().describe('Text or regex pattern to search for'),
62
+ expanded: z.boolean().default(false).describe('Return line-level matches instead of just file paths'),
63
+ include: z.string().optional().describe('Glob filter (e.g. "*.md")'),
64
+ exclude: z.string().optional().describe('Glob filter (e.g. "node_modules")'),
65
+ ignoreCase: z.boolean().default(false).describe('Case insensitive search'),
66
+ maxResults: z.number().optional().describe('Limit number of results'),
67
+ }),
68
+ handler: async (args) => {
69
+ const grep = container.feature('grep');
70
+ const searchPath = collection.rootPath;
71
+ const grepOpts = {
72
+ path: searchPath,
73
+ ignoreCase: args.ignoreCase,
74
+ maxResults: args.maxResults,
75
+ include: args.include,
76
+ exclude: args.exclude,
77
+ };
78
+ if (!args.expanded) {
79
+ const files = await grep.filesContaining(args.pattern, grepOpts);
80
+ return textResult(JSON.stringify({ files, count: files.length }, null, 2));
81
+ }
82
+ const results = await grep.search({ ...grepOpts, pattern: args.pattern });
83
+ const grouped = new Map();
84
+ for (const match of results) {
85
+ if (!grouped.has(match.file))
86
+ grouped.set(match.file, []);
87
+ grouped.get(match.file).push({ line: match.line, column: match.column, content: match.content });
88
+ }
89
+ const files = Array.from(grouped.entries()).map(([file, matches]) => ({ file, matches }));
90
+ return textResult(JSON.stringify({ files, count: files.length }, null, 2));
91
+ },
92
+ });
93
+ mcpServer.tool('keyword_search', {
94
+ description: 'Fast keyword search using BM25 ranking. Best for exact terms, identifiers, and known phrases. Requires a search index — run `cnotes embed` first if not indexed.',
95
+ schema: z.object({
96
+ query: z.string().describe('Search query text'),
97
+ limit: z.number().optional().default(10).describe('Maximum results to return'),
98
+ model: z.string().optional().describe('Filter results to a specific model name'),
99
+ }),
100
+ handler: async (args) => {
101
+ if (!hasSearchIndex()) {
102
+ return errorResult('No search index found. Run: cnotes embed');
103
+ }
104
+ try {
105
+ const ss = await getSemanticSearch();
106
+ const results = await ss.search(args.query, {
107
+ limit: args.limit,
108
+ model: args.model,
109
+ });
110
+ return textResult(JSON.stringify(results, null, 2));
111
+ }
112
+ catch (error) {
113
+ return errorResult(`Search failed: ${error.message}`);
114
+ }
115
+ },
116
+ });
117
+ mcpServer.tool('semantic_search', {
118
+ description: 'Search by meaning using vector embeddings. Finds conceptually related documents even without keyword matches. Requires a search index — run `cnotes embed` first if not indexed.',
119
+ schema: z.object({
120
+ query: z.string().describe('Search query text'),
121
+ limit: z.number().optional().default(10).describe('Maximum results to return'),
122
+ model: z.string().optional().describe('Filter results to a specific model name'),
123
+ }),
124
+ handler: async (args) => {
125
+ if (!hasSearchIndex()) {
126
+ return errorResult('No search index found. Run: cnotes embed');
127
+ }
128
+ try {
129
+ const ss = await getSemanticSearch();
130
+ const results = await ss.vectorSearch(args.query, {
131
+ limit: args.limit,
132
+ model: args.model,
133
+ });
134
+ return textResult(JSON.stringify(results, null, 2));
135
+ }
136
+ catch (error) {
137
+ return errorResult(`Search failed: ${error.message}`);
138
+ }
139
+ },
140
+ });
141
+ mcpServer.tool('hybrid_search', {
142
+ description: 'Combined keyword + semantic search with score fusion. Best for general questions about the collection. Requires a search index — run `cnotes embed` first if not indexed.',
143
+ schema: z.object({
144
+ query: z.string().describe('Search query text'),
145
+ limit: z.number().optional().default(10).describe('Maximum results to return'),
146
+ model: z.string().optional().describe('Filter results to a specific model name'),
147
+ where: z.record(z.string(), z.any()).optional().describe('Metadata filters, e.g. {"status": "approved"}'),
148
+ }),
149
+ handler: async (args) => {
150
+ if (!hasSearchIndex()) {
151
+ return errorResult('No search index found. Run: cnotes embed');
152
+ }
153
+ try {
154
+ const ss = await getSemanticSearch();
155
+ const results = await ss.hybridSearch(args.query, {
156
+ limit: args.limit,
157
+ model: args.model,
158
+ where: args.where,
159
+ });
160
+ return textResult(JSON.stringify(results, null, 2));
161
+ }
162
+ catch (error) {
163
+ return errorResult(`Search failed: ${error.message}`);
164
+ }
165
+ },
166
+ });
167
+ }
168
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/mcp/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ModelDefinition, InferModelInstance } from "./types";
2
+ import type { Document } from "./document";
3
+ import type { Collection } from "./collection";
4
+ /**
5
+ * Creates a model instance from a document and its model definition.
6
+ *
7
+ * This is the central factory function. Every typed model instance
8
+ * in contentbase is created here.
9
+ */
10
+ export declare function createModelInstance<TDef extends ModelDefinition<any, any, any, any, any>>(document: Document, definition: TDef, collection: Collection): InferModelInstance<TDef>;
11
+ //# sourceMappingURL=model-instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-instance.d.ts","sourceRoot":"","sources":["../src/model-instance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAMnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAErD,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,EAChB,UAAU,EAAE,UAAU,GACrB,kBAAkB,CAAC,IAAI,CAAC,CAqO1B"}