@mcpmesh/sdk 0.8.0-beta.1
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/dist/__tests__/claude-handler.test.d.ts +7 -0
- package/dist/__tests__/claude-handler.test.d.ts.map +1 -0
- package/dist/__tests__/claude-handler.test.js +455 -0
- package/dist/__tests__/claude-handler.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +7 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +156 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +7 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +170 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/generic-handler.test.d.ts +7 -0
- package/dist/__tests__/generic-handler.test.d.ts.map +1 -0
- package/dist/__tests__/generic-handler.test.js +243 -0
- package/dist/__tests__/generic-handler.test.js.map +1 -0
- package/dist/__tests__/llm-provider.test.d.ts +7 -0
- package/dist/__tests__/llm-provider.test.d.ts.map +1 -0
- package/dist/__tests__/llm-provider.test.js +217 -0
- package/dist/__tests__/llm-provider.test.js.map +1 -0
- package/dist/__tests__/openai-handler.test.d.ts +7 -0
- package/dist/__tests__/openai-handler.test.d.ts.map +1 -0
- package/dist/__tests__/openai-handler.test.js +359 -0
- package/dist/__tests__/openai-handler.test.js.map +1 -0
- package/dist/__tests__/provider-handler-registry.test.d.ts +9 -0
- package/dist/__tests__/provider-handler-registry.test.d.ts.map +1 -0
- package/dist/__tests__/provider-handler-registry.test.js +187 -0
- package/dist/__tests__/provider-handler-registry.test.js.map +1 -0
- package/dist/__tests__/response-parser.test.d.ts +7 -0
- package/dist/__tests__/response-parser.test.d.ts.map +1 -0
- package/dist/__tests__/response-parser.test.js +360 -0
- package/dist/__tests__/response-parser.test.js.map +1 -0
- package/dist/__tests__/route.test.d.ts +7 -0
- package/dist/__tests__/route.test.d.ts.map +1 -0
- package/dist/__tests__/route.test.js +281 -0
- package/dist/__tests__/route.test.js.map +1 -0
- package/dist/__tests__/sse.test.d.ts +7 -0
- package/dist/__tests__/sse.test.d.ts.map +1 -0
- package/dist/__tests__/sse.test.js +172 -0
- package/dist/__tests__/sse.test.js.map +1 -0
- package/dist/__tests__/template.test.d.ts +7 -0
- package/dist/__tests__/template.test.d.ts.map +1 -0
- package/dist/__tests__/template.test.js +176 -0
- package/dist/__tests__/template.test.js.map +1 -0
- package/dist/__tests__/tracing.test.d.ts +7 -0
- package/dist/__tests__/tracing.test.d.ts.map +1 -0
- package/dist/__tests__/tracing.test.js +264 -0
- package/dist/__tests__/tracing.test.js.map +1 -0
- package/dist/agent.d.ts +165 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +626 -0
- package/dist/agent.js.map +1 -0
- package/dist/api-runtime.d.ts +166 -0
- package/dist/api-runtime.d.ts.map +1 -0
- package/dist/api-runtime.js +459 -0
- package/dist/api-runtime.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +60 -0
- package/dist/config.js.map +1 -0
- package/dist/debug.d.ts +47 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +86 -0
- package/dist/debug.js.map +1 -0
- package/dist/errors.d.ts +99 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +110 -0
- package/dist/errors.js.map +1 -0
- package/dist/express.d.ts +146 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +371 -0
- package/dist/express.js.map +1 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/llm-agent.d.ts +193 -0
- package/dist/llm-agent.d.ts.map +1 -0
- package/dist/llm-agent.js +634 -0
- package/dist/llm-agent.js.map +1 -0
- package/dist/llm-provider.d.ts +323 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +446 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/llm.d.ts +194 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +304 -0
- package/dist/llm.js.map +1 -0
- package/dist/provider-handlers/claude-handler.d.ts +98 -0
- package/dist/provider-handlers/claude-handler.d.ts.map +1 -0
- package/dist/provider-handlers/claude-handler.js +268 -0
- package/dist/provider-handlers/claude-handler.js.map +1 -0
- package/dist/provider-handlers/gemini-handler.d.ts +82 -0
- package/dist/provider-handlers/gemini-handler.d.ts.map +1 -0
- package/dist/provider-handlers/gemini-handler.js +152 -0
- package/dist/provider-handlers/gemini-handler.js.map +1 -0
- package/dist/provider-handlers/generic-handler.d.ts +78 -0
- package/dist/provider-handlers/generic-handler.d.ts.map +1 -0
- package/dist/provider-handlers/generic-handler.js +152 -0
- package/dist/provider-handlers/generic-handler.js.map +1 -0
- package/dist/provider-handlers/index.d.ts +29 -0
- package/dist/provider-handlers/index.d.ts.map +1 -0
- package/dist/provider-handlers/index.js +32 -0
- package/dist/provider-handlers/index.js.map +1 -0
- package/dist/provider-handlers/openai-handler.d.ts +86 -0
- package/dist/provider-handlers/openai-handler.d.ts.map +1 -0
- package/dist/provider-handlers/openai-handler.js +160 -0
- package/dist/provider-handlers/openai-handler.js.map +1 -0
- package/dist/provider-handlers/provider-handler-registry.d.ts +124 -0
- package/dist/provider-handlers/provider-handler-registry.d.ts.map +1 -0
- package/dist/provider-handlers/provider-handler-registry.js +180 -0
- package/dist/provider-handlers/provider-handler-registry.js.map +1 -0
- package/dist/provider-handlers/provider-handler.d.ts +245 -0
- package/dist/provider-handlers/provider-handler.d.ts.map +1 -0
- package/dist/provider-handlers/provider-handler.js +238 -0
- package/dist/provider-handlers/provider-handler.js.map +1 -0
- package/dist/proxy.d.ts +44 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +324 -0
- package/dist/proxy.js.map +1 -0
- package/dist/response-parser.d.ts +103 -0
- package/dist/response-parser.d.ts.map +1 -0
- package/dist/response-parser.js +232 -0
- package/dist/response-parser.js.map +1 -0
- package/dist/route.d.ts +185 -0
- package/dist/route.d.ts.map +1 -0
- package/dist/route.js +310 -0
- package/dist/route.js.map +1 -0
- package/dist/sse.d.ts +45 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +77 -0
- package/dist/sse.js.map +1 -0
- package/dist/template.d.ts +86 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +206 -0
- package/dist/template.js.map +1 -0
- package/dist/tracing.d.ts +88 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +193 -0
- package/dist/tracing.js.map +1 -0
- package/dist/types.d.ts +618 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +68 -0
package/dist/express.js
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MeshExpress: Express app integration with MCP Mesh.
|
|
3
|
+
*
|
|
4
|
+
* Provides automatic registration with mesh registry and dependency injection
|
|
5
|
+
* for Express route handlers. Uses agent_type: "api" since API services only
|
|
6
|
+
* consume capabilities, they don't provide them.
|
|
7
|
+
*
|
|
8
|
+
* **Note:** For simpler usage, just use `mesh.route()` without `meshExpress()`.
|
|
9
|
+
* The API runtime auto-initializes when the first `mesh.route()` is called.
|
|
10
|
+
*
|
|
11
|
+
* @example Simple usage (recommended)
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import express from "express";
|
|
14
|
+
* import { mesh } from "@mcpmesh/sdk";
|
|
15
|
+
*
|
|
16
|
+
* const app = express();
|
|
17
|
+
* app.use(express.json());
|
|
18
|
+
*
|
|
19
|
+
* // mesh.route() auto-initializes the mesh connection
|
|
20
|
+
* app.post("/compute", mesh.route(
|
|
21
|
+
* [{ capability: "calculator" }],
|
|
22
|
+
* async (req, res, { calculator }) => {
|
|
23
|
+
* res.json({ result: await calculator({ a: req.body.a, b: req.body.b }) });
|
|
24
|
+
* }
|
|
25
|
+
* ));
|
|
26
|
+
*
|
|
27
|
+
* app.listen(3000);
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example Explicit control (advanced)
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import express from "express";
|
|
33
|
+
* import { meshExpress, mesh } from "@mcpmesh/sdk";
|
|
34
|
+
*
|
|
35
|
+
* const app = express();
|
|
36
|
+
* const meshApp = meshExpress(app, { name: "my-api", port: 3000 });
|
|
37
|
+
*
|
|
38
|
+
* app.post("/compute", mesh.route(...));
|
|
39
|
+
*
|
|
40
|
+
* meshApp.start();
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { startAgent, } from "@mcpmesh/core";
|
|
44
|
+
import { resolveConfig, generateAgentIdSuffix } from "./config.js";
|
|
45
|
+
import { createProxy } from "./proxy.js";
|
|
46
|
+
import { RouteRegistry } from "./route.js";
|
|
47
|
+
import { initTracing } from "./tracing.js";
|
|
48
|
+
/**
|
|
49
|
+
* Build tool specs from registered routes.
|
|
50
|
+
* Shared helper for consistent tool spec generation.
|
|
51
|
+
*/
|
|
52
|
+
function buildToolSpecs(routes) {
|
|
53
|
+
return routes
|
|
54
|
+
.filter((route) => route.dependencies.length > 0)
|
|
55
|
+
.map((route) => ({
|
|
56
|
+
functionName: route.routeId,
|
|
57
|
+
capability: "", // Routes don't provide capabilities, they consume them
|
|
58
|
+
version: "1.0.0",
|
|
59
|
+
tags: [],
|
|
60
|
+
description: "",
|
|
61
|
+
dependencies: route.dependencies.map((dep) => ({
|
|
62
|
+
capability: dep.capability,
|
|
63
|
+
tags: dep.tags,
|
|
64
|
+
version: dep.version,
|
|
65
|
+
})),
|
|
66
|
+
inputSchema: undefined,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* MeshExpress wraps an Express app with MCP Mesh capabilities.
|
|
71
|
+
*
|
|
72
|
+
* Provides:
|
|
73
|
+
* - Registration with mesh registry via Rust core
|
|
74
|
+
* - Heartbeat management
|
|
75
|
+
* - Dependency resolution for route handlers
|
|
76
|
+
* - Distributed tracing
|
|
77
|
+
*/
|
|
78
|
+
export class MeshExpress {
|
|
79
|
+
app;
|
|
80
|
+
config;
|
|
81
|
+
serviceId;
|
|
82
|
+
handle = null;
|
|
83
|
+
server = null;
|
|
84
|
+
started = false;
|
|
85
|
+
constructor(app, config) {
|
|
86
|
+
this.app = app;
|
|
87
|
+
// Resolve config with env var precedence: ENV > config > defaults
|
|
88
|
+
this.config = resolveConfig(config);
|
|
89
|
+
// Generate unique service ID with suffix (e.g., "my-api-a1b2c3d4")
|
|
90
|
+
this.serviceId = `${this.config.name}-${generateAgentIdSuffix()}`;
|
|
91
|
+
// Add health check endpoint
|
|
92
|
+
this.setupHealthEndpoints();
|
|
93
|
+
// Auto-start if configured (but default is false for Express)
|
|
94
|
+
if (config.autoStart) {
|
|
95
|
+
process.nextTick(() => {
|
|
96
|
+
this.start().catch((err) => {
|
|
97
|
+
console.error("MeshExpress auto-start failed:", err);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Setup health check endpoints for the registry.
|
|
105
|
+
*/
|
|
106
|
+
setupHealthEndpoints() {
|
|
107
|
+
// Health check endpoint for registry
|
|
108
|
+
this.app.get("/health", (_req, res) => {
|
|
109
|
+
res.json({ status: "healthy", serviceId: this.serviceId });
|
|
110
|
+
});
|
|
111
|
+
// Ready check endpoint
|
|
112
|
+
this.app.get("/ready", (_req, res) => {
|
|
113
|
+
const isReady = this.handle !== null;
|
|
114
|
+
res.status(isReady ? 200 : 503).json({
|
|
115
|
+
ready: isReady,
|
|
116
|
+
serviceId: this.serviceId,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Start the Express server and register with mesh.
|
|
122
|
+
*/
|
|
123
|
+
async start() {
|
|
124
|
+
if (this.started)
|
|
125
|
+
return;
|
|
126
|
+
this.started = true;
|
|
127
|
+
console.log(`Starting MeshExpress service: ${this.serviceId}`);
|
|
128
|
+
// 0. Initialize distributed tracing
|
|
129
|
+
const agentMetadata = {
|
|
130
|
+
agentId: this.serviceId,
|
|
131
|
+
agentName: this.config.name,
|
|
132
|
+
agentNamespace: this.config.namespace,
|
|
133
|
+
agentHostname: this.config.host,
|
|
134
|
+
agentIp: this.config.host,
|
|
135
|
+
agentPort: this.config.port,
|
|
136
|
+
agentEndpoint: `http://${this.config.host}:${this.config.port}`,
|
|
137
|
+
};
|
|
138
|
+
await initTracing(agentMetadata);
|
|
139
|
+
// 1. Start HTTP server
|
|
140
|
+
await this.startServer();
|
|
141
|
+
// 2. Start heartbeat to registry via Rust core
|
|
142
|
+
await this.startHeartbeat();
|
|
143
|
+
// 3. Install signal handlers for graceful shutdown
|
|
144
|
+
this.installSignalHandlers();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Start the Express HTTP server.
|
|
148
|
+
*/
|
|
149
|
+
startServer() {
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
try {
|
|
152
|
+
this.server = this.app.listen(this.config.port, "0.0.0.0", () => {
|
|
153
|
+
console.log(`Service listening on port ${this.config.port}`);
|
|
154
|
+
resolve();
|
|
155
|
+
});
|
|
156
|
+
this.server.on("error", (err) => {
|
|
157
|
+
reject(err);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
reject(err);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Start the Rust core heartbeat loop.
|
|
167
|
+
*/
|
|
168
|
+
async startHeartbeat() {
|
|
169
|
+
const registry = RouteRegistry.getInstance();
|
|
170
|
+
const routes = registry.getRoutes();
|
|
171
|
+
const tools = buildToolSpecs(routes);
|
|
172
|
+
const spec = {
|
|
173
|
+
name: this.serviceId,
|
|
174
|
+
version: this.config.version,
|
|
175
|
+
description: this.config.description,
|
|
176
|
+
registryUrl: this.config.registryUrl,
|
|
177
|
+
httpPort: this.config.port,
|
|
178
|
+
httpHost: this.config.host,
|
|
179
|
+
namespace: this.config.namespace,
|
|
180
|
+
agentType: "api", // API services only consume capabilities, not provide them
|
|
181
|
+
tools,
|
|
182
|
+
heartbeatInterval: this.config.heartbeatInterval,
|
|
183
|
+
};
|
|
184
|
+
// Start the agent via Rust core
|
|
185
|
+
this.handle = startAgent(spec);
|
|
186
|
+
// Count total dependencies
|
|
187
|
+
const totalDeps = routes.reduce((sum, r) => sum + r.dependencies.length, 0);
|
|
188
|
+
console.log(`Registered ${routes.length} routes with registry (${totalDeps} dependencies)`);
|
|
189
|
+
// Start event loop (runs in background)
|
|
190
|
+
this.runEventLoop();
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Run the event loop to handle mesh events.
|
|
194
|
+
*/
|
|
195
|
+
async runEventLoop() {
|
|
196
|
+
if (!this.handle)
|
|
197
|
+
return;
|
|
198
|
+
const registry = RouteRegistry.getInstance();
|
|
199
|
+
while (true) {
|
|
200
|
+
try {
|
|
201
|
+
const event = await this.handle.nextEvent();
|
|
202
|
+
switch (event.eventType) {
|
|
203
|
+
case "agent_registered":
|
|
204
|
+
console.log(`Service registered with ID: ${event.agentId}`);
|
|
205
|
+
break;
|
|
206
|
+
case "registration_failed":
|
|
207
|
+
console.error(`Registration failed: ${event.error}`);
|
|
208
|
+
break;
|
|
209
|
+
case "dependency_available":
|
|
210
|
+
this.handleDependencyAvailable(registry, event.capability, event.endpoint, event.functionName, event.agentId, event.requestingFunction, event.depIndex);
|
|
211
|
+
break;
|
|
212
|
+
case "dependency_unavailable":
|
|
213
|
+
this.handleDependencyUnavailable(registry, event.capability, event.requestingFunction, event.depIndex);
|
|
214
|
+
break;
|
|
215
|
+
case "dependency_changed":
|
|
216
|
+
this.handleDependencyAvailable(registry, event.capability, event.endpoint, event.functionName, event.agentId, event.requestingFunction, event.depIndex);
|
|
217
|
+
break;
|
|
218
|
+
case "registry_connected":
|
|
219
|
+
console.log("Connected to registry");
|
|
220
|
+
break;
|
|
221
|
+
case "registry_disconnected":
|
|
222
|
+
console.warn(`Disconnected from registry: ${event.reason}`);
|
|
223
|
+
registry.clearAllDependencies();
|
|
224
|
+
break;
|
|
225
|
+
case "shutdown":
|
|
226
|
+
console.log("Service shutting down");
|
|
227
|
+
return;
|
|
228
|
+
default:
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
console.error("Event loop error:", err);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Handle dependency_available event.
|
|
240
|
+
*/
|
|
241
|
+
handleDependencyAvailable(registry, capability, endpoint, functionName, agentId, requestingFunction, depIndex) {
|
|
242
|
+
// If we have position info, use it directly
|
|
243
|
+
if (requestingFunction !== undefined && depIndex !== undefined) {
|
|
244
|
+
const route = registry.getRoute(requestingFunction);
|
|
245
|
+
const kwargs = route?.dependencyKwargs?.[depIndex];
|
|
246
|
+
const proxy = createProxy(endpoint, capability, functionName, kwargs);
|
|
247
|
+
registry.setDependency(requestingFunction, depIndex, proxy);
|
|
248
|
+
console.log(`Dependency available: ${capability} at ${endpoint} (route: ${requestingFunction}, index: ${depIndex}, agent: ${agentId})`);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
// Fallback: match by capability across all routes
|
|
252
|
+
let matchCount = 0;
|
|
253
|
+
for (const route of registry.getRoutes()) {
|
|
254
|
+
route.dependencies.forEach((dep, idx) => {
|
|
255
|
+
if (dep.capability === capability) {
|
|
256
|
+
const kwargs = route.dependencyKwargs?.[idx];
|
|
257
|
+
const proxy = createProxy(endpoint, capability, functionName, kwargs);
|
|
258
|
+
registry.setDependency(route.routeId, idx, proxy);
|
|
259
|
+
matchCount++;
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
console.log(`Dependency available: ${capability} at ${endpoint} (agent: ${agentId}, ${matchCount} route bindings)`);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Handle dependency_unavailable event.
|
|
267
|
+
*/
|
|
268
|
+
handleDependencyUnavailable(registry, capability, requestingFunction, depIndex) {
|
|
269
|
+
// If we have position info, use it directly
|
|
270
|
+
if (requestingFunction !== undefined && depIndex !== undefined) {
|
|
271
|
+
registry.removeDependency(requestingFunction, depIndex);
|
|
272
|
+
console.log(`Dependency unavailable: ${capability} (route: ${requestingFunction}, index: ${depIndex})`);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// Fallback: match by capability across all routes
|
|
276
|
+
let removeCount = 0;
|
|
277
|
+
for (const route of registry.getRoutes()) {
|
|
278
|
+
route.dependencies.forEach((dep, idx) => {
|
|
279
|
+
if (dep.capability === capability) {
|
|
280
|
+
registry.removeDependency(route.routeId, idx);
|
|
281
|
+
removeCount++;
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
console.log(`Dependency unavailable: ${capability} (${removeCount} route bindings removed)`);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Install signal handlers for graceful shutdown.
|
|
289
|
+
*/
|
|
290
|
+
installSignalHandlers() {
|
|
291
|
+
let shuttingDown = false;
|
|
292
|
+
const shutdownHandler = async (signal) => {
|
|
293
|
+
if (shuttingDown)
|
|
294
|
+
return;
|
|
295
|
+
shuttingDown = true;
|
|
296
|
+
console.log(`\nReceived ${signal}, shutting down service ${this.serviceId}...`);
|
|
297
|
+
try {
|
|
298
|
+
await this.shutdown();
|
|
299
|
+
console.log(`Service ${this.serviceId} unregistered from registry`);
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
console.error("Error during shutdown:", err);
|
|
303
|
+
}
|
|
304
|
+
process.exit(0);
|
|
305
|
+
};
|
|
306
|
+
process.on("SIGINT", () => void shutdownHandler("SIGINT"));
|
|
307
|
+
process.on("SIGTERM", () => void shutdownHandler("SIGTERM"));
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Get the service ID.
|
|
311
|
+
*/
|
|
312
|
+
getServiceId() {
|
|
313
|
+
return this.serviceId;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get the resolved configuration.
|
|
317
|
+
*/
|
|
318
|
+
getConfig() {
|
|
319
|
+
return this.config;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Get the underlying Express app.
|
|
323
|
+
*/
|
|
324
|
+
getApp() {
|
|
325
|
+
return this.app;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Get the HTTP server instance.
|
|
329
|
+
*/
|
|
330
|
+
getServer() {
|
|
331
|
+
return this.server;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get the agent handle for advanced operations.
|
|
335
|
+
*/
|
|
336
|
+
getHandle() {
|
|
337
|
+
return this.handle;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Shutdown the service gracefully.
|
|
341
|
+
*/
|
|
342
|
+
async shutdown() {
|
|
343
|
+
if (this.handle) {
|
|
344
|
+
await this.handle.shutdown();
|
|
345
|
+
this.handle = null;
|
|
346
|
+
}
|
|
347
|
+
if (this.server) {
|
|
348
|
+
await new Promise((resolve) => {
|
|
349
|
+
this.server.close(() => resolve());
|
|
350
|
+
});
|
|
351
|
+
this.server = null;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Create a MeshExpress instance wrapping an Express app.
|
|
357
|
+
*
|
|
358
|
+
* @example
|
|
359
|
+
* ```typescript
|
|
360
|
+
* const app = express();
|
|
361
|
+
* const meshApp = meshExpress(app, { name: "my-api", port: 3000 });
|
|
362
|
+
*
|
|
363
|
+
* // Define routes with mesh.route()...
|
|
364
|
+
*
|
|
365
|
+
* meshApp.start();
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
export function meshExpress(app, config) {
|
|
369
|
+
return new MeshExpress(app, config);
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=express.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mcpmesh/sdk - MCP Mesh SDK for TypeScript
|
|
3
|
+
*
|
|
4
|
+
* Build distributed MCP agents with automatic service discovery and dependency injection.
|
|
5
|
+
*
|
|
6
|
+
* @example MCP Agent (fastmcp)
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { FastMCP } from "fastmcp";
|
|
9
|
+
* import { mesh } from "@mcpmesh/sdk";
|
|
10
|
+
* import { z } from "zod";
|
|
11
|
+
*
|
|
12
|
+
* const server = new FastMCP({ name: "Calculator", version: "1.0.0" });
|
|
13
|
+
*
|
|
14
|
+
* const agent = mesh(server, {
|
|
15
|
+
* name: "calculator",
|
|
16
|
+
* port: 9002,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* agent.addTool({
|
|
20
|
+
* name: "add",
|
|
21
|
+
* capability: "add",
|
|
22
|
+
* tags: ["tools", "math"],
|
|
23
|
+
* description: "Add two numbers together",
|
|
24
|
+
* parameters: z.object({ a: z.number(), b: z.number() }),
|
|
25
|
+
* execute: async ({ a, b }) => String(a + b),
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // No server.start() or main function needed!
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example Express API with mesh dependencies
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import express from "express";
|
|
34
|
+
* import { mesh, meshExpress } from "@mcpmesh/sdk";
|
|
35
|
+
*
|
|
36
|
+
* const app = express();
|
|
37
|
+
* app.use(express.json());
|
|
38
|
+
*
|
|
39
|
+
* const meshApp = meshExpress(app, { name: "my-api", port: 3000 });
|
|
40
|
+
*
|
|
41
|
+
* app.post("/compute", mesh.route(
|
|
42
|
+
* [{ capability: "calculator" }],
|
|
43
|
+
* async (req, res, { calculator }) => {
|
|
44
|
+
* const result = await calculator({ a: req.body.a, b: req.body.b });
|
|
45
|
+
* res.json({ result });
|
|
46
|
+
* }
|
|
47
|
+
* ));
|
|
48
|
+
*
|
|
49
|
+
* meshApp.start();
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
import { MeshAgent } from "./agent.js";
|
|
53
|
+
import { route, routeWithConfig } from "./route.js";
|
|
54
|
+
import { bindToExpress } from "./api-runtime.js";
|
|
55
|
+
import { llm } from "./llm.js";
|
|
56
|
+
import { llmProvider } from "./llm-provider.js";
|
|
57
|
+
interface MeshNamespace {
|
|
58
|
+
(server: import("fastmcp").FastMCP, config: import("./types.js").AgentConfig): MeshAgent;
|
|
59
|
+
route: typeof route;
|
|
60
|
+
routeWithConfig: typeof routeWithConfig;
|
|
61
|
+
/** Optional: Bind to Express for proper route names in logs. Port auto-detected from PORT env. */
|
|
62
|
+
bind: typeof bindToExpress;
|
|
63
|
+
/** Create an LLM-powered tool with agentic capabilities */
|
|
64
|
+
llm: typeof llm;
|
|
65
|
+
/** Create a zero-code LLM provider tool */
|
|
66
|
+
llmProvider: typeof llmProvider;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Main mesh function with route and llm helpers attached.
|
|
70
|
+
*
|
|
71
|
+
* - `mesh(server, config)` - Create an MCP agent (wraps fastmcp)
|
|
72
|
+
* - `mesh.route(deps, handler)` - Create Express route with DI
|
|
73
|
+
* - `mesh.bind(app, options)` - Bind to Express, introspect routes
|
|
74
|
+
* - `mesh.llm(config)` - Create LLM-powered tool with agentic loop
|
|
75
|
+
* - `mesh.llmProvider(config)` - Create zero-code LLM provider
|
|
76
|
+
*/
|
|
77
|
+
declare const mesh: MeshNamespace;
|
|
78
|
+
export { mesh, MeshAgent };
|
|
79
|
+
export { FastMCP } from "fastmcp";
|
|
80
|
+
export { meshExpress, MeshExpress, type MeshExpressConfig } from "./express.js";
|
|
81
|
+
export { getApiRuntime, ApiRuntime, bindToExpress, introspectExpressRoutes, type ApiRuntimeConfig, } from "./api-runtime.js";
|
|
82
|
+
export { route, routeWithConfig, RouteRegistry, type MeshRouteHandler, type MeshRouteHandlerWithNext, type RouteDependencies, type MeshRouteConfig, type RouteMetadata, } from "./route.js";
|
|
83
|
+
export { createProxy, normalizeDependency } from "./proxy.js";
|
|
84
|
+
export { initTracing, isTracingAvailable, generateTraceId, generateSpanId, parseTraceContext, createTraceHeaders, publishTraceSpan, type TraceContext, type AgentMetadata, type SpanData, } from "./tracing.js";
|
|
85
|
+
export { llm, LlmToolRegistry, buildLlmAgentSpecs, handleLlmToolsUpdated, handleLlmProviderAvailable, handleLlmProviderUnavailable, getLlmToolMetadata, isLlmTool, type LlmToolConfig, type ResolvedProvider, type FastMcpToolDef, } from "./llm.js";
|
|
86
|
+
export { MeshLlmAgent, LiteLLMProvider, MeshDelegatedProvider, createLlmToolProxy, type MeshLlmAgentConfig, type AgentRunContext, type LlmProvider, } from "./llm-agent.js";
|
|
87
|
+
export { llmProvider, extractVendorFromModel, extractModelName, isLlmProviderTool, getLlmProviderMeta, } from "./llm-provider.js";
|
|
88
|
+
export { ProviderHandlerRegistry, GenericHandler, ClaudeHandler, OpenAIHandler, type ProviderHandler, type ProviderHandlerConstructor, type VendorCapabilities, type ToolSchema, type OutputSchema, type PreparedRequest, type OutputMode, } from "./provider-handlers/index.js";
|
|
89
|
+
export { MaxIterationsError, ToolExecutionError, LLMAPIError, ResponseParseError as LlmResponseParseError, ProviderUnavailableError, } from "./errors.js";
|
|
90
|
+
export { parseSSEResponse, isSSEResponse, parseSSEStream } from "./sse.js";
|
|
91
|
+
export { debug, createDebug, isAnyDebugEnabled } from "./debug.js";
|
|
92
|
+
export { renderTemplate, clearTemplateCache, registerHelper, registerPartial, isFileTemplate, extractFilePath, } from "./template.js";
|
|
93
|
+
export { ResponseParser, createResponseParser, extractJson, zodSchemaToPromptDescription, formatZodError, } from "./response-parser.js";
|
|
94
|
+
export type { AgentConfig, ResolvedAgentConfig, MeshToolDef, ToolMeta, DependencySpec, NormalizedDependency, ResolvedDependency, DependencyKwargs, McpMeshAgent, JsAgentHandle, JsMeshEvent, JsAgentSpec, JsToolSpec, JsDependencySpec, JsLlmAgentSpec, JsLlmToolInfo, JsLlmProviderInfo, LlmProviderSpec, LlmFilterSpec, LlmFilterMode, LlmMeta, LlmToolCall, LlmMessage, LlmToolCallRequest, LlmToolDefinition, LlmCompletionParams, LlmCompletionResponse, MeshLlmConfig, LlmAgent, LlmCallOptions, LlmToolProxy, LlmMessageInput, LlmContextMode, LlmOutputMode, MeshLlmRequest, MeshLlmUsage, MeshLlmResponse, LlmProviderConfig, } from "./types.js";
|
|
95
|
+
export default mesh;
|
|
96
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mcpmesh/sdk - MCP Mesh SDK for TypeScript
|
|
3
|
+
*
|
|
4
|
+
* Build distributed MCP agents with automatic service discovery and dependency injection.
|
|
5
|
+
*
|
|
6
|
+
* @example MCP Agent (fastmcp)
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { FastMCP } from "fastmcp";
|
|
9
|
+
* import { mesh } from "@mcpmesh/sdk";
|
|
10
|
+
* import { z } from "zod";
|
|
11
|
+
*
|
|
12
|
+
* const server = new FastMCP({ name: "Calculator", version: "1.0.0" });
|
|
13
|
+
*
|
|
14
|
+
* const agent = mesh(server, {
|
|
15
|
+
* name: "calculator",
|
|
16
|
+
* port: 9002,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* agent.addTool({
|
|
20
|
+
* name: "add",
|
|
21
|
+
* capability: "add",
|
|
22
|
+
* tags: ["tools", "math"],
|
|
23
|
+
* description: "Add two numbers together",
|
|
24
|
+
* parameters: z.object({ a: z.number(), b: z.number() }),
|
|
25
|
+
* execute: async ({ a, b }) => String(a + b),
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // No server.start() or main function needed!
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example Express API with mesh dependencies
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import express from "express";
|
|
34
|
+
* import { mesh, meshExpress } from "@mcpmesh/sdk";
|
|
35
|
+
*
|
|
36
|
+
* const app = express();
|
|
37
|
+
* app.use(express.json());
|
|
38
|
+
*
|
|
39
|
+
* const meshApp = meshExpress(app, { name: "my-api", port: 3000 });
|
|
40
|
+
*
|
|
41
|
+
* app.post("/compute", mesh.route(
|
|
42
|
+
* [{ capability: "calculator" }],
|
|
43
|
+
* async (req, res, { calculator }) => {
|
|
44
|
+
* const result = await calculator({ a: req.body.a, b: req.body.b });
|
|
45
|
+
* res.json({ result });
|
|
46
|
+
* }
|
|
47
|
+
* ));
|
|
48
|
+
*
|
|
49
|
+
* meshApp.start();
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
import { mesh as meshFn, MeshAgent } from "./agent.js";
|
|
53
|
+
import { route, routeWithConfig } from "./route.js";
|
|
54
|
+
import { bindToExpress } from "./api-runtime.js";
|
|
55
|
+
import { llm } from "./llm.js";
|
|
56
|
+
import { llmProvider } from "./llm-provider.js";
|
|
57
|
+
/**
|
|
58
|
+
* Main mesh function with route and llm helpers attached.
|
|
59
|
+
*
|
|
60
|
+
* - `mesh(server, config)` - Create an MCP agent (wraps fastmcp)
|
|
61
|
+
* - `mesh.route(deps, handler)` - Create Express route with DI
|
|
62
|
+
* - `mesh.bind(app, options)` - Bind to Express, introspect routes
|
|
63
|
+
* - `mesh.llm(config)` - Create LLM-powered tool with agentic loop
|
|
64
|
+
* - `mesh.llmProvider(config)` - Create zero-code LLM provider
|
|
65
|
+
*/
|
|
66
|
+
const mesh = Object.assign(meshFn, {
|
|
67
|
+
route,
|
|
68
|
+
routeWithConfig,
|
|
69
|
+
bind: bindToExpress,
|
|
70
|
+
llm,
|
|
71
|
+
llmProvider,
|
|
72
|
+
});
|
|
73
|
+
// Main API
|
|
74
|
+
export { mesh, MeshAgent };
|
|
75
|
+
// Re-export FastMCP for convenience (so users don't need to install it separately)
|
|
76
|
+
export { FastMCP } from "fastmcp";
|
|
77
|
+
// Express integration
|
|
78
|
+
export { meshExpress, MeshExpress } from "./express.js";
|
|
79
|
+
// API runtime (auto-init for Express routes)
|
|
80
|
+
export { getApiRuntime, ApiRuntime, bindToExpress, introspectExpressRoutes, } from "./api-runtime.js";
|
|
81
|
+
// Route utilities
|
|
82
|
+
export { route, routeWithConfig, RouteRegistry, } from "./route.js";
|
|
83
|
+
// Proxy utilities (for advanced use)
|
|
84
|
+
export { createProxy, normalizeDependency } from "./proxy.js";
|
|
85
|
+
// Tracing utilities (for advanced use)
|
|
86
|
+
export { initTracing, isTracingAvailable, generateTraceId, generateSpanId, parseTraceContext, createTraceHeaders, publishTraceSpan, } from "./tracing.js";
|
|
87
|
+
// LLM utilities
|
|
88
|
+
export { llm, LlmToolRegistry, buildLlmAgentSpecs, handleLlmToolsUpdated, handleLlmProviderAvailable, handleLlmProviderUnavailable, getLlmToolMetadata, isLlmTool, } from "./llm.js";
|
|
89
|
+
// LLM Agent
|
|
90
|
+
export { MeshLlmAgent, LiteLLMProvider, MeshDelegatedProvider, createLlmToolProxy, } from "./llm-agent.js";
|
|
91
|
+
// LLM Provider (Phase 4)
|
|
92
|
+
export { llmProvider, extractVendorFromModel, extractModelName, isLlmProviderTool, getLlmProviderMeta, } from "./llm-provider.js";
|
|
93
|
+
// Provider Handlers (Phase 4)
|
|
94
|
+
export { ProviderHandlerRegistry, GenericHandler, ClaudeHandler, OpenAIHandler, } from "./provider-handlers/index.js";
|
|
95
|
+
// Error classes
|
|
96
|
+
export { MaxIterationsError, ToolExecutionError, LLMAPIError, ResponseParseError as LlmResponseParseError, ProviderUnavailableError, } from "./errors.js";
|
|
97
|
+
// SSE utilities
|
|
98
|
+
export { parseSSEResponse, isSSEResponse, parseSSEStream } from "./sse.js";
|
|
99
|
+
// Debug utilities
|
|
100
|
+
export { debug, createDebug, isAnyDebugEnabled } from "./debug.js";
|
|
101
|
+
// Template utilities
|
|
102
|
+
export { renderTemplate, clearTemplateCache, registerHelper, registerPartial, isFileTemplate, extractFilePath, } from "./template.js";
|
|
103
|
+
// Response parser
|
|
104
|
+
export { ResponseParser, createResponseParser, extractJson, zodSchemaToPromptDescription, formatZodError, } from "./response-parser.js";
|
|
105
|
+
// Default export for convenience
|
|
106
|
+
export default mesh;
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAkB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;IAChD,KAAK;IACL,eAAe;IACf,IAAI,EAAE,aAAa;IACnB,GAAG;IACH,WAAW;CACZ,CAAC,CAAC;AAEH,WAAW;AACX,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAE3B,mFAAmF;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,sBAAsB;AACtB,OAAO,EAAE,WAAW,EAAE,WAAW,EAA0B,MAAM,cAAc,CAAC;AAEhF,6CAA6C;AAC7C,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAE1B,kBAAkB;AAClB,OAAO,EACL,KAAK,EACL,eAAe,EACf,aAAa,GAMd,MAAM,YAAY,CAAC;AAEpB,qCAAqC;AACrC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE9D,uCAAuC;AACvC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GAIjB,MAAM,cAAc,CAAC;AAEtB,gBAAgB;AAChB,OAAO,EACL,GAAG,EACH,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,SAAS,GAIV,MAAM,UAAU,CAAC;AAElB,YAAY;AACZ,OAAO,EACL,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GAInB,MAAM,gBAAgB,CAAC;AAExB,yBAAyB;AACzB,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,8BAA8B;AAC9B,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,aAAa,GAQd,MAAM,8BAA8B,CAAC;AAEtC,gBAAgB;AAChB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,IAAI,qBAAqB,EAC3C,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE3E,kBAAkB;AAClB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,4BAA4B,EAC5B,cAAc,GACf,MAAM,sBAAsB,CAAC;AA+C9B,iCAAiC;AACjC,eAAe,IAAI,CAAC"}
|