@typia/mcp 12.0.2 → 13.0.0-dev.20260425
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/lib/_virtual/McpControllerRegistrar.mjs +4 -0
- package/lib/_virtual/McpControllerRegistrar.mjs.map +1 -0
- package/lib/_virtual/_commonjsHelpers.mjs +6 -0
- package/lib/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/lib/_virtual/index.mjs +4 -0
- package/lib/_virtual/index.mjs.map +1 -0
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +5 -32
- package/lib/index.mjs.map +1 -1
- package/lib/index2.mjs +47 -0
- package/lib/index2.mjs.map +1 -0
- package/lib/internal/McpControllerRegistrar.js +7 -3
- package/lib/internal/McpControllerRegistrar.js.map +1 -1
- package/lib/internal/McpControllerRegistrar.mjs +5 -245
- package/lib/internal/McpControllerRegistrar.mjs.map +1 -1
- package/lib/internal/McpControllerRegistrar2.mjs +278 -0
- package/lib/internal/McpControllerRegistrar2.mjs.map +1 -0
- package/package.json +9 -10
- package/src/internal/McpControllerRegistrar.ts +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpControllerRegistrar.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_commonjsHelpers.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAIA,8EAA2E;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,gCAAuC,KA+BtC;IACC,OAAO,+CAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
|
package/lib/index.mjs
CHANGED
|
@@ -1,35 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDefaultExportFromCjs } from './_virtual/_commonjsHelpers.mjs';
|
|
2
|
+
import { __require as requireLib } from './index2.mjs';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* Registers TypeScript class methods via `typia.llm.controller<Class>()` or
|
|
7
|
-
* OpenAPI operations via `HttpLlm.controller()` as MCP tools.
|
|
8
|
-
*
|
|
9
|
-
* Every tool call is validated by typia. If LLM provides invalid arguments,
|
|
10
|
-
* returns {@link IValidation.IFailure} formatted by {@link LlmJson.stringify} so
|
|
11
|
-
* that LLM can correct them automatically. Below is an example of the
|
|
12
|
-
* validation error format:
|
|
13
|
-
*
|
|
14
|
-
* ```json
|
|
15
|
-
* {
|
|
16
|
-
* "name": "John",
|
|
17
|
-
* "age": "twenty", // ❌ [{"path":"$input.age","expected":"number & Type<\"uint32\">"}]
|
|
18
|
-
* "email": "not-an-email", // ❌ [{"path":"$input.email","expected":"string & Format<\"email\">"}]
|
|
19
|
-
* "hobbies": "reading" // ❌ [{"path":"$input.hobbies","expected":"Array<string>"}]
|
|
20
|
-
* }
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* If you use `McpServer.registerTool()` instead, you have to define Zod schema,
|
|
24
|
-
* function name, and description string manually for each tool. Also, without
|
|
25
|
-
* typia's validation feedback, LLM cannot auto-correct its mistakes, which
|
|
26
|
-
* significantly degrades tool calling performance.
|
|
27
|
-
*
|
|
28
|
-
* @param props Registration properties
|
|
29
|
-
*/
|
|
30
|
-
function registerMcpControllers(props) {
|
|
31
|
-
return McpControllerRegistrar.register(props);
|
|
32
|
-
}
|
|
4
|
+
var libExports = requireLib();
|
|
5
|
+
var index = /*@__PURE__*/getDefaultExportFromCjs(libExports);
|
|
33
6
|
|
|
34
|
-
export {
|
|
7
|
+
export { index as default };
|
|
35
8
|
//# sourceMappingURL=index.mjs.map
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["index.js?commonjs-entry"],"sourcesContent":["import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireLib } from \"/home/samchon/github/samchon/typia@next/packages/mcp/lib/index.js\";\nvar libExports = requireLib();\nexport { libExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(libExports);"],"names":[],"mappings":";;;AAEA,IAAI,UAAU,GAAG,UAAU,EAAE;AAE7B,YAAe,aAAa,uBAAuB,CAAC,UAAU,CAAC;;;;"}
|
package/lib/index2.mjs
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { __exports as lib } from './_virtual/index.mjs';
|
|
2
|
+
import { __require as requireMcpControllerRegistrar } from './internal/McpControllerRegistrar2.mjs';
|
|
3
|
+
|
|
4
|
+
var hasRequiredLib;
|
|
5
|
+
|
|
6
|
+
function requireLib () {
|
|
7
|
+
if (hasRequiredLib) return lib;
|
|
8
|
+
hasRequiredLib = 1;
|
|
9
|
+
Object.defineProperty(lib, "__esModule", { value: true });
|
|
10
|
+
lib.registerMcpControllers = registerMcpControllers;
|
|
11
|
+
const McpControllerRegistrar_1 = requireMcpControllerRegistrar();
|
|
12
|
+
/**
|
|
13
|
+
* Register MCP tools from controllers.
|
|
14
|
+
*
|
|
15
|
+
* Registers TypeScript class methods via `typia.llm.controller<Class>()` or
|
|
16
|
+
* OpenAPI operations via `HttpLlm.controller()` as MCP tools.
|
|
17
|
+
*
|
|
18
|
+
* Every tool call is validated by typia. If LLM provides invalid arguments,
|
|
19
|
+
* returns {@link IValidation.IFailure} formatted by {@link LlmJson.stringify} so
|
|
20
|
+
* that LLM can correct them automatically. Below is an example of the
|
|
21
|
+
* validation error format:
|
|
22
|
+
*
|
|
23
|
+
* ```json
|
|
24
|
+
* {
|
|
25
|
+
* "name": "John",
|
|
26
|
+
* "age": "twenty", // ❌ [{"path":"$input.age","expected":"number & Type<\"uint32\">"}]
|
|
27
|
+
* "email": "not-an-email", // ❌ [{"path":"$input.email","expected":"string & Format<\"email\">"}]
|
|
28
|
+
* "hobbies": "reading" // ❌ [{"path":"$input.hobbies","expected":"Array<string>"}]
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* If you use `McpServer.registerTool()` instead, you have to define Zod schema,
|
|
33
|
+
* function name, and description string manually for each tool. Also, without
|
|
34
|
+
* typia's validation feedback, LLM cannot auto-correct its mistakes, which
|
|
35
|
+
* significantly degrades tool calling performance.
|
|
36
|
+
*
|
|
37
|
+
* @param props Registration properties
|
|
38
|
+
*/
|
|
39
|
+
function registerMcpControllers(props) {
|
|
40
|
+
return McpControllerRegistrar_1.McpControllerRegistrar.register(props);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return lib;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { requireLib as __require };
|
|
47
|
+
//# sourceMappingURL=index2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.mjs","sources":["index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerMcpControllers = registerMcpControllers;\nconst McpControllerRegistrar_1 = require(\"./internal/McpControllerRegistrar\");\n/**\n * Register MCP tools from controllers.\n *\n * Registers TypeScript class methods via `typia.llm.controller<Class>()` or\n * OpenAPI operations via `HttpLlm.controller()` as MCP tools.\n *\n * Every tool call is validated by typia. If LLM provides invalid arguments,\n * returns {@link IValidation.IFailure} formatted by {@link LlmJson.stringify} so\n * that LLM can correct them automatically. Below is an example of the\n * validation error format:\n *\n * ```json\n * {\n * \"name\": \"John\",\n * \"age\": \"twenty\", // ❌ [{\"path\":\"$input.age\",\"expected\":\"number & Type<\\\"uint32\\\">\"}]\n * \"email\": \"not-an-email\", // ❌ [{\"path\":\"$input.email\",\"expected\":\"string & Format<\\\"email\\\">\"}]\n * \"hobbies\": \"reading\" // ❌ [{\"path\":\"$input.hobbies\",\"expected\":\"Array<string>\"}]\n * }\n * ```\n *\n * If you use `McpServer.registerTool()` instead, you have to define Zod schema,\n * function name, and description string manually for each tool. Also, without\n * typia's validation feedback, LLM cannot auto-correct its mistakes, which\n * significantly degrades tool calling performance.\n *\n * @param props Registration properties\n */\nfunction registerMcpControllers(props) {\n return McpControllerRegistrar_1.McpControllerRegistrar.register(props);\n}\n//# sourceMappingURL=index.js.map"],"names":["require$$0"],"mappings":";;;;;;;;AACA,CAAA,MAAM,CAAC,cAAc,CAAC,GAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAA,GAAA,CAAA,sBAA8B,GAAG,sBAAsB;CACvD,MAAM,wBAAwB,GAAGA,6BAAA,EAA4C;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CACA,SAAS,sBAAsB,CAAC,KAAK,EAAE;KACnC,OAAO,wBAAwB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1E,CAAA;AACA;;;;;;"}
|
|
@@ -86,9 +86,13 @@ var McpControllerRegistrar;
|
|
|
86
86
|
// Get McpServer reference for coexistence with McpServer.registerTool()
|
|
87
87
|
const mcpServer = "server" in originalServer ? originalServer : null;
|
|
88
88
|
// Helper to get existing tools dynamically (supports tools registered after this call)
|
|
89
|
-
const getExistingTools = () => {
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
const getExistingTools = () => {
|
|
90
|
+
var _a;
|
|
91
|
+
if (mcpServer === null)
|
|
92
|
+
return {};
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
94
|
+
return (_a = mcpServer._registeredTools) !== null && _a !== void 0 ? _a : {};
|
|
95
|
+
};
|
|
92
96
|
// Check for conflicts with existing McpServer tools at registration time
|
|
93
97
|
for (const pair of Object.entries(getExistingTools())) {
|
|
94
98
|
if (pair[1].enabled && registry.has(pair[0])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpControllerRegistrar.js","sourceRoot":"","sources":["../../src/internal/McpControllerRegistrar.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,iEAK4C;AAQ5C,wCAAgD;AAEhD,2DAAqD;AAErD,IAAiB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"McpControllerRegistrar.js","sourceRoot":"","sources":["../../src/internal/McpControllerRegistrar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,248 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
1
|
+
import { getDefaultExportFromCjs } from '../_virtual/_commonjsHelpers.mjs';
|
|
2
|
+
import { __require as requireMcpControllerRegistrar } from './McpControllerRegistrar2.mjs';
|
|
4
3
|
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
McpControllerRegistrar.register = (props) => {
|
|
8
|
-
// McpServer wraps raw Server - we need raw Server for JSON Schema support
|
|
9
|
-
const server = "server" in props.server
|
|
10
|
-
? props.server.server
|
|
11
|
-
: props.server;
|
|
12
|
-
// Build tool registry from controllers
|
|
13
|
-
const registry = new Map();
|
|
14
|
-
for (const controller of props.controllers) {
|
|
15
|
-
if (controller.protocol === "class") {
|
|
16
|
-
registerClassController(registry, controller);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
registerHttpController(registry, controller);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
// Determine preserve mode (default: false)
|
|
23
|
-
const preserve = props.preserve ?? false;
|
|
24
|
-
if (preserve) {
|
|
25
|
-
// PRESERVE MODE: Coexist with McpServer.registerTool()
|
|
26
|
-
// Uses MCP SDK internal API (_registeredTools, _toolHandlersInitialized)
|
|
27
|
-
registerWithPreserve(server, registry, props.server);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
// STANDALONE MODE: Typia tools only, no private API dependency
|
|
31
|
-
registerStandalone(server, registry);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Standalone registration without private API. Typia tools completely replace
|
|
36
|
-
* any existing tool handlers.
|
|
37
|
-
*/
|
|
38
|
-
const registerStandalone = (server, registry) => {
|
|
39
|
-
// tools/list handler
|
|
40
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
41
|
-
tools: Array.from(registry.values()).map((entry) => ({
|
|
42
|
-
name: entry.function.name,
|
|
43
|
-
description: entry.function.description,
|
|
44
|
-
inputSchema: {
|
|
45
|
-
type: "object",
|
|
46
|
-
properties: entry.function.parameters.properties,
|
|
47
|
-
required: entry.function.parameters.required,
|
|
48
|
-
additionalProperties: false,
|
|
49
|
-
$defs: entry.function.parameters.$defs,
|
|
50
|
-
},
|
|
51
|
-
})),
|
|
52
|
-
}));
|
|
53
|
-
// tools/call handler
|
|
54
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
55
|
-
const name = request.params.name;
|
|
56
|
-
const args = request.params.arguments;
|
|
57
|
-
const entry = registry.get(name);
|
|
58
|
-
if (entry !== undefined) {
|
|
59
|
-
return handleToolCall(entry, args);
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
isError: true,
|
|
63
|
-
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
64
|
-
};
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* Preserve mode registration with private API. Coexists with tools registered
|
|
69
|
-
* via McpServer.registerTool().
|
|
70
|
-
*/
|
|
71
|
-
const registerWithPreserve = (server, registry, originalServer) => {
|
|
72
|
-
// Get McpServer reference for coexistence with McpServer.registerTool()
|
|
73
|
-
const mcpServer = "server" in originalServer ? originalServer : null;
|
|
74
|
-
// Helper to get existing tools dynamically (supports tools registered after this call)
|
|
75
|
-
const getExistingTools = () =>
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
-
mcpServer ? (mcpServer._registeredTools ?? {}) : {};
|
|
78
|
-
// Check for conflicts with existing McpServer tools at registration time
|
|
79
|
-
for (const pair of Object.entries(getExistingTools())) {
|
|
80
|
-
if (pair[1].enabled && registry.has(pair[0])) {
|
|
81
|
-
throw new Error(`Duplicate function name "${pair[0]}" between McpServer.registerTool() and controller "${registry.get(pair[0]).controller}"`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// tools/list handler
|
|
85
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
86
|
-
const existingTools = getExistingTools();
|
|
87
|
-
return {
|
|
88
|
-
tools: [
|
|
89
|
-
// Typia controller tools
|
|
90
|
-
...Array.from(registry.values()).map((entry) => {
|
|
91
|
-
return {
|
|
92
|
-
name: entry.function.name,
|
|
93
|
-
description: entry.function.description,
|
|
94
|
-
inputSchema: {
|
|
95
|
-
type: "object",
|
|
96
|
-
properties: entry.function.parameters.properties,
|
|
97
|
-
required: entry.function.parameters.required,
|
|
98
|
-
additionalProperties: false,
|
|
99
|
-
$defs: entry.function.parameters.$defs,
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
}),
|
|
103
|
-
// Existing McpServer tools
|
|
104
|
-
...Object.entries(existingTools)
|
|
105
|
-
.filter((pair) => !registry.has(pair[0]) && pair[1].enabled)
|
|
106
|
-
.map((pair) => {
|
|
107
|
-
return {
|
|
108
|
-
name: pair[0],
|
|
109
|
-
description: pair[1].description,
|
|
110
|
-
inputSchema: convertZodToJsonSchema(pair[1].inputSchema),
|
|
111
|
-
};
|
|
112
|
-
}),
|
|
113
|
-
],
|
|
114
|
-
};
|
|
115
|
-
});
|
|
116
|
-
// tools/call handler
|
|
117
|
-
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
118
|
-
const name = request.params.name;
|
|
119
|
-
const args = request.params.arguments;
|
|
120
|
-
// Check typia registry first
|
|
121
|
-
const entry = registry.get(name);
|
|
122
|
-
if (entry !== undefined) {
|
|
123
|
-
return handleToolCall(entry, args);
|
|
124
|
-
}
|
|
125
|
-
// Fall back to existing McpServer tools
|
|
126
|
-
const existingTools = getExistingTools();
|
|
127
|
-
const existingTool = existingTools[name];
|
|
128
|
-
if (existingTool && existingTool.enabled) {
|
|
129
|
-
return existingTool.handler(args, extra);
|
|
130
|
-
}
|
|
131
|
-
return {
|
|
132
|
-
isError: true,
|
|
133
|
-
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
134
|
-
};
|
|
135
|
-
});
|
|
136
|
-
// Mark handlers as initialized to prevent McpServer from overwriting
|
|
137
|
-
if (mcpServer) {
|
|
138
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
-
mcpServer._toolHandlersInitialized = true;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
const registerClassController = (registry, controller) => {
|
|
143
|
-
const execute = controller.execute;
|
|
144
|
-
for (const func of controller.application.functions) {
|
|
145
|
-
const existing = registry.get(func.name);
|
|
146
|
-
if (existing !== undefined) {
|
|
147
|
-
throw new Error(`Duplicate function name "${func.name}" between controllers "${existing.controller}" and "${controller.name}"`);
|
|
148
|
-
}
|
|
149
|
-
const method = execute[func.name];
|
|
150
|
-
if (typeof method !== "function") {
|
|
151
|
-
throw new Error(`Method "${func.name}" not found on controller "${controller.name}"`);
|
|
152
|
-
}
|
|
153
|
-
registry.set(func.name, {
|
|
154
|
-
controller: controller.name,
|
|
155
|
-
function: func,
|
|
156
|
-
execute: async (args) => method.call(execute, args),
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
const registerHttpController = (registry, controller) => {
|
|
161
|
-
const application = controller.application;
|
|
162
|
-
const connection = controller.connection;
|
|
163
|
-
for (const func of application.functions) {
|
|
164
|
-
const existing = registry.get(func.name);
|
|
165
|
-
if (existing !== undefined) {
|
|
166
|
-
throw new Error(`Duplicate function name "${func.name}" between controllers "${existing.controller}" and "${controller.name}"`);
|
|
167
|
-
}
|
|
168
|
-
registry.set(func.name, {
|
|
169
|
-
controller: controller.name,
|
|
170
|
-
function: func,
|
|
171
|
-
execute: async (args) => {
|
|
172
|
-
if (controller.execute !== undefined) {
|
|
173
|
-
const response = await controller.execute({
|
|
174
|
-
connection,
|
|
175
|
-
application,
|
|
176
|
-
function: func,
|
|
177
|
-
arguments: args,
|
|
178
|
-
});
|
|
179
|
-
return response.body;
|
|
180
|
-
}
|
|
181
|
-
return HttpLlm.execute({
|
|
182
|
-
application,
|
|
183
|
-
function: func,
|
|
184
|
-
connection,
|
|
185
|
-
input: args,
|
|
186
|
-
});
|
|
187
|
-
},
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
const handleToolCall = async (entry, args) => {
|
|
192
|
-
const coerced = LlmJson.coerce(args, entry.function.parameters);
|
|
193
|
-
const validation = entry.function.validate(coerced);
|
|
194
|
-
if (!validation.success) {
|
|
195
|
-
return {
|
|
196
|
-
isError: true,
|
|
197
|
-
content: [
|
|
198
|
-
{
|
|
199
|
-
type: "text",
|
|
200
|
-
text: LlmJson.stringify(validation),
|
|
201
|
-
},
|
|
202
|
-
],
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
try {
|
|
206
|
-
const result = await entry.execute(validation.data);
|
|
207
|
-
return {
|
|
208
|
-
content: [
|
|
209
|
-
{
|
|
210
|
-
type: "text",
|
|
211
|
-
text: result === undefined
|
|
212
|
-
? "Success"
|
|
213
|
-
: JSON.stringify(result, null, 2),
|
|
214
|
-
},
|
|
215
|
-
],
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
catch (error) {
|
|
219
|
-
return {
|
|
220
|
-
isError: true,
|
|
221
|
-
content: [
|
|
222
|
-
{
|
|
223
|
-
type: "text",
|
|
224
|
-
text: error instanceof Error
|
|
225
|
-
? `${error.name}: ${error.message}`
|
|
226
|
-
: String(error),
|
|
227
|
-
},
|
|
228
|
-
],
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
const convertZodToJsonSchema = (zodSchema) => {
|
|
233
|
-
if (zodSchema === undefined) {
|
|
234
|
-
return { type: "object", properties: {} };
|
|
235
|
-
}
|
|
236
|
-
// @todo: error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
237
|
-
const converted = zodToJsonSchema(zodSchema);
|
|
238
|
-
if (typeof converted === "object" &&
|
|
239
|
-
"type" in converted &&
|
|
240
|
-
converted.type === "object") {
|
|
241
|
-
return converted;
|
|
242
|
-
}
|
|
243
|
-
return { type: "object", properties: {} };
|
|
244
|
-
};
|
|
245
|
-
})(McpControllerRegistrar || (McpControllerRegistrar = {}));
|
|
4
|
+
var McpControllerRegistrarExports = requireMcpControllerRegistrar();
|
|
5
|
+
var McpControllerRegistrar = /*@__PURE__*/getDefaultExportFromCjs(McpControllerRegistrarExports);
|
|
246
6
|
|
|
247
|
-
export { McpControllerRegistrar };
|
|
7
|
+
export { McpControllerRegistrar as default };
|
|
248
8
|
//# sourceMappingURL=McpControllerRegistrar.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpControllerRegistrar.mjs","sources":["
|
|
1
|
+
{"version":3,"file":"McpControllerRegistrar.mjs","sources":["McpControllerRegistrar.js?commonjs-entry"],"sourcesContent":["import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireMcpControllerRegistrar } from \"/home/samchon/github/samchon/typia@next/packages/mcp/lib/internal/McpControllerRegistrar.js\";\nvar McpControllerRegistrarExports = requireMcpControllerRegistrar();\nexport { McpControllerRegistrarExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(McpControllerRegistrarExports);"],"names":[],"mappings":";;;AAEA,IAAI,6BAA6B,GAAG,6BAA6B,EAAE;AAEnE,6BAAe,aAAa,uBAAuB,CAAC,6BAA6B,CAAC;;;;"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { __exports as McpControllerRegistrar } from '../_virtual/McpControllerRegistrar.mjs';
|
|
2
|
+
import require$$0 from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import require$$1 from '@typia/utils';
|
|
4
|
+
import require$$2 from 'zod-to-json-schema';
|
|
5
|
+
|
|
6
|
+
var hasRequiredMcpControllerRegistrar;
|
|
7
|
+
|
|
8
|
+
function requireMcpControllerRegistrar () {
|
|
9
|
+
if (hasRequiredMcpControllerRegistrar) return McpControllerRegistrar;
|
|
10
|
+
hasRequiredMcpControllerRegistrar = 1;
|
|
11
|
+
var __awaiter = (McpControllerRegistrar && McpControllerRegistrar.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(McpControllerRegistrar, "__esModule", { value: true });
|
|
21
|
+
McpControllerRegistrar.McpControllerRegistrar = void 0;
|
|
22
|
+
const types_js_1 = require$$0;
|
|
23
|
+
const utils_1 = require$$1;
|
|
24
|
+
const zod_to_json_schema_1 = require$$2;
|
|
25
|
+
var McpControllerRegistrar$1;
|
|
26
|
+
(function (McpControllerRegistrar) {
|
|
27
|
+
McpControllerRegistrar.register = (props) => {
|
|
28
|
+
var _a;
|
|
29
|
+
// McpServer wraps raw Server - we need raw Server for JSON Schema support
|
|
30
|
+
const server = "server" in props.server
|
|
31
|
+
? props.server.server
|
|
32
|
+
: props.server;
|
|
33
|
+
// Build tool registry from controllers
|
|
34
|
+
const registry = new Map();
|
|
35
|
+
for (const controller of props.controllers) {
|
|
36
|
+
if (controller.protocol === "class") {
|
|
37
|
+
registerClassController(registry, controller);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
registerHttpController(registry, controller);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Determine preserve mode (default: false)
|
|
44
|
+
const preserve = (_a = props.preserve) !== null && _a !== void 0 ? _a : false;
|
|
45
|
+
if (preserve) {
|
|
46
|
+
// PRESERVE MODE: Coexist with McpServer.registerTool()
|
|
47
|
+
// Uses MCP SDK internal API (_registeredTools, _toolHandlersInitialized)
|
|
48
|
+
registerWithPreserve(server, registry, props.server);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// STANDALONE MODE: Typia tools only, no private API dependency
|
|
52
|
+
registerStandalone(server, registry);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Standalone registration without private API. Typia tools completely replace
|
|
57
|
+
* any existing tool handlers.
|
|
58
|
+
*/
|
|
59
|
+
const registerStandalone = (server, registry) => {
|
|
60
|
+
// tools/list handler
|
|
61
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
return ({
|
|
63
|
+
tools: Array.from(registry.values()).map((entry) => ({
|
|
64
|
+
name: entry.function.name,
|
|
65
|
+
description: entry.function.description,
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: entry.function.parameters.properties,
|
|
69
|
+
required: entry.function.parameters.required,
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
$defs: entry.function.parameters.$defs,
|
|
72
|
+
},
|
|
73
|
+
})),
|
|
74
|
+
});
|
|
75
|
+
}));
|
|
76
|
+
// tools/call handler
|
|
77
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, (request) => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
const name = request.params.name;
|
|
79
|
+
const args = request.params.arguments;
|
|
80
|
+
const entry = registry.get(name);
|
|
81
|
+
if (entry !== undefined) {
|
|
82
|
+
return handleToolCall(entry, args);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
isError: true,
|
|
86
|
+
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
87
|
+
};
|
|
88
|
+
}));
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Preserve mode registration with private API. Coexists with tools registered
|
|
92
|
+
* via McpServer.registerTool().
|
|
93
|
+
*/
|
|
94
|
+
const registerWithPreserve = (server, registry, originalServer) => {
|
|
95
|
+
// Get McpServer reference for coexistence with McpServer.registerTool()
|
|
96
|
+
const mcpServer = "server" in originalServer ? originalServer : null;
|
|
97
|
+
// Helper to get existing tools dynamically (supports tools registered after this call)
|
|
98
|
+
const getExistingTools = () => {
|
|
99
|
+
var _a;
|
|
100
|
+
if (mcpServer === null)
|
|
101
|
+
return {};
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
103
|
+
return (_a = mcpServer._registeredTools) !== null && _a !== void 0 ? _a : {};
|
|
104
|
+
};
|
|
105
|
+
// Check for conflicts with existing McpServer tools at registration time
|
|
106
|
+
for (const pair of Object.entries(getExistingTools())) {
|
|
107
|
+
if (pair[1].enabled && registry.has(pair[0])) {
|
|
108
|
+
throw new Error(`Duplicate function name "${pair[0]}" between McpServer.registerTool() and controller "${registry.get(pair[0]).controller}"`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// tools/list handler
|
|
112
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const existingTools = getExistingTools();
|
|
114
|
+
return {
|
|
115
|
+
tools: [
|
|
116
|
+
// Typia controller tools
|
|
117
|
+
...Array.from(registry.values()).map((entry) => {
|
|
118
|
+
return {
|
|
119
|
+
name: entry.function.name,
|
|
120
|
+
description: entry.function.description,
|
|
121
|
+
inputSchema: {
|
|
122
|
+
type: "object",
|
|
123
|
+
properties: entry.function.parameters.properties,
|
|
124
|
+
required: entry.function.parameters.required,
|
|
125
|
+
additionalProperties: false,
|
|
126
|
+
$defs: entry.function.parameters.$defs,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}),
|
|
130
|
+
// Existing McpServer tools
|
|
131
|
+
...Object.entries(existingTools)
|
|
132
|
+
.filter((pair) => !registry.has(pair[0]) && pair[1].enabled)
|
|
133
|
+
.map((pair) => {
|
|
134
|
+
return {
|
|
135
|
+
name: pair[0],
|
|
136
|
+
description: pair[1].description,
|
|
137
|
+
inputSchema: convertZodToJsonSchema(pair[1].inputSchema),
|
|
138
|
+
};
|
|
139
|
+
}),
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
}));
|
|
143
|
+
// tools/call handler
|
|
144
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, (request, extra) => __awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
const name = request.params.name;
|
|
146
|
+
const args = request.params.arguments;
|
|
147
|
+
// Check typia registry first
|
|
148
|
+
const entry = registry.get(name);
|
|
149
|
+
if (entry !== undefined) {
|
|
150
|
+
return handleToolCall(entry, args);
|
|
151
|
+
}
|
|
152
|
+
// Fall back to existing McpServer tools
|
|
153
|
+
const existingTools = getExistingTools();
|
|
154
|
+
const existingTool = existingTools[name];
|
|
155
|
+
if (existingTool && existingTool.enabled) {
|
|
156
|
+
return existingTool.handler(args, extra);
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
isError: true,
|
|
160
|
+
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
161
|
+
};
|
|
162
|
+
}));
|
|
163
|
+
// Mark handlers as initialized to prevent McpServer from overwriting
|
|
164
|
+
if (mcpServer) {
|
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
166
|
+
mcpServer._toolHandlersInitialized = true;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const registerClassController = (registry, controller) => {
|
|
170
|
+
const execute = controller.execute;
|
|
171
|
+
for (const func of controller.application.functions) {
|
|
172
|
+
const existing = registry.get(func.name);
|
|
173
|
+
if (existing !== undefined) {
|
|
174
|
+
throw new Error(`Duplicate function name "${func.name}" between controllers "${existing.controller}" and "${controller.name}"`);
|
|
175
|
+
}
|
|
176
|
+
const method = execute[func.name];
|
|
177
|
+
if (typeof method !== "function") {
|
|
178
|
+
throw new Error(`Method "${func.name}" not found on controller "${controller.name}"`);
|
|
179
|
+
}
|
|
180
|
+
registry.set(func.name, {
|
|
181
|
+
controller: controller.name,
|
|
182
|
+
function: func,
|
|
183
|
+
execute: (args) => __awaiter(this, void 0, void 0, function* () { return method.call(execute, args); }),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const registerHttpController = (registry, controller) => {
|
|
188
|
+
const application = controller.application;
|
|
189
|
+
const connection = controller.connection;
|
|
190
|
+
for (const func of application.functions) {
|
|
191
|
+
const existing = registry.get(func.name);
|
|
192
|
+
if (existing !== undefined) {
|
|
193
|
+
throw new Error(`Duplicate function name "${func.name}" between controllers "${existing.controller}" and "${controller.name}"`);
|
|
194
|
+
}
|
|
195
|
+
registry.set(func.name, {
|
|
196
|
+
controller: controller.name,
|
|
197
|
+
function: func,
|
|
198
|
+
execute: (args) => __awaiter(this, void 0, void 0, function* () {
|
|
199
|
+
if (controller.execute !== undefined) {
|
|
200
|
+
const response = yield controller.execute({
|
|
201
|
+
connection,
|
|
202
|
+
application,
|
|
203
|
+
function: func,
|
|
204
|
+
arguments: args,
|
|
205
|
+
});
|
|
206
|
+
return response.body;
|
|
207
|
+
}
|
|
208
|
+
return utils_1.HttpLlm.execute({
|
|
209
|
+
application,
|
|
210
|
+
function: func,
|
|
211
|
+
connection,
|
|
212
|
+
input: args,
|
|
213
|
+
});
|
|
214
|
+
}),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
const handleToolCall = (entry, args) => __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
const coerced = utils_1.LlmJson.coerce(args, entry.function.parameters);
|
|
220
|
+
const validation = entry.function.validate(coerced);
|
|
221
|
+
if (!validation.success) {
|
|
222
|
+
return {
|
|
223
|
+
isError: true,
|
|
224
|
+
content: [
|
|
225
|
+
{
|
|
226
|
+
type: "text",
|
|
227
|
+
text: utils_1.LlmJson.stringify(validation),
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const result = yield entry.execute(validation.data);
|
|
234
|
+
return {
|
|
235
|
+
content: [
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
text: result === undefined
|
|
239
|
+
? "Success"
|
|
240
|
+
: JSON.stringify(result, null, 2),
|
|
241
|
+
},
|
|
242
|
+
],
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
return {
|
|
247
|
+
isError: true,
|
|
248
|
+
content: [
|
|
249
|
+
{
|
|
250
|
+
type: "text",
|
|
251
|
+
text: error instanceof Error
|
|
252
|
+
? `${error.name}: ${error.message}`
|
|
253
|
+
: String(error),
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
const convertZodToJsonSchema = (zodSchema) => {
|
|
260
|
+
if (zodSchema === undefined) {
|
|
261
|
+
return { type: "object", properties: {} };
|
|
262
|
+
}
|
|
263
|
+
// @todo: error TS2589: Type instantiation is excessively deep and possibly infinite.
|
|
264
|
+
const converted = zod_to_json_schema_1.zodToJsonSchema(zodSchema);
|
|
265
|
+
if (typeof converted === "object" &&
|
|
266
|
+
"type" in converted &&
|
|
267
|
+
converted.type === "object") {
|
|
268
|
+
return converted;
|
|
269
|
+
}
|
|
270
|
+
return { type: "object", properties: {} };
|
|
271
|
+
};
|
|
272
|
+
})(McpControllerRegistrar$1 || (McpControllerRegistrar.McpControllerRegistrar = McpControllerRegistrar$1 = {}));
|
|
273
|
+
|
|
274
|
+
return McpControllerRegistrar;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export { requireMcpControllerRegistrar as __require };
|
|
278
|
+
//# sourceMappingURL=McpControllerRegistrar2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpControllerRegistrar2.mjs","sources":["McpControllerRegistrar.js"],"sourcesContent":["\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.McpControllerRegistrar = void 0;\nconst types_js_1 = require(\"@modelcontextprotocol/sdk/types.js\");\nconst utils_1 = require(\"@typia/utils\");\nconst zod_to_json_schema_1 = require(\"zod-to-json-schema\");\nvar McpControllerRegistrar;\n(function (McpControllerRegistrar) {\n McpControllerRegistrar.register = (props) => {\n var _a;\n // McpServer wraps raw Server - we need raw Server for JSON Schema support\n const server = \"server\" in props.server\n ? props.server.server\n : props.server;\n // Build tool registry from controllers\n const registry = new Map();\n for (const controller of props.controllers) {\n if (controller.protocol === \"class\") {\n registerClassController(registry, controller);\n }\n else {\n registerHttpController(registry, controller);\n }\n }\n // Determine preserve mode (default: false)\n const preserve = (_a = props.preserve) !== null && _a !== void 0 ? _a : false;\n if (preserve) {\n // PRESERVE MODE: Coexist with McpServer.registerTool()\n // Uses MCP SDK internal API (_registeredTools, _toolHandlersInitialized)\n registerWithPreserve(server, registry, props.server);\n }\n else {\n // STANDALONE MODE: Typia tools only, no private API dependency\n registerStandalone(server, registry);\n }\n };\n /**\n * Standalone registration without private API. Typia tools completely replace\n * any existing tool handlers.\n */\n const registerStandalone = (server, registry) => {\n // tools/list handler\n server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => __awaiter(this, void 0, void 0, function* () {\n return ({\n tools: Array.from(registry.values()).map((entry) => ({\n name: entry.function.name,\n description: entry.function.description,\n inputSchema: {\n type: \"object\",\n properties: entry.function.parameters.properties,\n required: entry.function.parameters.required,\n additionalProperties: false,\n $defs: entry.function.parameters.$defs,\n },\n })),\n });\n }));\n // tools/call handler\n server.setRequestHandler(types_js_1.CallToolRequestSchema, (request) => __awaiter(this, void 0, void 0, function* () {\n const name = request.params.name;\n const args = request.params.arguments;\n const entry = registry.get(name);\n if (entry !== undefined) {\n return handleToolCall(entry, args);\n }\n return {\n isError: true,\n content: [{ type: \"text\", text: `Unknown tool: ${name}` }],\n };\n }));\n };\n /**\n * Preserve mode registration with private API. Coexists with tools registered\n * via McpServer.registerTool().\n */\n const registerWithPreserve = (server, registry, originalServer) => {\n // Get McpServer reference for coexistence with McpServer.registerTool()\n const mcpServer = \"server\" in originalServer ? originalServer : null;\n // Helper to get existing tools dynamically (supports tools registered after this call)\n const getExistingTools = () => {\n var _a;\n if (mcpServer === null)\n return {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (_a = mcpServer._registeredTools) !== null && _a !== void 0 ? _a : {};\n };\n // Check for conflicts with existing McpServer tools at registration time\n for (const pair of Object.entries(getExistingTools())) {\n if (pair[1].enabled && registry.has(pair[0])) {\n throw new Error(`Duplicate function name \"${pair[0]}\" between McpServer.registerTool() and controller \"${registry.get(pair[0]).controller}\"`);\n }\n }\n // tools/list handler\n server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => __awaiter(this, void 0, void 0, function* () {\n const existingTools = getExistingTools();\n return {\n tools: [\n // Typia controller tools\n ...Array.from(registry.values()).map((entry) => {\n return {\n name: entry.function.name,\n description: entry.function.description,\n inputSchema: {\n type: \"object\",\n properties: entry.function.parameters.properties,\n required: entry.function.parameters.required,\n additionalProperties: false,\n $defs: entry.function.parameters.$defs,\n },\n };\n }),\n // Existing McpServer tools\n ...Object.entries(existingTools)\n .filter((pair) => !registry.has(pair[0]) && pair[1].enabled)\n .map((pair) => {\n return {\n name: pair[0],\n description: pair[1].description,\n inputSchema: convertZodToJsonSchema(pair[1].inputSchema),\n };\n }),\n ],\n };\n }));\n // tools/call handler\n server.setRequestHandler(types_js_1.CallToolRequestSchema, (request, extra) => __awaiter(this, void 0, void 0, function* () {\n const name = request.params.name;\n const args = request.params.arguments;\n // Check typia registry first\n const entry = registry.get(name);\n if (entry !== undefined) {\n return handleToolCall(entry, args);\n }\n // Fall back to existing McpServer tools\n const existingTools = getExistingTools();\n const existingTool = existingTools[name];\n if (existingTool && existingTool.enabled) {\n return existingTool.handler(args, extra);\n }\n return {\n isError: true,\n content: [{ type: \"text\", text: `Unknown tool: ${name}` }],\n };\n }));\n // Mark handlers as initialized to prevent McpServer from overwriting\n if (mcpServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mcpServer._toolHandlersInitialized = true;\n }\n };\n const registerClassController = (registry, controller) => {\n const execute = controller.execute;\n for (const func of controller.application.functions) {\n const existing = registry.get(func.name);\n if (existing !== undefined) {\n throw new Error(`Duplicate function name \"${func.name}\" between controllers \"${existing.controller}\" and \"${controller.name}\"`);\n }\n const method = execute[func.name];\n if (typeof method !== \"function\") {\n throw new Error(`Method \"${func.name}\" not found on controller \"${controller.name}\"`);\n }\n registry.set(func.name, {\n controller: controller.name,\n function: func,\n execute: (args) => __awaiter(this, void 0, void 0, function* () { return method.call(execute, args); }),\n });\n }\n };\n const registerHttpController = (registry, controller) => {\n const application = controller.application;\n const connection = controller.connection;\n for (const func of application.functions) {\n const existing = registry.get(func.name);\n if (existing !== undefined) {\n throw new Error(`Duplicate function name \"${func.name}\" between controllers \"${existing.controller}\" and \"${controller.name}\"`);\n }\n registry.set(func.name, {\n controller: controller.name,\n function: func,\n execute: (args) => __awaiter(this, void 0, void 0, function* () {\n if (controller.execute !== undefined) {\n const response = yield controller.execute({\n connection,\n application,\n function: func,\n arguments: args,\n });\n return response.body;\n }\n return utils_1.HttpLlm.execute({\n application,\n function: func,\n connection,\n input: args,\n });\n }),\n });\n }\n };\n const handleToolCall = (entry, args) => __awaiter(this, void 0, void 0, function* () {\n const coerced = utils_1.LlmJson.coerce(args, entry.function.parameters);\n const validation = entry.function.validate(coerced);\n if (!validation.success) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: utils_1.LlmJson.stringify(validation),\n },\n ],\n };\n }\n try {\n const result = yield entry.execute(validation.data);\n return {\n content: [\n {\n type: \"text\",\n text: result === undefined\n ? \"Success\"\n : JSON.stringify(result, null, 2),\n },\n ],\n };\n }\n catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: error instanceof Error\n ? `${error.name}: ${error.message}`\n : String(error),\n },\n ],\n };\n }\n });\n const convertZodToJsonSchema = (zodSchema) => {\n if (zodSchema === undefined) {\n return { type: \"object\", properties: {} };\n }\n // @todo: error TS2589: Type instantiation is excessively deep and possibly infinite.\n const converted = zod_to_json_schema_1.zodToJsonSchema(zodSchema);\n if (typeof converted === \"object\" &&\n \"type\" in converted &&\n converted.type === \"object\") {\n return converted;\n }\n return { type: \"object\", properties: {} };\n };\n})(McpControllerRegistrar || (exports.McpControllerRegistrar = McpControllerRegistrar = {}));\n//# sourceMappingURL=McpControllerRegistrar.js.map"],"names":["this","McpControllerRegistrar_1","McpControllerRegistrar"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typia/mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "13.0.0-dev.20260425",
|
|
4
4
|
"description": "MCP (Model Context Protocol) integration for typia",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"homepage": "https://typia.io",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"zod-to-json-schema": ">=3.24.0",
|
|
26
|
-
"@typia/
|
|
27
|
-
"@typia/
|
|
26
|
+
"@typia/interface": "^13.0.0-dev.20260425",
|
|
27
|
+
"@typia/utils": "^13.0.0-dev.20260425"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"@modelcontextprotocol/sdk": ">=1.0.0"
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
34
34
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
35
35
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
36
|
-
"@
|
|
36
|
+
"@typescript/native-preview": "7.0.0-dev.20260421.2",
|
|
37
37
|
"rimraf": "^6.1.2",
|
|
38
38
|
"rollup": "^4.56.0",
|
|
39
39
|
"rollup-plugin-auto-external": "^2.0.0",
|
|
40
40
|
"rollup-plugin-node-externals": "^8.1.2",
|
|
41
41
|
"tinyglobby": "^0.2.12",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"zod": "^3.25.0",
|
|
43
|
+
"ttsc": "^0.4.2"
|
|
44
44
|
},
|
|
45
45
|
"sideEffects": false,
|
|
46
46
|
"files": [
|
|
@@ -61,15 +61,14 @@
|
|
|
61
61
|
"chatgpt",
|
|
62
62
|
"gemini",
|
|
63
63
|
"validation",
|
|
64
|
-
"json-schema"
|
|
65
|
-
"typescript"
|
|
64
|
+
"json-schema"
|
|
66
65
|
],
|
|
67
66
|
"publishConfig": {
|
|
68
67
|
"access": "public"
|
|
69
68
|
},
|
|
70
69
|
"scripts": {
|
|
71
|
-
"build": "rimraf lib &&
|
|
72
|
-
"dev": "
|
|
70
|
+
"build": "rimraf lib && ttsc && rollup -c",
|
|
71
|
+
"dev": "ttsc --watch"
|
|
73
72
|
},
|
|
74
73
|
"module": "lib/index.mjs",
|
|
75
74
|
"types": "lib/index.d.ts"
|
|
@@ -108,9 +108,11 @@ export namespace McpControllerRegistrar {
|
|
|
108
108
|
"server" in originalServer ? (originalServer as McpServer) : null;
|
|
109
109
|
|
|
110
110
|
// Helper to get existing tools dynamically (supports tools registered after this call)
|
|
111
|
-
const getExistingTools = (): Record<string, any> =>
|
|
111
|
+
const getExistingTools = (): Record<string, any> => {
|
|
112
|
+
if (mcpServer === null) return {};
|
|
112
113
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
|
-
|
|
114
|
+
return (mcpServer as any)._registeredTools ?? {};
|
|
115
|
+
};
|
|
114
116
|
|
|
115
117
|
// Check for conflicts with existing McpServer tools at registration time
|
|
116
118
|
for (const pair of Object.entries(getExistingTools())) {
|