@bosonprotocol/agentic-commerce 1.0.0-alpha.41
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 +150 -0
- package/dist/boson/goat-sdk-plugin/index.d.ts +3 -0
- package/dist/boson/goat-sdk-plugin/index.d.ts.map +1 -0
- package/dist/boson/goat-sdk-plugin/index.js +7 -0
- package/dist/boson/goat-sdk-plugin/index.js.map +1 -0
- package/dist/boson/index.d.ts +3 -0
- package/dist/boson/index.d.ts.map +1 -0
- package/dist/boson/index.js +8 -0
- package/dist/boson/index.js.map +1 -0
- package/dist/boson/mcp-client/index.d.ts +293 -0
- package/dist/boson/mcp-client/index.d.ts.map +1 -0
- package/dist/boson/mcp-client/index.js +20 -0
- package/dist/boson/mcp-client/index.js.map +1 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.js +24 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/disputesFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/disputesFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/disputesFilter.js +155 -0
- package/dist/boson/mcp-server/filters/disputesFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.js +139 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/fundsFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/fundsFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/fundsFilter.js +98 -0
- package/dist/boson/mcp-server/filters/fundsFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/offersFilter.d.ts +14 -0
- package/dist/boson/mcp-server/filters/offersFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/offersFilter.js +265 -0
- package/dist/boson/mcp-server/filters/offersFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/productsFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/productsFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/productsFilter.js +30 -0
- package/dist/boson/mcp-server/filters/productsFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.d.ts +11 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.js +23 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/sellersFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/sellersFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/sellersFilter.js +151 -0
- package/dist/boson/mcp-server/filters/sellersFilter.js.map +1 -0
- package/dist/boson/mcp-server/handlers/accounts.d.ts +12 -0
- package/dist/boson/mcp-server/handlers/accounts.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/accounts.js +111 -0
- package/dist/boson/mcp-server/handlers/accounts.js.map +1 -0
- package/dist/boson/mcp-server/handlers/disputes.d.ts +12 -0
- package/dist/boson/mcp-server/handlers/disputes.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/disputes.js +180 -0
- package/dist/boson/mcp-server/handlers/disputes.js.map +1 -0
- package/dist/boson/mcp-server/handlers/exchanges.d.ts +10 -0
- package/dist/boson/mcp-server/handlers/exchanges.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/exchanges.js +113 -0
- package/dist/boson/mcp-server/handlers/exchanges.js.map +1 -0
- package/dist/boson/mcp-server/handlers/funds.d.ts +9 -0
- package/dist/boson/mcp-server/handlers/funds.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/funds.js +92 -0
- package/dist/boson/mcp-server/handlers/funds.js.map +1 -0
- package/dist/boson/mcp-server/handlers/metaTx.d.ts +115 -0
- package/dist/boson/mcp-server/handlers/metaTx.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/metaTx.js +180 -0
- package/dist/boson/mcp-server/handlers/metaTx.js.map +1 -0
- package/dist/boson/mcp-server/handlers/offers.d.ts +11 -0
- package/dist/boson/mcp-server/handlers/offers.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/offers.js +161 -0
- package/dist/boson/mcp-server/handlers/offers.js.map +1 -0
- package/dist/boson/mcp-server/handlers/sdk.d.ts +17 -0
- package/dist/boson/mcp-server/handlers/sdk.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/sdk.js +86 -0
- package/dist/boson/mcp-server/handlers/sdk.js.map +1 -0
- package/dist/boson/mcp-server/handlers/transactions.d.ts +9 -0
- package/dist/boson/mcp-server/handlers/transactions.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/transactions.js +19 -0
- package/dist/boson/mcp-server/handlers/transactions.js.map +1 -0
- package/dist/boson/mcp-server/index.d.ts +13 -0
- package/dist/boson/mcp-server/index.d.ts.map +1 -0
- package/dist/boson/mcp-server/index.js +1029 -0
- package/dist/boson/mcp-server/index.js.map +1 -0
- package/dist/boson/mcp-server/schemas.d.ts +4 -0
- package/dist/boson/mcp-server/schemas.d.ts.map +1 -0
- package/dist/boson/mcp-server/schemas.js +43 -0
- package/dist/boson/mcp-server/schemas.js.map +1 -0
- package/dist/boson/mcp-server/validation.d.ts +597 -0
- package/dist/boson/mcp-server/validation.d.ts.map +1 -0
- package/dist/boson/mcp-server/validation.js +250 -0
- package/dist/boson/mcp-server/validation.js.map +1 -0
- package/dist/common/index.d.ts +7 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +25 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/mcp-client/index.d.ts +463 -0
- package/dist/common/mcp-client/index.d.ts.map +1 -0
- package/dist/common/mcp-client/index.js +80 -0
- package/dist/common/mcp-client/index.js.map +1 -0
- package/dist/common/mcp-server/configLoader.d.ts +7 -0
- package/dist/common/mcp-server/configLoader.d.ts.map +1 -0
- package/dist/common/mcp-server/configLoader.js +48 -0
- package/dist/common/mcp-server/configLoader.js.map +1 -0
- package/dist/common/mcp-server/configValidation.d.ts +3 -0
- package/dist/common/mcp-server/configValidation.d.ts.map +1 -0
- package/dist/common/mcp-server/configValidation.js +24 -0
- package/dist/common/mcp-server/configValidation.js.map +1 -0
- package/dist/common/mcp-server/errorHandling.d.ts +25 -0
- package/dist/common/mcp-server/errorHandling.d.ts.map +1 -0
- package/dist/common/mcp-server/errorHandling.js +125 -0
- package/dist/common/mcp-server/errorHandling.js.map +1 -0
- package/dist/common/mcp-server/filterUtils.d.ts +11 -0
- package/dist/common/mcp-server/filterUtils.d.ts.map +1 -0
- package/dist/common/mcp-server/filterUtils.js +42 -0
- package/dist/common/mcp-server/filterUtils.js.map +1 -0
- package/dist/common/mcp-server/ipfs.d.ts +4 -0
- package/dist/common/mcp-server/ipfs.d.ts.map +1 -0
- package/dist/common/mcp-server/ipfs.js +12 -0
- package/dist/common/mcp-server/ipfs.js.map +1 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.d.ts +4 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.d.ts.map +1 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.js +40 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.js.map +1 -0
- package/dist/common/mcp-server/jsonUtils.d.ts +2 -0
- package/dist/common/mcp-server/jsonUtils.d.ts.map +1 -0
- package/dist/common/mcp-server/jsonUtils.js +7 -0
- package/dist/common/mcp-server/jsonUtils.js.map +1 -0
- package/dist/common/mcp-server/logger.d.ts +9 -0
- package/dist/common/mcp-server/logger.d.ts.map +1 -0
- package/dist/common/mcp-server/logger.js +9 -0
- package/dist/common/mcp-server/logger.js.map +1 -0
- package/dist/common/mcp-server/mcpTypes.d.ts +13 -0
- package/dist/common/mcp-server/mcpTypes.d.ts.map +1 -0
- package/dist/common/mcp-server/mcpTypes.js +3 -0
- package/dist/common/mcp-server/mcpTypes.js.map +1 -0
- package/dist/common/mcp-server/transactionSigning.d.ts +220 -0
- package/dist/common/mcp-server/transactionSigning.d.ts.map +1 -0
- package/dist/common/mcp-server/transactionSigning.js +267 -0
- package/dist/common/mcp-server/transactionSigning.js.map +1 -0
- package/dist/common/mcp-server/validationUtils.d.ts +3 -0
- package/dist/common/mcp-server/validationUtils.d.ts.map +1 -0
- package/dist/common/mcp-server/validationUtils.js +11 -0
- package/dist/common/mcp-server/validationUtils.js.map +1 -0
- package/dist/fermion/goat-sdk-plugin/index.d.ts +3 -0
- package/dist/fermion/goat-sdk-plugin/index.d.ts.map +1 -0
- package/dist/fermion/goat-sdk-plugin/index.js +7 -0
- package/dist/fermion/goat-sdk-plugin/index.js.map +1 -0
- package/dist/fermion/index.d.ts +3 -0
- package/dist/fermion/index.d.ts.map +1 -0
- package/dist/fermion/index.js +8 -0
- package/dist/fermion/index.js.map +1 -0
- package/dist/fermion/mcp-client/index.d.ts +435 -0
- package/dist/fermion/mcp-client/index.d.ts.map +1 -0
- package/dist/fermion/mcp-client/index.js +26 -0
- package/dist/fermion/mcp-client/index.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/custody.d.ts +10 -0
- package/dist/fermion/mcp-server/handlers/custody.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/custody.js +126 -0
- package/dist/fermion/mcp-server/handlers/custody.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/email.d.ts +19 -0
- package/dist/fermion/mcp-server/handlers/email.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/email.js +76 -0
- package/dist/fermion/mcp-server/handlers/email.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/funds.d.ts +26 -0
- package/dist/fermion/mcp-server/handlers/funds.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/funds.js +112 -0
- package/dist/fermion/mcp-server/handlers/funds.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/listings.d.ts +27 -0
- package/dist/fermion/mcp-server/handlers/listings.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/listings.js +119 -0
- package/dist/fermion/mcp-server/handlers/listings.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/offers.d.ts +9 -0
- package/dist/fermion/mcp-server/handlers/offers.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/offers.js +132 -0
- package/dist/fermion/mcp-server/handlers/offers.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/sdk.d.ts +17 -0
- package/dist/fermion/mcp-server/handlers/sdk.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/sdk.js +89 -0
- package/dist/fermion/mcp-server/handlers/sdk.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/transactions.d.ts +37 -0
- package/dist/fermion/mcp-server/handlers/transactions.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/transactions.js +61 -0
- package/dist/fermion/mcp-server/handlers/transactions.js.map +1 -0
- package/dist/fermion/mcp-server/index.d.ts +12 -0
- package/dist/fermion/mcp-server/index.d.ts.map +1 -0
- package/dist/fermion/mcp-server/index.js +408 -0
- package/dist/fermion/mcp-server/index.js.map +1 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.d.ts +48 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.d.ts.map +1 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.js +38 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.js.map +1 -0
- package/dist/fermion/mcp-server/schemas.d.ts +3 -0
- package/dist/fermion/mcp-server/schemas.d.ts.map +1 -0
- package/dist/fermion/mcp-server/schemas.js +41 -0
- package/dist/fermion/mcp-server/schemas.js.map +1 -0
- package/dist/fermion/mcp-server/validation.d.ts +575 -0
- package/dist/fermion/mcp-server/validation.d.ts.map +1 -0
- package/dist/fermion/mcp-server/validation.js +219 -0
- package/dist/fermion/mcp-server/validation.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/package.json +144 -0
|
@@ -0,0 +1,1029 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.BosonMCPServer = void 0;
|
|
38
|
+
const node_crypto_1 = require("node:crypto");
|
|
39
|
+
const core_sdk_1 = require("@bosonprotocol/core-sdk");
|
|
40
|
+
const core_sdk_2 = require("@fermionprotocol/core-sdk");
|
|
41
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
42
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
43
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
44
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
45
|
+
const configLoader_js_1 = require("../../common/mcp-server/configLoader.js");
|
|
46
|
+
const errorHandling_js_1 = require("../../common/mcp-server/errorHandling.js");
|
|
47
|
+
const transactionSigning_js_1 = require("../../common/mcp-server/transactionSigning.js");
|
|
48
|
+
const disputeResolversFilter_js_1 = require("./filters/disputeResolversFilter.js");
|
|
49
|
+
const disputesFilter_js_1 = require("./filters/disputesFilter.js");
|
|
50
|
+
const exchangesFilter_js_1 = require("./filters/exchangesFilter.js");
|
|
51
|
+
const fundsFilter_js_1 = require("./filters/fundsFilter.js");
|
|
52
|
+
const offersFilter_js_1 = require("./filters/offersFilter.js");
|
|
53
|
+
const productsFilter_js_1 = require("./filters/productsFilter.js");
|
|
54
|
+
const sellersByAddressFilter_js_1 = require("./filters/sellersByAddressFilter.js");
|
|
55
|
+
const sellersFilter_js_1 = require("./filters/sellersFilter.js");
|
|
56
|
+
const accounts_js_1 = require("./handlers/accounts.js");
|
|
57
|
+
const disputes_js_1 = require("./handlers/disputes.js");
|
|
58
|
+
const exchanges_js_1 = require("./handlers/exchanges.js");
|
|
59
|
+
const funds_js_1 = require("./handlers/funds.js");
|
|
60
|
+
const metaTx_js_1 = require("./handlers/metaTx.js");
|
|
61
|
+
const offers_js_1 = require("./handlers/offers.js");
|
|
62
|
+
const sdk_js_1 = require("./handlers/sdk.js");
|
|
63
|
+
const transactions_js_1 = require("./handlers/transactions.js");
|
|
64
|
+
const validation_js_1 = require("./validation.js");
|
|
65
|
+
const log = console.error;
|
|
66
|
+
class BosonMCPServer {
|
|
67
|
+
coreSDK = null;
|
|
68
|
+
constructor() {
|
|
69
|
+
// Error handling will be set up per server instance
|
|
70
|
+
}
|
|
71
|
+
createServerInstance() {
|
|
72
|
+
const server = new mcp_js_1.McpServer({
|
|
73
|
+
name: "boson-protocol-server",
|
|
74
|
+
version: "1.0.0",
|
|
75
|
+
}, {
|
|
76
|
+
capabilities: {
|
|
77
|
+
tools: {},
|
|
78
|
+
resources: {},
|
|
79
|
+
completions: {},
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
this.setupToolHandlers(server);
|
|
83
|
+
this.setupErrorHandling(server);
|
|
84
|
+
return server;
|
|
85
|
+
}
|
|
86
|
+
setupErrorHandling(server) {
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
88
|
+
process.on("SIGINT", async () => {
|
|
89
|
+
try {
|
|
90
|
+
await server.close();
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
console.error("Error closing server:", error);
|
|
94
|
+
}
|
|
95
|
+
process.exit(0);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
setupToolHandlers(server) {
|
|
99
|
+
const initializeSDKHandler = (0, sdk_js_1.createInitializeSDKHandler)((sdk) => {
|
|
100
|
+
this.coreSDK = sdk;
|
|
101
|
+
});
|
|
102
|
+
const offerHandler = (0, offers_js_1.createOfferHandler)(() => this.coreSDK);
|
|
103
|
+
const voidOfferHandler = (0, offers_js_1.createVoidOfferHandler)(() => this.coreSDK);
|
|
104
|
+
const sellerHandler = (0, accounts_js_1.createSellerHandler)(() => this.coreSDK);
|
|
105
|
+
const transactionHandler = (0, transactions_js_1.createTransactionHandler)(() => this.coreSDK);
|
|
106
|
+
const signTransactionHandler = (0, transactions_js_1.createSignTransactionHandler)();
|
|
107
|
+
const signTypedDataHandler = (0, transactions_js_1.createSignTypedDataHandler)();
|
|
108
|
+
const sendMetaTransactionHandler = (0, metaTx_js_1.createSendMetaTransactionHandler)(() => this.coreSDK);
|
|
109
|
+
const sendNativeMetaTransactionHandler = (0, metaTx_js_1.createSendNativeMetaTransactionHandler)(() => this.coreSDK);
|
|
110
|
+
const sendForwardedMetaTransactionHandler = (0, metaTx_js_1.createSendForwardedMetaTransactionHandler)(() => this.coreSDK);
|
|
111
|
+
const withdrawFundsHandler = (0, funds_js_1.createWithdrawFundsHandler)(() => this.coreSDK);
|
|
112
|
+
const depositFundsHandler = (0, funds_js_1.createDepositFundsHandler)(() => this.coreSDK);
|
|
113
|
+
const getFundsHandler = (0, funds_js_1.createGetFundsHandler)(() => this.coreSDK);
|
|
114
|
+
const extendDisputeTimeoutHandler = (0, disputes_js_1.createExtendDisputeTimeoutHandler)(() => this.coreSDK);
|
|
115
|
+
const expireDisputeHandler = (0, disputes_js_1.createExpireDisputeHandler)(() => this.coreSDK);
|
|
116
|
+
const expireDisputeBatchHandler = (0, disputes_js_1.createExpireDisputeBatchHandler)(() => this.coreSDK);
|
|
117
|
+
const resolveDisputeHandler = (0, disputes_js_1.createResolveDisputeHandler)(() => this.coreSDK);
|
|
118
|
+
const disputeResolutionProposalHandler = (0, disputes_js_1.createDisputeResolutionProposalHandler)(() => this.coreSDK);
|
|
119
|
+
const getDisputesHandler = (0, disputes_js_1.createGetDisputesHandler)(() => this.coreSDK);
|
|
120
|
+
const revokeVoucherHandler = (0, exchanges_js_1.createRevokeVoucherHandler)(() => this.coreSDK);
|
|
121
|
+
const commitToOfferHandler = (0, offers_js_1.createCommitToOfferHandler)(() => this.coreSDK);
|
|
122
|
+
const cancelVoucherHandler = (0, exchanges_js_1.createCancelVoucherHandler)(() => this.coreSDK);
|
|
123
|
+
const redeemVoucherHandler = (0, exchanges_js_1.createRedeemVoucherHandler)(() => this.coreSDK);
|
|
124
|
+
const getExchangesHandler = (0, exchanges_js_1.createGetExchangesHandler)(() => this.coreSDK);
|
|
125
|
+
const getOffersHandler = (0, offers_js_1.createGetOffersHandler)(() => this.coreSDK);
|
|
126
|
+
const getSellersHandler = (0, accounts_js_1.createGetSellersHandler)(() => this.coreSDK);
|
|
127
|
+
const getSellersByAddressHandler = (0, accounts_js_1.createGetSellersByAddressHandler)(() => this.coreSDK);
|
|
128
|
+
const getAllProductsWithNotVoidedVariantsHandler = (0, offers_js_1.createGetAllProductsWithNotVoidedVariantsHandler)(() => this.coreSDK);
|
|
129
|
+
const getDisputeResolversHandler = (0, accounts_js_1.createGetDisputeResolversHandler)(() => this.coreSDK);
|
|
130
|
+
// Add tools for resource queries
|
|
131
|
+
server.tool("get_funds", "Get funds entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getFundsValidation.shape, async (args) => {
|
|
132
|
+
const validatedArgs = validation_js_1.getFundsValidation.parse(args);
|
|
133
|
+
const result = await getFundsHandler(validatedArgs);
|
|
134
|
+
return {
|
|
135
|
+
content: [
|
|
136
|
+
{
|
|
137
|
+
type: "text",
|
|
138
|
+
text: result,
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
server.tool("get_disputes", "Get dispute entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getDisputesValidation.shape, async (args) => {
|
|
144
|
+
const validatedArgs = validation_js_1.getDisputesValidation.parse(args);
|
|
145
|
+
const result = await getDisputesHandler(validatedArgs);
|
|
146
|
+
return {
|
|
147
|
+
content: [
|
|
148
|
+
{
|
|
149
|
+
type: "text",
|
|
150
|
+
text: result,
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
server.tool("get_exchanges", "Get exchange entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getExchangesValidation.shape, async (args) => {
|
|
156
|
+
const validatedArgs = validation_js_1.getExchangesValidation.parse(args);
|
|
157
|
+
const result = await getExchangesHandler(validatedArgs);
|
|
158
|
+
return {
|
|
159
|
+
content: [
|
|
160
|
+
{
|
|
161
|
+
type: "text",
|
|
162
|
+
text: result,
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
server.tool("get_offers", "Get offer entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getOffersValidation.shape, async (args) => {
|
|
168
|
+
const validatedArgs = validation_js_1.getOffersValidation.parse(args);
|
|
169
|
+
const result = await getOffersHandler(validatedArgs);
|
|
170
|
+
return {
|
|
171
|
+
content: [
|
|
172
|
+
{
|
|
173
|
+
type: "text",
|
|
174
|
+
text: result,
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
server.tool("get_sellers", "Get seller entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getSellersValidation.shape, async (args) => {
|
|
180
|
+
const validatedArgs = validation_js_1.getSellersValidation.parse(args);
|
|
181
|
+
const result = await getSellersHandler(validatedArgs);
|
|
182
|
+
return {
|
|
183
|
+
content: [
|
|
184
|
+
{
|
|
185
|
+
type: "text",
|
|
186
|
+
text: result,
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
server.tool("get_dispute_resolvers", "Get dispute resolver entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getDisputeResolversValidation.shape, async (args) => {
|
|
192
|
+
const validatedArgs = validation_js_1.getDisputeResolversValidation.parse(args);
|
|
193
|
+
const result = await getDisputeResolversHandler(validatedArgs);
|
|
194
|
+
return {
|
|
195
|
+
content: [
|
|
196
|
+
{
|
|
197
|
+
type: "text",
|
|
198
|
+
text: result,
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
};
|
|
202
|
+
});
|
|
203
|
+
server.tool("initialize_sdk", "Initialize the Boson Protocol SDK with custom configuration", sdk_js_1.initializeSDKSchema, (args) => {
|
|
204
|
+
// Validate required fields - signerAddress can come from params or env
|
|
205
|
+
const signerAddress = args.signerAddress || process.env.SIGNER_ADDRESS;
|
|
206
|
+
if (!signerAddress) {
|
|
207
|
+
throw new Error("signerAddress is required. Provide it as parameter or set SIGNER_ADDRESS environment variable.");
|
|
208
|
+
}
|
|
209
|
+
return initializeSDKHandler(args);
|
|
210
|
+
});
|
|
211
|
+
server.tool("create_offer", "Create a new offer on Boson Protocol", validation_js_1.createOfferValidation.shape, (args) => {
|
|
212
|
+
try {
|
|
213
|
+
const validatedArgs = validation_js_1.createOfferValidation.parse(args);
|
|
214
|
+
return offerHandler(validatedArgs);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
return {
|
|
218
|
+
content: [
|
|
219
|
+
{
|
|
220
|
+
type: "text",
|
|
221
|
+
text: JSON.stringify({
|
|
222
|
+
success: false,
|
|
223
|
+
error: `Failed to create offer: ${(0, errorHandling_js_1.formatErrorMessage)(error)}`,
|
|
224
|
+
errorDetails: error,
|
|
225
|
+
message: "create offer validation failed",
|
|
226
|
+
}),
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
server.tool("void_offer", "Void an existing offer by calling the OfferHandlerFacet contract", validation_js_1.voidOfferValidation.shape, (args) => {
|
|
233
|
+
const validatedArgs = validation_js_1.voidOfferValidation.parse(args);
|
|
234
|
+
return voidOfferHandler(validatedArgs);
|
|
235
|
+
});
|
|
236
|
+
server.tool("create_seller", "Create a new seller on Boson Protocol", validation_js_1.createSellerValidation.shape, (args) => {
|
|
237
|
+
const validatedArgs = validation_js_1.createSellerValidation.parse(args);
|
|
238
|
+
return sellerHandler(validatedArgs);
|
|
239
|
+
});
|
|
240
|
+
server.tool("send_signed_transaction", "Send a signed transaction to the Ethereum network", validation_js_1.signedTransactionValidation, transactionHandler);
|
|
241
|
+
server.tool("sign_transaction", "Sign a transaction with a private key", validation_js_1.signTransactionValidation, signTransactionHandler);
|
|
242
|
+
server.tool("sign_typed_data", "Sign typed data using EIP-712 standard (optionally create transaction for contract submission)", transactionSigning_js_1.signTypedDataValidation, signTypedDataHandler);
|
|
243
|
+
server.tool("send_meta_transaction", "Send a meta transaction using Boson Protocol SDK", metaTx_js_1.sendMetaTransactionValidation.shape, (args) => {
|
|
244
|
+
const validatedArgs = metaTx_js_1.sendMetaTransactionValidation.parse(args);
|
|
245
|
+
return sendMetaTransactionHandler(validatedArgs);
|
|
246
|
+
});
|
|
247
|
+
server.tool("send_native_meta_transaction", "Send a native meta transaction using Boson Protocol SDK", metaTx_js_1.sendNativeMetaTransactionValidation.shape, (args) => {
|
|
248
|
+
const validatedArgs = metaTx_js_1.sendNativeMetaTransactionValidation.parse(args);
|
|
249
|
+
return sendNativeMetaTransactionHandler(validatedArgs);
|
|
250
|
+
});
|
|
251
|
+
server.tool("send_forwarded_meta_transaction", "Send a forwarded meta transaction using Boson Protocol SDK", metaTx_js_1.sendForwardedMetaTransactionValidation.shape, (args) => {
|
|
252
|
+
const validatedArgs = metaTx_js_1.sendForwardedMetaTransactionValidation.parse(args);
|
|
253
|
+
return sendForwardedMetaTransactionHandler(validatedArgs);
|
|
254
|
+
});
|
|
255
|
+
server.tool("withdraw_funds", "Withdraw funds from an entity treasury", validation_js_1.withdrawFundsValidation.shape, (args) => {
|
|
256
|
+
const validatedArgs = validation_js_1.withdrawFundsValidation.parse(args);
|
|
257
|
+
return withdrawFundsHandler(validatedArgs);
|
|
258
|
+
});
|
|
259
|
+
server.tool("deposit_funds", "Deposit funds to an entity treasury", validation_js_1.depositFundsValidation.shape, (args) => {
|
|
260
|
+
const validatedArgs = validation_js_1.depositFundsValidation.parse(args);
|
|
261
|
+
return depositFundsHandler(validatedArgs);
|
|
262
|
+
});
|
|
263
|
+
server.tool("extend_dispute_timeout", "Extend the timeout for a dispute", validation_js_1.extendDisputeTimeoutValidation.shape, (args) => {
|
|
264
|
+
const validatedArgs = validation_js_1.extendDisputeTimeoutValidation.parse(args);
|
|
265
|
+
return extendDisputeTimeoutHandler(validatedArgs);
|
|
266
|
+
});
|
|
267
|
+
server.tool("expire_dispute", "Expire a dispute", validation_js_1.expireDisputeValidation.shape, (args) => {
|
|
268
|
+
const validatedArgs = validation_js_1.expireDisputeValidation.parse(args);
|
|
269
|
+
return expireDisputeHandler(validatedArgs);
|
|
270
|
+
});
|
|
271
|
+
server.tool("expire_dispute_batch", "Expire multiple disputes in a batch", validation_js_1.expireDisputeBatchValidation.shape, (args) => {
|
|
272
|
+
const validatedArgs = validation_js_1.expireDisputeBatchValidation.parse(args);
|
|
273
|
+
return expireDisputeBatchHandler(validatedArgs);
|
|
274
|
+
});
|
|
275
|
+
server.tool("resolve_dispute", "Resolve a dispute with mutual agreement", validation_js_1.resolveDisputeValidation.shape, (args) => {
|
|
276
|
+
const validatedArgs = validation_js_1.resolveDisputeValidation.parse(args);
|
|
277
|
+
return resolveDisputeHandler(validatedArgs);
|
|
278
|
+
});
|
|
279
|
+
server.tool("create_dispute_resolution_proposal", "Create a dispute resolution proposal signature", validation_js_1.createDisputeResolutionProposalValidation.shape, (args) => {
|
|
280
|
+
const validatedArgs = validation_js_1.createDisputeResolutionProposalValidation.parse(args);
|
|
281
|
+
return disputeResolutionProposalHandler(validatedArgs);
|
|
282
|
+
});
|
|
283
|
+
server.tool("revoke_voucher", "Revoke an existing voucher by seller assistant", validation_js_1.revokeVoucherValidation.shape, (args) => {
|
|
284
|
+
const validatedArgs = validation_js_1.revokeVoucherValidation.parse(args);
|
|
285
|
+
return revokeVoucherHandler(validatedArgs);
|
|
286
|
+
});
|
|
287
|
+
server.tool("commit_to_offer", "Commit to an offer to create an exchange", validation_js_1.commitToOfferValidation.shape, (args) => {
|
|
288
|
+
const validatedArgs = validation_js_1.commitToOfferValidation.parse(args);
|
|
289
|
+
return commitToOfferHandler(validatedArgs);
|
|
290
|
+
});
|
|
291
|
+
server.tool("cancel_voucher", "Cancel an existing voucher by buyer", validation_js_1.cancelVoucherValidation.shape, (args) => {
|
|
292
|
+
const validatedArgs = validation_js_1.cancelVoucherValidation.parse(args);
|
|
293
|
+
return cancelVoucherHandler(validatedArgs);
|
|
294
|
+
});
|
|
295
|
+
server.tool("redeem_voucher", "Redeem an existing voucher by buyer", validation_js_1.redeemVoucherValidation.shape, (args) => {
|
|
296
|
+
const validatedArgs = validation_js_1.redeemVoucherValidation.parse(args);
|
|
297
|
+
return redeemVoucherHandler(validatedArgs);
|
|
298
|
+
});
|
|
299
|
+
server.tool("get_sellers_by_address", "Get seller entities by address with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getSellersByAddressValidation.shape, async (args) => {
|
|
300
|
+
const validatedArgs = validation_js_1.getSellersByAddressValidation.parse(args);
|
|
301
|
+
const result = await getSellersByAddressHandler(validatedArgs);
|
|
302
|
+
return {
|
|
303
|
+
content: [
|
|
304
|
+
{
|
|
305
|
+
type: "text",
|
|
306
|
+
text: result,
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
server.tool("get_all_products_with_not_voided_variants", "Get all products with not voided variants with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getAllProductsWithNotVoidedVariantsValidation.shape, async (args) => {
|
|
312
|
+
const validatedArgs = validation_js_1.getAllProductsWithNotVoidedVariantsValidation.parse(args);
|
|
313
|
+
const result = await getAllProductsWithNotVoidedVariantsHandler(validatedArgs);
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
type: "text",
|
|
318
|
+
text: result,
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
};
|
|
322
|
+
});
|
|
323
|
+
// Add the funds resource with flexible query parameters
|
|
324
|
+
server.resource("funds", new mcp_js_1.ResourceTemplate(fundsFilter_js_1.fundsUriTemplate, {
|
|
325
|
+
list: undefined,
|
|
326
|
+
complete: {
|
|
327
|
+
fundsSkip: () => {
|
|
328
|
+
return ["0", "10", "20", "50", "100"];
|
|
329
|
+
},
|
|
330
|
+
fundsFirst: () => {
|
|
331
|
+
return ["10", "20", "50", "100"];
|
|
332
|
+
},
|
|
333
|
+
fundsOrderBy: () => {
|
|
334
|
+
return Object.values(core_sdk_2.Subgraph.FundsEntity_OrderBy);
|
|
335
|
+
},
|
|
336
|
+
fundsOrderDirection: () => {
|
|
337
|
+
return Object.values(core_sdk_2.Subgraph.OrderDirection);
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
}), {
|
|
341
|
+
name: "Funds Entities",
|
|
342
|
+
description: "Get funds entities with flexible query parameters including pagination, ordering, and filtering",
|
|
343
|
+
mimeType: "application/json",
|
|
344
|
+
}, async (uri) => {
|
|
345
|
+
const queryParams = {};
|
|
346
|
+
// Extract query parameters from URL
|
|
347
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
348
|
+
if (urlParams.get("fundsSkip")) {
|
|
349
|
+
queryParams.fundsSkip = parseInt(urlParams.get("fundsSkip"));
|
|
350
|
+
}
|
|
351
|
+
if (urlParams.get("fundsFirst")) {
|
|
352
|
+
queryParams.fundsFirst = parseInt(urlParams.get("fundsFirst"));
|
|
353
|
+
}
|
|
354
|
+
if (urlParams.get("fundsOrderBy")) {
|
|
355
|
+
queryParams.fundsOrderBy = urlParams.get("fundsOrderBy");
|
|
356
|
+
}
|
|
357
|
+
if (urlParams.get("fundsOrderDirection")) {
|
|
358
|
+
queryParams.fundsOrderDirection = urlParams.get("fundsOrderDirection");
|
|
359
|
+
}
|
|
360
|
+
// Process filter parameters
|
|
361
|
+
const filterParams = (0, fundsFilter_js_1.fundsProcessFilterParams)(urlParams);
|
|
362
|
+
if (Object.keys(filterParams).length > 0) {
|
|
363
|
+
queryParams.fundsFilter = filterParams;
|
|
364
|
+
}
|
|
365
|
+
const validatedArgs = validation_js_1.getFundsValidation.parse(queryParams);
|
|
366
|
+
const result = await getFundsHandler(validatedArgs);
|
|
367
|
+
return {
|
|
368
|
+
contents: [
|
|
369
|
+
{
|
|
370
|
+
uri: uri.toString(),
|
|
371
|
+
mimeType: "application/json",
|
|
372
|
+
text: result,
|
|
373
|
+
},
|
|
374
|
+
],
|
|
375
|
+
};
|
|
376
|
+
});
|
|
377
|
+
// Add the signer-address resource with no parameters
|
|
378
|
+
server.resource("signer-address", "signer-address://", async (url) => {
|
|
379
|
+
if (!this.coreSDK?.web3Lib?.getSignerAddress) {
|
|
380
|
+
throw new Error("SDK not initialized. Call initialize_sdk first.");
|
|
381
|
+
}
|
|
382
|
+
return {
|
|
383
|
+
contents: [
|
|
384
|
+
{
|
|
385
|
+
uri: url.toString(),
|
|
386
|
+
mimeType: "text/plain",
|
|
387
|
+
text: await this.coreSDK.web3Lib.getSignerAddress(),
|
|
388
|
+
},
|
|
389
|
+
],
|
|
390
|
+
};
|
|
391
|
+
});
|
|
392
|
+
// Add the disputes resource with flexible query parameters
|
|
393
|
+
server.resource("disputes", new mcp_js_1.ResourceTemplate(disputesFilter_js_1.disputesUriTemplate, {
|
|
394
|
+
list: undefined,
|
|
395
|
+
complete: {
|
|
396
|
+
disputesSkip: () => {
|
|
397
|
+
return ["0", "10", "20", "50", "100"];
|
|
398
|
+
},
|
|
399
|
+
disputesFirst: () => {
|
|
400
|
+
return ["10", "20", "50", "100"];
|
|
401
|
+
},
|
|
402
|
+
disputesOrderBy: () => {
|
|
403
|
+
return Object.values(core_sdk_1.subgraph.Dispute_OrderBy);
|
|
404
|
+
},
|
|
405
|
+
disputesOrderDirection: () => {
|
|
406
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
}), {
|
|
410
|
+
name: "Dispute Entities",
|
|
411
|
+
description: "Get dispute entities with flexible query parameters including pagination, ordering, and filtering",
|
|
412
|
+
mimeType: "application/json",
|
|
413
|
+
}, async (uri) => {
|
|
414
|
+
const queryParams = {};
|
|
415
|
+
// Extract query parameters from URL
|
|
416
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
417
|
+
if (urlParams.get("disputesSkip")) {
|
|
418
|
+
queryParams.disputesSkip = parseInt(urlParams.get("disputesSkip"));
|
|
419
|
+
}
|
|
420
|
+
if (urlParams.get("disputesFirst")) {
|
|
421
|
+
queryParams.disputesFirst = parseInt(urlParams.get("disputesFirst"));
|
|
422
|
+
}
|
|
423
|
+
if (urlParams.get("disputesOrderBy")) {
|
|
424
|
+
queryParams.disputesOrderBy = urlParams.get("disputesOrderBy");
|
|
425
|
+
}
|
|
426
|
+
if (urlParams.get("disputesOrderDirection")) {
|
|
427
|
+
queryParams.disputesOrderDirection = urlParams.get("disputesOrderDirection");
|
|
428
|
+
}
|
|
429
|
+
// Process filter parameters
|
|
430
|
+
const filterParams = (0, disputesFilter_js_1.disputesProcessFilterParams)(urlParams);
|
|
431
|
+
if (Object.keys(filterParams).length > 0) {
|
|
432
|
+
queryParams.disputesFilter = filterParams;
|
|
433
|
+
}
|
|
434
|
+
const validatedArgs = validation_js_1.getDisputesValidation.parse(queryParams);
|
|
435
|
+
const result = await getDisputesHandler(validatedArgs);
|
|
436
|
+
return {
|
|
437
|
+
contents: [
|
|
438
|
+
{
|
|
439
|
+
uri: uri.toString(),
|
|
440
|
+
mimeType: "application/json",
|
|
441
|
+
text: result,
|
|
442
|
+
},
|
|
443
|
+
],
|
|
444
|
+
};
|
|
445
|
+
});
|
|
446
|
+
// Add the exchanges resource with flexible query parameters
|
|
447
|
+
server.resource("exchanges", new mcp_js_1.ResourceTemplate(exchangesFilter_js_1.exchangesUriTemplate, {
|
|
448
|
+
list: undefined,
|
|
449
|
+
complete: {
|
|
450
|
+
exchangesSkip: () => {
|
|
451
|
+
return ["0", "10", "20", "50", "100"];
|
|
452
|
+
},
|
|
453
|
+
exchangesFirst: () => {
|
|
454
|
+
return ["10", "20", "50", "100"];
|
|
455
|
+
},
|
|
456
|
+
exchangesOrderBy: () => {
|
|
457
|
+
return Object.values(core_sdk_1.subgraph.Exchange_OrderBy);
|
|
458
|
+
},
|
|
459
|
+
exchangesOrderDirection: () => {
|
|
460
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
}), {
|
|
464
|
+
name: "Exchange Entities",
|
|
465
|
+
description: "Get exchange entities with flexible query parameters including pagination, ordering, and filtering",
|
|
466
|
+
mimeType: "application/json",
|
|
467
|
+
}, async (uri) => {
|
|
468
|
+
const queryParams = {};
|
|
469
|
+
// Extract query parameters from URL
|
|
470
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
471
|
+
if (urlParams.get("exchangesSkip")) {
|
|
472
|
+
queryParams.exchangesSkip = parseInt(urlParams.get("exchangesSkip"));
|
|
473
|
+
}
|
|
474
|
+
if (urlParams.get("exchangesFirst")) {
|
|
475
|
+
queryParams.exchangesFirst = parseInt(urlParams.get("exchangesFirst"));
|
|
476
|
+
}
|
|
477
|
+
if (urlParams.get("exchangesOrderBy")) {
|
|
478
|
+
queryParams.exchangesOrderBy = urlParams.get("exchangesOrderBy");
|
|
479
|
+
}
|
|
480
|
+
if (urlParams.get("exchangesOrderDirection")) {
|
|
481
|
+
queryParams.exchangesOrderDirection = urlParams.get("exchangesOrderDirection");
|
|
482
|
+
}
|
|
483
|
+
// Process filter parameters
|
|
484
|
+
const filterParams = (0, exchangesFilter_js_1.exchangesProcessFilterParams)(urlParams);
|
|
485
|
+
if (Object.keys(filterParams).length > 0) {
|
|
486
|
+
queryParams.exchangesFilter = filterParams;
|
|
487
|
+
}
|
|
488
|
+
const validatedArgs = validation_js_1.getExchangesValidation.parse(queryParams);
|
|
489
|
+
const result = await getExchangesHandler(validatedArgs);
|
|
490
|
+
return {
|
|
491
|
+
contents: [
|
|
492
|
+
{
|
|
493
|
+
uri: uri.toString(),
|
|
494
|
+
mimeType: "application/json",
|
|
495
|
+
text: result,
|
|
496
|
+
},
|
|
497
|
+
],
|
|
498
|
+
};
|
|
499
|
+
});
|
|
500
|
+
// Add the offers resource with flexible query parameters
|
|
501
|
+
server.resource("offers", new mcp_js_1.ResourceTemplate(offersFilter_js_1.offersUriTemplate, {
|
|
502
|
+
list: undefined,
|
|
503
|
+
complete: {
|
|
504
|
+
offersSkip: () => {
|
|
505
|
+
return ["0", "10", "20", "50", "100"];
|
|
506
|
+
},
|
|
507
|
+
offersFirst: () => {
|
|
508
|
+
return ["10", "20", "50", "100"];
|
|
509
|
+
},
|
|
510
|
+
offersOrderBy: () => {
|
|
511
|
+
return Object.values(core_sdk_1.subgraph.Offer_OrderBy);
|
|
512
|
+
},
|
|
513
|
+
offersOrderDirection: () => {
|
|
514
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
515
|
+
},
|
|
516
|
+
exchangesSkip: () => {
|
|
517
|
+
return ["0", "10", "20", "50", "100"];
|
|
518
|
+
},
|
|
519
|
+
exchangesFirst: () => {
|
|
520
|
+
return ["10", "20", "50", "100"];
|
|
521
|
+
},
|
|
522
|
+
exchangesOrderBy: () => {
|
|
523
|
+
return Object.values(core_sdk_1.subgraph.Exchange_OrderBy);
|
|
524
|
+
},
|
|
525
|
+
exchangesOrderDirection: () => {
|
|
526
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
527
|
+
},
|
|
528
|
+
includeExchanges: () => {
|
|
529
|
+
return ["true", "false"];
|
|
530
|
+
},
|
|
531
|
+
},
|
|
532
|
+
}), {
|
|
533
|
+
name: "Offer Entities",
|
|
534
|
+
description: "Get offer entities with flexible query parameters including pagination, ordering, and filtering. Supports exchanges filtering for exchangeId",
|
|
535
|
+
mimeType: "application/json",
|
|
536
|
+
}, async (uri) => {
|
|
537
|
+
const queryParams = {};
|
|
538
|
+
// Extract query parameters from URL
|
|
539
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
540
|
+
// Offers parameters
|
|
541
|
+
if (urlParams.get("offersSkip")) {
|
|
542
|
+
queryParams.offersSkip = parseInt(urlParams.get("offersSkip"));
|
|
543
|
+
}
|
|
544
|
+
if (urlParams.get("offersFirst")) {
|
|
545
|
+
queryParams.offersFirst = parseInt(urlParams.get("offersFirst"));
|
|
546
|
+
}
|
|
547
|
+
if (urlParams.get("offersOrderBy")) {
|
|
548
|
+
queryParams.offersOrderBy = urlParams.get("offersOrderBy");
|
|
549
|
+
}
|
|
550
|
+
if (urlParams.get("offersOrderDirection")) {
|
|
551
|
+
queryParams.offersOrderDirection = urlParams.get("offersOrderDirection");
|
|
552
|
+
}
|
|
553
|
+
// Exchanges parameters
|
|
554
|
+
if (urlParams.get("exchangesSkip")) {
|
|
555
|
+
queryParams.exchangesSkip = parseInt(urlParams.get("exchangesSkip"));
|
|
556
|
+
}
|
|
557
|
+
if (urlParams.get("exchangesFirst")) {
|
|
558
|
+
queryParams.exchangesFirst = parseInt(urlParams.get("exchangesFirst"));
|
|
559
|
+
}
|
|
560
|
+
if (urlParams.get("exchangesOrderBy")) {
|
|
561
|
+
queryParams.exchangesOrderBy = urlParams.get("exchangesOrderBy");
|
|
562
|
+
}
|
|
563
|
+
if (urlParams.get("exchangesOrderDirection")) {
|
|
564
|
+
queryParams.exchangesOrderDirection = urlParams.get("exchangesOrderDirection");
|
|
565
|
+
}
|
|
566
|
+
if (urlParams.get("includeExchanges")) {
|
|
567
|
+
queryParams.includeExchanges =
|
|
568
|
+
urlParams.get("includeExchanges") === "true";
|
|
569
|
+
}
|
|
570
|
+
// Process exchanges filter parameters using exchanges filter processor
|
|
571
|
+
const exchangesFilterParams = (0, offersFilter_js_1.offerExchangesProcessFilterParams)(urlParams);
|
|
572
|
+
if (Object.keys(exchangesFilterParams).length > 0) {
|
|
573
|
+
queryParams.exchangesFilter = exchangesFilterParams;
|
|
574
|
+
}
|
|
575
|
+
// Process offers filter parameters
|
|
576
|
+
const filterParams = (0, offersFilter_js_1.offersProcessFilterParams)(urlParams);
|
|
577
|
+
if (Object.keys(filterParams).length > 0) {
|
|
578
|
+
queryParams.offersFilter = filterParams;
|
|
579
|
+
}
|
|
580
|
+
const result = await getOffersHandler(queryParams);
|
|
581
|
+
return {
|
|
582
|
+
contents: [
|
|
583
|
+
{
|
|
584
|
+
uri: uri.toString(),
|
|
585
|
+
mimeType: "application/json",
|
|
586
|
+
text: result,
|
|
587
|
+
},
|
|
588
|
+
],
|
|
589
|
+
};
|
|
590
|
+
});
|
|
591
|
+
// Add the sellers resource with flexible query parameters
|
|
592
|
+
server.resource("sellers", new mcp_js_1.ResourceTemplate(sellersFilter_js_1.sellersUriTemplate, {
|
|
593
|
+
list: undefined,
|
|
594
|
+
complete: {
|
|
595
|
+
sellersSkip: () => {
|
|
596
|
+
return ["0", "10", "20", "50", "100"];
|
|
597
|
+
},
|
|
598
|
+
sellersFirst: () => {
|
|
599
|
+
return ["10", "20", "50", "100"];
|
|
600
|
+
},
|
|
601
|
+
sellersOrderBy: () => {
|
|
602
|
+
return Object.values(core_sdk_1.subgraph.Seller_OrderBy);
|
|
603
|
+
},
|
|
604
|
+
sellersOrderDirection: () => {
|
|
605
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
606
|
+
},
|
|
607
|
+
includeExchanges: () => {
|
|
608
|
+
return ["true", "false"];
|
|
609
|
+
},
|
|
610
|
+
includeOffers: () => {
|
|
611
|
+
return ["true", "false"];
|
|
612
|
+
},
|
|
613
|
+
includeFunds: () => {
|
|
614
|
+
return ["true", "false"];
|
|
615
|
+
},
|
|
616
|
+
includeLogs: () => {
|
|
617
|
+
return ["true", "false"];
|
|
618
|
+
},
|
|
619
|
+
},
|
|
620
|
+
}), {
|
|
621
|
+
name: "Seller Entities",
|
|
622
|
+
description: "Get seller entities with flexible query parameters including pagination, ordering, and filtering",
|
|
623
|
+
mimeType: "application/json",
|
|
624
|
+
}, async (uri) => {
|
|
625
|
+
const queryParams = {};
|
|
626
|
+
// Extract query parameters from URL
|
|
627
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
628
|
+
if (urlParams.get("sellersSkip")) {
|
|
629
|
+
queryParams.sellersSkip = parseInt(urlParams.get("sellersSkip"));
|
|
630
|
+
}
|
|
631
|
+
if (urlParams.get("sellersFirst")) {
|
|
632
|
+
queryParams.sellersFirst = parseInt(urlParams.get("sellersFirst"));
|
|
633
|
+
}
|
|
634
|
+
if (urlParams.get("sellersOrderBy")) {
|
|
635
|
+
queryParams.sellersOrderBy = urlParams.get("sellersOrderBy");
|
|
636
|
+
}
|
|
637
|
+
if (urlParams.get("sellersOrderDirection")) {
|
|
638
|
+
queryParams.sellersOrderDirection = urlParams.get("sellersOrderDirection");
|
|
639
|
+
}
|
|
640
|
+
if (urlParams.get("includeExchanges")) {
|
|
641
|
+
queryParams.includeExchanges =
|
|
642
|
+
urlParams.get("includeExchanges") === "true";
|
|
643
|
+
}
|
|
644
|
+
if (urlParams.get("includeOffers")) {
|
|
645
|
+
queryParams.includeOffers = urlParams.get("includeOffers") === "true";
|
|
646
|
+
}
|
|
647
|
+
if (urlParams.get("includeFunds")) {
|
|
648
|
+
queryParams.includeFunds = urlParams.get("includeFunds") === "true";
|
|
649
|
+
}
|
|
650
|
+
if (urlParams.get("includeLogs")) {
|
|
651
|
+
queryParams.includeLogs = urlParams.get("includeLogs") === "true";
|
|
652
|
+
}
|
|
653
|
+
// Process filter parameters
|
|
654
|
+
const filterParams = (0, sellersFilter_js_1.sellersProcessFilterParams)(urlParams);
|
|
655
|
+
if (Object.keys(filterParams).length > 0) {
|
|
656
|
+
queryParams.sellersFilter = filterParams;
|
|
657
|
+
}
|
|
658
|
+
const validatedArgs = validation_js_1.getSellersValidation.parse(queryParams);
|
|
659
|
+
const result = await getSellersHandler(validatedArgs);
|
|
660
|
+
return {
|
|
661
|
+
contents: [
|
|
662
|
+
{
|
|
663
|
+
uri: uri.toString(),
|
|
664
|
+
mimeType: "application/json",
|
|
665
|
+
text: result,
|
|
666
|
+
},
|
|
667
|
+
],
|
|
668
|
+
};
|
|
669
|
+
});
|
|
670
|
+
// Add the dispute_resolvers resource with flexible query parameters
|
|
671
|
+
server.resource("dispute_resolvers", new mcp_js_1.ResourceTemplate(disputeResolversFilter_js_1.disputeResolversUriTemplate, {
|
|
672
|
+
list: undefined,
|
|
673
|
+
complete: {
|
|
674
|
+
disputeResolversSkip: () => {
|
|
675
|
+
return ["0", "10", "20", "50", "100"];
|
|
676
|
+
},
|
|
677
|
+
disputeResolversFirst: () => {
|
|
678
|
+
return ["10", "20", "50", "100"];
|
|
679
|
+
},
|
|
680
|
+
disputeResolversOrderBy: () => {
|
|
681
|
+
return Object.values(core_sdk_1.subgraph.DisputeResolver_OrderBy);
|
|
682
|
+
},
|
|
683
|
+
disputeResolversOrderDirection: () => {
|
|
684
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
}), {
|
|
688
|
+
name: "Dispute Resolver Entities",
|
|
689
|
+
description: "Get dispute resolver entities with flexible query parameters including pagination, ordering, and filtering",
|
|
690
|
+
mimeType: "application/json",
|
|
691
|
+
}, async (uri) => {
|
|
692
|
+
const queryParams = {};
|
|
693
|
+
// Extract query parameters from URL
|
|
694
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
695
|
+
if (urlParams.get("disputeResolversSkip")) {
|
|
696
|
+
queryParams.disputeResolversSkip = parseInt(urlParams.get("disputeResolversSkip"));
|
|
697
|
+
}
|
|
698
|
+
if (urlParams.get("disputeResolversFirst")) {
|
|
699
|
+
queryParams.disputeResolversFirst = parseInt(urlParams.get("disputeResolversFirst"));
|
|
700
|
+
}
|
|
701
|
+
if (urlParams.get("disputeResolversOrderBy")) {
|
|
702
|
+
queryParams.disputeResolversOrderBy = urlParams.get("disputeResolversOrderBy");
|
|
703
|
+
}
|
|
704
|
+
if (urlParams.get("disputeResolversOrderDirection")) {
|
|
705
|
+
queryParams.disputeResolversOrderDirection = urlParams.get("disputeResolversOrderDirection");
|
|
706
|
+
}
|
|
707
|
+
// Process filter parameters
|
|
708
|
+
const filterParams = (0, disputeResolversFilter_js_1.disputeResolversProcessFilterParams)(urlParams);
|
|
709
|
+
if (Object.keys(filterParams).length > 0) {
|
|
710
|
+
queryParams.disputeResolversFilter = filterParams;
|
|
711
|
+
}
|
|
712
|
+
const validatedArgs = validation_js_1.getDisputeResolversValidation.parse(queryParams);
|
|
713
|
+
const result = await getDisputeResolversHandler(validatedArgs);
|
|
714
|
+
return {
|
|
715
|
+
contents: [
|
|
716
|
+
{
|
|
717
|
+
uri: uri.toString(),
|
|
718
|
+
mimeType: "application/json",
|
|
719
|
+
text: result,
|
|
720
|
+
},
|
|
721
|
+
],
|
|
722
|
+
};
|
|
723
|
+
});
|
|
724
|
+
// Add the sellers-by-address resource with flexible query parameters
|
|
725
|
+
server.resource("sellers-by-address", new mcp_js_1.ResourceTemplate(sellersByAddressFilter_js_1.sellersByAddressUriTemplate, {
|
|
726
|
+
list: undefined,
|
|
727
|
+
complete: {
|
|
728
|
+
sellersSkip: () => {
|
|
729
|
+
return ["0", "10", "20", "50", "100"];
|
|
730
|
+
},
|
|
731
|
+
sellersFirst: () => {
|
|
732
|
+
return ["10", "20", "50", "100"];
|
|
733
|
+
},
|
|
734
|
+
sellersOrderBy: () => {
|
|
735
|
+
return Object.values(core_sdk_1.subgraph.Seller_OrderBy);
|
|
736
|
+
},
|
|
737
|
+
sellersOrderDirection: () => {
|
|
738
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
739
|
+
},
|
|
740
|
+
includeExchanges: () => {
|
|
741
|
+
return ["true", "false"];
|
|
742
|
+
},
|
|
743
|
+
includeOffers: () => {
|
|
744
|
+
return ["true", "false"];
|
|
745
|
+
},
|
|
746
|
+
includeFunds: () => {
|
|
747
|
+
return ["true", "false"];
|
|
748
|
+
},
|
|
749
|
+
includeLogs: () => {
|
|
750
|
+
return ["true", "false"];
|
|
751
|
+
},
|
|
752
|
+
},
|
|
753
|
+
}), {
|
|
754
|
+
name: "Sellers By Address",
|
|
755
|
+
description: "Get seller entities by address with flexible query parameters including pagination, ordering, and filtering",
|
|
756
|
+
mimeType: "application/json",
|
|
757
|
+
}, async (uri) => {
|
|
758
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
759
|
+
const queryParams = {};
|
|
760
|
+
// Extract address parameter (required)
|
|
761
|
+
const address = urlParams.get("address");
|
|
762
|
+
if (!address) {
|
|
763
|
+
throw new Error("address parameter is required");
|
|
764
|
+
}
|
|
765
|
+
queryParams.address = address;
|
|
766
|
+
// Extract pagination parameters
|
|
767
|
+
const sellersSkip = urlParams.get("sellersSkip");
|
|
768
|
+
if (sellersSkip !== null) {
|
|
769
|
+
queryParams.sellersSkip = parseInt(sellersSkip, 10);
|
|
770
|
+
}
|
|
771
|
+
const sellersFirst = urlParams.get("sellersFirst");
|
|
772
|
+
if (sellersFirst !== null) {
|
|
773
|
+
queryParams.sellersFirst = parseInt(sellersFirst, 10);
|
|
774
|
+
}
|
|
775
|
+
// Extract ordering parameters
|
|
776
|
+
const sellersOrderBy = urlParams.get("sellersOrderBy");
|
|
777
|
+
if (sellersOrderBy !== null) {
|
|
778
|
+
queryParams.sellersOrderBy = sellersOrderBy;
|
|
779
|
+
}
|
|
780
|
+
const sellersOrderDirection = urlParams.get("sellersOrderDirection");
|
|
781
|
+
if (sellersOrderDirection !== null) {
|
|
782
|
+
queryParams.sellersOrderDirection = sellersOrderDirection;
|
|
783
|
+
}
|
|
784
|
+
// Extract include flags
|
|
785
|
+
const includeExchanges = urlParams.get("includeExchanges");
|
|
786
|
+
if (includeExchanges !== null) {
|
|
787
|
+
queryParams.includeExchanges = includeExchanges === "true";
|
|
788
|
+
}
|
|
789
|
+
const includeOffers = urlParams.get("includeOffers");
|
|
790
|
+
if (includeOffers !== null) {
|
|
791
|
+
queryParams.includeOffers = includeOffers === "true";
|
|
792
|
+
}
|
|
793
|
+
const includeFunds = urlParams.get("includeFunds");
|
|
794
|
+
if (includeFunds !== null) {
|
|
795
|
+
queryParams.includeFunds = includeFunds === "true";
|
|
796
|
+
}
|
|
797
|
+
const includeLogs = urlParams.get("includeLogs");
|
|
798
|
+
if (includeLogs !== null) {
|
|
799
|
+
queryParams.includeLogs = includeLogs === "true";
|
|
800
|
+
}
|
|
801
|
+
// Process filter parameters
|
|
802
|
+
const sellersFilter = (0, sellersByAddressFilter_js_1.sellersByAddressProcessFilterParams)(urlParams);
|
|
803
|
+
if (Object.keys(sellersFilter).length > 0) {
|
|
804
|
+
queryParams.sellersFilter = sellersFilter;
|
|
805
|
+
}
|
|
806
|
+
// Validate arguments
|
|
807
|
+
const validatedArgs = validation_js_1.getSellersByAddressValidation.parse(queryParams);
|
|
808
|
+
// Call the handler
|
|
809
|
+
const result = await getSellersByAddressHandler(validatedArgs);
|
|
810
|
+
return {
|
|
811
|
+
contents: [
|
|
812
|
+
{
|
|
813
|
+
uri: uri.toString(),
|
|
814
|
+
mimeType: "application/json",
|
|
815
|
+
text: result,
|
|
816
|
+
},
|
|
817
|
+
],
|
|
818
|
+
};
|
|
819
|
+
});
|
|
820
|
+
// Add the products resource with flexible query parameters
|
|
821
|
+
server.resource("products", new mcp_js_1.ResourceTemplate(productsFilter_js_1.productsUriTemplate, {
|
|
822
|
+
list: undefined,
|
|
823
|
+
complete: {
|
|
824
|
+
productsSkip: () => {
|
|
825
|
+
return ["0", "10", "20", "50", "100"];
|
|
826
|
+
},
|
|
827
|
+
productsFirst: () => {
|
|
828
|
+
return ["10", "20", "50", "100"];
|
|
829
|
+
},
|
|
830
|
+
productsOrderBy: () => {
|
|
831
|
+
return Object.values(core_sdk_1.subgraph.ProductV1Product_OrderBy);
|
|
832
|
+
},
|
|
833
|
+
productsOrderDirection: () => {
|
|
834
|
+
return Object.values(core_sdk_1.subgraph.OrderDirection);
|
|
835
|
+
},
|
|
836
|
+
},
|
|
837
|
+
}), {
|
|
838
|
+
name: "Products",
|
|
839
|
+
description: "Get all products with not voided variants with flexible query parameters including pagination, ordering, and filtering",
|
|
840
|
+
mimeType: "application/json",
|
|
841
|
+
}, async (uri) => {
|
|
842
|
+
const urlParams = new URLSearchParams(uri.search);
|
|
843
|
+
const queryParams = {};
|
|
844
|
+
// Extract pagination parameters
|
|
845
|
+
const productsSkip = urlParams.get("productsSkip");
|
|
846
|
+
if (productsSkip !== null) {
|
|
847
|
+
queryParams.productsSkip = parseInt(productsSkip, 10);
|
|
848
|
+
}
|
|
849
|
+
const productsFirst = urlParams.get("productsFirst");
|
|
850
|
+
if (productsFirst !== null) {
|
|
851
|
+
queryParams.productsFirst = parseInt(productsFirst, 10);
|
|
852
|
+
}
|
|
853
|
+
// Extract ordering parameters
|
|
854
|
+
const productsOrderBy = urlParams.get("productsOrderBy");
|
|
855
|
+
if (productsOrderBy !== null) {
|
|
856
|
+
queryParams.productsOrderBy = productsOrderBy;
|
|
857
|
+
}
|
|
858
|
+
const productsOrderDirection = urlParams.get("productsOrderDirection");
|
|
859
|
+
if (productsOrderDirection !== null) {
|
|
860
|
+
queryParams.productsOrderDirection = productsOrderDirection;
|
|
861
|
+
}
|
|
862
|
+
// Process filter parameters
|
|
863
|
+
const productsFilter = (0, productsFilter_js_1.productsProcessFilterParams)(urlParams);
|
|
864
|
+
if (Object.keys(productsFilter).length > 0) {
|
|
865
|
+
queryParams.productsFilter = productsFilter;
|
|
866
|
+
}
|
|
867
|
+
// Validate arguments
|
|
868
|
+
const validatedArgs = validation_js_1.getAllProductsWithNotVoidedVariantsValidation.parse(queryParams);
|
|
869
|
+
// Call the handler
|
|
870
|
+
const result = await getAllProductsWithNotVoidedVariantsHandler(validatedArgs);
|
|
871
|
+
return {
|
|
872
|
+
contents: [
|
|
873
|
+
{
|
|
874
|
+
uri: uri.toString(),
|
|
875
|
+
mimeType: "application/json",
|
|
876
|
+
text: result,
|
|
877
|
+
},
|
|
878
|
+
],
|
|
879
|
+
};
|
|
880
|
+
});
|
|
881
|
+
}
|
|
882
|
+
async startStdio() {
|
|
883
|
+
const server = this.createServerInstance();
|
|
884
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
885
|
+
await server.connect(transport);
|
|
886
|
+
log("Boson Protocol MCP server running on stdio");
|
|
887
|
+
}
|
|
888
|
+
async startHttp(port = 3000) {
|
|
889
|
+
const express = await Promise.resolve().then(() => __importStar(require("express")));
|
|
890
|
+
const app = express.default();
|
|
891
|
+
app.use(express.json());
|
|
892
|
+
// Enable CORS for cross-origin requests
|
|
893
|
+
app.use((req, res, next) => {
|
|
894
|
+
res.header("Access-Control-Allow-Origin", "*");
|
|
895
|
+
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
|
896
|
+
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
|
|
897
|
+
if (req.method === "OPTIONS") {
|
|
898
|
+
res.sendStatus(200);
|
|
899
|
+
}
|
|
900
|
+
else {
|
|
901
|
+
next();
|
|
902
|
+
}
|
|
903
|
+
});
|
|
904
|
+
// Root endpoint - serves as the main page for integration
|
|
905
|
+
app.get("/", (_, res) => {
|
|
906
|
+
res.json({
|
|
907
|
+
name: "Boson Protocol MCP Server",
|
|
908
|
+
version: "1.0.0",
|
|
909
|
+
description: "MCP Server for Boson Protocol operations",
|
|
910
|
+
endpoints: {
|
|
911
|
+
health: "/health",
|
|
912
|
+
mcp: "/mcp",
|
|
913
|
+
},
|
|
914
|
+
status: "running",
|
|
915
|
+
transport: "Streamable HTTP",
|
|
916
|
+
});
|
|
917
|
+
});
|
|
918
|
+
// Health check endpoint
|
|
919
|
+
app.get("/health", (_, res) => {
|
|
920
|
+
res.json({
|
|
921
|
+
status: "ok",
|
|
922
|
+
timestamp: new Date().toISOString(),
|
|
923
|
+
server: "Boson Protocol MCP Server",
|
|
924
|
+
});
|
|
925
|
+
});
|
|
926
|
+
// Map to store transports by session ID
|
|
927
|
+
const transports = {};
|
|
928
|
+
app.post("/mcp", async (req, res) => {
|
|
929
|
+
// Check for existing session ID
|
|
930
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
931
|
+
let transport;
|
|
932
|
+
if (sessionId && transports[sessionId]) {
|
|
933
|
+
// Reuse existing transport
|
|
934
|
+
transport = transports[sessionId];
|
|
935
|
+
}
|
|
936
|
+
else if (!sessionId && (0, types_js_1.isInitializeRequest)(req.body)) {
|
|
937
|
+
// New initialization request - create new server instance
|
|
938
|
+
const server = this.createServerInstance();
|
|
939
|
+
transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
940
|
+
sessionIdGenerator: () => (0, node_crypto_1.randomUUID)(),
|
|
941
|
+
onsessioninitialized: (sessionId) => {
|
|
942
|
+
// Store the transport by session ID
|
|
943
|
+
transports[sessionId] = transport;
|
|
944
|
+
},
|
|
945
|
+
});
|
|
946
|
+
// Clean up transport when closed
|
|
947
|
+
transport.onclose = () => {
|
|
948
|
+
log("transport has been closed");
|
|
949
|
+
if (transport.sessionId) {
|
|
950
|
+
delete transports[transport.sessionId];
|
|
951
|
+
}
|
|
952
|
+
};
|
|
953
|
+
// Connect to the MCP server
|
|
954
|
+
await server.connect(transport);
|
|
955
|
+
}
|
|
956
|
+
else {
|
|
957
|
+
// Invalid request
|
|
958
|
+
res.status(400).json({
|
|
959
|
+
jsonrpc: "2.0",
|
|
960
|
+
error: {
|
|
961
|
+
code: -32000,
|
|
962
|
+
message: "Bad Request: No valid session ID provided",
|
|
963
|
+
},
|
|
964
|
+
id: null,
|
|
965
|
+
});
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
// Handle the request
|
|
969
|
+
await transport.handleRequest(req, res, req.body);
|
|
970
|
+
});
|
|
971
|
+
// Handle GET requests for server-to-client notifications via SSE
|
|
972
|
+
app.get("/mcp", async (req, res) => {
|
|
973
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
974
|
+
if (!sessionId || !transports[sessionId]) {
|
|
975
|
+
res.status(400).send("Invalid or missing session ID");
|
|
976
|
+
return;
|
|
977
|
+
}
|
|
978
|
+
const transport = transports[sessionId];
|
|
979
|
+
await transport.handleRequest(req, res);
|
|
980
|
+
});
|
|
981
|
+
// Handle DELETE requests for session termination
|
|
982
|
+
app.delete("/mcp", async (req, res) => {
|
|
983
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
984
|
+
if (!sessionId || !transports[sessionId]) {
|
|
985
|
+
res.status(400).send("Invalid or missing session ID");
|
|
986
|
+
return;
|
|
987
|
+
}
|
|
988
|
+
const transport = transports[sessionId];
|
|
989
|
+
await transport.handleRequest(req, res);
|
|
990
|
+
});
|
|
991
|
+
// Catch-all for unknown routes
|
|
992
|
+
app.use((req, res) => {
|
|
993
|
+
res.status(404).json({
|
|
994
|
+
error: "Not Found",
|
|
995
|
+
message: `The requested endpoint ${req.originalUrl} was not found`,
|
|
996
|
+
availableEndpoints: {
|
|
997
|
+
root: "/",
|
|
998
|
+
health: "/health",
|
|
999
|
+
mcp: "/mcp",
|
|
1000
|
+
},
|
|
1001
|
+
});
|
|
1002
|
+
});
|
|
1003
|
+
app.listen(port, () => {
|
|
1004
|
+
log(`Boson MCP Server running on http://localhost:${port}`);
|
|
1005
|
+
log(`Web interface: http://localhost:${port}`);
|
|
1006
|
+
log(`MCP endpoint: http://localhost:${port}/mcp`);
|
|
1007
|
+
log(`Health check: http://localhost:${port}/health`);
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
async run() {
|
|
1011
|
+
const args = (0, configLoader_js_1.parseArgs)();
|
|
1012
|
+
// Load environment variables from config if provided
|
|
1013
|
+
(0, configLoader_js_1.loadConfigEnv)(args.config, args.server);
|
|
1014
|
+
const useHttp = args.http || process.env.MCP_TRANSPORT === "http";
|
|
1015
|
+
if (useHttp) {
|
|
1016
|
+
await this.startHttp();
|
|
1017
|
+
}
|
|
1018
|
+
else {
|
|
1019
|
+
await this.startStdio();
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
exports.BosonMCPServer = BosonMCPServer;
|
|
1024
|
+
// Only run server if not in test environment
|
|
1025
|
+
if (process.env.NODE_ENV !== "test" && process.env.VITEST !== "true") {
|
|
1026
|
+
const server = new BosonMCPServer();
|
|
1027
|
+
server.run().catch(log);
|
|
1028
|
+
}
|
|
1029
|
+
//# sourceMappingURL=index.js.map
|