@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.
- package/README.md +350 -213
- package/dist/149.js +1 -0
- package/dist/189.js +1 -0
- package/dist/261.js +1 -0
- package/dist/28.js +1 -0
- package/dist/295.js +1 -0
- package/dist/460.js +1 -0
- package/dist/570.js +1 -0
- package/dist/634.js +1 -0
- package/dist/647.js +1 -0
- package/dist/67.js +1 -0
- package/dist/739.js +1 -0
- package/dist/742.js +1 -0
- package/dist/904.js +1 -0
- package/dist/938.js +1 -0
- package/dist/auth/api-key.d.ts +16 -0
- package/dist/auth/api-key.js +82 -0
- package/dist/auth/jwt.d.ts +43 -0
- package/dist/auth/jwt.js +51 -0
- package/dist/auth/oauth/factory.d.ts +12 -0
- package/dist/auth/oauth/factory.js +36 -0
- package/dist/auth/oauth/index.d.ts +5 -0
- package/dist/auth/oauth/index.js +27 -0
- package/dist/auth/oauth/providers/proxy-provider.d.ts +13 -0
- package/dist/auth/oauth/providers/proxy-provider.js +159 -0
- package/dist/auth/oauth/router.d.ts +4 -0
- package/dist/auth/oauth/router.js +294 -0
- package/dist/auth/oauth/storage/memory-storage.d.ts +12 -0
- package/dist/auth/oauth/storage/memory-storage.js +40 -0
- package/dist/auth/oauth/types.d.ts +112 -0
- package/dist/cache/__tests__/cloudflare-kv-nonce-cache.test.d.ts +4 -0
- package/dist/cache/__tests__/cloudflare-kv-nonce-cache.test.js +176 -0
- package/dist/cache/__tests__/concurrency.test.d.ts +5 -0
- package/dist/cache/__tests__/concurrency.test.js +300 -0
- package/dist/cache/__tests__/dynamodb-nonce-cache.test.d.ts +4 -0
- package/dist/cache/__tests__/dynamodb-nonce-cache.test.js +176 -0
- package/dist/cache/__tests__/memory-nonce-cache.test.d.ts +4 -0
- package/dist/cache/__tests__/memory-nonce-cache.test.js +132 -0
- package/dist/cache/__tests__/nonce-cache-factory-simple.test.d.ts +4 -0
- package/dist/cache/__tests__/nonce-cache-factory-simple.test.js +133 -0
- package/dist/cache/__tests__/nonce-cache-factory.test.d.ts +4 -0
- package/dist/cache/__tests__/nonce-cache-factory.test.js +252 -0
- package/dist/cache/__tests__/redis-nonce-cache.test.d.ts +4 -0
- package/dist/cache/__tests__/redis-nonce-cache.test.js +95 -0
- package/dist/cache/cloudflare-kv-nonce-cache.d.ts +14 -0
- package/dist/cache/cloudflare-kv-nonce-cache.js +93 -0
- package/dist/cache/dynamodb-nonce-cache.d.ts +15 -0
- package/dist/cache/dynamodb-nonce-cache.js +92 -0
- package/dist/cache/index.d.ts +16 -0
- package/dist/cache/index.js +32 -0
- package/dist/cache/memory-nonce-cache.d.ts +44 -0
- package/dist/cache/memory-nonce-cache.js +105 -0
- package/dist/cache/nonce-cache-factory.d.ts +20 -0
- package/dist/cache/nonce-cache-factory.js +208 -0
- package/dist/cache/redis-nonce-cache.d.ts +14 -0
- package/dist/cache/redis-nonce-cache.js +53 -0
- package/dist/compiler/compiler-context.d.ts +23 -0
- package/dist/compiler/compiler-context.js +24 -0
- package/dist/compiler/config/constants.d.ts +41 -0
- package/dist/compiler/config/constants.js +45 -0
- package/dist/compiler/config/index.d.ts +252 -0
- package/dist/compiler/config/index.js +15 -0
- package/dist/compiler/config/injection.d.ts +26 -0
- package/dist/compiler/config/injection.js +58 -0
- package/dist/compiler/config/schemas/experimental/index.d.ts +91 -0
- package/dist/compiler/config/schemas/experimental/index.js +16 -0
- package/dist/compiler/config/schemas/experimental/oauth.d.ts +74 -0
- package/dist/compiler/config/schemas/experimental/oauth.js +25 -0
- package/dist/compiler/config/schemas/index.d.ts +6 -0
- package/dist/compiler/config/schemas/index.js +17 -0
- package/dist/compiler/config/schemas/paths.d.ts +9 -0
- package/dist/compiler/config/schemas/paths.js +12 -0
- package/dist/compiler/config/schemas/transport/http.d.ts +82 -0
- package/dist/compiler/config/schemas/transport/http.js +33 -0
- package/dist/compiler/config/schemas/transport/stdio.d.ts +9 -0
- package/dist/compiler/config/schemas/transport/stdio.js +15 -0
- package/dist/compiler/config/schemas/webpack.d.ts +3 -0
- package/dist/compiler/config/schemas/webpack.js +15 -0
- package/dist/compiler/config/types.d.ts +1 -0
- package/dist/compiler/config/types.js +2 -0
- package/dist/compiler/config/utils.d.ts +20 -0
- package/dist/compiler/config/utils.js +36 -0
- package/dist/compiler/generate-env-code.d.ts +1 -0
- package/dist/compiler/generate-env-code.js +8 -0
- package/dist/compiler/generate-import-code.d.ts +1 -0
- package/dist/compiler/generate-import-code.js +24 -0
- package/dist/compiler/get-webpack-config/get-entries.d.ts +3 -0
- package/dist/compiler/get-webpack-config/get-entries.js +29 -0
- package/dist/compiler/get-webpack-config/get-externals.d.ts +7 -0
- package/dist/compiler/get-webpack-config/get-externals.js +88 -0
- package/dist/compiler/get-webpack-config/get-injected-variables.d.ts +8 -0
- package/dist/compiler/get-webpack-config/get-injected-variables.js +25 -0
- package/dist/compiler/get-webpack-config/index.d.ts +4 -0
- package/dist/compiler/get-webpack-config/index.js +101 -0
- package/dist/compiler/get-webpack-config/plugins.d.ts +8 -0
- package/dist/compiler/get-webpack-config/plugins.js +132 -0
- package/dist/compiler/get-webpack-config/resolve-tsconfig-paths.d.ts +9 -0
- package/dist/compiler/get-webpack-config/resolve-tsconfig-paths.js +40 -0
- package/dist/compiler/index.d.ts +6 -0
- package/dist/compiler/index.js +194 -0
- package/dist/compiler/on-first-build.d.ts +3 -0
- package/dist/compiler/on-first-build.js +58 -0
- package/dist/compiler/parse-xmcp-config.d.ts +9 -0
- package/dist/compiler/parse-xmcp-config.js +155 -0
- package/dist/compiler/start-http-server.d.ts +1 -0
- package/dist/compiler/start-http-server.js +34 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +38 -0
- package/dist/index.js.LICENSE.txt +49 -0
- package/dist/runtime/__tests__/audit.test.d.ts +4 -0
- package/dist/runtime/__tests__/audit.test.js +328 -0
- package/dist/runtime/__tests__/identity.test.d.ts +4 -0
- package/dist/runtime/__tests__/identity.test.js +164 -0
- package/dist/runtime/__tests__/mcpi-runtime.test.d.ts +4 -0
- package/dist/runtime/__tests__/mcpi-runtime.test.js +372 -0
- package/dist/runtime/__tests__/proof.test.d.ts +4 -0
- package/dist/runtime/__tests__/proof.test.js +302 -0
- package/dist/runtime/__tests__/session.test.d.ts +4 -0
- package/dist/runtime/__tests__/session.test.js +254 -0
- package/dist/runtime/__tests__/well-known.test.d.ts +4 -0
- package/dist/runtime/__tests__/well-known.test.js +312 -0
- package/dist/runtime/adapter-express.js +2 -0
- package/dist/runtime/adapter-express.js.LICENSE.txt +252 -0
- package/dist/runtime/adapter-nextjs.js +2 -0
- package/dist/runtime/adapter-nextjs.js.LICENSE.txt +53 -0
- package/dist/runtime/adapters/express/index.d.ts +2 -0
- package/dist/runtime/adapters/express/index.js +48 -0
- package/dist/runtime/adapters/nextjs/index.d.ts +8 -0
- package/dist/runtime/adapters/nextjs/index.js +18 -0
- package/dist/runtime/audit.d.ts +93 -0
- package/dist/runtime/audit.js +212 -0
- package/dist/runtime/debug.d.ts +118 -0
- package/dist/runtime/debug.js +612 -0
- package/dist/runtime/delegation-hooks.d.ts +85 -0
- package/dist/runtime/delegation-hooks.js +116 -0
- package/dist/runtime/demo.d.ts +71 -0
- package/dist/runtime/demo.js +135 -0
- package/dist/runtime/headers.d.ts +1 -0
- package/dist/runtime/headers.js +9 -0
- package/dist/runtime/http.js +2 -0
- package/dist/runtime/http.js.LICENSE.txt +252 -0
- package/dist/runtime/identity.d.ts +105 -0
- package/dist/runtime/identity.js +232 -0
- package/dist/runtime/index.d.ts +16 -0
- package/dist/runtime/index.js +56 -0
- package/dist/runtime/mcpi-runtime.d.ts +164 -0
- package/dist/runtime/mcpi-runtime.js +352 -0
- package/dist/runtime/proof.d.ts +87 -0
- package/dist/runtime/proof.js +223 -0
- package/dist/runtime/session.d.ts +88 -0
- package/dist/runtime/session.js +216 -0
- package/dist/runtime/stdio.js +2 -0
- package/dist/runtime/stdio.js.LICENSE.txt +1 -0
- package/dist/runtime/templates/home.d.ts +2 -0
- package/dist/runtime/templates/home.js +50 -0
- package/dist/runtime/transports/http/base-streamable-http.d.ts +25 -0
- package/dist/runtime/transports/http/base-streamable-http.js +16 -0
- package/dist/runtime/transports/http/http-context.d.ts +9 -0
- package/dist/runtime/transports/http/http-context.js +8 -0
- package/dist/runtime/transports/http/index.js +55 -0
- package/dist/runtime/transports/http/setup-cors.d.ts +4 -0
- package/dist/runtime/transports/http/setup-cors.js +24 -0
- package/dist/runtime/transports/http/stateless-streamable-http.d.ts +39 -0
- package/dist/runtime/transports/http/stateless-streamable-http.js +331 -0
- package/dist/runtime/transports/stdio/index.d.ts +1 -0
- package/dist/runtime/transports/stdio/index.js +51 -0
- package/dist/runtime/utils/server.d.ts +42 -0
- package/dist/runtime/utils/server.js +39 -0
- package/dist/runtime/utils/tools.d.ts +8 -0
- package/dist/runtime/utils/tools.js +115 -0
- package/dist/runtime/verifier-middleware.d.ts +76 -0
- package/dist/runtime/verifier-middleware.js +322 -0
- package/dist/runtime/well-known.d.ts +151 -0
- package/dist/runtime/well-known.js +258 -0
- package/dist/storage/config.d.ts +28 -0
- package/dist/storage/config.js +79 -0
- package/dist/storage/delegation.d.ts +59 -0
- package/dist/storage/delegation.js +130 -0
- package/dist/storage/merkle-verifier.d.ts +84 -0
- package/dist/storage/merkle-verifier.js +261 -0
- package/dist/test/__tests__/nonce-cache-integration.test.d.ts +1 -0
- package/dist/test/__tests__/nonce-cache-integration.test.js +116 -0
- package/dist/test/__tests__/nonce-cache.test.d.ts +1 -0
- package/dist/test/__tests__/nonce-cache.test.js +122 -0
- package/dist/test/__tests__/runtime-integration.test.d.ts +4 -0
- package/dist/test/__tests__/runtime-integration.test.js +192 -0
- package/dist/test/__tests__/test-infrastructure.test.d.ts +4 -0
- package/dist/test/__tests__/test-infrastructure.test.js +178 -0
- package/dist/test/deterministic-keys.d.ts +31 -0
- package/dist/test/deterministic-keys.js +108 -0
- package/dist/test/examples/test-usage-example.d.ts +140 -0
- package/dist/test/examples/test-usage-example.js +175 -0
- package/dist/test/index.d.ts +11 -0
- package/dist/test/index.js +27 -0
- package/dist/test/local-verification.d.ts +28 -0
- package/dist/test/local-verification.js +342 -0
- package/dist/test/mock-identity-provider.d.ts +96 -0
- package/dist/test/mock-identity-provider.js +243 -0
- package/dist/test/runtime-integration.d.ts +63 -0
- package/dist/test/runtime-integration.js +140 -0
- package/dist/test/test-environment.d.ts +26 -0
- package/dist/test/test-environment.js +50 -0
- package/dist/types/declarations.d.ts +1 -0
- package/dist/types/declarations.js +6 -0
- package/dist/types/middleware.d.ts +2 -0
- package/dist/types/middleware.js +2 -0
- package/dist/types/tool.d.ts +80 -0
- package/dist/types/tool.js +2 -0
- package/dist/utils/cli-icons.d.ts +3 -0
- package/dist/utils/cli-icons.js +7 -0
- package/dist/utils/constants.d.ts +6 -0
- package/dist/utils/constants.js +13 -0
- package/dist/utils/context.d.ts +33 -0
- package/dist/utils/context.js +58 -0
- package/dist/utils/file-watcher.d.ts +19 -0
- package/dist/utils/file-watcher.js +49 -0
- package/dist/utils/fs-utils.d.ts +2 -0
- package/dist/utils/fs-utils.js +22 -0
- package/dist/utils/path-validation.d.ts +3 -0
- package/dist/utils/path-validation.js +56 -0
- package/dist/utils/spawn-process.d.ts +9 -0
- package/dist/utils/spawn-process.js +50 -0
- package/dist/utils/subscribable.d.ts +12 -0
- package/dist/utils/subscribable.js +44 -0
- package/package.json +91 -77
- package/dist/cjs/auto.js +0 -16
- package/dist/cjs/cli-mode.d.ts +0 -16
- package/dist/cjs/cli-mode.js +0 -32
- package/dist/cjs/crypto.d.ts +0 -16
- package/dist/cjs/crypto.js +0 -212
- package/dist/cjs/dev-helper.d.ts +0 -3
- package/dist/cjs/dev-helper.js +0 -46
- package/dist/cjs/encrypted-storage.d.ts +0 -11
- package/dist/cjs/encrypted-storage.js +0 -73
- package/dist/cjs/index.d.ts +0 -56
- package/dist/cjs/index.js +0 -727
- package/dist/cjs/logger.d.ts +0 -32
- package/dist/cjs/logger.js +0 -85
- package/dist/cjs/nextjs.d.ts +0 -10
- package/dist/cjs/nextjs.js +0 -83
- package/dist/cjs/platform-info.d.ts +0 -36
- package/dist/cjs/platform-info.js +0 -274
- package/dist/cjs/polling.d.ts +0 -13
- package/dist/cjs/polling.js +0 -52
- package/dist/cjs/registry/index.d.ts +0 -12
- package/dist/cjs/registry/index.js +0 -56
- package/dist/cjs/registry/knowthat.d.ts +0 -17
- package/dist/cjs/registry/knowthat.js +0 -173
- package/dist/cjs/rotation.d.ts +0 -35
- package/dist/cjs/rotation.js +0 -102
- package/dist/cjs/storage.d.ts +0 -41
- package/dist/cjs/storage.js +0 -163
- package/dist/cjs/transport.d.ts +0 -35
- package/dist/cjs/transport.js +0 -300
- package/dist/cjs/types.d.ts +0 -206
- package/dist/cjs/vercel-adapter.d.ts +0 -8
- package/dist/cjs/vercel-adapter.js +0 -67
- package/dist/esm/auto.d.ts +0 -13
- package/dist/esm/auto.d.ts.map +0 -1
- package/dist/esm/auto.js +0 -30
- package/dist/esm/auto.js.map +0 -1
- package/dist/esm/cli-mode.d.ts +0 -52
- package/dist/esm/cli-mode.d.ts.map +0 -1
- package/dist/esm/cli-mode.js +0 -59
- package/dist/esm/cli-mode.js.map +0 -1
- package/dist/esm/crypto.d.ts +0 -51
- package/dist/esm/crypto.d.ts.map +0 -1
- package/dist/esm/crypto.js +0 -230
- package/dist/esm/crypto.js.map +0 -1
- package/dist/esm/dev-helper.d.ts +0 -15
- package/dist/esm/dev-helper.d.ts.map +0 -1
- package/dist/esm/dev-helper.js +0 -63
- package/dist/esm/dev-helper.js.map +0 -1
- package/dist/esm/encrypted-storage.d.ts +0 -19
- package/dist/esm/encrypted-storage.d.ts.map +0 -1
- package/dist/esm/encrypted-storage.js +0 -48
- package/dist/esm/encrypted-storage.js.map +0 -1
- package/dist/esm/index.d.ts +0 -129
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -853
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/logger.d.ts +0 -46
- package/dist/esm/logger.d.ts.map +0 -1
- package/dist/esm/logger.js +0 -100
- package/dist/esm/logger.js.map +0 -1
- package/dist/esm/nextjs.d.ts +0 -22
- package/dist/esm/nextjs.d.ts.map +0 -1
- package/dist/esm/nextjs.js +0 -83
- package/dist/esm/nextjs.js.map +0 -1
- package/dist/esm/package.json +0 -1
- package/dist/esm/platform-info.d.ts +0 -74
- package/dist/esm/platform-info.d.ts.map +0 -1
- package/dist/esm/platform-info.js +0 -293
- package/dist/esm/platform-info.js.map +0 -1
- package/dist/esm/polling.d.ts +0 -29
- package/dist/esm/polling.d.ts.map +0 -1
- package/dist/esm/polling.js +0 -76
- package/dist/esm/polling.js.map +0 -1
- package/dist/esm/registry/index.d.ts +0 -43
- package/dist/esm/registry/index.d.ts.map +0 -1
- package/dist/esm/registry/index.js +0 -89
- package/dist/esm/registry/index.js.map +0 -1
- package/dist/esm/registry/knowthat.d.ts +0 -44
- package/dist/esm/registry/knowthat.d.ts.map +0 -1
- package/dist/esm/registry/knowthat.js +0 -220
- package/dist/esm/registry/knowthat.js.map +0 -1
- package/dist/esm/rotation.d.ts +0 -57
- package/dist/esm/rotation.d.ts.map +0 -1
- package/dist/esm/rotation.js +0 -133
- package/dist/esm/rotation.js.map +0 -1
- package/dist/esm/storage.d.ts +0 -65
- package/dist/esm/storage.d.ts.map +0 -1
- package/dist/esm/storage.js +0 -160
- package/dist/esm/storage.js.map +0 -1
- package/dist/esm/transport.d.ts +0 -52
- package/dist/esm/transport.d.ts.map +0 -1
- package/dist/esm/transport.js +0 -340
- package/dist/esm/transport.js.map +0 -1
- package/dist/esm/types.d.ts +0 -293
- package/dist/esm/types.d.ts.map +0 -1
- package/dist/esm/types.js +0 -5
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/vercel-adapter.d.ts +0 -26
- package/dist/esm/vercel-adapter.d.ts.map +0 -1
- package/dist/esm/vercel-adapter.js +0 -80
- package/dist/esm/vercel-adapter.js.map +0 -1
- /package/dist/{cjs → auth/oauth}/types.js +0 -0
- /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
|
+
}
|