@mozilla-ai/mcpd 0.0.4 → 0.1.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/README.md +35 -20
- package/dist/client.d.ts.map +1 -1
- package/dist/errors.d.ts +68 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +47 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -233,6 +233,18 @@ Returns tool schemas for a specific server.
|
|
|
233
233
|
// Get tools for a specific server
|
|
234
234
|
const timeTools = await client.servers.time.getTools();
|
|
235
235
|
// Returns: [{ name: 'get_current_time', description: '...', inputSchema: {...} }]
|
|
236
|
+
|
|
237
|
+
// Iterate over tools
|
|
238
|
+
for (const tool of timeTools) {
|
|
239
|
+
console.log(`${tool.name}: ${tool.description}`);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Works with dynamic server names
|
|
243
|
+
const servers = await client.listServers();
|
|
244
|
+
for (const serverName of servers) {
|
|
245
|
+
const tools = await client.servers[serverName].getTools();
|
|
246
|
+
console.log(`${serverName}: ${tools.length} tools`);
|
|
247
|
+
}
|
|
236
248
|
```
|
|
237
249
|
|
|
238
250
|
#### `client.servers.<server>.tools.<tool>(args)`
|
|
@@ -250,25 +262,6 @@ const result = await client.servers.weather.tools.get_forecast({
|
|
|
250
262
|
const time = await client.servers.time.tools.get_current_time();
|
|
251
263
|
```
|
|
252
264
|
|
|
253
|
-
#### `client.servers.<server>.getTools()`
|
|
254
|
-
|
|
255
|
-
Get all tools available on a specific server.
|
|
256
|
-
|
|
257
|
-
```typescript
|
|
258
|
-
// List tools for a server using property access
|
|
259
|
-
const tools = await client.servers.time.getTools();
|
|
260
|
-
for (const tool of tools) {
|
|
261
|
-
console.log(`${tool.name}: ${tool.description}`);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Useful in loops with dynamic server names
|
|
265
|
-
const servers = await client.listServers();
|
|
266
|
-
for (const serverName of servers) {
|
|
267
|
-
const tools = await client.servers[serverName].getTools();
|
|
268
|
-
console.log(`${serverName}: ${tools.length} tools`);
|
|
269
|
-
}
|
|
270
|
-
```
|
|
271
|
-
|
|
272
265
|
#### `client.servers.<server>.callTool(toolName, args?)`
|
|
273
266
|
|
|
274
267
|
Call a tool by name with the given arguments. This is useful for programmatic tool invocation when the tool name is in a variable.
|
|
@@ -609,12 +602,20 @@ import {
|
|
|
609
602
|
ToolExecutionError, // Tool execution failed
|
|
610
603
|
ValidationError, // Input validation failed
|
|
611
604
|
TimeoutError, // Operation timed out
|
|
605
|
+
PipelineError, // Pipeline processing failed
|
|
612
606
|
} from "@mozilla-ai/mcpd";
|
|
613
607
|
|
|
614
608
|
try {
|
|
615
609
|
const result = await client.servers.unknown.tools.tool();
|
|
616
610
|
} catch (error) {
|
|
617
|
-
if (error instanceof
|
|
611
|
+
if (error instanceof PipelineError) {
|
|
612
|
+
// Pipeline failure - a required plugin failed during processing.
|
|
613
|
+
console.error(`Pipeline ${error.pipelineFlow} failure:`, error.message);
|
|
614
|
+
if (error.pipelineFlow === "response") {
|
|
615
|
+
// Tool was called but results cannot be delivered.
|
|
616
|
+
console.error("A required plugin failed during response processing");
|
|
617
|
+
}
|
|
618
|
+
} else if (error instanceof ToolNotFoundError) {
|
|
618
619
|
console.error(
|
|
619
620
|
`Tool not found: ${error.toolName} on server ${error.serverName}`,
|
|
620
621
|
);
|
|
@@ -626,6 +627,20 @@ try {
|
|
|
626
627
|
}
|
|
627
628
|
```
|
|
628
629
|
|
|
630
|
+
### PipelineError
|
|
631
|
+
|
|
632
|
+
The `PipelineError` is thrown when mcpd's plugin pipeline fails. This indicates a problem with a plugin or an external system that a plugin depends on (e.g., audit service, authentication provider), not a problem with your request or the tool itself.
|
|
633
|
+
|
|
634
|
+
- **Response Pipeline Failure** (`pipelineFlow === 'response'`): The upstream request was processed (the tool was called), but results cannot be returned because a required plugin (like audit logging) failed during response processing. This does not indicate whether the tool itself succeeded or failed.
|
|
635
|
+
- **Request Pipeline Failure** (`pipelineFlow === 'request'`): The request was rejected before reaching the upstream server because a required plugin (like authentication) failed during request processing.
|
|
636
|
+
|
|
637
|
+
Properties:
|
|
638
|
+
|
|
639
|
+
- `message: string` - Descriptive error message
|
|
640
|
+
- `serverName?: string` - The server name (when called through tool execution)
|
|
641
|
+
- `operation?: string` - The operation (e.g., "time.get_current_time")
|
|
642
|
+
- `pipelineFlow?: 'request' | 'response'` - Which pipeline flow failed
|
|
643
|
+
|
|
629
644
|
## Development
|
|
630
645
|
|
|
631
646
|
### Setup
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,OAAO,EAEL,iBAAiB,EACjB,YAAY,EAMZ,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EAUrB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA6DxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,UAAU;;IAarB;;OAEG;IACH,SAAgB,OAAO,EAAE,gBAAgB,CAAC;IAE1C;;;;OAIG;gBACS,OAAO,EAAE,iBAAiB;IAqLtC;;;;;;;;;;;;;;;OAeG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA8PtC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoDhE;;;;;;;;;;;;;;;;;;OAkBG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6J3D;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAI5B;;;OAGG;IACH,sBAAsB,IAAI,IAAI;IA4D9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACG,aAAa,CACjB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,aAAa,EAAE,CAAC;IACrB,aAAa,CACjB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,aAAa,CACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CA+DvC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import { ErrorModel } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Pipeline flow constant for request processing failures.
|
|
4
|
+
*/
|
|
5
|
+
export declare const PIPELINE_FLOW_REQUEST: "request";
|
|
6
|
+
/**
|
|
7
|
+
* Pipeline flow constant for response processing failures.
|
|
8
|
+
*/
|
|
9
|
+
export declare const PIPELINE_FLOW_RESPONSE: "response";
|
|
10
|
+
/**
|
|
11
|
+
* Pipeline flow indicating where in the pipeline the failure occurred.
|
|
12
|
+
*/
|
|
13
|
+
export type PipelineFlow = typeof PIPELINE_FLOW_REQUEST | typeof PIPELINE_FLOW_RESPONSE;
|
|
2
14
|
/**
|
|
3
15
|
* Base exception for all mcpd SDK errors.
|
|
4
16
|
*
|
|
@@ -110,4 +122,60 @@ export declare class TimeoutError extends McpdError {
|
|
|
110
122
|
readonly timeout: number | undefined;
|
|
111
123
|
constructor(message: string, operation?: string, timeout?: number, cause?: Error);
|
|
112
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Raised when required pipeline processing fails.
|
|
127
|
+
*
|
|
128
|
+
* This indicates that required processing failed in the mcpd pipeline.
|
|
129
|
+
* The error occurs when a required plugin (such as authentication, validation,
|
|
130
|
+
* audit logging, monitoring, or response transformation) fails during request
|
|
131
|
+
* or response processing.
|
|
132
|
+
*
|
|
133
|
+
* Pipeline Flow Distinction:
|
|
134
|
+
* - **response-pipeline-failure**: The upstream request was processed (the tool
|
|
135
|
+
* was called), but results cannot be returned due to a required response
|
|
136
|
+
* processing step failure. Note: This does not indicate whether the tool
|
|
137
|
+
* itself succeeded or failed - only that the response cannot be delivered.
|
|
138
|
+
*
|
|
139
|
+
* - **request-pipeline-failure**: The request was rejected before reaching the
|
|
140
|
+
* upstream server due to a required request processing step failure (such as
|
|
141
|
+
* authentication, authorization, validation, or rate limiting plugin failure).
|
|
142
|
+
*
|
|
143
|
+
* This typically indicates a problem with a plugin or an external system
|
|
144
|
+
* that a plugin depends on (e.g., audit service, authentication provider).
|
|
145
|
+
* Retrying is unlikely to help as this usually indicates a configuration
|
|
146
|
+
* or dependency problem rather than a transient failure.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* import { McpdClient, PipelineError } from '@mozilla-ai/mcpd';
|
|
151
|
+
*
|
|
152
|
+
* const client = new McpdClient({ apiEndpoint: 'http://localhost:8090' });
|
|
153
|
+
*
|
|
154
|
+
* try {
|
|
155
|
+
* const result = await client.servers.time.tools.get_current_time();
|
|
156
|
+
* } catch (error) {
|
|
157
|
+
* if (error instanceof PipelineError) {
|
|
158
|
+
* console.log(`Pipeline failure: ${error.message}`);
|
|
159
|
+
* console.log(`Flow: ${error.pipelineFlow}`);
|
|
160
|
+
*
|
|
161
|
+
* if (error.pipelineFlow === 'response') {
|
|
162
|
+
* console.log('Tool was called but results cannot be delivered');
|
|
163
|
+
* } else {
|
|
164
|
+
* console.log('Request was rejected by pipeline');
|
|
165
|
+
* console.log('Check authentication, authorization, or rate limiting');
|
|
166
|
+
* }
|
|
167
|
+
* }
|
|
168
|
+
* }
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* @remarks
|
|
172
|
+
* This exception indicates a problem with a plugin or its dependencies, not
|
|
173
|
+
* with your request or the tool itself.
|
|
174
|
+
*/
|
|
175
|
+
export declare class PipelineError extends McpdError {
|
|
176
|
+
readonly serverName: string | undefined;
|
|
177
|
+
readonly operation: string | undefined;
|
|
178
|
+
readonly pipelineFlow: PipelineFlow | undefined;
|
|
179
|
+
constructor(message: string, serverName?: string, operation?: string, pipelineFlow?: PipelineFlow, cause?: Error);
|
|
180
|
+
}
|
|
113
181
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAM3C;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,SAAgB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEnC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAMhE;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,YAAY,EAAE,MAAM,CAAC;gBAGnC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,KAAK;CAQhB;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,SAAgB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAgB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAG3C,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,KAAK;CAQhB;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,SAAgB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAgB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,SAAgB,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;gBAGjD,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,UAAU,EACvB,KAAK,CAAC,EAAE,KAAK;CAShB;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,SAAgB,gBAAgB,EAAE,MAAM,EAAE,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK;CAMxE;AAED;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,SAAS;IACzC,SAAgB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,SAAgB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;gBAG1C,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,KAAK;CAQhB"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,6 @@
|
|
|
15
15
|
* @packageDocumentation
|
|
16
16
|
*/
|
|
17
17
|
export { McpdClient } from './client';
|
|
18
|
-
export { McpdError, AuthenticationError, ConnectionError, ServerNotFoundError, ServerUnhealthyError, TimeoutError, ToolExecutionError, ToolNotFoundError, ValidationError, } from './errors';
|
|
18
|
+
export { McpdError, AuthenticationError, ConnectionError, PipelineError, PIPELINE_FLOW_REQUEST, PIPELINE_FLOW_RESPONSE, ServerNotFoundError, ServerUnhealthyError, TimeoutError, ToolExecutionError, ToolNotFoundError, ValidationError, type PipelineFlow, } from './errors';
|
|
19
19
|
export { HealthStatus, HealthStatusHelpers, type JsonSchema, type Tool, type Tools, type ToolAnnotations, type ServerHealth, type ToolsResponse, type HealthResponse, type McpdClientOptions, type ErrorDetail, type ErrorModel, type AgentToolsFormat, type BaseAgentToolsOptions, type ArrayAgentToolsOptions, type ObjectAgentToolsOptions, type MapAgentToolsOptions, type AgentToolsOptions, type Resource, type Resources, type ResourceContent, type ResourceTemplate, type ResourceTemplates, type Prompt, type PromptArgument, type Prompts, type PromptMessage, type PromptGenerateArguments, type GeneratePromptResponseBody, } from './types';
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,GAChC,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const lruCache = require("lru-cache");
|
|
4
4
|
const zod = require("zod");
|
|
5
|
+
const PIPELINE_FLOW_REQUEST = "request";
|
|
6
|
+
const PIPELINE_FLOW_RESPONSE = "response";
|
|
5
7
|
class McpdError extends Error {
|
|
6
8
|
constructor(message, cause) {
|
|
7
9
|
super(message);
|
|
@@ -88,6 +90,19 @@ class TimeoutError extends McpdError {
|
|
|
88
90
|
Error.captureStackTrace(this, this.constructor);
|
|
89
91
|
}
|
|
90
92
|
}
|
|
93
|
+
class PipelineError extends McpdError {
|
|
94
|
+
serverName;
|
|
95
|
+
operation;
|
|
96
|
+
pipelineFlow;
|
|
97
|
+
constructor(message, serverName, operation, pipelineFlow, cause) {
|
|
98
|
+
super(message, cause);
|
|
99
|
+
this.name = "PipelineError";
|
|
100
|
+
this.serverName = serverName;
|
|
101
|
+
this.operation = operation;
|
|
102
|
+
this.pipelineFlow = pipelineFlow;
|
|
103
|
+
Error.captureStackTrace(this, this.constructor);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
91
106
|
var HealthStatus = /* @__PURE__ */ ((HealthStatus2) => {
|
|
92
107
|
HealthStatus2["OK"] = "ok";
|
|
93
108
|
HealthStatus2["TIMEOUT"] = "timeout";
|
|
@@ -1044,6 +1059,11 @@ const REQUEST_TIMEOUT_SECONDS = 30;
|
|
|
1044
1059
|
const SERVER_HEALTH_CACHE_TTL_SECONDS = 10;
|
|
1045
1060
|
const SERVER_HEALTH_CACHE_MAXSIZE = 100;
|
|
1046
1061
|
const TOOL_SEPARATOR = "__";
|
|
1062
|
+
const MCPD_ERROR_TYPE_HEADER = "Mcpd-Error-Type";
|
|
1063
|
+
const PIPELINE_ERROR_FLOWS = {
|
|
1064
|
+
"request-pipeline-failure": PIPELINE_FLOW_REQUEST,
|
|
1065
|
+
"response-pipeline-failure": PIPELINE_FLOW_RESPONSE
|
|
1066
|
+
};
|
|
1047
1067
|
class McpdClient {
|
|
1048
1068
|
#endpoint;
|
|
1049
1069
|
#apiKey;
|
|
@@ -1130,6 +1150,21 @@ class McpdClient {
|
|
|
1130
1150
|
} catch {
|
|
1131
1151
|
errorModel = null;
|
|
1132
1152
|
}
|
|
1153
|
+
if (response.status === 500) {
|
|
1154
|
+
const errorType = response.headers.get(MCPD_ERROR_TYPE_HEADER)?.toLowerCase();
|
|
1155
|
+
const flow = errorType ? PIPELINE_ERROR_FLOWS[errorType] : void 0;
|
|
1156
|
+
if (flow) {
|
|
1157
|
+
const message = errorModel?.detail || body || "Pipeline failure";
|
|
1158
|
+
throw new PipelineError(
|
|
1159
|
+
message,
|
|
1160
|
+
void 0,
|
|
1161
|
+
// serverName - enriched by caller if available.
|
|
1162
|
+
void 0,
|
|
1163
|
+
// operation - enriched by caller if available.
|
|
1164
|
+
flow
|
|
1165
|
+
);
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1133
1168
|
if (errorModel && errorModel.detail) {
|
|
1134
1169
|
const errorDetails = errorModel.errors?.map((e) => `${e.location}: ${e.message}`).join("; ");
|
|
1135
1170
|
const fullMessage = errorDetails ? `${errorModel.detail} - ${errorDetails}` : errorModel.detail;
|
|
@@ -1562,6 +1597,15 @@ class McpdClient {
|
|
|
1562
1597
|
}
|
|
1563
1598
|
return response;
|
|
1564
1599
|
} catch (error) {
|
|
1600
|
+
if (error instanceof PipelineError) {
|
|
1601
|
+
throw new PipelineError(
|
|
1602
|
+
error.message,
|
|
1603
|
+
serverName,
|
|
1604
|
+
`${serverName}.${toolName}`,
|
|
1605
|
+
error.pipelineFlow,
|
|
1606
|
+
error.cause
|
|
1607
|
+
);
|
|
1608
|
+
}
|
|
1565
1609
|
if (error instanceof McpdError) {
|
|
1566
1610
|
throw error;
|
|
1567
1611
|
}
|
|
@@ -1679,6 +1723,9 @@ exports.HealthStatus = HealthStatus;
|
|
|
1679
1723
|
exports.HealthStatusHelpers = HealthStatusHelpers;
|
|
1680
1724
|
exports.McpdClient = McpdClient;
|
|
1681
1725
|
exports.McpdError = McpdError;
|
|
1726
|
+
exports.PIPELINE_FLOW_REQUEST = PIPELINE_FLOW_REQUEST;
|
|
1727
|
+
exports.PIPELINE_FLOW_RESPONSE = PIPELINE_FLOW_RESPONSE;
|
|
1728
|
+
exports.PipelineError = PipelineError;
|
|
1682
1729
|
exports.ServerNotFoundError = ServerNotFoundError;
|
|
1683
1730
|
exports.ServerUnhealthyError = ServerUnhealthyError;
|
|
1684
1731
|
exports.TimeoutError = TimeoutError;
|