@kya-os/mcp-i 0.1.0-alpha.3.9 → 1.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.
Files changed (328) hide show
  1. package/README.md +350 -213
  2. package/dist/149.js +1 -0
  3. package/dist/189.js +1 -0
  4. package/dist/261.js +1 -0
  5. package/dist/28.js +1 -0
  6. package/dist/295.js +1 -0
  7. package/dist/460.js +1 -0
  8. package/dist/570.js +1 -0
  9. package/dist/634.js +1 -0
  10. package/dist/647.js +1 -0
  11. package/dist/67.js +1 -0
  12. package/dist/739.js +1 -0
  13. package/dist/742.js +1 -0
  14. package/dist/904.js +1 -0
  15. package/dist/938.js +1 -0
  16. package/dist/auth/api-key.d.ts +16 -0
  17. package/dist/auth/api-key.js +82 -0
  18. package/dist/auth/jwt.d.ts +43 -0
  19. package/dist/auth/jwt.js +51 -0
  20. package/dist/auth/oauth/factory.d.ts +12 -0
  21. package/dist/auth/oauth/factory.js +36 -0
  22. package/dist/auth/oauth/index.d.ts +5 -0
  23. package/dist/auth/oauth/index.js +27 -0
  24. package/dist/auth/oauth/providers/proxy-provider.d.ts +13 -0
  25. package/dist/auth/oauth/providers/proxy-provider.js +159 -0
  26. package/dist/auth/oauth/router.d.ts +4 -0
  27. package/dist/auth/oauth/router.js +294 -0
  28. package/dist/auth/oauth/storage/memory-storage.d.ts +12 -0
  29. package/dist/auth/oauth/storage/memory-storage.js +40 -0
  30. package/dist/auth/oauth/types.d.ts +112 -0
  31. package/dist/cache/__tests__/cloudflare-kv-nonce-cache.test.d.ts +4 -0
  32. package/dist/cache/__tests__/cloudflare-kv-nonce-cache.test.js +176 -0
  33. package/dist/cache/__tests__/concurrency.test.d.ts +5 -0
  34. package/dist/cache/__tests__/concurrency.test.js +300 -0
  35. package/dist/cache/__tests__/dynamodb-nonce-cache.test.d.ts +4 -0
  36. package/dist/cache/__tests__/dynamodb-nonce-cache.test.js +176 -0
  37. package/dist/cache/__tests__/memory-nonce-cache.test.d.ts +4 -0
  38. package/dist/cache/__tests__/memory-nonce-cache.test.js +132 -0
  39. package/dist/cache/__tests__/nonce-cache-factory-simple.test.d.ts +4 -0
  40. package/dist/cache/__tests__/nonce-cache-factory-simple.test.js +133 -0
  41. package/dist/cache/__tests__/nonce-cache-factory.test.d.ts +4 -0
  42. package/dist/cache/__tests__/nonce-cache-factory.test.js +252 -0
  43. package/dist/cache/__tests__/redis-nonce-cache.test.d.ts +4 -0
  44. package/dist/cache/__tests__/redis-nonce-cache.test.js +95 -0
  45. package/dist/cache/cloudflare-kv-nonce-cache.d.ts +14 -0
  46. package/dist/cache/cloudflare-kv-nonce-cache.js +93 -0
  47. package/dist/cache/dynamodb-nonce-cache.d.ts +15 -0
  48. package/dist/cache/dynamodb-nonce-cache.js +92 -0
  49. package/dist/cache/index.d.ts +16 -0
  50. package/dist/cache/index.js +32 -0
  51. package/dist/cache/memory-nonce-cache.d.ts +44 -0
  52. package/dist/cache/memory-nonce-cache.js +105 -0
  53. package/dist/cache/nonce-cache-factory.d.ts +20 -0
  54. package/dist/cache/nonce-cache-factory.js +208 -0
  55. package/dist/cache/redis-nonce-cache.d.ts +14 -0
  56. package/dist/cache/redis-nonce-cache.js +53 -0
  57. package/dist/compiler/compiler-context.d.ts +23 -0
  58. package/dist/compiler/compiler-context.js +24 -0
  59. package/dist/compiler/config/constants.d.ts +41 -0
  60. package/dist/compiler/config/constants.js +45 -0
  61. package/dist/compiler/config/index.d.ts +252 -0
  62. package/dist/compiler/config/index.js +15 -0
  63. package/dist/compiler/config/injection.d.ts +26 -0
  64. package/dist/compiler/config/injection.js +58 -0
  65. package/dist/compiler/config/schemas/experimental/index.d.ts +91 -0
  66. package/dist/compiler/config/schemas/experimental/index.js +16 -0
  67. package/dist/compiler/config/schemas/experimental/oauth.d.ts +74 -0
  68. package/dist/compiler/config/schemas/experimental/oauth.js +25 -0
  69. package/dist/compiler/config/schemas/index.d.ts +6 -0
  70. package/dist/compiler/config/schemas/index.js +17 -0
  71. package/dist/compiler/config/schemas/paths.d.ts +9 -0
  72. package/dist/compiler/config/schemas/paths.js +12 -0
  73. package/dist/compiler/config/schemas/transport/http.d.ts +82 -0
  74. package/dist/compiler/config/schemas/transport/http.js +33 -0
  75. package/dist/compiler/config/schemas/transport/stdio.d.ts +9 -0
  76. package/dist/compiler/config/schemas/transport/stdio.js +15 -0
  77. package/dist/compiler/config/schemas/webpack.d.ts +3 -0
  78. package/dist/compiler/config/schemas/webpack.js +15 -0
  79. package/dist/compiler/config/types.d.ts +1 -0
  80. package/dist/compiler/config/types.js +2 -0
  81. package/dist/compiler/config/utils.d.ts +20 -0
  82. package/dist/compiler/config/utils.js +36 -0
  83. package/dist/compiler/generate-env-code.d.ts +1 -0
  84. package/dist/compiler/generate-env-code.js +8 -0
  85. package/dist/compiler/generate-import-code.d.ts +1 -0
  86. package/dist/compiler/generate-import-code.js +24 -0
  87. package/dist/compiler/get-webpack-config/get-entries.d.ts +3 -0
  88. package/dist/compiler/get-webpack-config/get-entries.js +29 -0
  89. package/dist/compiler/get-webpack-config/get-externals.d.ts +7 -0
  90. package/dist/compiler/get-webpack-config/get-externals.js +88 -0
  91. package/dist/compiler/get-webpack-config/get-injected-variables.d.ts +8 -0
  92. package/dist/compiler/get-webpack-config/get-injected-variables.js +25 -0
  93. package/dist/compiler/get-webpack-config/index.d.ts +4 -0
  94. package/dist/compiler/get-webpack-config/index.js +101 -0
  95. package/dist/compiler/get-webpack-config/plugins.d.ts +8 -0
  96. package/dist/compiler/get-webpack-config/plugins.js +132 -0
  97. package/dist/compiler/get-webpack-config/resolve-tsconfig-paths.d.ts +9 -0
  98. package/dist/compiler/get-webpack-config/resolve-tsconfig-paths.js +40 -0
  99. package/dist/compiler/index.d.ts +6 -0
  100. package/dist/compiler/index.js +194 -0
  101. package/dist/compiler/on-first-build.d.ts +3 -0
  102. package/dist/compiler/on-first-build.js +58 -0
  103. package/dist/compiler/parse-xmcp-config.d.ts +9 -0
  104. package/dist/compiler/parse-xmcp-config.js +155 -0
  105. package/dist/compiler/start-http-server.d.ts +1 -0
  106. package/dist/compiler/start-http-server.js +34 -0
  107. package/dist/index.d.ts +12 -0
  108. package/dist/index.js +38 -0
  109. package/dist/index.js.LICENSE.txt +49 -0
  110. package/dist/runtime/__tests__/audit.test.d.ts +4 -0
  111. package/dist/runtime/__tests__/audit.test.js +328 -0
  112. package/dist/runtime/__tests__/identity.test.d.ts +4 -0
  113. package/dist/runtime/__tests__/identity.test.js +164 -0
  114. package/dist/runtime/__tests__/mcpi-runtime.test.d.ts +4 -0
  115. package/dist/runtime/__tests__/mcpi-runtime.test.js +372 -0
  116. package/dist/runtime/__tests__/proof.test.d.ts +4 -0
  117. package/dist/runtime/__tests__/proof.test.js +302 -0
  118. package/dist/runtime/__tests__/session.test.d.ts +4 -0
  119. package/dist/runtime/__tests__/session.test.js +254 -0
  120. package/dist/runtime/__tests__/well-known.test.d.ts +4 -0
  121. package/dist/runtime/__tests__/well-known.test.js +312 -0
  122. package/dist/runtime/adapter-express.js +2 -0
  123. package/dist/runtime/adapter-express.js.LICENSE.txt +252 -0
  124. package/dist/runtime/adapter-nextjs.js +2 -0
  125. package/dist/runtime/adapter-nextjs.js.LICENSE.txt +53 -0
  126. package/dist/runtime/adapters/express/index.d.ts +2 -0
  127. package/dist/runtime/adapters/express/index.js +48 -0
  128. package/dist/runtime/adapters/nextjs/index.d.ts +8 -0
  129. package/dist/runtime/adapters/nextjs/index.js +18 -0
  130. package/dist/runtime/audit.d.ts +93 -0
  131. package/dist/runtime/audit.js +212 -0
  132. package/dist/runtime/debug.d.ts +118 -0
  133. package/dist/runtime/debug.js +612 -0
  134. package/dist/runtime/delegation-hooks.d.ts +85 -0
  135. package/dist/runtime/delegation-hooks.js +116 -0
  136. package/dist/runtime/demo.d.ts +71 -0
  137. package/dist/runtime/demo.js +135 -0
  138. package/dist/runtime/headers.d.ts +1 -0
  139. package/dist/runtime/headers.js +9 -0
  140. package/dist/runtime/http.js +2 -0
  141. package/dist/runtime/http.js.LICENSE.txt +252 -0
  142. package/dist/runtime/identity.d.ts +105 -0
  143. package/dist/runtime/identity.js +232 -0
  144. package/dist/runtime/index.d.ts +16 -0
  145. package/dist/runtime/index.js +56 -0
  146. package/dist/runtime/mcpi-runtime.d.ts +164 -0
  147. package/dist/runtime/mcpi-runtime.js +352 -0
  148. package/dist/runtime/proof.d.ts +87 -0
  149. package/dist/runtime/proof.js +223 -0
  150. package/dist/runtime/session.d.ts +88 -0
  151. package/dist/runtime/session.js +216 -0
  152. package/dist/runtime/stdio.js +2 -0
  153. package/dist/runtime/stdio.js.LICENSE.txt +1 -0
  154. package/dist/runtime/templates/home.d.ts +2 -0
  155. package/dist/runtime/templates/home.js +50 -0
  156. package/dist/runtime/transports/http/base-streamable-http.d.ts +25 -0
  157. package/dist/runtime/transports/http/base-streamable-http.js +16 -0
  158. package/dist/runtime/transports/http/http-context.d.ts +9 -0
  159. package/dist/runtime/transports/http/http-context.js +8 -0
  160. package/dist/runtime/transports/http/index.js +55 -0
  161. package/dist/runtime/transports/http/setup-cors.d.ts +4 -0
  162. package/dist/runtime/transports/http/setup-cors.js +24 -0
  163. package/dist/runtime/transports/http/stateless-streamable-http.d.ts +39 -0
  164. package/dist/runtime/transports/http/stateless-streamable-http.js +331 -0
  165. package/dist/runtime/transports/stdio/index.d.ts +1 -0
  166. package/dist/runtime/transports/stdio/index.js +51 -0
  167. package/dist/runtime/utils/server.d.ts +42 -0
  168. package/dist/runtime/utils/server.js +39 -0
  169. package/dist/runtime/utils/tools.d.ts +8 -0
  170. package/dist/runtime/utils/tools.js +115 -0
  171. package/dist/runtime/verifier-middleware.d.ts +76 -0
  172. package/dist/runtime/verifier-middleware.js +322 -0
  173. package/dist/runtime/well-known.d.ts +151 -0
  174. package/dist/runtime/well-known.js +258 -0
  175. package/dist/storage/config.d.ts +28 -0
  176. package/dist/storage/config.js +79 -0
  177. package/dist/storage/delegation.d.ts +59 -0
  178. package/dist/storage/delegation.js +130 -0
  179. package/dist/storage/merkle-verifier.d.ts +84 -0
  180. package/dist/storage/merkle-verifier.js +261 -0
  181. package/dist/test/__tests__/nonce-cache-integration.test.d.ts +1 -0
  182. package/dist/test/__tests__/nonce-cache-integration.test.js +116 -0
  183. package/dist/test/__tests__/nonce-cache.test.d.ts +1 -0
  184. package/dist/test/__tests__/nonce-cache.test.js +122 -0
  185. package/dist/test/__tests__/runtime-integration.test.d.ts +4 -0
  186. package/dist/test/__tests__/runtime-integration.test.js +192 -0
  187. package/dist/test/__tests__/test-infrastructure.test.d.ts +4 -0
  188. package/dist/test/__tests__/test-infrastructure.test.js +178 -0
  189. package/dist/test/deterministic-keys.d.ts +31 -0
  190. package/dist/test/deterministic-keys.js +108 -0
  191. package/dist/test/examples/test-usage-example.d.ts +140 -0
  192. package/dist/test/examples/test-usage-example.js +175 -0
  193. package/dist/test/index.d.ts +11 -0
  194. package/dist/test/index.js +27 -0
  195. package/dist/test/local-verification.d.ts +28 -0
  196. package/dist/test/local-verification.js +342 -0
  197. package/dist/test/mock-identity-provider.d.ts +96 -0
  198. package/dist/test/mock-identity-provider.js +243 -0
  199. package/dist/test/runtime-integration.d.ts +63 -0
  200. package/dist/test/runtime-integration.js +140 -0
  201. package/dist/test/test-environment.d.ts +26 -0
  202. package/dist/test/test-environment.js +50 -0
  203. package/dist/types/declarations.d.ts +1 -0
  204. package/dist/types/declarations.js +6 -0
  205. package/dist/types/middleware.d.ts +2 -0
  206. package/dist/types/middleware.js +2 -0
  207. package/dist/types/tool.d.ts +80 -0
  208. package/dist/types/tool.js +2 -0
  209. package/dist/utils/cli-icons.d.ts +3 -0
  210. package/dist/utils/cli-icons.js +7 -0
  211. package/dist/utils/constants.d.ts +6 -0
  212. package/dist/utils/constants.js +13 -0
  213. package/dist/utils/context.d.ts +33 -0
  214. package/dist/utils/context.js +58 -0
  215. package/dist/utils/file-watcher.d.ts +19 -0
  216. package/dist/utils/file-watcher.js +49 -0
  217. package/dist/utils/fs-utils.d.ts +2 -0
  218. package/dist/utils/fs-utils.js +22 -0
  219. package/dist/utils/path-validation.d.ts +3 -0
  220. package/dist/utils/path-validation.js +56 -0
  221. package/dist/utils/spawn-process.d.ts +9 -0
  222. package/dist/utils/spawn-process.js +50 -0
  223. package/dist/utils/subscribable.d.ts +12 -0
  224. package/dist/utils/subscribable.js +44 -0
  225. package/package.json +91 -77
  226. package/dist/cjs/auto.js +0 -16
  227. package/dist/cjs/cli-mode.d.ts +0 -16
  228. package/dist/cjs/cli-mode.js +0 -32
  229. package/dist/cjs/crypto.d.ts +0 -16
  230. package/dist/cjs/crypto.js +0 -212
  231. package/dist/cjs/dev-helper.d.ts +0 -3
  232. package/dist/cjs/dev-helper.js +0 -46
  233. package/dist/cjs/encrypted-storage.d.ts +0 -11
  234. package/dist/cjs/encrypted-storage.js +0 -73
  235. package/dist/cjs/index.d.ts +0 -56
  236. package/dist/cjs/index.js +0 -727
  237. package/dist/cjs/logger.d.ts +0 -32
  238. package/dist/cjs/logger.js +0 -85
  239. package/dist/cjs/nextjs.d.ts +0 -10
  240. package/dist/cjs/nextjs.js +0 -83
  241. package/dist/cjs/platform-info.d.ts +0 -36
  242. package/dist/cjs/platform-info.js +0 -274
  243. package/dist/cjs/polling.d.ts +0 -13
  244. package/dist/cjs/polling.js +0 -52
  245. package/dist/cjs/registry/index.d.ts +0 -12
  246. package/dist/cjs/registry/index.js +0 -56
  247. package/dist/cjs/registry/knowthat.d.ts +0 -17
  248. package/dist/cjs/registry/knowthat.js +0 -173
  249. package/dist/cjs/rotation.d.ts +0 -35
  250. package/dist/cjs/rotation.js +0 -102
  251. package/dist/cjs/storage.d.ts +0 -41
  252. package/dist/cjs/storage.js +0 -163
  253. package/dist/cjs/transport.d.ts +0 -35
  254. package/dist/cjs/transport.js +0 -300
  255. package/dist/cjs/types.d.ts +0 -206
  256. package/dist/cjs/vercel-adapter.d.ts +0 -8
  257. package/dist/cjs/vercel-adapter.js +0 -67
  258. package/dist/esm/auto.d.ts +0 -13
  259. package/dist/esm/auto.d.ts.map +0 -1
  260. package/dist/esm/auto.js +0 -30
  261. package/dist/esm/auto.js.map +0 -1
  262. package/dist/esm/cli-mode.d.ts +0 -52
  263. package/dist/esm/cli-mode.d.ts.map +0 -1
  264. package/dist/esm/cli-mode.js +0 -59
  265. package/dist/esm/cli-mode.js.map +0 -1
  266. package/dist/esm/crypto.d.ts +0 -51
  267. package/dist/esm/crypto.d.ts.map +0 -1
  268. package/dist/esm/crypto.js +0 -230
  269. package/dist/esm/crypto.js.map +0 -1
  270. package/dist/esm/dev-helper.d.ts +0 -15
  271. package/dist/esm/dev-helper.d.ts.map +0 -1
  272. package/dist/esm/dev-helper.js +0 -63
  273. package/dist/esm/dev-helper.js.map +0 -1
  274. package/dist/esm/encrypted-storage.d.ts +0 -19
  275. package/dist/esm/encrypted-storage.d.ts.map +0 -1
  276. package/dist/esm/encrypted-storage.js +0 -48
  277. package/dist/esm/encrypted-storage.js.map +0 -1
  278. package/dist/esm/index.d.ts +0 -129
  279. package/dist/esm/index.d.ts.map +0 -1
  280. package/dist/esm/index.js +0 -853
  281. package/dist/esm/index.js.map +0 -1
  282. package/dist/esm/logger.d.ts +0 -46
  283. package/dist/esm/logger.d.ts.map +0 -1
  284. package/dist/esm/logger.js +0 -100
  285. package/dist/esm/logger.js.map +0 -1
  286. package/dist/esm/nextjs.d.ts +0 -22
  287. package/dist/esm/nextjs.d.ts.map +0 -1
  288. package/dist/esm/nextjs.js +0 -83
  289. package/dist/esm/nextjs.js.map +0 -1
  290. package/dist/esm/package.json +0 -1
  291. package/dist/esm/platform-info.d.ts +0 -74
  292. package/dist/esm/platform-info.d.ts.map +0 -1
  293. package/dist/esm/platform-info.js +0 -293
  294. package/dist/esm/platform-info.js.map +0 -1
  295. package/dist/esm/polling.d.ts +0 -29
  296. package/dist/esm/polling.d.ts.map +0 -1
  297. package/dist/esm/polling.js +0 -76
  298. package/dist/esm/polling.js.map +0 -1
  299. package/dist/esm/registry/index.d.ts +0 -43
  300. package/dist/esm/registry/index.d.ts.map +0 -1
  301. package/dist/esm/registry/index.js +0 -89
  302. package/dist/esm/registry/index.js.map +0 -1
  303. package/dist/esm/registry/knowthat.d.ts +0 -44
  304. package/dist/esm/registry/knowthat.d.ts.map +0 -1
  305. package/dist/esm/registry/knowthat.js +0 -220
  306. package/dist/esm/registry/knowthat.js.map +0 -1
  307. package/dist/esm/rotation.d.ts +0 -57
  308. package/dist/esm/rotation.d.ts.map +0 -1
  309. package/dist/esm/rotation.js +0 -133
  310. package/dist/esm/rotation.js.map +0 -1
  311. package/dist/esm/storage.d.ts +0 -65
  312. package/dist/esm/storage.d.ts.map +0 -1
  313. package/dist/esm/storage.js +0 -160
  314. package/dist/esm/storage.js.map +0 -1
  315. package/dist/esm/transport.d.ts +0 -52
  316. package/dist/esm/transport.d.ts.map +0 -1
  317. package/dist/esm/transport.js +0 -340
  318. package/dist/esm/transport.js.map +0 -1
  319. package/dist/esm/types.d.ts +0 -293
  320. package/dist/esm/types.d.ts.map +0 -1
  321. package/dist/esm/types.js +0 -5
  322. package/dist/esm/types.js.map +0 -1
  323. package/dist/esm/vercel-adapter.d.ts +0 -26
  324. package/dist/esm/vercel-adapter.d.ts.map +0 -1
  325. package/dist/esm/vercel-adapter.js +0 -80
  326. package/dist/esm/vercel-adapter.js.map +0 -1
  327. /package/dist/{cjs → auth/oauth}/types.js +0 -0
  328. /package/dist/{cjs/auto.d.ts → runtime/transports/http/index.d.ts} +0 -0
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INJECTED_CONFIG = exports.injectedTools = void 0;
4
+ exports.configureServer = configureServer;
5
+ exports.loadTools = loadTools;
6
+ exports.createServer = createServer;
7
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
8
+ const tools_1 = require("./tools");
9
+ // @ts-expect-error: injected by compiler
10
+ exports.injectedTools = INJECTED_TOOLS;
11
+ exports.INJECTED_CONFIG = {
12
+ // TODO get from project config
13
+ name: "MCP Server",
14
+ version: "0.0.1",
15
+ capabilities: {
16
+ tools: {
17
+ listChanged: true,
18
+ },
19
+ },
20
+ };
21
+ /** Loads tools and injects them into the server */
22
+ async function configureServer(server, toolModules) {
23
+ (0, tools_1.addToolsToServer)(server, toolModules);
24
+ // TODO: implement addResourcesToServer, addPromptsToServer
25
+ return server;
26
+ }
27
+ function loadTools() {
28
+ const toolModules = new Map();
29
+ const toolPromises = Object.keys(exports.injectedTools).map((path) => exports.injectedTools[path]().then((toolModule) => {
30
+ toolModules.set(path, toolModule);
31
+ }));
32
+ return [toolPromises, toolModules];
33
+ }
34
+ async function createServer() {
35
+ const server = new index_js_1.Server(exports.INJECTED_CONFIG);
36
+ const [toolPromises, toolModules] = loadTools();
37
+ await Promise.all(toolPromises);
38
+ return configureServer(server, toolModules);
39
+ }
@@ -0,0 +1,8 @@
1
+ import { Server as McpServer } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { ZodTypeAny } from "zod";
3
+ import { ToolFile } from "./server";
4
+ export type ZodRawShape = {
5
+ [k: string]: ZodTypeAny;
6
+ };
7
+ /** Loads tools and injects them into the server */
8
+ export declare function addToolsToServer(server: McpServer, toolModules: Map<string, ToolFile>): McpServer;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addToolsToServer = addToolsToServer;
4
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
5
+ /** Validates if a value is a valid Zod schema object */
6
+ function isZodRawShape(value) {
7
+ if (typeof value !== "object" || value === null) {
8
+ return false;
9
+ }
10
+ const obj = value;
11
+ return Object.entries(obj).every(([key, val]) => {
12
+ if (typeof key !== "string")
13
+ return false;
14
+ if (typeof val !== "object" || val === null)
15
+ return false;
16
+ if (!("parse" in val) || typeof val.parse !== "function")
17
+ return false;
18
+ return true;
19
+ });
20
+ }
21
+ function pathToName(path) {
22
+ const fileName = path.split("/").pop() || path;
23
+ return fileName.replace(/\.[^/.]+$/, "");
24
+ }
25
+ /** Loads tools and injects them into the server */
26
+ function addToolsToServer(server, toolModules) {
27
+ // Collect all tools and their handlers
28
+ const tools = [];
29
+ const toolHandlers = new Map();
30
+ toolModules.forEach((toolModule, path) => {
31
+ const defaultName = pathToName(path);
32
+ const toolConfig = {
33
+ name: defaultName,
34
+ description: "No description provided",
35
+ };
36
+ let toolSchema = {};
37
+ const { default: handler, metadata, schema } = toolModule;
38
+ if (typeof metadata === "object" && metadata !== null) {
39
+ Object.assign(toolConfig, metadata);
40
+ }
41
+ // Validate and ensure schema is properly typed
42
+ if (isZodRawShape(schema)) {
43
+ Object.assign(toolSchema, schema);
44
+ }
45
+ else if (schema !== undefined && schema !== null) {
46
+ console.warn(`Invalid schema for tool "${toolConfig.name}" at ${path}. Expected Record<string, z.ZodType>`);
47
+ }
48
+ // Make sure tools has annotations with a title
49
+ if (toolConfig.annotations === undefined) {
50
+ toolConfig.annotations = {};
51
+ }
52
+ if (toolConfig.annotations.title === undefined) {
53
+ toolConfig.annotations.title = toolConfig.name;
54
+ }
55
+ // Create tool definition for MCP
56
+ const tool = {
57
+ name: toolConfig.name,
58
+ description: toolConfig.description,
59
+ inputSchema: {
60
+ type: "object",
61
+ properties: Object.fromEntries(Object.entries(toolSchema).map(([key, zodType]) => [
62
+ key,
63
+ { type: "string" }, // Simplified - in real implementation, convert Zod to JSON Schema
64
+ ])),
65
+ },
66
+ };
67
+ tools.push(tool);
68
+ toolHandlers.set(toolConfig.name, handler);
69
+ });
70
+ // Register tools/list handler
71
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async (request) => {
72
+ return {
73
+ tools: tools,
74
+ };
75
+ });
76
+ // Register tools/call handler
77
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
78
+ const { name, arguments: args } = request.params;
79
+ const handler = toolHandlers.get(name);
80
+ if (!handler) {
81
+ return {
82
+ content: [
83
+ {
84
+ type: "text",
85
+ text: `Tool "${name}" not found`,
86
+ },
87
+ ],
88
+ isError: true,
89
+ };
90
+ }
91
+ try {
92
+ const result = await handler(args || {});
93
+ return {
94
+ content: [
95
+ {
96
+ type: "text",
97
+ text: typeof result === "string" ? result : JSON.stringify(result),
98
+ },
99
+ ],
100
+ };
101
+ }
102
+ catch (error) {
103
+ return {
104
+ content: [
105
+ {
106
+ type: "text",
107
+ text: `Error executing tool "${name}": ${error instanceof Error ? error.message : String(error)}`,
108
+ },
109
+ ],
110
+ isError: true,
111
+ };
112
+ }
113
+ });
114
+ return server;
115
+ }
@@ -0,0 +1,76 @@
1
+ import type { Request, Response, NextFunction } from "express";
2
+ import type { ProofMeta } from "@kya-os/contracts/proof";
3
+ import type { Receipt } from "@kya-os/contracts/registry";
4
+ import { type StructuredError } from "@kya-os/contracts/verifier";
5
+ /**
6
+ * Verifier middleware for proof and receipt validation
7
+ */
8
+ export interface VerifierConfig {
9
+ /**
10
+ * Enable receipt verification
11
+ */
12
+ receiptVerification?: boolean;
13
+ /**
14
+ * Enable delegation checking
15
+ */
16
+ delegationChecking?: boolean;
17
+ /**
18
+ * KTA base URL
19
+ */
20
+ ktaBaseUrl?: string;
21
+ /**
22
+ * Policy toggle for receipt checking
23
+ */
24
+ receiptPolicy?: "required" | "optional" | "disabled";
25
+ /**
26
+ * Allow mock data for testing
27
+ */
28
+ allowMockData?: boolean;
29
+ }
30
+ export interface LocalVerifierResult {
31
+ success: boolean;
32
+ headers?: Record<string, string>;
33
+ error?: StructuredError;
34
+ }
35
+ export interface VerifierContext {
36
+ proof: ProofMeta;
37
+ receipt?: Receipt;
38
+ delegationRef?: string;
39
+ }
40
+ /**
41
+ * Core verifier implementation
42
+ */
43
+ export declare class CoreVerifier {
44
+ private config;
45
+ private receiptVerifier;
46
+ private delegationManager;
47
+ constructor(config?: VerifierConfig);
48
+ /**
49
+ * Verify proof with optional receipt checking
50
+ */
51
+ verify(context: VerifierContext): Promise<LocalVerifierResult>;
52
+ /**
53
+ * Verify proof signature (placeholder implementation)
54
+ */
55
+ private verifySignature;
56
+ /**
57
+ * Verify delegation status
58
+ */
59
+ private verifyDelegation;
60
+ /**
61
+ * Check if receipt verification should be performed
62
+ */
63
+ private shouldVerifyReceipt;
64
+ /**
65
+ * Generate trusted headers for successful verification
66
+ */
67
+ private generateHeaders;
68
+ }
69
+ /**
70
+ * Cloudflare Worker verifier
71
+ */
72
+ export declare function verifyWorker(request: Request, config?: VerifierConfig): Promise<LocalVerifierResult>;
73
+ /**
74
+ * Express verifier middleware
75
+ */
76
+ export declare function verifyExpress(config?: VerifierConfig): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CoreVerifier = void 0;
4
+ exports.verifyWorker = verifyWorker;
5
+ exports.verifyExpress = verifyExpress;
6
+ const verifier_1 = require("@kya-os/contracts/verifier");
7
+ const merkle_verifier_1 = require("../storage/merkle-verifier");
8
+ const delegation_1 = require("../storage/delegation");
9
+ /**
10
+ * Core verifier implementation
11
+ */
12
+ class CoreVerifier {
13
+ config;
14
+ receiptVerifier;
15
+ delegationManager;
16
+ constructor(config = {}) {
17
+ this.config = config;
18
+ this.receiptVerifier = (0, merkle_verifier_1.createReceiptVerifier)({
19
+ enabled: config.receiptVerification !== false,
20
+ ktaBaseUrl: config.ktaBaseUrl,
21
+ allowMockData: config.allowMockData,
22
+ });
23
+ this.delegationManager = (0, delegation_1.createDelegationManager)({
24
+ ktaBaseURL: config.ktaBaseUrl || "https://knowthat.ai",
25
+ });
26
+ }
27
+ /**
28
+ * Verify proof with optional receipt checking
29
+ */
30
+ async verify(context) {
31
+ try {
32
+ // 1. Verify proof signature (placeholder - would use actual crypto verification)
33
+ const signatureValid = await this.verifySignature(context.proof);
34
+ if (!signatureValid) {
35
+ return {
36
+ success: false,
37
+ error: {
38
+ code: "XMCP_I_EBADPROOF",
39
+ message: "Invalid proof signature",
40
+ httpStatus: 403,
41
+ },
42
+ };
43
+ }
44
+ // 2. Check delegation if present
45
+ if (context.proof.delegationRef &&
46
+ this.config.delegationChecking !== false) {
47
+ const delegationValid = await this.verifyDelegation(context.proof.delegationRef);
48
+ if (!delegationValid) {
49
+ return {
50
+ success: false,
51
+ error: {
52
+ code: "XMCP_I_EBADPROOF",
53
+ message: "Delegation revoked or invalid",
54
+ httpStatus: 403,
55
+ },
56
+ };
57
+ }
58
+ }
59
+ // 3. Verify receipt if present and policy requires it
60
+ if (context.receipt && this.shouldVerifyReceipt()) {
61
+ const receiptResult = await this.receiptVerifier.verify(context.receipt);
62
+ if (!receiptResult.valid) {
63
+ return {
64
+ success: false,
65
+ error: {
66
+ code: "XMCP_I_ERECEIPT",
67
+ message: `Receipt verification failed: ${receiptResult.error}`,
68
+ httpStatus: 403,
69
+ },
70
+ };
71
+ }
72
+ }
73
+ // 4. Generate trusted headers
74
+ const headers = this.generateHeaders(context.proof);
75
+ return {
76
+ success: true,
77
+ headers,
78
+ };
79
+ }
80
+ catch (error) {
81
+ return {
82
+ success: false,
83
+ error: {
84
+ code: "XMCP_I_EVERIFY",
85
+ message: error instanceof Error ? error.message : "Verification failed",
86
+ httpStatus: 500,
87
+ },
88
+ };
89
+ }
90
+ }
91
+ /**
92
+ * Verify proof signature (placeholder implementation)
93
+ */
94
+ async verifySignature(proof) {
95
+ // TODO: Implement actual Ed25519 signature verification
96
+ // This is a placeholder that checks basic proof structure
97
+ return !!(proof.did &&
98
+ proof.kid &&
99
+ proof.ts &&
100
+ proof.nonce &&
101
+ proof.audience &&
102
+ proof.sessionId &&
103
+ proof.requestHash &&
104
+ proof.responseHash);
105
+ }
106
+ /**
107
+ * Verify delegation status
108
+ */
109
+ async verifyDelegation(delegationRef) {
110
+ try {
111
+ return await this.delegationManager.isActive(delegationRef);
112
+ }
113
+ catch (error) {
114
+ console.warn("Delegation verification failed:", error);
115
+ return false;
116
+ }
117
+ }
118
+ /**
119
+ * Check if receipt verification should be performed
120
+ */
121
+ shouldVerifyReceipt() {
122
+ const policy = this.config.receiptPolicy || "optional";
123
+ return (policy === "required" ||
124
+ (policy === "optional" && this.config.receiptVerification !== false));
125
+ }
126
+ /**
127
+ * Generate trusted headers for successful verification
128
+ */
129
+ generateHeaders(proof) {
130
+ const headers = {
131
+ [verifier_1.AGENT_HEADERS.DID]: proof.did,
132
+ [verifier_1.AGENT_HEADERS.KEY_ID]: proof.kid,
133
+ [verifier_1.AGENT_HEADERS.SESSION]: proof.sessionId,
134
+ [verifier_1.AGENT_HEADERS.CONFIDENCE]: "verified",
135
+ [verifier_1.AGENT_HEADERS.VERIFIED_AT]: Math.floor(Date.now() / 1000).toString(),
136
+ };
137
+ if (proof.scopeId) {
138
+ headers[verifier_1.AGENT_HEADERS.SCOPES] = proof.scopeId;
139
+ }
140
+ if (proof.delegationRef) {
141
+ headers[verifier_1.AGENT_HEADERS.DELEGATION_REF] = proof.delegationRef;
142
+ }
143
+ // Add registry URL for traceability
144
+ const ktaUrl = this.config.ktaBaseUrl || "https://knowthat.ai";
145
+ headers[verifier_1.AGENT_HEADERS.REGISTRY] =
146
+ `${ktaUrl}/agents/${encodeURIComponent(proof.did)}`;
147
+ return headers;
148
+ }
149
+ }
150
+ exports.CoreVerifier = CoreVerifier;
151
+ /**
152
+ * Cloudflare Worker verifier
153
+ */
154
+ async function verifyWorker(request, config) {
155
+ try {
156
+ // Extract proof from request headers or body
157
+ const proof = await extractProofFromRequest(request);
158
+ if (!proof) {
159
+ return {
160
+ success: false,
161
+ error: {
162
+ code: "XMCP_I_ENOIDENTITY",
163
+ message: "No proof found in request",
164
+ httpStatus: 401,
165
+ },
166
+ };
167
+ }
168
+ // Extract receipt if present
169
+ const receipt = await extractReceiptFromRequest(request);
170
+ const verifier = new CoreVerifier(config);
171
+ return await verifier.verify({ proof, receipt: receipt || undefined });
172
+ }
173
+ catch (error) {
174
+ return {
175
+ success: false,
176
+ error: {
177
+ code: "XMCP_I_EVERIFY",
178
+ message: error instanceof Error ? error.message : "Verification failed",
179
+ httpStatus: 500,
180
+ },
181
+ };
182
+ }
183
+ }
184
+ /**
185
+ * Express verifier middleware
186
+ */
187
+ function verifyExpress(config) {
188
+ return async (req, res, next) => {
189
+ try {
190
+ // Extract proof from request
191
+ const proof = await extractProofFromExpressRequest(req);
192
+ if (!proof) {
193
+ return res.status(401).json({
194
+ code: "XMCP_I_ENOIDENTITY",
195
+ message: "No proof found in request",
196
+ });
197
+ }
198
+ // Extract receipt if present
199
+ const receipt = await extractReceiptFromExpressRequest(req);
200
+ const verifier = new CoreVerifier(config);
201
+ const result = await verifier.verify({
202
+ proof,
203
+ receipt: receipt || undefined,
204
+ });
205
+ if (!result.success) {
206
+ return res.status(result.error.httpStatus).json({
207
+ code: result.error.code,
208
+ message: result.error.message,
209
+ details: result.error.details,
210
+ });
211
+ }
212
+ // Set headers and context
213
+ if (result.headers) {
214
+ Object.entries(result.headers).forEach(([key, value]) => {
215
+ res.setHeader(key, value);
216
+ });
217
+ // Set ctx.agent for MCP recipients
218
+ req.ctx = req.ctx || {};
219
+ req.ctx.agent = {
220
+ did: result.headers[verifier_1.AGENT_HEADERS.DID],
221
+ keyId: result.headers[verifier_1.AGENT_HEADERS.KEY_ID],
222
+ session: result.headers[verifier_1.AGENT_HEADERS.SESSION],
223
+ scopes: result.headers[verifier_1.AGENT_HEADERS.SCOPES]?.split(",") || [],
224
+ delegationRef: result.headers[verifier_1.AGENT_HEADERS.DELEGATION_REF],
225
+ confidence: result.headers[verifier_1.AGENT_HEADERS.CONFIDENCE],
226
+ verifiedAt: parseInt(result.headers[verifier_1.AGENT_HEADERS.VERIFIED_AT]),
227
+ };
228
+ }
229
+ next();
230
+ }
231
+ catch (error) {
232
+ res.status(500).json({
233
+ code: "XMCP_I_EVERIFY",
234
+ message: error instanceof Error ? error.message : "Verification failed",
235
+ });
236
+ }
237
+ };
238
+ }
239
+ /**
240
+ * Extract proof from Worker request
241
+ */
242
+ async function extractProofFromRequest(request) {
243
+ // TODO: Implement actual proof extraction from request
244
+ // This would typically look for proof in headers or request body
245
+ // Placeholder implementation
246
+ let proofHeader = null;
247
+ // Handle both Fetch API Request and Node.js IncomingMessage
248
+ if (typeof request.headers.get === "function") {
249
+ // Fetch API Request
250
+ proofHeader = request.headers.get("X-XMCP-I-Proof");
251
+ }
252
+ else {
253
+ // Node.js IncomingMessage
254
+ const header = request.headers["x-xmcp-i-proof"];
255
+ proofHeader = Array.isArray(header) ? header[0] : header;
256
+ }
257
+ if (!proofHeader) {
258
+ return null;
259
+ }
260
+ try {
261
+ return JSON.parse(proofHeader);
262
+ }
263
+ catch {
264
+ return null;
265
+ }
266
+ }
267
+ /**
268
+ * Extract receipt from Worker request
269
+ */
270
+ async function extractReceiptFromRequest(request) {
271
+ // TODO: Implement actual receipt extraction from request
272
+ // This would typically look for receipt reference in headers
273
+ let receiptRef = null;
274
+ // Handle both Fetch API Request and Node.js IncomingMessage
275
+ if (typeof request.headers.get === "function") {
276
+ // Fetch API Request
277
+ receiptRef = request.headers.get("X-XMCP-I-Receipt-Ref");
278
+ }
279
+ else {
280
+ // Node.js IncomingMessage
281
+ const header = request.headers["x-xmcp-i-receipt-ref"];
282
+ receiptRef = Array.isArray(header) ? header[0] : header;
283
+ }
284
+ if (!receiptRef) {
285
+ return null;
286
+ }
287
+ // TODO: Fetch receipt by reference from storage
288
+ return null;
289
+ }
290
+ /**
291
+ * Extract proof from Express request
292
+ */
293
+ async function extractProofFromExpressRequest(req) {
294
+ // TODO: Implement actual proof extraction from Express request
295
+ // This would typically look for proof in headers or request body
296
+ const proofHeader = req.headers["x-xmcp-i-proof"];
297
+ if (!proofHeader) {
298
+ return null;
299
+ }
300
+ try {
301
+ const headerValue = Array.isArray(proofHeader)
302
+ ? proofHeader[0]
303
+ : proofHeader;
304
+ return JSON.parse(headerValue);
305
+ }
306
+ catch {
307
+ return null;
308
+ }
309
+ }
310
+ /**
311
+ * Extract receipt from Express request
312
+ */
313
+ async function extractReceiptFromExpressRequest(req) {
314
+ // TODO: Implement actual receipt extraction from Express request
315
+ // This would typically look for receipt reference in headers
316
+ const receiptRef = req.headers["x-xmcp-i-receipt-ref"];
317
+ if (!receiptRef) {
318
+ return null;
319
+ }
320
+ // TODO: Fetch receipt by reference from storage
321
+ return null;
322
+ }