@theorvane/type-mcp 0.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/LICENSE +21 -0
- package/README.md +151 -0
- package/dist/chunk-64DS4UNF.js +106 -0
- package/dist/chunk-64DS4UNF.js.map +1 -0
- package/dist/http.cjs +114 -0
- package/dist/http.cjs.map +1 -0
- package/dist/http.d.cts +24 -0
- package/dist/http.d.ts +24 -0
- package/dist/http.js +89 -0
- package/dist/http.js.map +1 -0
- package/dist/index.cjs +438 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +51 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.js +318 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-resolver-BdKelIch.d.cts +46 -0
- package/dist/instance-resolver-BdKelIch.d.ts +46 -0
- package/dist/langchain.cjs +161 -0
- package/dist/langchain.cjs.map +1 -0
- package/dist/langchain.d.cts +11 -0
- package/dist/langchain.d.ts +11 -0
- package/dist/langchain.js +43 -0
- package/dist/langchain.js.map +1 -0
- package/package.json +82 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TypeMcpDefinitionError,
|
|
3
|
+
defaultInstanceResolver,
|
|
4
|
+
getMcpServerDefinition,
|
|
5
|
+
readMcpServerDefinition,
|
|
6
|
+
resolveMcpServerInstance,
|
|
7
|
+
storeMcpServerDefinition
|
|
8
|
+
} from "./chunk-64DS4UNF.js";
|
|
9
|
+
|
|
10
|
+
// src/compiler/create-mcp-server.ts
|
|
11
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
|
+
|
|
13
|
+
// src/compiler/normalize-resource-prompt-result.ts
|
|
14
|
+
import {
|
|
15
|
+
GetPromptResultSchema,
|
|
16
|
+
ReadResourceResultSchema
|
|
17
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
18
|
+
function isRecord(result) {
|
|
19
|
+
return typeof result === "object" && result !== null;
|
|
20
|
+
}
|
|
21
|
+
function serializeResult(result) {
|
|
22
|
+
if (typeof result === "string") {
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
const json = JSON.stringify(result);
|
|
26
|
+
if (json === void 0) {
|
|
27
|
+
throw new TypeError("MCP handler result must be JSON-compatible");
|
|
28
|
+
}
|
|
29
|
+
return json;
|
|
30
|
+
}
|
|
31
|
+
function normalizeResourceResult(result, uri, mimeType) {
|
|
32
|
+
if (isRecord(result) && Array.isArray(result.contents)) {
|
|
33
|
+
const parsed = ReadResourceResultSchema.safeParse(result);
|
|
34
|
+
if (parsed.success) {
|
|
35
|
+
return parsed.data;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
contents: [
|
|
40
|
+
{
|
|
41
|
+
uri: uri.toString(),
|
|
42
|
+
text: serializeResult(result),
|
|
43
|
+
...mimeType === void 0 ? {} : { mimeType }
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function normalizePromptResult(result) {
|
|
49
|
+
if (isRecord(result) && Array.isArray(result.messages)) {
|
|
50
|
+
const parsed = GetPromptResultSchema.safeParse(result);
|
|
51
|
+
if (parsed.success) {
|
|
52
|
+
return parsed.data;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
messages: [
|
|
57
|
+
{
|
|
58
|
+
role: "user",
|
|
59
|
+
content: { type: "text", text: serializeResult(result) }
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// src/compiler/normalize-tool-result.ts
|
|
66
|
+
import {
|
|
67
|
+
CallToolResultSchema
|
|
68
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
69
|
+
function isRecord2(result) {
|
|
70
|
+
return typeof result === "object" && result !== null;
|
|
71
|
+
}
|
|
72
|
+
function isMcpToolResultCandidate(result) {
|
|
73
|
+
return isRecord2(result) && (Array.isArray(result.content) || "structuredContent" in result || "isError" in result);
|
|
74
|
+
}
|
|
75
|
+
function normalizeToolResult(result) {
|
|
76
|
+
if (typeof result === "string") {
|
|
77
|
+
return { content: [{ type: "text", text: result }] };
|
|
78
|
+
}
|
|
79
|
+
if (isMcpToolResultCandidate(result)) {
|
|
80
|
+
const parsed = CallToolResultSchema.safeParse(result);
|
|
81
|
+
if (parsed.success) {
|
|
82
|
+
return parsed.data;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const json = JSON.stringify(result);
|
|
86
|
+
if (json === void 0) {
|
|
87
|
+
throw new TypeError("Tool result must be JSON-compatible");
|
|
88
|
+
}
|
|
89
|
+
return { content: [{ type: "text", text: json }] };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// src/compiler/create-mcp-server.ts
|
|
93
|
+
async function createMcpServer(serverClass, resolver) {
|
|
94
|
+
const definition = readMcpServerDefinition(serverClass);
|
|
95
|
+
const instance = resolver ? await resolveMcpServerInstance(serverClass, resolver) : await resolveMcpServerInstance(
|
|
96
|
+
serverClass
|
|
97
|
+
);
|
|
98
|
+
const server = new McpServer({
|
|
99
|
+
name: definition.name,
|
|
100
|
+
version: definition.version
|
|
101
|
+
});
|
|
102
|
+
for (const tool of definition.tools) {
|
|
103
|
+
server.registerTool(
|
|
104
|
+
tool.name,
|
|
105
|
+
{
|
|
106
|
+
inputSchema: tool.input,
|
|
107
|
+
...tool.description === void 0 ? {} : { description: tool.description }
|
|
108
|
+
},
|
|
109
|
+
async (input) => {
|
|
110
|
+
try {
|
|
111
|
+
const result = await invokeTool(instance, tool.methodName, input);
|
|
112
|
+
return normalizeToolResult(result);
|
|
113
|
+
} catch {
|
|
114
|
+
return {
|
|
115
|
+
content: [{ type: "text", text: "Tool execution failed" }],
|
|
116
|
+
isError: true
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
for (const resource of definition.resources) {
|
|
123
|
+
server.registerResource(
|
|
124
|
+
resource.name,
|
|
125
|
+
resource.uri,
|
|
126
|
+
{
|
|
127
|
+
...resource.description === void 0 ? {} : { description: resource.description },
|
|
128
|
+
...resource.mimeType === void 0 ? {} : { mimeType: resource.mimeType }
|
|
129
|
+
},
|
|
130
|
+
async (uri) => {
|
|
131
|
+
try {
|
|
132
|
+
const result = await invokeMethod(instance, resource.methodName, []);
|
|
133
|
+
return normalizeResourceResult(result, uri, resource.mimeType);
|
|
134
|
+
} catch {
|
|
135
|
+
return normalizeResourceResult(
|
|
136
|
+
"Resource execution failed",
|
|
137
|
+
uri,
|
|
138
|
+
resource.mimeType
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
for (const prompt of definition.prompts) {
|
|
145
|
+
server.registerPrompt(
|
|
146
|
+
prompt.name,
|
|
147
|
+
{
|
|
148
|
+
...prompt.description === void 0 ? {} : { description: prompt.description }
|
|
149
|
+
},
|
|
150
|
+
async () => {
|
|
151
|
+
try {
|
|
152
|
+
const result = await invokeMethod(instance, prompt.methodName, []);
|
|
153
|
+
return normalizePromptResult(result);
|
|
154
|
+
} catch {
|
|
155
|
+
return normalizePromptResult("Prompt execution failed");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
return server;
|
|
161
|
+
}
|
|
162
|
+
function invokeTool(instance, methodName, input) {
|
|
163
|
+
return invokeMethod(instance, methodName, [input]);
|
|
164
|
+
}
|
|
165
|
+
function invokeMethod(instance, methodName, arguments_) {
|
|
166
|
+
const method = Reflect.get(instance, methodName);
|
|
167
|
+
if (typeof method !== "function") {
|
|
168
|
+
throw new TypeError("Decorated MCP method is not callable");
|
|
169
|
+
}
|
|
170
|
+
return Reflect.apply(method, instance, arguments_);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// src/metadata/keys.ts
|
|
174
|
+
var symbolWithMetadata = Symbol;
|
|
175
|
+
if (symbolWithMetadata.metadata === void 0) {
|
|
176
|
+
Object.defineProperty(Symbol, "metadata", {
|
|
177
|
+
configurable: true,
|
|
178
|
+
value: /* @__PURE__ */ Symbol("Symbol.metadata")
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
var MCP_TOOLS_METADATA_KEY = /* @__PURE__ */ Symbol("type-mcp:tools");
|
|
182
|
+
var MCP_RESOURCES_METADATA_KEY = /* @__PURE__ */ Symbol("type-mcp:resources");
|
|
183
|
+
var MCP_PROMPTS_METADATA_KEY = /* @__PURE__ */ Symbol("type-mcp:prompts");
|
|
184
|
+
|
|
185
|
+
// src/metadata/metadata.ts
|
|
186
|
+
function hasOwnMetadata(metadata, key) {
|
|
187
|
+
return Object.prototype.hasOwnProperty.call(metadata, key);
|
|
188
|
+
}
|
|
189
|
+
function appendDefinition(metadata, key, definition) {
|
|
190
|
+
const existing = hasOwnMetadata(metadata, key) ? metadata[key] : void 0;
|
|
191
|
+
const definitions = Array.isArray(existing) ? existing : [];
|
|
192
|
+
Object.defineProperty(metadata, key, {
|
|
193
|
+
configurable: true,
|
|
194
|
+
enumerable: false,
|
|
195
|
+
value: [...definitions, definition],
|
|
196
|
+
writable: true
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
function readDefinitions(metadata, key) {
|
|
200
|
+
const definitions = hasOwnMetadata(metadata, key) ? metadata[key] : void 0;
|
|
201
|
+
return Array.isArray(definitions) ? [...definitions] : [];
|
|
202
|
+
}
|
|
203
|
+
function appendToolDefinition(metadata, definition) {
|
|
204
|
+
appendDefinition(metadata, MCP_TOOLS_METADATA_KEY, definition);
|
|
205
|
+
}
|
|
206
|
+
function appendResourceDefinition(metadata, definition) {
|
|
207
|
+
appendDefinition(metadata, MCP_RESOURCES_METADATA_KEY, definition);
|
|
208
|
+
}
|
|
209
|
+
function appendPromptDefinition(metadata, definition) {
|
|
210
|
+
appendDefinition(metadata, MCP_PROMPTS_METADATA_KEY, definition);
|
|
211
|
+
}
|
|
212
|
+
function readToolDefinitions(metadata) {
|
|
213
|
+
return readDefinitions(metadata, MCP_TOOLS_METADATA_KEY);
|
|
214
|
+
}
|
|
215
|
+
function readResourceDefinitions(metadata) {
|
|
216
|
+
return readDefinitions(
|
|
217
|
+
metadata,
|
|
218
|
+
MCP_RESOURCES_METADATA_KEY
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
function readPromptDefinitions(metadata) {
|
|
222
|
+
return readDefinitions(
|
|
223
|
+
metadata,
|
|
224
|
+
MCP_PROMPTS_METADATA_KEY
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// src/decorators/mcp-prompt.ts
|
|
229
|
+
function McpPrompt(options) {
|
|
230
|
+
return function(_value, context) {
|
|
231
|
+
const methodName = getMethodName(context);
|
|
232
|
+
appendPromptDefinition(context.metadata, {
|
|
233
|
+
name: options.name ?? methodName,
|
|
234
|
+
methodName,
|
|
235
|
+
description: options.description
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function getMethodName(context) {
|
|
240
|
+
if (typeof context.name !== "string") {
|
|
241
|
+
throw new TypeError("MCP decorators require string-named methods");
|
|
242
|
+
}
|
|
243
|
+
return context.name;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// src/decorators/mcp-resource.ts
|
|
247
|
+
function McpResource(options) {
|
|
248
|
+
return function(_value, context) {
|
|
249
|
+
const methodName = getMethodName2(context);
|
|
250
|
+
appendResourceDefinition(context.metadata, {
|
|
251
|
+
name: options.name ?? methodName,
|
|
252
|
+
methodName,
|
|
253
|
+
uri: options.uri,
|
|
254
|
+
mimeType: options.mimeType,
|
|
255
|
+
description: options.description
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function getMethodName2(context) {
|
|
260
|
+
if (typeof context.name !== "string") {
|
|
261
|
+
throw new TypeError("MCP decorators require string-named methods");
|
|
262
|
+
}
|
|
263
|
+
return context.name;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// src/decorators/mcp-server.ts
|
|
267
|
+
function McpServer2(options) {
|
|
268
|
+
return function(target, context) {
|
|
269
|
+
storeMcpServerDefinition(target, {
|
|
270
|
+
name: options.name,
|
|
271
|
+
version: options.version,
|
|
272
|
+
tools: readToolDefinitions(context.metadata),
|
|
273
|
+
resources: readResourceDefinitions(context.metadata),
|
|
274
|
+
prompts: readPromptDefinitions(context.metadata)
|
|
275
|
+
});
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// src/decorators/mcp-tool.ts
|
|
280
|
+
function McpTool(options) {
|
|
281
|
+
return function(_value, context) {
|
|
282
|
+
const methodName = getMethodName3(context);
|
|
283
|
+
appendToolDefinition(context.metadata, {
|
|
284
|
+
name: options.name ?? methodName,
|
|
285
|
+
methodName,
|
|
286
|
+
description: options.description,
|
|
287
|
+
input: options.input
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function getMethodName3(context) {
|
|
292
|
+
if (typeof context.name !== "string") {
|
|
293
|
+
throw new TypeError("MCP decorators require string-named methods");
|
|
294
|
+
}
|
|
295
|
+
return context.name;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// src/transports/stdio.ts
|
|
299
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
300
|
+
async function startStdioServer(server, options = {}) {
|
|
301
|
+
const transport = options.transportFactory?.() ?? new StdioServerTransport();
|
|
302
|
+
await server.connect(transport);
|
|
303
|
+
return { server, transport };
|
|
304
|
+
}
|
|
305
|
+
export {
|
|
306
|
+
McpPrompt,
|
|
307
|
+
McpResource,
|
|
308
|
+
McpServer2 as McpServer,
|
|
309
|
+
McpTool,
|
|
310
|
+
TypeMcpDefinitionError,
|
|
311
|
+
createMcpServer,
|
|
312
|
+
defaultInstanceResolver,
|
|
313
|
+
getMcpServerDefinition,
|
|
314
|
+
readMcpServerDefinition,
|
|
315
|
+
resolveMcpServerInstance,
|
|
316
|
+
startStdioServer
|
|
317
|
+
};
|
|
318
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/compiler/create-mcp-server.ts","../src/compiler/normalize-resource-prompt-result.ts","../src/compiler/normalize-tool-result.ts","../src/metadata/keys.ts","../src/metadata/metadata.ts","../src/decorators/mcp-prompt.ts","../src/decorators/mcp-resource.ts","../src/decorators/mcp-server.ts","../src/decorators/mcp-tool.ts","../src/transports/stdio.ts"],"sourcesContent":["import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { readMcpServerDefinition } from \"../metadata/read-server-definition.js\";\nimport type { InstanceResolver } from \"../resolver/instance-resolver.js\";\nimport { resolveMcpServerInstance } from \"../resolver/resolve-server-instance.js\";\nimport type {\n\tMcpServerConstructor,\n\tZeroArgumentMcpServerConstructor,\n} from \"../types.js\";\nimport {\n\tnormalizePromptResult,\n\tnormalizeResourceResult,\n} from \"./normalize-resource-prompt-result.js\";\nimport { normalizeToolResult } from \"./normalize-tool-result.js\";\n\nexport async function createMcpServer<T extends object>(\n\tserverClass: ZeroArgumentMcpServerConstructor<T>,\n): Promise<McpServer>;\nexport async function createMcpServer<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\tserverClass: McpServerConstructor<T, Arguments>,\n\tresolver: InstanceResolver<T>,\n): Promise<McpServer>;\nexport async function createMcpServer<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\tserverClass: McpServerConstructor<T, Arguments>,\n\tresolver?: InstanceResolver<T>,\n): Promise<McpServer> {\n\tconst definition = readMcpServerDefinition(serverClass);\n\tconst instance = resolver\n\t\t? await resolveMcpServerInstance(serverClass, resolver)\n\t\t: await resolveMcpServerInstance(\n\t\t\t\tserverClass as ZeroArgumentMcpServerConstructor<T>,\n\t\t\t);\n\tconst server = new McpServer({\n\t\tname: definition.name,\n\t\tversion: definition.version,\n\t});\n\n\tfor (const tool of definition.tools) {\n\t\tserver.registerTool(\n\t\t\ttool.name,\n\t\t\t{\n\t\t\t\tinputSchema: tool.input,\n\t\t\t\t...(tool.description === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { description: tool.description }),\n\t\t\t},\n\t\t\tasync (input) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await invokeTool(instance, tool.methodName, input);\n\t\t\t\t\treturn normalizeToolResult(result);\n\t\t\t\t} catch {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Tool execution failed\" }],\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\tfor (const resource of definition.resources) {\n\t\tserver.registerResource(\n\t\t\tresource.name,\n\t\t\tresource.uri,\n\t\t\t{\n\t\t\t\t...(resource.description === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { description: resource.description }),\n\t\t\t\t...(resource.mimeType === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { mimeType: resource.mimeType }),\n\t\t\t},\n\t\t\tasync (uri) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await invokeMethod(instance, resource.methodName, []);\n\t\t\t\t\treturn normalizeResourceResult(result, uri, resource.mimeType);\n\t\t\t\t} catch {\n\t\t\t\t\treturn normalizeResourceResult(\n\t\t\t\t\t\t\"Resource execution failed\",\n\t\t\t\t\t\turi,\n\t\t\t\t\t\tresource.mimeType,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\tfor (const prompt of definition.prompts) {\n\t\tserver.registerPrompt(\n\t\t\tprompt.name,\n\t\t\t{\n\t\t\t\t...(prompt.description === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { description: prompt.description }),\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await invokeMethod(instance, prompt.methodName, []);\n\t\t\t\t\treturn normalizePromptResult(result);\n\t\t\t\t} catch {\n\t\t\t\t\treturn normalizePromptResult(\"Prompt execution failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\treturn server;\n}\n\nfunction invokeTool(\n\tinstance: object,\n\tmethodName: string,\n\tinput: unknown,\n): unknown | Promise<unknown> {\n\treturn invokeMethod(instance, methodName, [input]);\n}\n\nfunction invokeMethod(\n\tinstance: object,\n\tmethodName: string,\n\targuments_: readonly unknown[],\n): unknown | Promise<unknown> {\n\tconst method = Reflect.get(instance, methodName);\n\tif (typeof method !== \"function\") {\n\t\tthrow new TypeError(\"Decorated MCP method is not callable\");\n\t}\n\n\treturn Reflect.apply(method, instance, arguments_);\n}\n","import {\n\ttype GetPromptResult,\n\tGetPromptResultSchema,\n\ttype ReadResourceResult,\n\tReadResourceResultSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\n\nfunction isRecord(result: unknown): result is Record<string, unknown> {\n\treturn typeof result === \"object\" && result !== null;\n}\n\nfunction serializeResult(result: unknown): string {\n\tif (typeof result === \"string\") {\n\t\treturn result;\n\t}\n\n\tconst json = JSON.stringify(result);\n\tif (json === undefined) {\n\t\tthrow new TypeError(\"MCP handler result must be JSON-compatible\");\n\t}\n\n\treturn json;\n}\n\nexport function normalizeResourceResult(\n\tresult: unknown,\n\turi: URL,\n\tmimeType: string | undefined,\n): ReadResourceResult {\n\tif (isRecord(result) && Array.isArray(result.contents)) {\n\t\tconst parsed = ReadResourceResultSchema.safeParse(result);\n\t\tif (parsed.success) {\n\t\t\treturn parsed.data;\n\t\t}\n\t}\n\n\treturn {\n\t\tcontents: [\n\t\t\t{\n\t\t\t\turi: uri.toString(),\n\t\t\t\ttext: serializeResult(result),\n\t\t\t\t...(mimeType === undefined ? {} : { mimeType }),\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function normalizePromptResult(result: unknown): GetPromptResult {\n\tif (isRecord(result) && Array.isArray(result.messages)) {\n\t\tconst parsed = GetPromptResultSchema.safeParse(result);\n\t\tif (parsed.success) {\n\t\t\treturn parsed.data;\n\t\t}\n\t}\n\n\treturn {\n\t\tmessages: [\n\t\t\t{\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: { type: \"text\", text: serializeResult(result) },\n\t\t\t},\n\t\t],\n\t};\n}\n","import {\n\ttype CallToolResult,\n\tCallToolResultSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\n\nfunction isRecord(result: unknown): result is Record<string, unknown> {\n\treturn typeof result === \"object\" && result !== null;\n}\n\nfunction isMcpToolResultCandidate(result: unknown): boolean {\n\treturn (\n\t\tisRecord(result) &&\n\t\t(Array.isArray(result.content) ||\n\t\t\t\"structuredContent\" in result ||\n\t\t\t\"isError\" in result)\n\t);\n}\n\nexport function normalizeToolResult(result: unknown): CallToolResult {\n\tif (typeof result === \"string\") {\n\t\treturn { content: [{ type: \"text\", text: result }] };\n\t}\n\n\tif (isMcpToolResultCandidate(result)) {\n\t\tconst parsed = CallToolResultSchema.safeParse(result);\n\t\tif (parsed.success) {\n\t\t\treturn parsed.data;\n\t\t}\n\t}\n\n\tconst json = JSON.stringify(result);\n\tif (json === undefined) {\n\t\tthrow new TypeError(\"Tool result must be JSON-compatible\");\n\t}\n\n\treturn { content: [{ type: \"text\", text: json }] };\n}\n","const symbolWithMetadata = Symbol as unknown as {\n\tmetadata?: symbol;\n};\n\nif (symbolWithMetadata.metadata === undefined) {\n\tObject.defineProperty(Symbol, \"metadata\", {\n\t\tconfigurable: true,\n\t\tvalue: Symbol(\"Symbol.metadata\"),\n\t});\n}\n\nexport const MCP_TOOLS_METADATA_KEY = Symbol(\"type-mcp:tools\");\nexport const MCP_RESOURCES_METADATA_KEY = Symbol(\"type-mcp:resources\");\nexport const MCP_PROMPTS_METADATA_KEY = Symbol(\"type-mcp:prompts\");\n","import type {\n\tMcpPromptDefinition,\n\tMcpResourceDefinition,\n\tMcpToolDefinition,\n} from \"../types.js\";\nimport {\n\tMCP_PROMPTS_METADATA_KEY,\n\tMCP_RESOURCES_METADATA_KEY,\n\tMCP_TOOLS_METADATA_KEY,\n} from \"./keys.js\";\n\nfunction hasOwnMetadata(metadata: DecoratorMetadata, key: symbol): boolean {\n\treturn Object.prototype.hasOwnProperty.call(metadata, key);\n}\n\nfunction appendDefinition<T>(\n\tmetadata: DecoratorMetadata,\n\tkey: symbol,\n\tdefinition: T,\n): void {\n\tconst existing = hasOwnMetadata(metadata, key) ? metadata[key] : undefined;\n\tconst definitions = Array.isArray(existing) ? existing : [];\n\n\tObject.defineProperty(metadata, key, {\n\t\tconfigurable: true,\n\t\tenumerable: false,\n\t\tvalue: [...definitions, definition],\n\t\twritable: true,\n\t});\n}\n\nfunction readDefinitions<T>(\n\tmetadata: DecoratorMetadata,\n\tkey: symbol,\n): readonly T[] {\n\tconst definitions = hasOwnMetadata(metadata, key) ? metadata[key] : undefined;\n\treturn Array.isArray(definitions) ? ([...definitions] as readonly T[]) : [];\n}\n\nexport function appendToolDefinition(\n\tmetadata: DecoratorMetadata,\n\tdefinition: McpToolDefinition,\n): void {\n\tappendDefinition(metadata, MCP_TOOLS_METADATA_KEY, definition);\n}\n\nexport function appendResourceDefinition(\n\tmetadata: DecoratorMetadata,\n\tdefinition: McpResourceDefinition,\n): void {\n\tappendDefinition(metadata, MCP_RESOURCES_METADATA_KEY, definition);\n}\n\nexport function appendPromptDefinition(\n\tmetadata: DecoratorMetadata,\n\tdefinition: McpPromptDefinition,\n): void {\n\tappendDefinition(metadata, MCP_PROMPTS_METADATA_KEY, definition);\n}\n\nexport function readToolDefinitions(\n\tmetadata: DecoratorMetadata,\n): readonly McpToolDefinition[] {\n\treturn readDefinitions<McpToolDefinition>(metadata, MCP_TOOLS_METADATA_KEY);\n}\n\nexport function readResourceDefinitions(\n\tmetadata: DecoratorMetadata,\n): readonly McpResourceDefinition[] {\n\treturn readDefinitions<McpResourceDefinition>(\n\t\tmetadata,\n\t\tMCP_RESOURCES_METADATA_KEY,\n\t);\n}\n\nexport function readPromptDefinitions(\n\tmetadata: DecoratorMetadata,\n): readonly McpPromptDefinition[] {\n\treturn readDefinitions<McpPromptDefinition>(\n\t\tmetadata,\n\t\tMCP_PROMPTS_METADATA_KEY,\n\t);\n}\n","import { appendPromptDefinition } from \"../metadata/metadata.js\";\nimport type { McpPromptOptions } from \"../types.js\";\n\nexport function McpPrompt(options: McpPromptOptions) {\n\treturn function <This>(\n\t\t_value: (this: This) => unknown,\n\t\tcontext: ClassMethodDecoratorContext<This, (this: This) => unknown>,\n\t): void {\n\t\tconst methodName = getMethodName(context);\n\n\t\tappendPromptDefinition(context.metadata, {\n\t\t\tname: options.name ?? methodName,\n\t\t\tmethodName,\n\t\t\tdescription: options.description,\n\t\t});\n\t};\n}\n\nfunction getMethodName(context: { readonly name: string | symbol }): string {\n\tif (typeof context.name !== \"string\") {\n\t\tthrow new TypeError(\"MCP decorators require string-named methods\");\n\t}\n\n\treturn context.name;\n}\n","import { appendResourceDefinition } from \"../metadata/metadata.js\";\nimport type { McpResourceOptions } from \"../types.js\";\n\nexport function McpResource(options: McpResourceOptions) {\n\treturn function (_value: object, context: ClassMethodDecoratorContext): void {\n\t\tconst methodName = getMethodName(context);\n\n\t\tappendResourceDefinition(context.metadata, {\n\t\t\tname: options.name ?? methodName,\n\t\t\tmethodName,\n\t\t\turi: options.uri,\n\t\t\tmimeType: options.mimeType,\n\t\t\tdescription: options.description,\n\t\t});\n\t};\n}\n\nfunction getMethodName(context: ClassMethodDecoratorContext): string {\n\tif (typeof context.name !== \"string\") {\n\t\tthrow new TypeError(\"MCP decorators require string-named methods\");\n\t}\n\n\treturn context.name;\n}\n","import { storeMcpServerDefinition } from \"../metadata/definitions.js\";\nimport {\n\treadPromptDefinitions,\n\treadResourceDefinitions,\n\treadToolDefinitions,\n} from \"../metadata/metadata.js\";\nimport type { McpServerConstructor, McpServerOptions } from \"../types.js\";\n\nexport function McpServer(options: McpServerOptions) {\n\treturn function <T extends McpServerConstructor>(\n\t\ttarget: T,\n\t\tcontext: ClassDecoratorContext,\n\t): void {\n\t\tstoreMcpServerDefinition(target, {\n\t\t\tname: options.name,\n\t\t\tversion: options.version,\n\t\t\ttools: readToolDefinitions(context.metadata),\n\t\t\tresources: readResourceDefinitions(context.metadata),\n\t\t\tprompts: readPromptDefinitions(context.metadata),\n\t\t});\n\t};\n}\n","import { appendToolDefinition } from \"../metadata/metadata.js\";\nimport type { McpToolOptions } from \"../types.js\";\n\nexport function McpTool(options: McpToolOptions) {\n\treturn function (_value: object, context: ClassMethodDecoratorContext): void {\n\t\tconst methodName = getMethodName(context);\n\n\t\tappendToolDefinition(context.metadata, {\n\t\t\tname: options.name ?? methodName,\n\t\t\tmethodName,\n\t\t\tdescription: options.description,\n\t\t\tinput: options.input,\n\t\t});\n\t};\n}\n\nfunction getMethodName(context: ClassMethodDecoratorContext): string {\n\tif (typeof context.name !== \"string\") {\n\t\tthrow new TypeError(\"MCP decorators require string-named methods\");\n\t}\n\n\treturn context.name;\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\n\nexport interface McpServerConnection {\n\tconnect(transport: Transport): Promise<void>;\n}\n\nexport interface StdioServerOptions {\n\treadonly transportFactory?: () => Transport;\n}\n\nexport interface StartedStdioServer<Server extends McpServerConnection> {\n\treadonly server: Server;\n\treadonly transport: Transport;\n}\n\n/**\n * Connects an MCP SDK server to Node's standard input and output streams.\n *\n * The optional transport factory exists for deterministic tests. Production\n * callers should rely on the official SDK StdioServerTransport default.\n */\nexport async function startStdioServer<Server extends McpServerConnection>(\n\tserver: Server,\n\toptions: StdioServerOptions = {},\n): Promise<StartedStdioServer<Server>> {\n\tconst transport = options.transportFactory?.() ?? new StdioServerTransport();\n\tawait server.connect(transport);\n\treturn { server, transport };\n}\n"],"mappings":"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","names":["isRecord","getMethodName","McpServer","getMethodName"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ZodObject } from 'zod';
|
|
2
|
+
|
|
3
|
+
type McpServerConstructor<T extends object = object, Arguments extends readonly unknown[] = readonly unknown[]> = new (...args: Arguments) => T;
|
|
4
|
+
type ZeroArgumentMcpServerConstructor<T extends object = object> = new () => T;
|
|
5
|
+
interface McpServerOptions {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly version: string;
|
|
8
|
+
}
|
|
9
|
+
interface McpToolOptions {
|
|
10
|
+
readonly name?: string | undefined;
|
|
11
|
+
readonly description?: string | undefined;
|
|
12
|
+
readonly input: ZodObject;
|
|
13
|
+
}
|
|
14
|
+
interface McpResourceOptions {
|
|
15
|
+
readonly name?: string | undefined;
|
|
16
|
+
readonly uri: string;
|
|
17
|
+
readonly mimeType?: string | undefined;
|
|
18
|
+
readonly description?: string | undefined;
|
|
19
|
+
}
|
|
20
|
+
interface McpPromptOptions {
|
|
21
|
+
readonly name?: string | undefined;
|
|
22
|
+
readonly description?: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
interface McpToolDefinition extends McpToolOptions {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly methodName: string;
|
|
27
|
+
}
|
|
28
|
+
interface McpResourceDefinition extends McpResourceOptions {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly methodName: string;
|
|
31
|
+
}
|
|
32
|
+
interface McpPromptDefinition extends McpPromptOptions {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly methodName: string;
|
|
35
|
+
}
|
|
36
|
+
interface McpServerDefinition extends McpServerOptions {
|
|
37
|
+
readonly tools: readonly McpToolDefinition[];
|
|
38
|
+
readonly resources: readonly McpResourceDefinition[];
|
|
39
|
+
readonly prompts: readonly McpPromptDefinition[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface InstanceResolver<T extends object = object> {
|
|
43
|
+
resolve<Arguments extends readonly unknown[]>(serverClass: McpServerConstructor<T, Arguments>): T | Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type { InstanceResolver as I, McpServerConstructor as M, ZeroArgumentMcpServerConstructor as Z, McpPromptOptions as a, McpResourceOptions as b, McpServerOptions as c, McpToolOptions as d, McpServerDefinition as e, McpPromptDefinition as f, McpResourceDefinition as g, McpToolDefinition as h };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ZodObject } from 'zod';
|
|
2
|
+
|
|
3
|
+
type McpServerConstructor<T extends object = object, Arguments extends readonly unknown[] = readonly unknown[]> = new (...args: Arguments) => T;
|
|
4
|
+
type ZeroArgumentMcpServerConstructor<T extends object = object> = new () => T;
|
|
5
|
+
interface McpServerOptions {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly version: string;
|
|
8
|
+
}
|
|
9
|
+
interface McpToolOptions {
|
|
10
|
+
readonly name?: string | undefined;
|
|
11
|
+
readonly description?: string | undefined;
|
|
12
|
+
readonly input: ZodObject;
|
|
13
|
+
}
|
|
14
|
+
interface McpResourceOptions {
|
|
15
|
+
readonly name?: string | undefined;
|
|
16
|
+
readonly uri: string;
|
|
17
|
+
readonly mimeType?: string | undefined;
|
|
18
|
+
readonly description?: string | undefined;
|
|
19
|
+
}
|
|
20
|
+
interface McpPromptOptions {
|
|
21
|
+
readonly name?: string | undefined;
|
|
22
|
+
readonly description?: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
interface McpToolDefinition extends McpToolOptions {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly methodName: string;
|
|
27
|
+
}
|
|
28
|
+
interface McpResourceDefinition extends McpResourceOptions {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly methodName: string;
|
|
31
|
+
}
|
|
32
|
+
interface McpPromptDefinition extends McpPromptOptions {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly methodName: string;
|
|
35
|
+
}
|
|
36
|
+
interface McpServerDefinition extends McpServerOptions {
|
|
37
|
+
readonly tools: readonly McpToolDefinition[];
|
|
38
|
+
readonly resources: readonly McpResourceDefinition[];
|
|
39
|
+
readonly prompts: readonly McpPromptDefinition[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface InstanceResolver<T extends object = object> {
|
|
43
|
+
resolve<Arguments extends readonly unknown[]>(serverClass: McpServerConstructor<T, Arguments>): T | Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type { InstanceResolver as I, McpServerConstructor as M, ZeroArgumentMcpServerConstructor as Z, McpPromptOptions as a, McpResourceOptions as b, McpServerOptions as c, McpToolOptions as d, McpServerDefinition as e, McpPromptDefinition as f, McpResourceDefinition as g, McpToolDefinition as h };
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/langchain.ts
|
|
21
|
+
var langchain_exports = {};
|
|
22
|
+
__export(langchain_exports, {
|
|
23
|
+
createLangChainTools: () => createLangChainTools
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(langchain_exports);
|
|
26
|
+
|
|
27
|
+
// src/langchain/create-langchain-tools.ts
|
|
28
|
+
var import_tools = require("@langchain/core/tools");
|
|
29
|
+
|
|
30
|
+
// src/errors.ts
|
|
31
|
+
var TypeMcpDefinitionError = class extends Error {
|
|
32
|
+
constructor(message) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.name = "TypeMcpDefinitionError";
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// src/metadata/definitions.ts
|
|
39
|
+
var serverDefinitions = /* @__PURE__ */ new WeakMap();
|
|
40
|
+
function getMcpServerDefinition(target) {
|
|
41
|
+
const definition = serverDefinitions.get(target);
|
|
42
|
+
return definition === void 0 ? void 0 : freezeServerDefinition(definition);
|
|
43
|
+
}
|
|
44
|
+
function freezeServerDefinition(definition) {
|
|
45
|
+
return Object.freeze({
|
|
46
|
+
name: definition.name,
|
|
47
|
+
version: definition.version,
|
|
48
|
+
tools: Object.freeze(
|
|
49
|
+
definition.tools.map(
|
|
50
|
+
(tool) => Object.freeze({
|
|
51
|
+
name: tool.name,
|
|
52
|
+
methodName: tool.methodName,
|
|
53
|
+
description: tool.description,
|
|
54
|
+
input: tool.input
|
|
55
|
+
})
|
|
56
|
+
)
|
|
57
|
+
),
|
|
58
|
+
resources: Object.freeze(
|
|
59
|
+
definition.resources.map(
|
|
60
|
+
(resource) => Object.freeze({
|
|
61
|
+
name: resource.name,
|
|
62
|
+
methodName: resource.methodName,
|
|
63
|
+
uri: resource.uri,
|
|
64
|
+
mimeType: resource.mimeType,
|
|
65
|
+
description: resource.description
|
|
66
|
+
})
|
|
67
|
+
)
|
|
68
|
+
),
|
|
69
|
+
prompts: Object.freeze(
|
|
70
|
+
definition.prompts.map(
|
|
71
|
+
(prompt) => Object.freeze({
|
|
72
|
+
name: prompt.name,
|
|
73
|
+
methodName: prompt.methodName,
|
|
74
|
+
description: prompt.description
|
|
75
|
+
})
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/metadata/read-server-definition.ts
|
|
82
|
+
function readMcpServerDefinition(target) {
|
|
83
|
+
const definition = getMcpServerDefinition(target);
|
|
84
|
+
const className = target.name || "<anonymous>";
|
|
85
|
+
if (definition === void 0) {
|
|
86
|
+
throw new TypeMcpDefinitionError(
|
|
87
|
+
`MCP server definition is missing for ${className}`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
assertUniqueNames("tool", definition.tools, className);
|
|
91
|
+
assertUniqueNames("resource", definition.resources, className);
|
|
92
|
+
assertUniqueNames("prompt", definition.prompts, className);
|
|
93
|
+
return definition;
|
|
94
|
+
}
|
|
95
|
+
function assertUniqueNames(componentType, definitions, className) {
|
|
96
|
+
const names = /* @__PURE__ */ new Set();
|
|
97
|
+
for (const definition of definitions) {
|
|
98
|
+
if (names.has(definition.name)) {
|
|
99
|
+
throw new TypeMcpDefinitionError(
|
|
100
|
+
`Duplicate MCP ${componentType} name "${definition.name}" on ${className}`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
names.add(definition.name);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// src/resolver/default-instance-resolver.ts
|
|
108
|
+
var defaultInstanceResolver = {
|
|
109
|
+
resolve(serverClass) {
|
|
110
|
+
return new serverClass();
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// src/resolver/resolve-server-instance.ts
|
|
115
|
+
async function resolveMcpServerInstance(serverClass, resolver) {
|
|
116
|
+
if (resolver) {
|
|
117
|
+
return resolver.resolve(serverClass);
|
|
118
|
+
}
|
|
119
|
+
return defaultInstanceResolver.resolve(
|
|
120
|
+
serverClass
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// src/langchain/create-langchain-tools.ts
|
|
125
|
+
var TOOL_EXECUTION_FAILED = "Tool execution failed";
|
|
126
|
+
async function createLangChainTools(serverClass, options) {
|
|
127
|
+
const definition = readMcpServerDefinition(serverClass);
|
|
128
|
+
const instance = options ? await resolveMcpServerInstance(serverClass, options.resolver) : await resolveMcpServerInstance(
|
|
129
|
+
serverClass
|
|
130
|
+
);
|
|
131
|
+
return definition.tools.map((tool) => createLangChainTool(instance, tool));
|
|
132
|
+
}
|
|
133
|
+
function createLangChainTool(instance, definition) {
|
|
134
|
+
return new import_tools.DynamicStructuredTool({
|
|
135
|
+
name: definition.name,
|
|
136
|
+
description: definition.description ?? `${definition.name} tool`,
|
|
137
|
+
schema: definition.input,
|
|
138
|
+
func: async (input) => invokeSafely(instance, definition.methodName, input)
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async function invokeSafely(instance, methodName, input) {
|
|
142
|
+
try {
|
|
143
|
+
const method = Reflect.get(instance, methodName);
|
|
144
|
+
if (typeof method !== "function") {
|
|
145
|
+
return TOOL_EXECUTION_FAILED;
|
|
146
|
+
}
|
|
147
|
+
const result = await Reflect.apply(method, instance, [input]);
|
|
148
|
+
if (typeof result === "string") {
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
const serialized = JSON.stringify(result);
|
|
152
|
+
return serialized === void 0 ? TOOL_EXECUTION_FAILED : serialized;
|
|
153
|
+
} catch {
|
|
154
|
+
return TOOL_EXECUTION_FAILED;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
158
|
+
0 && (module.exports = {
|
|
159
|
+
createLangChainTools
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=langchain.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/langchain.ts","../src/langchain/create-langchain-tools.ts","../src/errors.ts","../src/metadata/definitions.ts","../src/metadata/read-server-definition.ts","../src/resolver/default-instance-resolver.ts","../src/resolver/resolve-server-instance.ts"],"sourcesContent":["export {\n\ttype CreateLangChainToolsOptions,\n\tcreateLangChainTools,\n} from \"./langchain/create-langchain-tools.js\";\n","import { DynamicStructuredTool } from \"@langchain/core/tools\";\nimport { readMcpServerDefinition } from \"../metadata/read-server-definition.js\";\nimport type { InstanceResolver } from \"../resolver/instance-resolver.js\";\nimport { resolveMcpServerInstance } from \"../resolver/resolve-server-instance.js\";\nimport type {\n\tMcpServerConstructor,\n\tMcpToolDefinition,\n\tZeroArgumentMcpServerConstructor,\n} from \"../types.js\";\n\nconst TOOL_EXECUTION_FAILED = \"Tool execution failed\";\n\nexport interface CreateLangChainToolsOptions<T extends object> {\n\treadonly resolver: InstanceResolver<T>;\n}\n\nexport function createLangChainTools<T extends object>(\n\tserverClass: ZeroArgumentMcpServerConstructor<T>,\n): Promise<readonly DynamicStructuredTool[]>;\nexport function createLangChainTools<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\tserverClass: McpServerConstructor<T, Arguments>,\n\toptions: CreateLangChainToolsOptions<T>,\n): Promise<readonly DynamicStructuredTool[]>;\nexport async function createLangChainTools<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\tserverClass: McpServerConstructor<T, Arguments>,\n\toptions?: CreateLangChainToolsOptions<T>,\n): Promise<readonly DynamicStructuredTool[]> {\n\tconst definition = readMcpServerDefinition(serverClass);\n\tconst instance = options\n\t\t? await resolveMcpServerInstance(serverClass, options.resolver)\n\t\t: await resolveMcpServerInstance(\n\t\t\t\tserverClass as ZeroArgumentMcpServerConstructor<T>,\n\t\t\t);\n\n\treturn definition.tools.map((tool) => createLangChainTool(instance, tool));\n}\n\nfunction createLangChainTool(\n\tinstance: object,\n\tdefinition: McpToolDefinition,\n): DynamicStructuredTool {\n\treturn new DynamicStructuredTool({\n\t\tname: definition.name,\n\t\tdescription: definition.description ?? `${definition.name} tool`,\n\t\tschema: definition.input,\n\t\tfunc: async (input) => invokeSafely(instance, definition.methodName, input),\n\t});\n}\n\nasync function invokeSafely(\n\tinstance: object,\n\tmethodName: string,\n\tinput: unknown,\n): Promise<string> {\n\ttry {\n\t\tconst method = Reflect.get(instance, methodName);\n\t\tif (typeof method !== \"function\") {\n\t\t\treturn TOOL_EXECUTION_FAILED;\n\t\t}\n\n\t\tconst result = await Reflect.apply(method, instance, [input]);\n\t\tif (typeof result === \"string\") {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst serialized = JSON.stringify(result);\n\t\treturn serialized === undefined ? TOOL_EXECUTION_FAILED : serialized;\n\t} catch {\n\t\treturn TOOL_EXECUTION_FAILED;\n\t}\n}\n","export class TypeMcpDefinitionError extends Error {\n\tpublic constructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"TypeMcpDefinitionError\";\n\t}\n}\n","import type {\n\tMcpPromptDefinition,\n\tMcpResourceDefinition,\n\tMcpServerConstructor,\n\tMcpServerDefinition,\n\tMcpToolDefinition,\n} from \"../types.js\";\n\nexport interface PendingMcpDefinitions {\n\treadonly tools: readonly McpToolDefinition[];\n\treadonly resources: readonly McpResourceDefinition[];\n\treadonly prompts: readonly McpPromptDefinition[];\n}\n\nconst serverDefinitions = new WeakMap<object, McpServerDefinition>();\n\nexport function storeMcpServerDefinition<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\ttarget: McpServerConstructor<T, Arguments>,\n\tdefinition: McpServerDefinition,\n): void {\n\tserverDefinitions.set(target, freezeServerDefinition(definition));\n}\n\nexport function getMcpServerDefinition<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(target: McpServerConstructor<T, Arguments>): McpServerDefinition | undefined {\n\tconst definition = serverDefinitions.get(target);\n\treturn definition === undefined\n\t\t? undefined\n\t\t: freezeServerDefinition(definition);\n}\n\nexport function freezeServerDefinition(\n\tdefinition: McpServerDefinition,\n): McpServerDefinition {\n\treturn Object.freeze({\n\t\tname: definition.name,\n\t\tversion: definition.version,\n\t\ttools: Object.freeze(\n\t\t\tdefinition.tools.map((tool) =>\n\t\t\t\tObject.freeze({\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tmethodName: tool.methodName,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tinput: tool.input,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tresources: Object.freeze(\n\t\t\tdefinition.resources.map((resource) =>\n\t\t\t\tObject.freeze({\n\t\t\t\t\tname: resource.name,\n\t\t\t\t\tmethodName: resource.methodName,\n\t\t\t\t\turi: resource.uri,\n\t\t\t\t\tmimeType: resource.mimeType,\n\t\t\t\t\tdescription: resource.description,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tprompts: Object.freeze(\n\t\t\tdefinition.prompts.map((prompt) =>\n\t\t\t\tObject.freeze({\n\t\t\t\t\tname: prompt.name,\n\t\t\t\t\tmethodName: prompt.methodName,\n\t\t\t\t\tdescription: prompt.description,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t});\n}\n","import { TypeMcpDefinitionError } from \"../errors.js\";\nimport type {\n\tMcpPromptDefinition,\n\tMcpResourceDefinition,\n\tMcpServerConstructor,\n\tMcpServerDefinition,\n\tMcpToolDefinition,\n} from \"../types.js\";\nimport { getMcpServerDefinition } from \"./definitions.js\";\n\ntype NamedDefinition =\n\t| McpToolDefinition\n\t| McpResourceDefinition\n\t| McpPromptDefinition;\n\nexport function readMcpServerDefinition<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(target: McpServerConstructor<T, Arguments>): McpServerDefinition {\n\tconst definition = getMcpServerDefinition(target);\n\tconst className = target.name || \"<anonymous>\";\n\n\tif (definition === undefined) {\n\t\tthrow new TypeMcpDefinitionError(\n\t\t\t`MCP server definition is missing for ${className}`,\n\t\t);\n\t}\n\n\tassertUniqueNames(\"tool\", definition.tools, className);\n\tassertUniqueNames(\"resource\", definition.resources, className);\n\tassertUniqueNames(\"prompt\", definition.prompts, className);\n\n\treturn definition;\n}\n\nfunction assertUniqueNames(\n\tcomponentType: \"tool\" | \"resource\" | \"prompt\",\n\tdefinitions: readonly NamedDefinition[],\n\tclassName: string,\n): void {\n\tconst names = new Set<string>();\n\n\tfor (const definition of definitions) {\n\t\tif (names.has(definition.name)) {\n\t\t\tthrow new TypeMcpDefinitionError(\n\t\t\t\t`Duplicate MCP ${componentType} name \"${definition.name}\" on ${className}`,\n\t\t\t);\n\t\t}\n\n\t\tnames.add(definition.name);\n\t}\n}\n","import type { ZeroArgumentMcpServerConstructor } from \"../types.js\";\n\nexport const defaultInstanceResolver = {\n\tresolve<T extends object>(\n\t\tserverClass: ZeroArgumentMcpServerConstructor<T>,\n\t): T {\n\t\treturn new serverClass();\n\t},\n};\n","import type {\n\tMcpServerConstructor,\n\tZeroArgumentMcpServerConstructor,\n} from \"../types.js\";\nimport { defaultInstanceResolver } from \"./default-instance-resolver.js\";\nimport type { InstanceResolver } from \"./instance-resolver.js\";\n\nexport function resolveMcpServerInstance<T extends object>(\n\tserverClass: ZeroArgumentMcpServerConstructor<T>,\n): Promise<T>;\nexport function resolveMcpServerInstance<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\tserverClass: McpServerConstructor<T, Arguments>,\n\tresolver: InstanceResolver<T>,\n): Promise<T>;\nexport async function resolveMcpServerInstance<\n\tT extends object,\n\tArguments extends readonly unknown[],\n>(\n\tserverClass: McpServerConstructor<T, Arguments>,\n\tresolver?: InstanceResolver<T>,\n): Promise<T> {\n\tif (resolver) {\n\t\treturn resolver.resolve(serverClass);\n\t}\n\n\treturn defaultInstanceResolver.resolve(\n\t\tserverClass as ZeroArgumentMcpServerConstructor<T>,\n\t);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DynamicStructuredTool } from '@langchain/core/tools';
|
|
2
|
+
import { I as InstanceResolver, Z as ZeroArgumentMcpServerConstructor, M as McpServerConstructor } from './instance-resolver-BdKelIch.cjs';
|
|
3
|
+
import 'zod';
|
|
4
|
+
|
|
5
|
+
interface CreateLangChainToolsOptions<T extends object> {
|
|
6
|
+
readonly resolver: InstanceResolver<T>;
|
|
7
|
+
}
|
|
8
|
+
declare function createLangChainTools<T extends object>(serverClass: ZeroArgumentMcpServerConstructor<T>): Promise<readonly DynamicStructuredTool[]>;
|
|
9
|
+
declare function createLangChainTools<T extends object, Arguments extends readonly unknown[]>(serverClass: McpServerConstructor<T, Arguments>, options: CreateLangChainToolsOptions<T>): Promise<readonly DynamicStructuredTool[]>;
|
|
10
|
+
|
|
11
|
+
export { type CreateLangChainToolsOptions, createLangChainTools };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DynamicStructuredTool } from '@langchain/core/tools';
|
|
2
|
+
import { I as InstanceResolver, Z as ZeroArgumentMcpServerConstructor, M as McpServerConstructor } from './instance-resolver-BdKelIch.js';
|
|
3
|
+
import 'zod';
|
|
4
|
+
|
|
5
|
+
interface CreateLangChainToolsOptions<T extends object> {
|
|
6
|
+
readonly resolver: InstanceResolver<T>;
|
|
7
|
+
}
|
|
8
|
+
declare function createLangChainTools<T extends object>(serverClass: ZeroArgumentMcpServerConstructor<T>): Promise<readonly DynamicStructuredTool[]>;
|
|
9
|
+
declare function createLangChainTools<T extends object, Arguments extends readonly unknown[]>(serverClass: McpServerConstructor<T, Arguments>, options: CreateLangChainToolsOptions<T>): Promise<readonly DynamicStructuredTool[]>;
|
|
10
|
+
|
|
11
|
+
export { type CreateLangChainToolsOptions, createLangChainTools };
|