init mcp tools test

This commit is contained in:
dswbx
2025-08-12 08:51:32 +02:00
parent 822e6fd644
commit 2e145bbf95
13 changed files with 233 additions and 51 deletions

View File

@@ -15,6 +15,7 @@ import {
openAPISpecs,
mcpTool,
mcp as mcpMiddleware,
isNode,
} from "bknd/utils";
import type { Context, Hono } from "hono";
import { Controller } from "modules/Controller";
@@ -28,7 +29,7 @@ import {
import * as SystemPermissions from "modules/permissions";
import { getVersion } from "core/env";
import type { Module } from "modules/Module";
import { getSystemMcp } from "./system-mcp";
import { getSystemMcp } from "modules/mcp/system-mcp";
export type ConfigUpdate<Key extends ModuleKey = ModuleKey> = {
success: true;
@@ -94,6 +95,8 @@ export class SystemController extends Controller {
},
endpoint: {
path: "/mcp",
// @ts-ignore
_init: isNode() ? { duplex: "half" } : {},
},
}),
);
@@ -365,7 +368,10 @@ export class SystemController extends Controller {
}),
(c) =>
c.json({
version: c.get("app")?.version(),
version: {
config: c.get("app")?.version(),
bknd: getVersion(),
},
runtime: getRuntimeKey(),
connection: {
name: this.app.em.connection.name,

View File

@@ -1,36 +0,0 @@
import type { App } from "App";
import { mcpSchemaSymbol, type McpSchema } from "modules/mcp";
import { getMcpServer, isObject, s, McpServer } from "bknd/utils";
import { getVersion } from "core/env";
export function getSystemMcp(app: App) {
const middlewareServer = getMcpServer(app.server);
const appConfig = app.modules.configs();
const { version, ...appSchema } = app.getSchema();
const schema = s.strictObject(appSchema);
const nodes = [...schema.walk({ data: appConfig })].filter(
(n) => isObject(n.schema) && mcpSchemaSymbol in n.schema,
) as s.Node<McpSchema>[];
const tools = [
// tools from hono routes
...middlewareServer.tools,
// tools added from ctx
...app.modules.ctx().mcp.tools,
// tools from app schema
...nodes.flatMap((n) => n.schema.getTools(n)),
];
const resources = [...middlewareServer.resources, ...app.modules.ctx().mcp.resources];
return new McpServer(
{
name: "bknd",
version: getVersion(),
},
{ app, ctx: () => app.modules.ctx() },
tools,
resources,
);
}