mcp-http-webhook 1.0.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/.eslintrc.json +16 -0
- package/.prettierrc.json +8 -0
- package/ARCHITECTURE.md +269 -0
- package/CONTRIBUTING.md +136 -0
- package/GETTING_STARTED.md +310 -0
- package/IMPLEMENTATION.md +294 -0
- package/LICENSE +21 -0
- package/MIGRATION_TO_SDK.md +263 -0
- package/README.md +496 -0
- package/SDK_INTEGRATION_COMPLETE.md +300 -0
- package/STANDARD_SUBSCRIPTIONS.md +268 -0
- package/STANDARD_SUBSCRIPTIONS_COMPLETE.md +309 -0
- package/SUMMARY.md +272 -0
- package/Spec.md +2778 -0
- package/dist/errors/index.d.ts +52 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +81 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/ProtocolHandler.d.ts +37 -0
- package/dist/protocol/ProtocolHandler.d.ts.map +1 -0
- package/dist/protocol/ProtocolHandler.js +172 -0
- package/dist/protocol/ProtocolHandler.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +502 -0
- package/dist/server.js.map +1 -0
- package/dist/stores/InMemoryStore.d.ts +27 -0
- package/dist/stores/InMemoryStore.d.ts.map +1 -0
- package/dist/stores/InMemoryStore.js +73 -0
- package/dist/stores/InMemoryStore.js.map +1 -0
- package/dist/stores/RedisStore.d.ts +18 -0
- package/dist/stores/RedisStore.d.ts.map +1 -0
- package/dist/stores/RedisStore.js +45 -0
- package/dist/stores/RedisStore.js.map +1 -0
- package/dist/stores/index.d.ts +3 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +9 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/subscriptions/SubscriptionManager.d.ts +49 -0
- package/dist/subscriptions/SubscriptionManager.d.ts.map +1 -0
- package/dist/subscriptions/SubscriptionManager.js +181 -0
- package/dist/subscriptions/SubscriptionManager.js.map +1 -0
- package/dist/types/index.d.ts +271 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +51 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +154 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/webhooks/WebhookManager.d.ts +27 -0
- package/dist/webhooks/WebhookManager.d.ts.map +1 -0
- package/dist/webhooks/WebhookManager.js +174 -0
- package/dist/webhooks/WebhookManager.js.map +1 -0
- package/examples/GITHUB_LIVE_EXAMPLE.md +308 -0
- package/examples/GITHUB_LIVE_SETUP.md +253 -0
- package/examples/QUICKSTART.md +130 -0
- package/examples/basic-setup.ts +142 -0
- package/examples/github-server-live.ts +690 -0
- package/examples/github-server.ts +223 -0
- package/examples/google-drive-server-live.ts +773 -0
- package/examples/start-github-live.sh +53 -0
- package/jest.config.js +20 -0
- package/package.json +58 -0
- package/src/errors/index.ts +81 -0
- package/src/index.ts +19 -0
- package/src/server.ts +595 -0
- package/src/stores/InMemoryStore.ts +87 -0
- package/src/stores/RedisStore.ts +51 -0
- package/src/stores/index.ts +2 -0
- package/src/subscriptions/SubscriptionManager.ts +240 -0
- package/src/types/index.ts +341 -0
- package/src/utils/index.ts +156 -0
- package/src/webhooks/WebhookManager.ts +230 -0
- package/test-sdk-integration.sh +157 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base MCP Error class
|
|
3
|
+
*/
|
|
4
|
+
export declare class MCPError extends Error {
|
|
5
|
+
code: number;
|
|
6
|
+
data?: any;
|
|
7
|
+
constructor(message: string, code: number, data?: any);
|
|
8
|
+
toJSON(): {
|
|
9
|
+
error: {
|
|
10
|
+
code: number;
|
|
11
|
+
message: string;
|
|
12
|
+
data: any;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Authentication error
|
|
18
|
+
*/
|
|
19
|
+
export declare class AuthenticationError extends MCPError {
|
|
20
|
+
constructor(message?: string, data?: any);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validation error
|
|
24
|
+
*/
|
|
25
|
+
export declare class ValidationError extends MCPError {
|
|
26
|
+
constructor(message?: string, data?: any);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resource not found error
|
|
30
|
+
*/
|
|
31
|
+
export declare class ResourceNotFoundError extends MCPError {
|
|
32
|
+
constructor(message?: string, data?: any);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Tool execution error
|
|
36
|
+
*/
|
|
37
|
+
export declare class ToolExecutionError extends MCPError {
|
|
38
|
+
constructor(message?: string, data?: any);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Webhook error
|
|
42
|
+
*/
|
|
43
|
+
export declare class WebhookError extends MCPError {
|
|
44
|
+
constructor(message?: string, data?: any);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Storage error
|
|
48
|
+
*/
|
|
49
|
+
export declare class StorageError extends MCPError {
|
|
50
|
+
constructor(message?: string, data?: any);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;gBAEC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAQrD,MAAM;;;;;;;CASP;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,SAA0B,EAAE,IAAI,CAAC,EAAE,GAAG;CAG1D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,SAAsB,EAAE,IAAI,CAAC,EAAE,GAAG;CAGtD;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,OAAO,SAAuB,EAAE,IAAI,CAAC,EAAE,GAAG;CAGvD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,SAA0B,EAAE,IAAI,CAAC,EAAE,GAAG;CAG1D;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,SAAkB,EAAE,IAAI,CAAC,EAAE,GAAG;CAGlD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,SAAkB,EAAE,IAAI,CAAC,EAAE,GAAG;CAGlD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageError = exports.WebhookError = exports.ToolExecutionError = exports.ResourceNotFoundError = exports.ValidationError = exports.AuthenticationError = exports.MCPError = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
/**
|
|
6
|
+
* Base MCP Error class
|
|
7
|
+
*/
|
|
8
|
+
class MCPError extends Error {
|
|
9
|
+
constructor(message, code, data) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = this.constructor.name;
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.data = data;
|
|
14
|
+
Error.captureStackTrace(this, this.constructor);
|
|
15
|
+
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
return {
|
|
18
|
+
error: {
|
|
19
|
+
code: this.code,
|
|
20
|
+
message: this.message,
|
|
21
|
+
data: this.data,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.MCPError = MCPError;
|
|
27
|
+
/**
|
|
28
|
+
* Authentication error
|
|
29
|
+
*/
|
|
30
|
+
class AuthenticationError extends MCPError {
|
|
31
|
+
constructor(message = 'Authentication failed', data) {
|
|
32
|
+
super(message, types_1.MCPErrorCode.AuthenticationError, data);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.AuthenticationError = AuthenticationError;
|
|
36
|
+
/**
|
|
37
|
+
* Validation error
|
|
38
|
+
*/
|
|
39
|
+
class ValidationError extends MCPError {
|
|
40
|
+
constructor(message = 'Validation failed', data) {
|
|
41
|
+
super(message, types_1.MCPErrorCode.ValidationError, data);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.ValidationError = ValidationError;
|
|
45
|
+
/**
|
|
46
|
+
* Resource not found error
|
|
47
|
+
*/
|
|
48
|
+
class ResourceNotFoundError extends MCPError {
|
|
49
|
+
constructor(message = 'Resource not found', data) {
|
|
50
|
+
super(message, types_1.MCPErrorCode.ResourceNotFoundError, data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.ResourceNotFoundError = ResourceNotFoundError;
|
|
54
|
+
/**
|
|
55
|
+
* Tool execution error
|
|
56
|
+
*/
|
|
57
|
+
class ToolExecutionError extends MCPError {
|
|
58
|
+
constructor(message = 'Tool execution failed', data) {
|
|
59
|
+
super(message, types_1.MCPErrorCode.ToolExecutionError, data);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ToolExecutionError = ToolExecutionError;
|
|
63
|
+
/**
|
|
64
|
+
* Webhook error
|
|
65
|
+
*/
|
|
66
|
+
class WebhookError extends MCPError {
|
|
67
|
+
constructor(message = 'Webhook error', data) {
|
|
68
|
+
super(message, types_1.MCPErrorCode.WebhookError, data);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.WebhookError = WebhookError;
|
|
72
|
+
/**
|
|
73
|
+
* Storage error
|
|
74
|
+
*/
|
|
75
|
+
class StorageError extends MCPError {
|
|
76
|
+
constructor(message = 'Storage error', data) {
|
|
77
|
+
super(message, types_1.MCPErrorCode.StorageError, data);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.StorageError = StorageError;
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,oCAAwC;AAExC;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IAIjC,YAAY,OAAe,EAAE,IAAY,EAAE,IAAU;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;IACJ,CAAC;CACF;AArBD,4BAqBC;AAED;;GAEG;AACH,MAAa,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAO,GAAG,uBAAuB,EAAE,IAAU;QACvD,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;CACF;AAJD,kDAIC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAO,GAAG,mBAAmB,EAAE,IAAU;QACnD,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;CACF;AAJD,0CAIC;AAED;;GAEG;AACH,MAAa,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAO,GAAG,oBAAoB,EAAE,IAAU;QACpD,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;CACF;AAJD,sDAIC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAO,GAAG,uBAAuB,EAAE,IAAU;QACvD,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;CACF;AAJD,gDAIC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,QAAQ;IACxC,YAAY,OAAO,GAAG,eAAe,EAAE,IAAU;QAC/C,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;CACF;AAJD,oCAIC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,QAAQ;IACxC,YAAY,OAAO,GAAG,eAAe,EAAE,IAAU;QAC/C,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;CACF;AAJD,oCAIC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createMCPServer } from './server';
|
|
2
|
+
export * from './types';
|
|
3
|
+
export * from './errors';
|
|
4
|
+
export * from './utils';
|
|
5
|
+
export { SubscriptionManager } from './subscriptions/SubscriptionManager';
|
|
6
|
+
export { WebhookManager } from './webhooks/WebhookManager';
|
|
7
|
+
export { InMemoryStore } from './stores/InMemoryStore';
|
|
8
|
+
export { RedisStore } from './stores/RedisStore';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.RedisStore = exports.InMemoryStore = exports.WebhookManager = exports.SubscriptionManager = exports.createMCPServer = void 0;
|
|
18
|
+
// Main export
|
|
19
|
+
var server_1 = require("./server");
|
|
20
|
+
Object.defineProperty(exports, "createMCPServer", { enumerable: true, get: function () { return server_1.createMCPServer; } });
|
|
21
|
+
// Types
|
|
22
|
+
__exportStar(require("./types"), exports);
|
|
23
|
+
// Errors
|
|
24
|
+
__exportStar(require("./errors"), exports);
|
|
25
|
+
// Utilities
|
|
26
|
+
__exportStar(require("./utils"), exports);
|
|
27
|
+
// Managers (for advanced usage)
|
|
28
|
+
var SubscriptionManager_1 = require("./subscriptions/SubscriptionManager");
|
|
29
|
+
Object.defineProperty(exports, "SubscriptionManager", { enumerable: true, get: function () { return SubscriptionManager_1.SubscriptionManager; } });
|
|
30
|
+
var WebhookManager_1 = require("./webhooks/WebhookManager");
|
|
31
|
+
Object.defineProperty(exports, "WebhookManager", { enumerable: true, get: function () { return WebhookManager_1.WebhookManager; } });
|
|
32
|
+
// Store implementations
|
|
33
|
+
var InMemoryStore_1 = require("./stores/InMemoryStore");
|
|
34
|
+
Object.defineProperty(exports, "InMemoryStore", { enumerable: true, get: function () { return InMemoryStore_1.InMemoryStore; } });
|
|
35
|
+
var RedisStore_1 = require("./stores/RedisStore");
|
|
36
|
+
Object.defineProperty(exports, "RedisStore", { enumerable: true, get: function () { return RedisStore_1.RedisStore; } });
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,mCAA2C;AAAlC,yGAAA,eAAe,OAAA;AAExB,QAAQ;AACR,0CAAwB;AAExB,SAAS;AACT,2CAAyB;AAEzB,YAAY;AACZ,0CAAwB;AAExB,gCAAgC;AAChC,2EAA0E;AAAjE,0HAAA,mBAAmB,OAAA;AAC5B,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAEvB,wBAAwB;AACxB,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,kDAAiD;AAAxC,wGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ToolDefinition, ResourceDefinition, PromptDefinition, AuthContext, Logger } from '../types';
|
|
2
|
+
export declare class ProtocolHandler {
|
|
3
|
+
private tools;
|
|
4
|
+
private resources;
|
|
5
|
+
private prompts;
|
|
6
|
+
private logger?;
|
|
7
|
+
constructor(tools: ToolDefinition[], resources: ResourceDefinition[], prompts: PromptDefinition[], logger?: Logger | undefined);
|
|
8
|
+
/**
|
|
9
|
+
* List available tools
|
|
10
|
+
*/
|
|
11
|
+
listTools(): Promise<any>;
|
|
12
|
+
/**
|
|
13
|
+
* Call a tool
|
|
14
|
+
*/
|
|
15
|
+
callTool(name: string, args: any, context: AuthContext): Promise<any>;
|
|
16
|
+
/**
|
|
17
|
+
* List available resources
|
|
18
|
+
*/
|
|
19
|
+
listResources(context: AuthContext): Promise<any>;
|
|
20
|
+
/**
|
|
21
|
+
* Read a resource
|
|
22
|
+
*/
|
|
23
|
+
readResource(uri: string, context: AuthContext, options?: any): Promise<any>;
|
|
24
|
+
/**
|
|
25
|
+
* List available prompts
|
|
26
|
+
*/
|
|
27
|
+
listPrompts(): Promise<any>;
|
|
28
|
+
/**
|
|
29
|
+
* Get a prompt
|
|
30
|
+
*/
|
|
31
|
+
getPrompt(name: string, args: any, context: AuthContext): Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
* Find resource for URI
|
|
34
|
+
*/
|
|
35
|
+
private findResourceForUri;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=ProtocolHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolHandler.d.ts","sourceRoot":"","sources":["../../src/protocol/ProtocolHandler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,MAAM,EACP,MAAM,UAAU,CAAC;AASlB,qBAAa,eAAe;IAExB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM,CAAC;gBAHP,KAAK,EAAE,cAAc,EAAE,EACvB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,MAAM,CAAC,EAAE,MAAM,YAAA;IAGzB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IAU/B;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IA0C3E;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBvD;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAmClF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAUjC;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IA2B5E;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAM3B"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProtocolHandler = void 0;
|
|
7
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
const ajv = new ajv_1.default();
|
|
10
|
+
class ProtocolHandler {
|
|
11
|
+
constructor(tools, resources, prompts, logger) {
|
|
12
|
+
this.tools = tools;
|
|
13
|
+
this.resources = resources;
|
|
14
|
+
this.prompts = prompts;
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* List available tools
|
|
19
|
+
*/
|
|
20
|
+
async listTools() {
|
|
21
|
+
return {
|
|
22
|
+
tools: this.tools.map((tool) => ({
|
|
23
|
+
name: tool.name,
|
|
24
|
+
description: tool.description,
|
|
25
|
+
inputSchema: tool.inputSchema,
|
|
26
|
+
})),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Call a tool
|
|
31
|
+
*/
|
|
32
|
+
async callTool(name, args, context) {
|
|
33
|
+
this.logger?.debug('Calling tool', { name, args });
|
|
34
|
+
const tool = this.tools.find((t) => t.name === name);
|
|
35
|
+
if (!tool) {
|
|
36
|
+
throw new errors_1.ValidationError(`Tool not found: ${name}`);
|
|
37
|
+
}
|
|
38
|
+
// Validate input
|
|
39
|
+
const validate = ajv.compile(tool.inputSchema);
|
|
40
|
+
if (!validate(args)) {
|
|
41
|
+
throw new errors_1.ValidationError('Invalid tool input', {
|
|
42
|
+
errors: validate.errors,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const result = await tool.handler(args, context);
|
|
47
|
+
this.logger?.debug('Tool executed successfully', { name });
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: JSON.stringify(result, null, 2),
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.logger?.error('Tool execution failed', {
|
|
59
|
+
name,
|
|
60
|
+
error: error instanceof Error ? error.message : String(error),
|
|
61
|
+
});
|
|
62
|
+
throw new errors_1.ToolExecutionError('Tool execution failed', {
|
|
63
|
+
tool: name,
|
|
64
|
+
error: error instanceof Error ? error.message : String(error),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* List available resources
|
|
70
|
+
*/
|
|
71
|
+
async listResources(context) {
|
|
72
|
+
const resourceLists = await Promise.all(this.resources
|
|
73
|
+
.filter((r) => r.list)
|
|
74
|
+
.map(async (resource) => {
|
|
75
|
+
try {
|
|
76
|
+
return await resource.list(context);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
this.logger?.warn('Failed to list resource', {
|
|
80
|
+
resource: resource.name,
|
|
81
|
+
error: error instanceof Error ? error.message : String(error),
|
|
82
|
+
});
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
const allResources = resourceLists.flat();
|
|
87
|
+
return {
|
|
88
|
+
resources: allResources,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Read a resource
|
|
93
|
+
*/
|
|
94
|
+
async readResource(uri, context, options) {
|
|
95
|
+
this.logger?.debug('Reading resource', { uri });
|
|
96
|
+
const resource = this.findResourceForUri(uri);
|
|
97
|
+
if (!resource) {
|
|
98
|
+
throw new errors_1.ResourceNotFoundError(`No resource handler found for URI: ${uri}`);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const result = await resource.read(uri, context, options);
|
|
102
|
+
this.logger?.debug('Resource read successfully', { uri });
|
|
103
|
+
return {
|
|
104
|
+
contents: [
|
|
105
|
+
{
|
|
106
|
+
uri,
|
|
107
|
+
mimeType: resource.mimeType || 'application/json',
|
|
108
|
+
text: JSON.stringify(result.contents, null, 2),
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.logger?.error('Resource read failed', {
|
|
115
|
+
uri,
|
|
116
|
+
error: error instanceof Error ? error.message : String(error),
|
|
117
|
+
});
|
|
118
|
+
throw new errors_1.ResourceNotFoundError('Failed to read resource', {
|
|
119
|
+
uri,
|
|
120
|
+
error: error instanceof Error ? error.message : String(error),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* List available prompts
|
|
126
|
+
*/
|
|
127
|
+
async listPrompts() {
|
|
128
|
+
return {
|
|
129
|
+
prompts: this.prompts.map((prompt) => ({
|
|
130
|
+
name: prompt.name,
|
|
131
|
+
description: prompt.description,
|
|
132
|
+
arguments: prompt.arguments || [],
|
|
133
|
+
})),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get a prompt
|
|
138
|
+
*/
|
|
139
|
+
async getPrompt(name, args, context) {
|
|
140
|
+
this.logger?.debug('Getting prompt', { name, args });
|
|
141
|
+
const prompt = this.prompts.find((p) => p.name === name);
|
|
142
|
+
if (!prompt) {
|
|
143
|
+
throw new errors_1.ValidationError(`Prompt not found: ${name}`);
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const result = await prompt.handler(args, context);
|
|
147
|
+
this.logger?.debug('Prompt generated successfully', { name });
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
this.logger?.error('Prompt generation failed', {
|
|
152
|
+
name,
|
|
153
|
+
error: error instanceof Error ? error.message : String(error),
|
|
154
|
+
});
|
|
155
|
+
throw new errors_1.ToolExecutionError('Prompt generation failed', {
|
|
156
|
+
prompt: name,
|
|
157
|
+
error: error instanceof Error ? error.message : String(error),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Find resource for URI
|
|
163
|
+
*/
|
|
164
|
+
findResourceForUri(uri) {
|
|
165
|
+
return this.resources.find((resource) => {
|
|
166
|
+
// Simple prefix matching - could be enhanced
|
|
167
|
+
return uri.startsWith(resource.uri.split('{')[0]);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.ProtocolHandler = ProtocolHandler;
|
|
172
|
+
//# sourceMappingURL=ProtocolHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtocolHandler.js","sourceRoot":"","sources":["../../src/protocol/ProtocolHandler.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAsB,MAAM,SAAS,CAAC;AAmEzE;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAwclE"}
|