@bosonprotocol/agentic-commerce 1.0.0-alpha.53 → 1.0.0-alpha.54

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.
Files changed (90) hide show
  1. package/README.md +11 -14
  2. package/dist/boson/goat-sdk-plugin/boson-protocol-plugin.service.d.ts +5 -6
  3. package/dist/boson/goat-sdk-plugin/boson-protocol-plugin.service.d.ts.map +1 -1
  4. package/dist/boson/goat-sdk-plugin/boson-protocol-plugin.service.js +9 -4
  5. package/dist/boson/goat-sdk-plugin/boson-protocol-plugin.service.js.map +1 -1
  6. package/dist/boson/goat-sdk-plugin/examples/vercel.js +32 -38
  7. package/dist/boson/goat-sdk-plugin/examples/vercel.js.map +1 -1
  8. package/dist/boson/goat-sdk-plugin/parameters.d.ts +187 -7
  9. package/dist/boson/goat-sdk-plugin/parameters.d.ts.map +1 -1
  10. package/dist/boson/mcp-client/index.d.ts +0 -35
  11. package/dist/boson/mcp-client/index.d.ts.map +1 -1
  12. package/dist/boson/mcp-client/index.js +0 -3
  13. package/dist/boson/mcp-client/index.js.map +1 -1
  14. package/dist/boson/mcp-server/filters/disputeResolversFilter.js +1 -1
  15. package/dist/boson/mcp-server/filters/disputeResolversFilter.js.map +1 -1
  16. package/dist/boson/mcp-server/filters/disputesFilter.js +1 -1
  17. package/dist/boson/mcp-server/filters/disputesFilter.js.map +1 -1
  18. package/dist/boson/mcp-server/filters/exchangesFilter.js +1 -1
  19. package/dist/boson/mcp-server/filters/exchangesFilter.js.map +1 -1
  20. package/dist/boson/mcp-server/filters/fundsFilter.d.ts.map +1 -1
  21. package/dist/boson/mcp-server/filters/fundsFilter.js +1 -1
  22. package/dist/boson/mcp-server/filters/fundsFilter.js.map +1 -1
  23. package/dist/boson/mcp-server/filters/offersFilter.js +1 -1
  24. package/dist/boson/mcp-server/filters/offersFilter.js.map +1 -1
  25. package/dist/boson/mcp-server/filters/productsFilter.js +1 -1
  26. package/dist/boson/mcp-server/filters/productsFilter.js.map +1 -1
  27. package/dist/boson/mcp-server/filters/sellersByAddressFilter.js +1 -1
  28. package/dist/boson/mcp-server/filters/sellersByAddressFilter.js.map +1 -1
  29. package/dist/boson/mcp-server/filters/sellersFilter.js +1 -1
  30. package/dist/boson/mcp-server/filters/sellersFilter.js.map +1 -1
  31. package/dist/boson/mcp-server/handlers/accounts.d.ts +6 -7
  32. package/dist/boson/mcp-server/handlers/accounts.d.ts.map +1 -1
  33. package/dist/boson/mcp-server/handlers/accounts.js +22 -17
  34. package/dist/boson/mcp-server/handlers/accounts.js.map +1 -1
  35. package/dist/boson/mcp-server/handlers/disputes.d.ts +5 -6
  36. package/dist/boson/mcp-server/handlers/disputes.d.ts.map +1 -1
  37. package/dist/boson/mcp-server/handlers/disputes.js +21 -56
  38. package/dist/boson/mcp-server/handlers/disputes.js.map +1 -1
  39. package/dist/boson/mcp-server/handlers/exchanges.d.ts +3 -4
  40. package/dist/boson/mcp-server/handlers/exchanges.d.ts.map +1 -1
  41. package/dist/boson/mcp-server/handlers/exchanges.js +13 -34
  42. package/dist/boson/mcp-server/handlers/exchanges.js.map +1 -1
  43. package/dist/boson/mcp-server/handlers/funds.d.ts +2 -3
  44. package/dist/boson/mcp-server/handlers/funds.d.ts.map +1 -1
  45. package/dist/boson/mcp-server/handlers/funds.js +9 -23
  46. package/dist/boson/mcp-server/handlers/funds.js.map +1 -1
  47. package/dist/boson/mcp-server/handlers/metaTx.d.ts +3 -4
  48. package/dist/boson/mcp-server/handlers/metaTx.d.ts.map +1 -1
  49. package/dist/boson/mcp-server/handlers/metaTx.js +13 -33
  50. package/dist/boson/mcp-server/handlers/metaTx.js.map +1 -1
  51. package/dist/boson/mcp-server/handlers/offers.d.ts +14 -15
  52. package/dist/boson/mcp-server/handlers/offers.d.ts.map +1 -1
  53. package/dist/boson/mcp-server/handlers/offers.js +59 -119
  54. package/dist/boson/mcp-server/handlers/offers.js.map +1 -1
  55. package/dist/boson/mcp-server/handlers/transactions.d.ts +1 -2
  56. package/dist/boson/mcp-server/handlers/transactions.d.ts.map +1 -1
  57. package/dist/boson/mcp-server/handlers/transactions.js +1 -1
  58. package/dist/boson/mcp-server/handlers/transactions.js.map +1 -1
  59. package/dist/boson/mcp-server/index.d.ts +4 -2
  60. package/dist/boson/mcp-server/index.d.ts.map +1 -1
  61. package/dist/boson/mcp-server/index.js +276 -408
  62. package/dist/boson/mcp-server/index.js.map +1 -1
  63. package/dist/boson/mcp-server/resourceParameterTypes.d.ts +0 -2
  64. package/dist/boson/mcp-server/resourceParameterTypes.d.ts.map +1 -1
  65. package/dist/boson/mcp-server/resourceParameterTypes.js +6 -7
  66. package/dist/boson/mcp-server/resourceParameterTypes.js.map +1 -1
  67. package/dist/boson/mcp-server/validation.d.ts +439 -13
  68. package/dist/boson/mcp-server/validation.d.ts.map +1 -1
  69. package/dist/boson/mcp-server/validation.js +91 -25
  70. package/dist/boson/mcp-server/validation.js.map +1 -1
  71. package/dist/common/mcp-server/configValidation.d.ts +1 -0
  72. package/dist/common/mcp-server/configValidation.d.ts.map +1 -1
  73. package/dist/common/mcp-server/configValidation.js +4 -4
  74. package/dist/common/mcp-server/configValidation.js.map +1 -1
  75. package/dist/common/mcp-server/transactionSigning.d.ts +1 -1
  76. package/dist/common/mcp-server/transactionSigning.d.ts.map +1 -1
  77. package/dist/common/mcp-server/transactionSigning.js +19 -25
  78. package/dist/common/mcp-server/transactionSigning.js.map +1 -1
  79. package/dist/fermion/mcp-server/handlers/sdk.d.ts.map +1 -1
  80. package/dist/fermion/mcp-server/handlers/sdk.js +3 -4
  81. package/dist/fermion/mcp-server/handlers/sdk.js.map +1 -1
  82. package/dist/fermion/mcp-server/handlers/transactions.d.ts +1 -2
  83. package/dist/fermion/mcp-server/handlers/transactions.d.ts.map +1 -1
  84. package/dist/fermion/mcp-server/handlers/transactions.js +1 -1
  85. package/dist/fermion/mcp-server/handlers/transactions.js.map +1 -1
  86. package/dist/fermion/mcp-server/index.d.ts +2 -0
  87. package/dist/fermion/mcp-server/index.d.ts.map +1 -1
  88. package/dist/fermion/mcp-server/index.js +36 -2
  89. package/dist/fermion/mcp-server/index.js.map +1 -1
  90. package/package.json +3 -3
@@ -37,13 +37,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
37
37
  exports.BosonMCPServer = void 0;
38
38
  const node_crypto_1 = require("node:crypto");
39
39
  const core_sdk_1 = require("@bosonprotocol/core-sdk");
40
+ const ethers_sdk_1 = require("@bosonprotocol/ethers-sdk");
41
+ const ipfs_storage_1 = require("@bosonprotocol/ipfs-storage");
40
42
  const core_sdk_2 = require("@fermionprotocol/core-sdk");
41
43
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
42
44
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
43
45
  const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
44
46
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
47
+ const ethers_1 = require("ethers");
48
+ const index_js_1 = require("../../common/index.js");
45
49
  const configLoader_js_1 = require("../../common/mcp-server/configLoader.js");
50
+ const configValidation_js_1 = require("../../common/mcp-server/configValidation.js");
46
51
  const errorHandling_js_1 = require("../../common/mcp-server/errorHandling.js");
52
+ const ipfs_js_1 = require("../../common/mcp-server/ipfs.js");
53
+ const jsonUtils_js_1 = require("../../common/mcp-server/jsonUtils.js");
47
54
  const transactionSigning_js_1 = require("../../common/mcp-server/transactionSigning.js");
48
55
  const disputeResolversFilter_js_1 = require("./filters/disputeResolversFilter.js");
49
56
  const disputesFilter_js_1 = require("./filters/disputesFilter.js");
@@ -59,17 +66,100 @@ const exchanges_js_1 = require("./handlers/exchanges.js");
59
66
  const funds_js_1 = require("./handlers/funds.js");
60
67
  const metaTx_js_1 = require("./handlers/metaTx.js");
61
68
  const offers_js_1 = require("./handlers/offers.js");
62
- const sdk_js_1 = require("./handlers/sdk.js");
63
69
  const transactions_js_1 = require("./handlers/transactions.js");
64
- const resourceParameterTypes_js_1 = require("./resourceParameterTypes.js");
65
70
  const validation_js_1 = require("./validation.js");
66
- const log = console.error;
67
71
  class BosonMCPServer {
68
- coreSDK = null;
69
- config = null;
70
72
  constructor() {
71
73
  // Error handling will be set up per server instance
72
74
  }
75
+ createSDKFromContext(configId, signerAddress) {
76
+ const config = (0, core_sdk_1.getConfigFromConfigId)(configId);
77
+ let jsonRpcUrl = config.jsonRpcUrl;
78
+ if (process.env.LOCALHOST_SUBSTITUTE) {
79
+ jsonRpcUrl = jsonRpcUrl
80
+ .replace(/localhost/i, process.env.LOCALHOST_SUBSTITUTE)
81
+ .replace("127.0.0.1", process.env.LOCALHOST_SUBSTITUTE);
82
+ }
83
+ const provider = new ethers_1.providers.StaticJsonRpcProvider(jsonRpcUrl);
84
+ const metadataStorageUrl = process.env.IPFS_METADATA_URL || config.ipfsMetadataUrl;
85
+ const theGraphStorageUrl = process.env.THE_GRAPH_IPFS_URL ||
86
+ config.theGraphIpfsUrl ||
87
+ metadataStorageUrl;
88
+ const infuraIpfsProjectId = process.env.INFURA_IPFS_PROJECT_ID;
89
+ if (!infuraIpfsProjectId) {
90
+ throw new Error("infuraIpfsProjectId is required. Set INFURA_IPFS_PROJECT_ID environment variable.");
91
+ }
92
+ const infuraIpfsProjectSecret = process.env.INFURA_IPFS_PROJECT_SECRET;
93
+ if (!infuraIpfsProjectSecret) {
94
+ throw new Error("infuraIpfsProjectSecret is required. Set INFURA_IPFS_PROJECT_SECRET environment variable.");
95
+ }
96
+ const ipfsMetadataStorageHeaders = (0, ipfs_js_1.getIpfsMetadataStorageHeaders)(infuraIpfsProjectId, infuraIpfsProjectSecret);
97
+ const coreSDK = core_sdk_1.CoreSDK.fromDefaultConfig({
98
+ envName: config.envName,
99
+ configId: config.configId,
100
+ web3Lib: new ethers_sdk_1.AgentAdapter(provider, {
101
+ signerAddress: signerAddress,
102
+ }),
103
+ theGraphStorage: new ipfs_storage_1.IpfsMetadataStorage(core_sdk_1.validateMetadata, {
104
+ url: theGraphStorageUrl,
105
+ headers: theGraphStorageUrl === metadataStorageUrl
106
+ ? ipfsMetadataStorageHeaders
107
+ : undefined,
108
+ }),
109
+ metadataStorage: new ipfs_storage_1.IpfsMetadataStorage(core_sdk_1.validateMetadata, {
110
+ url: metadataStorageUrl,
111
+ headers: ipfsMetadataStorageHeaders,
112
+ }),
113
+ });
114
+ return { coreSDK, config };
115
+ }
116
+ createHandler(handlerFactory, needsConfig = false, requiresSignerAddress = true) {
117
+ return async (args) => {
118
+ if (requiresSignerAddress) {
119
+ if (!args.configId || !args.signerAddress) {
120
+ throw new Error("configId and signerAddress are required");
121
+ }
122
+ }
123
+ else {
124
+ if (!args.configId) {
125
+ throw new Error("configId is required");
126
+ }
127
+ }
128
+ const { coreSDK, config } = this.createSDKFromContext(args.configId, args.signerAddress);
129
+ const handler = needsConfig
130
+ ? handlerFactory(() => coreSDK, () => config)
131
+ : handlerFactory(() => coreSDK);
132
+ return await handler(args);
133
+ };
134
+ }
135
+ createToolHandler(handlerFactory, needsConfig = false) {
136
+ return async (args) => {
137
+ const result = await this.createHandler(handlerFactory, needsConfig)(args);
138
+ return {
139
+ content: [
140
+ {
141
+ type: "text",
142
+ text: result,
143
+ },
144
+ ],
145
+ };
146
+ };
147
+ }
148
+ createResourceHandler(handlerFactory, needsConfig = false) {
149
+ return async (url) => {
150
+ const params = Object.fromEntries(url.searchParams);
151
+ const result = await this.createHandler(handlerFactory, needsConfig, false)({ ...params, signerAddress: ethers_1.ethers.constants.AddressZero }); // Default signerAddress to zero address for resource handlers as no resources need a signer address
152
+ return {
153
+ contents: [
154
+ {
155
+ uri: url.toString(),
156
+ mimeType: "application/json",
157
+ text: result,
158
+ },
159
+ ],
160
+ };
161
+ };
162
+ }
73
163
  createServerInstance() {
74
164
  const server = new mcp_js_1.McpServer({
75
165
  name: "boson-protocol-server",
@@ -98,138 +188,35 @@ class BosonMCPServer {
98
188
  });
99
189
  }
100
190
  setupToolHandlers(server) {
101
- const initializeSDKHandler = (0, sdk_js_1.createInitializeSDKHandler)((sdk) => {
102
- this.coreSDK = sdk;
103
- }, (config) => {
104
- this.config = config;
105
- });
106
- const offerHandler = (0, offers_js_1.createOfferHandler)(() => this.coreSDK, () => this.config);
107
- const offerWithConditionHandler = (0, offers_js_1.createOfferWithConditionHandler)(() => this.coreSDK, () => this.config);
108
- const voidOfferHandler = (0, offers_js_1.createVoidOfferHandler)(() => this.coreSDK);
109
- const sellerHandler = (0, accounts_js_1.createSellerHandler)(() => this.coreSDK);
110
- const transactionHandler = (0, transactions_js_1.createTransactionHandler)(() => this.coreSDK);
111
191
  const signTransactionHandler = (0, transactions_js_1.createSignTransactionHandler)();
112
192
  const signTypedDataHandler = (0, transactions_js_1.createSignTypedDataHandler)();
113
- const sendMetaTransactionHandler = (0, metaTx_js_1.createSendMetaTransactionHandler)(() => this.coreSDK);
114
- const sendNativeMetaTransactionHandler = (0, metaTx_js_1.createSendNativeMetaTransactionHandler)(() => this.coreSDK);
115
- const sendForwardedMetaTransactionHandler = (0, metaTx_js_1.createSendForwardedMetaTransactionHandler)(() => this.coreSDK);
116
- const withdrawFundsHandler = (0, funds_js_1.createWithdrawFundsHandler)(() => this.coreSDK);
117
- const depositFundsHandler = (0, funds_js_1.createDepositFundsHandler)(() => this.coreSDK);
118
- const getFundsHandler = (0, funds_js_1.createGetFundsHandler)(() => this.coreSDK);
119
- const extendDisputeTimeoutHandler = (0, disputes_js_1.createExtendDisputeTimeoutHandler)(() => this.coreSDK);
120
- const expireDisputeHandler = (0, disputes_js_1.createExpireDisputeHandler)(() => this.coreSDK);
121
- const expireDisputeBatchHandler = (0, disputes_js_1.createExpireDisputeBatchHandler)(() => this.coreSDK);
122
- const resolveDisputeHandler = (0, disputes_js_1.createResolveDisputeHandler)(() => this.coreSDK);
123
- const disputeResolutionProposalHandler = (0, disputes_js_1.createDisputeResolutionProposalHandler)(() => this.coreSDK);
124
- const getDisputesHandler = (0, disputes_js_1.createGetDisputesHandler)(() => this.coreSDK);
125
- const revokeVoucherHandler = (0, exchanges_js_1.createRevokeVoucherHandler)(() => this.coreSDK);
126
- const commitToOfferHandler = (0, offers_js_1.createCommitToOfferHandler)(() => this.coreSDK);
127
- const cancelVoucherHandler = (0, exchanges_js_1.createCancelVoucherHandler)(() => this.coreSDK);
128
- const redeemVoucherHandler = (0, exchanges_js_1.createRedeemVoucherHandler)(() => this.coreSDK);
129
- const getExchangesHandler = (0, exchanges_js_1.createGetExchangesHandler)(() => this.coreSDK);
130
- const getOffersHandler = (0, offers_js_1.createGetOffersHandler)(() => this.coreSDK);
131
- const getSellersHandler = (0, accounts_js_1.createGetSellersHandler)(() => this.coreSDK);
132
- const getSellersByAddressHandler = (0, accounts_js_1.createGetSellersByAddressHandler)(() => this.coreSDK);
133
- const getAllProductsWithNotVoidedVariantsHandler = (0, offers_js_1.createGetAllProductsWithNotVoidedVariantsHandler)(() => this.coreSDK);
134
- const getDisputeResolversHandler = (0, accounts_js_1.createGetDisputeResolversHandler)(() => this.coreSDK);
135
- const storeProductV1MetadataHandler = (0, offers_js_1.createStoreProductV1MetadataHandler)(() => this.coreSDK);
136
- const storeBundleMetadataHandler = (0, offers_js_1.createStoreBundleMetadataHandler)(() => this.coreSDK);
137
- const storeCustomMetadataHandler = (0, offers_js_1.createStoreCustomMetadataHandler)(() => this.coreSDK);
138
- const renderContractualAgreementHandler = (0, offers_js_1.createRenderContractualAgreementHandler)(() => this.coreSDK);
139
- const storeBundleItemProductV1MetadataHandler = (0, offers_js_1.createStoreBundleItemProductV1MetadataHandler)(() => this.coreSDK);
140
- const storeBundleItemNftMetadataHandler = (0, offers_js_1.createStoreBundleItemNftMetadataHandler)(() => this.coreSDK);
141
193
  // Add tools for resource queries
142
- server.tool("get_funds", "Get funds entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getFundsValidation.shape, async (args) => {
143
- const validatedArgs = validation_js_1.getFundsValidation.parse(args);
144
- const result = await getFundsHandler(validatedArgs);
145
- return {
146
- content: [
147
- {
148
- type: "text",
149
- text: result,
150
- },
151
- ],
152
- };
153
- });
154
- server.tool("get_disputes", "Get dispute entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getDisputesValidation.shape, async (args) => {
155
- const validatedArgs = validation_js_1.getDisputesValidation.parse(args);
156
- const result = await getDisputesHandler(validatedArgs);
157
- return {
158
- content: [
159
- {
160
- type: "text",
161
- text: result,
162
- },
163
- ],
164
- };
165
- });
166
- server.tool("get_exchanges", "Get exchange entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getExchangesValidation.shape, async (args) => {
167
- const validatedArgs = validation_js_1.getExchangesValidation.parse(args);
168
- const result = await getExchangesHandler(validatedArgs);
169
- return {
170
- content: [
171
- {
172
- type: "text",
173
- text: result,
174
- },
175
- ],
176
- };
177
- });
178
- server.tool("get_offers", "Get offer entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getOffersValidation.shape, async (args) => {
194
+ server.tool("get_funds", "Get funds entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getFundsValidation.shape, this.createToolHandler(funds_js_1.createGetFundsHandler));
195
+ server.tool("get_disputes", "Get dispute entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getDisputesValidation.shape, this.createToolHandler(disputes_js_1.createGetDisputesHandler));
196
+ server.tool("get_exchanges", "Get exchange entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getExchangesValidation.shape, this.createToolHandler(exchanges_js_1.createGetExchangesHandler));
197
+ server.tool("get_offers", "Get offer entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getOffersValidation.shape, (args) => {
179
198
  const validatedArgs = validation_js_1.getOffersValidation.parse(args);
180
- const result = await getOffersHandler(validatedArgs);
181
- return {
182
- content: [
183
- {
184
- type: "text",
185
- text: result,
186
- },
187
- ],
188
- };
199
+ return this.createToolHandler(offers_js_1.createGetOffersHandler)(validatedArgs);
189
200
  });
190
- server.tool("get_sellers", "Get seller entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getSellersValidation.shape, async (args) => {
201
+ server.tool("get_sellers", "Get seller entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getSellersValidation.shape, (args) => {
191
202
  const validatedArgs = validation_js_1.getSellersValidation.parse(args);
192
- const result = await getSellersHandler(validatedArgs);
193
- return {
194
- content: [
195
- {
196
- type: "text",
197
- text: result,
198
- },
199
- ],
200
- };
203
+ return this.createToolHandler(accounts_js_1.createGetSellersHandler)(validatedArgs);
201
204
  });
202
- 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) => {
205
+ server.tool("get_dispute_resolvers", "Get dispute resolver entities with flexible query parameters including pagination, ordering, and filtering", validation_js_1.getDisputeResolversValidation.shape, (args) => {
203
206
  const validatedArgs = validation_js_1.getDisputeResolversValidation.parse(args);
204
- const result = await getDisputeResolversHandler(validatedArgs);
205
- return {
206
- content: [
207
- {
208
- type: "text",
209
- text: result,
210
- },
211
- ],
212
- };
213
- });
214
- server.tool("initialize_sdk", "Initialize the Boson Protocol SDK with custom configuration. Set defaultDisputeResolverId to configure fallback dispute resolver selection.", sdk_js_1.initializeSDKSchema, (args) => {
215
- // Validate required fields - signerAddress can come from params or env
216
- const signerAddress = args.signerAddress || process.env.SIGNER_ADDRESS;
217
- if (!signerAddress) {
218
- throw new Error("signerAddress is required. Provide it as parameter or set SIGNER_ADDRESS environment variable.");
219
- }
220
- return initializeSDKHandler(args);
207
+ return this.createToolHandler(accounts_js_1.createGetDisputeResolversHandler)(validatedArgs);
221
208
  });
222
209
  server.tool("create_offer", "Create a new offer on Boson Protocol. Tip: Consider storing metadata first using store_product_v1_metadata, store_bundle_metadata, or store_custom_metadata tools to get URIs for the metadata fields.", validation_js_1.createOfferValidation.shape, (args) => {
223
210
  try {
224
211
  const validatedArgs = validation_js_1.createOfferValidation.parse(args);
225
- return offerHandler(validatedArgs);
212
+ return this.createToolHandler(offers_js_1.createOfferHandler, true)(validatedArgs);
226
213
  }
227
214
  catch (error) {
228
215
  return {
229
216
  content: [
230
217
  {
231
218
  type: "text",
232
- text: JSON.stringify({
219
+ text: (0, jsonUtils_js_1.stringifyWithBigInt)({
233
220
  success: false,
234
221
  error: `Failed to create offer: ${(0, errorHandling_js_1.formatErrorMessage)(error)}`,
235
222
  errorDetails: error,
@@ -243,14 +230,14 @@ class BosonMCPServer {
243
230
  server.tool("create_offer_with_condition", "Create a new offer with a specific condition on Boson Protocol. Tip: Consider storing metadata first using store_product_v1_metadata, store_bundle_metadata, or store_custom_metadata tools to get URIs for the metadata fields.", validation_js_1.createOfferWithConditionValidation.shape, (args) => {
244
231
  try {
245
232
  const validatedArgs = validation_js_1.createOfferWithConditionValidation.parse(args);
246
- return offerWithConditionHandler(validatedArgs);
233
+ return this.createToolHandler(offers_js_1.createOfferWithConditionHandler, true)(validatedArgs);
247
234
  }
248
235
  catch (error) {
249
236
  return {
250
237
  content: [
251
238
  {
252
239
  type: "text",
253
- text: JSON.stringify({
240
+ text: (0, jsonUtils_js_1.stringifyWithBigInt)({
254
241
  success: false,
255
242
  error: `Failed to create offer with condition: ${(0, errorHandling_js_1.formatErrorMessage)(error)}`,
256
243
  errorDetails: error,
@@ -261,125 +248,62 @@ class BosonMCPServer {
261
248
  };
262
249
  }
263
250
  });
264
- server.tool("void_offer", "Void an existing offer by calling the OfferHandlerFacet contract", validation_js_1.voidOfferValidation.shape, (args) => {
265
- const validatedArgs = validation_js_1.voidOfferValidation.parse(args);
266
- return voidOfferHandler(validatedArgs);
267
- });
268
- server.tool("create_seller", "Create a new seller on Boson Protocol", validation_js_1.createSellerValidation.shape, (args) => {
269
- const validatedArgs = validation_js_1.createSellerValidation.parse(args);
270
- return sellerHandler(validatedArgs);
271
- });
272
- server.tool("send_signed_transaction", "Send a signed transaction to the Ethereum network", validation_js_1.signedTransactionValidation, transactionHandler);
251
+ server.tool("void_offer", "Void an existing offer by calling the OfferHandlerFacet contract", validation_js_1.voidOfferValidation.shape, this.createToolHandler(offers_js_1.createVoidOfferHandler));
252
+ server.tool("create_seller", "Create a new seller on Boson Protocol", validation_js_1.createSellerValidation.shape, this.createToolHandler(accounts_js_1.createSellerHandler));
253
+ server.tool("send_signed_transaction", "Send a signed transaction to the Ethereum network", validation_js_1.signedTransactionValidation, this.createToolHandler(transactions_js_1.createTransactionHandler));
273
254
  server.tool("sign_transaction", "Sign a transaction with a private key", validation_js_1.signTransactionValidation, signTransactionHandler);
274
255
  server.tool("sign_typed_data", "Sign typed data using EIP-712 standard (optionally create transaction for contract submission)", transactionSigning_js_1.signTypedDataValidation, signTypedDataHandler);
275
- server.tool("send_meta_transaction", "Send a meta transaction using Boson Protocol SDK", metaTx_js_1.sendMetaTransactionValidation.shape, (args) => {
276
- const validatedArgs = metaTx_js_1.sendMetaTransactionValidation.parse(args);
277
- return sendMetaTransactionHandler(validatedArgs);
278
- });
279
- server.tool("send_native_meta_transaction", "Send a native meta transaction using Boson Protocol SDK", metaTx_js_1.sendNativeMetaTransactionValidation.shape, (args) => {
280
- const validatedArgs = metaTx_js_1.sendNativeMetaTransactionValidation.parse(args);
281
- return sendNativeMetaTransactionHandler(validatedArgs);
282
- });
283
- server.tool("send_forwarded_meta_transaction", "Send a forwarded meta transaction using Boson Protocol SDK", metaTx_js_1.sendForwardedMetaTransactionValidation.shape, (args) => {
284
- const validatedArgs = metaTx_js_1.sendForwardedMetaTransactionValidation.parse(args);
285
- return sendForwardedMetaTransactionHandler(validatedArgs);
286
- });
287
- server.tool("withdraw_funds", "Withdraw funds from an entity treasury", validation_js_1.withdrawFundsValidation.shape, (args) => {
288
- const validatedArgs = validation_js_1.withdrawFundsValidation.parse(args);
289
- return withdrawFundsHandler(validatedArgs);
290
- });
291
- server.tool("deposit_funds", "Deposit funds to an entity treasury", validation_js_1.depositFundsValidation.shape, (args) => {
292
- const validatedArgs = validation_js_1.depositFundsValidation.parse(args);
293
- return depositFundsHandler(validatedArgs);
294
- });
295
- server.tool("extend_dispute_timeout", "Extend the timeout for a dispute", validation_js_1.extendDisputeTimeoutValidation.shape, (args) => {
296
- const validatedArgs = validation_js_1.extendDisputeTimeoutValidation.parse(args);
297
- return extendDisputeTimeoutHandler(validatedArgs);
298
- });
299
- server.tool("expire_dispute", "Expire a dispute", validation_js_1.expireDisputeValidation.shape, (args) => {
300
- const validatedArgs = validation_js_1.expireDisputeValidation.parse(args);
301
- return expireDisputeHandler(validatedArgs);
302
- });
303
- server.tool("expire_dispute_batch", "Expire multiple disputes in a batch", validation_js_1.expireDisputeBatchValidation.shape, (args) => {
304
- const validatedArgs = validation_js_1.expireDisputeBatchValidation.parse(args);
305
- return expireDisputeBatchHandler(validatedArgs);
306
- });
307
- server.tool("resolve_dispute", "Resolve a dispute with mutual agreement", validation_js_1.resolveDisputeValidation.shape, (args) => {
308
- const validatedArgs = validation_js_1.resolveDisputeValidation.parse(args);
309
- return resolveDisputeHandler(validatedArgs);
310
- });
311
- server.tool("create_dispute_resolution_proposal", "Create a dispute resolution proposal signature", validation_js_1.createDisputeResolutionProposalValidation.shape, (args) => {
312
- const validatedArgs = validation_js_1.createDisputeResolutionProposalValidation.parse(args);
313
- return disputeResolutionProposalHandler(validatedArgs);
314
- });
315
- server.tool("revoke_voucher", "Revoke an existing voucher by seller assistant", validation_js_1.revokeVoucherValidation.shape, (args) => {
316
- const validatedArgs = validation_js_1.revokeVoucherValidation.parse(args);
317
- return revokeVoucherHandler(validatedArgs);
318
- });
319
- server.tool("commit_to_offer", "Commit to an offer to create an exchange", validation_js_1.commitToOfferValidation.shape, (args) => {
320
- const validatedArgs = validation_js_1.commitToOfferValidation.parse(args);
321
- return commitToOfferHandler(validatedArgs);
322
- });
323
- server.tool("cancel_voucher", "Cancel an existing voucher by buyer", validation_js_1.cancelVoucherValidation.shape, (args) => {
324
- const validatedArgs = validation_js_1.cancelVoucherValidation.parse(args);
325
- return cancelVoucherHandler(validatedArgs);
326
- });
327
- server.tool("redeem_voucher", "Redeem an existing voucher by buyer", validation_js_1.redeemVoucherValidation.shape, (args) => {
328
- const validatedArgs = validation_js_1.redeemVoucherValidation.parse(args);
329
- return redeemVoucherHandler(validatedArgs);
330
- });
331
- 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) => {
256
+ server.tool("send_meta_transaction", "Send a meta transaction using Boson Protocol SDK", metaTx_js_1.sendMetaTransactionValidation.shape, this.createToolHandler(metaTx_js_1.createSendMetaTransactionHandler));
257
+ server.tool("send_native_meta_transaction", "Send a native meta transaction using Boson Protocol SDK", metaTx_js_1.sendNativeMetaTransactionValidation.shape, this.createToolHandler(metaTx_js_1.createSendNativeMetaTransactionHandler));
258
+ server.tool("send_forwarded_meta_transaction", "Send a forwarded meta transaction using Boson Protocol SDK", metaTx_js_1.sendForwardedMetaTransactionValidation.shape, this.createToolHandler(metaTx_js_1.createSendForwardedMetaTransactionHandler));
259
+ server.tool("withdraw_funds", "Withdraw funds from an entity treasury", validation_js_1.withdrawFundsValidation.shape, this.createToolHandler(funds_js_1.createWithdrawFundsHandler));
260
+ server.tool("deposit_funds", "Deposit funds to an entity treasury", validation_js_1.depositFundsValidation.shape, this.createToolHandler(funds_js_1.createDepositFundsHandler));
261
+ server.tool("extend_dispute_timeout", "Extend the timeout for a dispute", validation_js_1.extendDisputeTimeoutValidation.shape, this.createToolHandler(disputes_js_1.createExtendDisputeTimeoutHandler));
262
+ server.tool("expire_dispute", "Expire a dispute", validation_js_1.expireDisputeValidation.shape, this.createToolHandler(disputes_js_1.createExpireDisputeHandler));
263
+ server.tool("expire_dispute_batch", "Expire multiple disputes in a batch", validation_js_1.expireDisputeBatchValidation.shape, this.createToolHandler(disputes_js_1.createExpireDisputeBatchHandler));
264
+ server.tool("resolve_dispute", "Resolve a dispute with mutual agreement", validation_js_1.resolveDisputeValidation.shape, this.createToolHandler(disputes_js_1.createResolveDisputeHandler));
265
+ server.tool("create_dispute_resolution_proposal", "Create a dispute resolution proposal signature", validation_js_1.createDisputeResolutionProposalValidation.shape, this.createToolHandler(disputes_js_1.createDisputeResolutionProposalHandler));
266
+ server.tool("revoke_voucher", "Revoke an existing voucher by seller assistant", validation_js_1.revokeVoucherValidation.shape, this.createToolHandler(exchanges_js_1.createRevokeVoucherHandler));
267
+ server.tool("commit_to_offer", "Commit to an offer to create an exchange", validation_js_1.commitToOfferValidation.shape, this.createToolHandler(offers_js_1.createCommitToOfferHandler));
268
+ server.tool("cancel_voucher", "Cancel an existing voucher by buyer", validation_js_1.cancelVoucherValidation.shape, this.createToolHandler(exchanges_js_1.createCancelVoucherHandler));
269
+ server.tool("redeem_voucher", "Redeem an existing voucher by buyer", validation_js_1.redeemVoucherValidation.shape, this.createToolHandler(exchanges_js_1.createRedeemVoucherHandler));
270
+ 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, (args) => {
332
271
  const validatedArgs = validation_js_1.getSellersByAddressValidation.parse(args);
333
- const result = await getSellersByAddressHandler(validatedArgs);
334
- return {
335
- content: [
336
- {
337
- type: "text",
338
- text: result,
339
- },
340
- ],
341
- };
272
+ return this.createToolHandler(accounts_js_1.createGetSellersByAddressHandler)(validatedArgs);
342
273
  });
343
- 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) => {
274
+ 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, (args) => {
344
275
  const validatedArgs = validation_js_1.getAllProductsWithNotVoidedVariantsValidation.parse(args);
345
- const result = await getAllProductsWithNotVoidedVariantsHandler(validatedArgs);
346
- return {
347
- content: [
348
- {
349
- type: "text",
350
- text: result,
351
- },
352
- ],
353
- };
276
+ return this.createToolHandler(offers_js_1.createGetAllProductsWithNotVoidedVariantsHandler)(validatedArgs);
354
277
  });
355
278
  server.tool("store_product_v1_metadata", "Store ProductV1 metadata to IPFS and return metadata URI and hash", validation_js_1.storeProductV1MetadataValidation.shape, (args) => {
356
279
  const validatedArgs = validation_js_1.storeProductV1MetadataValidation.parse(args);
357
- return storeProductV1MetadataHandler(validatedArgs);
280
+ return this.createToolHandler(offers_js_1.createStoreProductV1MetadataHandler)(validatedArgs);
358
281
  });
359
282
  server.tool("store_bundle_metadata", "Store Bundle metadata to IPFS. You should call the store_bundle_item_* tools before calling this", validation_js_1.storeBundleMetadataValidation.shape, (args) => {
360
283
  const validatedArgs = validation_js_1.storeBundleMetadataValidation.parse(args);
361
- return storeBundleMetadataHandler(validatedArgs);
284
+ return this.createToolHandler(offers_js_1.createStoreBundleMetadataHandler)(validatedArgs);
362
285
  });
363
286
  server.tool("store_custom_metadata", "Store custom metadata to IPFS and return metadata URI and hash", validation_js_1.storeCustomMetadataValidation.shape, (args) => {
364
287
  const validatedArgs = validation_js_1.storeCustomMetadataValidation.parse(args);
365
- return storeCustomMetadataHandler(validatedArgs);
288
+ return this.createToolHandler(offers_js_1.createStoreCustomMetadataHandler)(validatedArgs);
366
289
  });
367
290
  server.tool("render_contractual_agreement", "Render a contractual agreement using renderContractualAgreement from Boson Protocol SDK", validation_js_1.renderContractualAgreementValidation.shape, (args) => {
368
291
  const validatedArgs = validation_js_1.renderContractualAgreementValidation.parse(args);
369
- return renderContractualAgreementHandler(validatedArgs);
292
+ return this.createToolHandler(offers_js_1.createRenderContractualAgreementHandler, true)(validatedArgs);
370
293
  });
371
294
  server.tool("store_bundle_item_product_v1_metadata", "Store Bundle Item ProductV1 metadata to IPFS, useful for store_bundle_metadata tool", validation_js_1.storeBundleItemProductV1MetadataValidation.shape, (args) => {
372
295
  const validatedArgs = validation_js_1.storeBundleItemProductV1MetadataValidation.parse(args);
373
- return storeBundleItemProductV1MetadataHandler(validatedArgs);
296
+ return this.createToolHandler(offers_js_1.createStoreBundleItemProductV1MetadataHandler)(validatedArgs);
374
297
  });
375
298
  server.tool("store_bundle_item_nft_metadata", "Store Bundle Item NFT metadata to IPFS, useful for store_bundle_metadata tool", validation_js_1.storeBundleItemNftMetadataValidation.shape, (args) => {
376
299
  const validatedArgs = validation_js_1.storeBundleItemNftMetadataValidation.parse(args);
377
- return storeBundleItemNftMetadataHandler(validatedArgs);
300
+ return this.createToolHandler(offers_js_1.createStoreBundleItemNftMetadataHandler)(validatedArgs);
378
301
  });
379
302
  // Add the funds resource with flexible query parameters
380
303
  server.resource("funds", new mcp_js_1.ResourceTemplate(fundsFilter_js_1.fundsUriTemplate, {
381
304
  list: undefined,
382
305
  complete: {
306
+ configId: () => configValidation_js_1.supportedConfigIds,
383
307
  fundsSkip: () => {
384
308
  return ["0", "10", "20", "50", "100"];
385
309
  },
@@ -395,60 +319,41 @@ class BosonMCPServer {
395
319
  },
396
320
  }), {
397
321
  name: "Funds Entities",
398
- description: "Get funds entities with flexible query parameters including pagination, ordering, and filtering",
322
+ description: "Get funds entities with flexible query parameters including pagination, ordering, and filtering. Requires configId parameter.",
399
323
  mimeType: "application/json",
400
324
  }, async (uri) => {
401
- const queryParams = {};
325
+ const params = {};
402
326
  // Extract query parameters from URL
403
327
  const urlParams = new URLSearchParams(uri.search);
404
- if (urlParams.get("fundsSkip")) {
405
- queryParams.fundsSkip = parseInt(urlParams.get("fundsSkip"));
328
+ if (urlParams.has("fundsSkip")) {
329
+ params.fundsSkip = parseInt(urlParams.get("fundsSkip"));
406
330
  }
407
- if (urlParams.get("fundsFirst")) {
408
- queryParams.fundsFirst = parseInt(urlParams.get("fundsFirst"));
331
+ if (urlParams.has("fundsFirst")) {
332
+ params.fundsFirst = parseInt(urlParams.get("fundsFirst"));
409
333
  }
410
- if (urlParams.get("fundsOrderBy")) {
411
- queryParams.fundsOrderBy = urlParams.get("fundsOrderBy");
334
+ if (urlParams.has("fundsOrderBy")) {
335
+ params.fundsOrderBy = urlParams.get("fundsOrderBy");
412
336
  }
413
- if (urlParams.get("fundsOrderDirection")) {
414
- queryParams.fundsOrderDirection = urlParams.get("fundsOrderDirection");
337
+ if (urlParams.has("fundsOrderDirection")) {
338
+ params.fundsOrderDirection = urlParams.get("fundsOrderDirection");
415
339
  }
416
340
  // Process filter parameters
417
341
  const filterParams = (0, fundsFilter_js_1.fundsProcessFilterParams)(urlParams);
418
342
  if (Object.keys(filterParams).length > 0) {
419
- queryParams.fundsFilter = filterParams;
343
+ params.fundsFilter = filterParams;
420
344
  }
421
- const validatedArgs = validation_js_1.getFundsValidation.parse(queryParams);
422
- const result = await getFundsHandler(validatedArgs);
423
- return {
424
- contents: [
425
- {
426
- uri: uri.toString(),
427
- mimeType: "application/json",
428
- text: result,
429
- },
430
- ],
431
- };
432
- });
433
- // Add the signer-address resource with no parameters
434
- server.resource("signer-address", resourceParameterTypes_js_1.SIGNER_ADDRESS_URI, async (url) => {
435
- if (!this.coreSDK?.web3Lib?.getSignerAddress) {
436
- throw new Error("SDK not initialized. Call initialize_sdk first.");
437
- }
438
- return {
439
- contents: [
440
- {
441
- uri: url.toString(),
442
- mimeType: "text/plain",
443
- text: await this.coreSDK.web3Lib.getSignerAddress(),
444
- },
445
- ],
446
- };
345
+ const validatedArgs = validation_js_1.getFundsResourceValidation.parse(params);
346
+ return this.createResourceHandler((getSDK) => {
347
+ return async () => {
348
+ return await (0, funds_js_1.createGetFundsHandler)(getSDK)(validatedArgs);
349
+ };
350
+ })(uri);
447
351
  });
448
352
  // Add the disputes resource with flexible query parameters
449
353
  server.resource("disputes", new mcp_js_1.ResourceTemplate(disputesFilter_js_1.disputesUriTemplate, {
450
354
  list: undefined,
451
355
  complete: {
356
+ configId: () => configValidation_js_1.supportedConfigIds,
452
357
  disputesSkip: () => {
453
358
  return ["0", "10", "20", "50", "100"];
454
359
  },
@@ -464,22 +369,22 @@ class BosonMCPServer {
464
369
  },
465
370
  }), {
466
371
  name: "Dispute Entities",
467
- description: "Get dispute entities with flexible query parameters including pagination, ordering, and filtering",
372
+ description: "Get dispute entities with flexible query parameters including pagination, ordering, and filtering. Requires configId parameter.",
468
373
  mimeType: "application/json",
469
374
  }, async (uri) => {
470
375
  const queryParams = {};
471
376
  // Extract query parameters from URL
472
377
  const urlParams = new URLSearchParams(uri.search);
473
- if (urlParams.get("disputesSkip")) {
378
+ if (urlParams.has("disputesSkip")) {
474
379
  queryParams.disputesSkip = parseInt(urlParams.get("disputesSkip"));
475
380
  }
476
- if (urlParams.get("disputesFirst")) {
381
+ if (urlParams.has("disputesFirst")) {
477
382
  queryParams.disputesFirst = parseInt(urlParams.get("disputesFirst"));
478
383
  }
479
- if (urlParams.get("disputesOrderBy")) {
384
+ if (urlParams.has("disputesOrderBy")) {
480
385
  queryParams.disputesOrderBy = urlParams.get("disputesOrderBy");
481
386
  }
482
- if (urlParams.get("disputesOrderDirection")) {
387
+ if (urlParams.has("disputesOrderDirection")) {
483
388
  queryParams.disputesOrderDirection = urlParams.get("disputesOrderDirection");
484
389
  }
485
390
  // Process filter parameters
@@ -487,22 +392,18 @@ class BosonMCPServer {
487
392
  if (Object.keys(filterParams).length > 0) {
488
393
  queryParams.disputesFilter = filterParams;
489
394
  }
490
- const validatedArgs = validation_js_1.getDisputesValidation.parse(queryParams);
491
- const result = await getDisputesHandler(validatedArgs);
492
- return {
493
- contents: [
494
- {
495
- uri: uri.toString(),
496
- mimeType: "application/json",
497
- text: result,
498
- },
499
- ],
500
- };
395
+ const validatedArgs = validation_js_1.getDisputesResourceValidation.parse(queryParams);
396
+ return this.createResourceHandler((getSDK) => {
397
+ return async () => {
398
+ return await (0, disputes_js_1.createGetDisputesHandler)(getSDK)(validatedArgs);
399
+ };
400
+ })(uri);
501
401
  });
502
402
  // Add the exchanges resource with flexible query parameters
503
403
  server.resource("exchanges", new mcp_js_1.ResourceTemplate(exchangesFilter_js_1.exchangesUriTemplate, {
504
404
  list: undefined,
505
405
  complete: {
406
+ configId: () => configValidation_js_1.supportedConfigIds,
506
407
  exchangesSkip: () => {
507
408
  return ["0", "10", "20", "50", "100"];
508
409
  },
@@ -518,22 +419,22 @@ class BosonMCPServer {
518
419
  },
519
420
  }), {
520
421
  name: "Exchange Entities",
521
- description: "Get exchange entities with flexible query parameters including pagination, ordering, and filtering",
422
+ description: "Get exchange entities with flexible query parameters including pagination, ordering, and filtering. Requires configId parameter.",
522
423
  mimeType: "application/json",
523
424
  }, async (uri) => {
524
425
  const queryParams = {};
525
426
  // Extract query parameters from URL
526
427
  const urlParams = new URLSearchParams(uri.search);
527
- if (urlParams.get("exchangesSkip")) {
428
+ if (urlParams.has("exchangesSkip")) {
528
429
  queryParams.exchangesSkip = parseInt(urlParams.get("exchangesSkip"));
529
430
  }
530
- if (urlParams.get("exchangesFirst")) {
431
+ if (urlParams.has("exchangesFirst")) {
531
432
  queryParams.exchangesFirst = parseInt(urlParams.get("exchangesFirst"));
532
433
  }
533
- if (urlParams.get("exchangesOrderBy")) {
434
+ if (urlParams.has("exchangesOrderBy")) {
534
435
  queryParams.exchangesOrderBy = urlParams.get("exchangesOrderBy");
535
436
  }
536
- if (urlParams.get("exchangesOrderDirection")) {
437
+ if (urlParams.has("exchangesOrderDirection")) {
537
438
  queryParams.exchangesOrderDirection = urlParams.get("exchangesOrderDirection");
538
439
  }
539
440
  // Process filter parameters
@@ -541,22 +442,18 @@ class BosonMCPServer {
541
442
  if (Object.keys(filterParams).length > 0) {
542
443
  queryParams.exchangesFilter = filterParams;
543
444
  }
544
- const validatedArgs = validation_js_1.getExchangesValidation.parse(queryParams);
545
- const result = await getExchangesHandler(validatedArgs);
546
- return {
547
- contents: [
548
- {
549
- uri: uri.toString(),
550
- mimeType: "application/json",
551
- text: result,
552
- },
553
- ],
554
- };
445
+ const validatedArgs = validation_js_1.getExchangesResourceValidation.parse(queryParams);
446
+ return this.createResourceHandler((getSDK) => {
447
+ return async () => {
448
+ return await (0, exchanges_js_1.createGetExchangesHandler)(getSDK)(validatedArgs);
449
+ };
450
+ })(uri);
555
451
  });
556
452
  // Add the offers resource with flexible query parameters
557
453
  server.resource("offers", new mcp_js_1.ResourceTemplate(offersFilter_js_1.offersUriTemplate, {
558
454
  list: undefined,
559
455
  complete: {
456
+ configId: () => configValidation_js_1.supportedConfigIds,
560
457
  offersSkip: () => {
561
458
  return ["0", "10", "20", "50", "100"];
562
459
  },
@@ -587,39 +484,39 @@ class BosonMCPServer {
587
484
  },
588
485
  }), {
589
486
  name: "Offer Entities",
590
- description: "Get offer entities with flexible query parameters including pagination, ordering, and filtering. Supports exchanges filtering for exchangeId",
487
+ description: "Get offer entities with flexible query parameters including pagination, ordering, and filtering. Supports exchanges filtering for exchangeId. Requires configId parameter.",
591
488
  mimeType: "application/json",
592
489
  }, async (uri) => {
593
490
  const queryParams = {};
594
491
  // Extract query parameters from URL
595
492
  const urlParams = new URLSearchParams(uri.search);
596
493
  // Offers parameters
597
- if (urlParams.get("offersSkip")) {
494
+ if (urlParams.has("offersSkip")) {
598
495
  queryParams.offersSkip = parseInt(urlParams.get("offersSkip"));
599
496
  }
600
- if (urlParams.get("offersFirst")) {
497
+ if (urlParams.has("offersFirst")) {
601
498
  queryParams.offersFirst = parseInt(urlParams.get("offersFirst"));
602
499
  }
603
- if (urlParams.get("offersOrderBy")) {
500
+ if (urlParams.has("offersOrderBy")) {
604
501
  queryParams.offersOrderBy = urlParams.get("offersOrderBy");
605
502
  }
606
- if (urlParams.get("offersOrderDirection")) {
503
+ if (urlParams.has("offersOrderDirection")) {
607
504
  queryParams.offersOrderDirection = urlParams.get("offersOrderDirection");
608
505
  }
609
506
  // Exchanges parameters
610
- if (urlParams.get("exchangesSkip")) {
507
+ if (urlParams.has("exchangesSkip")) {
611
508
  queryParams.exchangesSkip = parseInt(urlParams.get("exchangesSkip"));
612
509
  }
613
- if (urlParams.get("exchangesFirst")) {
510
+ if (urlParams.has("exchangesFirst")) {
614
511
  queryParams.exchangesFirst = parseInt(urlParams.get("exchangesFirst"));
615
512
  }
616
- if (urlParams.get("exchangesOrderBy")) {
513
+ if (urlParams.has("exchangesOrderBy")) {
617
514
  queryParams.exchangesOrderBy = urlParams.get("exchangesOrderBy");
618
515
  }
619
- if (urlParams.get("exchangesOrderDirection")) {
516
+ if (urlParams.has("exchangesOrderDirection")) {
620
517
  queryParams.exchangesOrderDirection = urlParams.get("exchangesOrderDirection");
621
518
  }
622
- if (urlParams.get("includeExchanges")) {
519
+ if (urlParams.has("includeExchanges")) {
623
520
  queryParams.includeExchanges =
624
521
  urlParams.get("includeExchanges") === "true";
625
522
  }
@@ -633,21 +530,18 @@ class BosonMCPServer {
633
530
  if (Object.keys(filterParams).length > 0) {
634
531
  queryParams.offersFilter = filterParams;
635
532
  }
636
- const result = await getOffersHandler(queryParams);
637
- return {
638
- contents: [
639
- {
640
- uri: uri.toString(),
641
- mimeType: "application/json",
642
- text: result,
643
- },
644
- ],
645
- };
533
+ const validatedArgs = validation_js_1.getOffersResourceValidation.parse(queryParams);
534
+ return this.createResourceHandler((getSDK) => {
535
+ return async () => {
536
+ return await (0, offers_js_1.createGetOffersHandler)(getSDK)(validatedArgs);
537
+ };
538
+ })(uri);
646
539
  });
647
540
  // Add the sellers resource with flexible query parameters
648
541
  server.resource("sellers", new mcp_js_1.ResourceTemplate(sellersFilter_js_1.sellersUriTemplate, {
649
542
  list: undefined,
650
543
  complete: {
544
+ configId: () => configValidation_js_1.supportedConfigIds,
651
545
  sellersSkip: () => {
652
546
  return ["0", "10", "20", "50", "100"];
653
547
  },
@@ -675,35 +569,35 @@ class BosonMCPServer {
675
569
  },
676
570
  }), {
677
571
  name: "Seller Entities",
678
- description: "Get seller entities with flexible query parameters including pagination, ordering, and filtering",
572
+ description: "Get seller entities with flexible query parameters including pagination, ordering, and filtering. Requires configId parameter.",
679
573
  mimeType: "application/json",
680
574
  }, async (uri) => {
681
575
  const queryParams = {};
682
576
  // Extract query parameters from URL
683
577
  const urlParams = new URLSearchParams(uri.search);
684
- if (urlParams.get("sellersSkip")) {
578
+ if (urlParams.has("sellersSkip")) {
685
579
  queryParams.sellersSkip = parseInt(urlParams.get("sellersSkip"));
686
580
  }
687
- if (urlParams.get("sellersFirst")) {
581
+ if (urlParams.has("sellersFirst")) {
688
582
  queryParams.sellersFirst = parseInt(urlParams.get("sellersFirst"));
689
583
  }
690
- if (urlParams.get("sellersOrderBy")) {
584
+ if (urlParams.has("sellersOrderBy")) {
691
585
  queryParams.sellersOrderBy = urlParams.get("sellersOrderBy");
692
586
  }
693
- if (urlParams.get("sellersOrderDirection")) {
587
+ if (urlParams.has("sellersOrderDirection")) {
694
588
  queryParams.sellersOrderDirection = urlParams.get("sellersOrderDirection");
695
589
  }
696
- if (urlParams.get("includeExchanges")) {
590
+ if (urlParams.has("includeExchanges")) {
697
591
  queryParams.includeExchanges =
698
592
  urlParams.get("includeExchanges") === "true";
699
593
  }
700
- if (urlParams.get("includeOffers")) {
594
+ if (urlParams.has("includeOffers")) {
701
595
  queryParams.includeOffers = urlParams.get("includeOffers") === "true";
702
596
  }
703
- if (urlParams.get("includeFunds")) {
597
+ if (urlParams.has("includeFunds")) {
704
598
  queryParams.includeFunds = urlParams.get("includeFunds") === "true";
705
599
  }
706
- if (urlParams.get("includeLogs")) {
600
+ if (urlParams.has("includeLogs")) {
707
601
  queryParams.includeLogs = urlParams.get("includeLogs") === "true";
708
602
  }
709
603
  // Process filter parameters
@@ -711,22 +605,18 @@ class BosonMCPServer {
711
605
  if (Object.keys(filterParams).length > 0) {
712
606
  queryParams.sellersFilter = filterParams;
713
607
  }
714
- const validatedArgs = validation_js_1.getSellersValidation.parse(queryParams);
715
- const result = await getSellersHandler(validatedArgs);
716
- return {
717
- contents: [
718
- {
719
- uri: uri.toString(),
720
- mimeType: "application/json",
721
- text: result,
722
- },
723
- ],
724
- };
608
+ const validatedArgs = validation_js_1.getSellersResourceValidation.parse(queryParams);
609
+ return this.createResourceHandler((getSDK) => {
610
+ return async () => {
611
+ return await (0, accounts_js_1.createGetSellersHandler)(getSDK)(validatedArgs);
612
+ };
613
+ })(uri);
725
614
  });
726
615
  // Add the dispute_resolvers resource with flexible query parameters
727
616
  server.resource("dispute_resolvers", new mcp_js_1.ResourceTemplate(disputeResolversFilter_js_1.disputeResolversUriTemplate, {
728
617
  list: undefined,
729
618
  complete: {
619
+ configId: () => configValidation_js_1.supportedConfigIds,
730
620
  disputeResolversSkip: () => {
731
621
  return ["0", "10", "20", "50", "100"];
732
622
  },
@@ -748,16 +638,16 @@ class BosonMCPServer {
748
638
  const queryParams = {};
749
639
  // Extract query parameters from URL
750
640
  const urlParams = new URLSearchParams(uri.search);
751
- if (urlParams.get("disputeResolversSkip")) {
641
+ if (urlParams.has("disputeResolversSkip")) {
752
642
  queryParams.disputeResolversSkip = parseInt(urlParams.get("disputeResolversSkip"));
753
643
  }
754
- if (urlParams.get("disputeResolversFirst")) {
644
+ if (urlParams.has("disputeResolversFirst")) {
755
645
  queryParams.disputeResolversFirst = parseInt(urlParams.get("disputeResolversFirst"));
756
646
  }
757
- if (urlParams.get("disputeResolversOrderBy")) {
647
+ if (urlParams.has("disputeResolversOrderBy")) {
758
648
  queryParams.disputeResolversOrderBy = urlParams.get("disputeResolversOrderBy");
759
649
  }
760
- if (urlParams.get("disputeResolversOrderDirection")) {
650
+ if (urlParams.has("disputeResolversOrderDirection")) {
761
651
  queryParams.disputeResolversOrderDirection = urlParams.get("disputeResolversOrderDirection");
762
652
  }
763
653
  // Process filter parameters
@@ -765,22 +655,18 @@ class BosonMCPServer {
765
655
  if (Object.keys(filterParams).length > 0) {
766
656
  queryParams.disputeResolversFilter = filterParams;
767
657
  }
768
- const validatedArgs = validation_js_1.getDisputeResolversValidation.parse(queryParams);
769
- const result = await getDisputeResolversHandler(validatedArgs);
770
- return {
771
- contents: [
772
- {
773
- uri: uri.toString(),
774
- mimeType: "application/json",
775
- text: result,
776
- },
777
- ],
778
- };
658
+ const validatedArgs = validation_js_1.getDisputeResolversResourceValidation.parse(queryParams);
659
+ return this.createResourceHandler((getSDK) => {
660
+ return async () => {
661
+ return await (0, accounts_js_1.createGetDisputeResolversHandler)(getSDK)(validatedArgs);
662
+ };
663
+ })(uri);
779
664
  });
780
665
  // Add the sellers-by-address resource with flexible query parameters
781
666
  server.resource("sellers-by-address", new mcp_js_1.ResourceTemplate(sellersByAddressFilter_js_1.sellersByAddressUriTemplate, {
782
667
  list: undefined,
783
668
  complete: {
669
+ configId: () => configValidation_js_1.supportedConfigIds,
784
670
  sellersSkip: () => {
785
671
  return ["0", "10", "20", "50", "100"];
786
672
  },
@@ -808,51 +694,43 @@ class BosonMCPServer {
808
694
  },
809
695
  }), {
810
696
  name: "Sellers By Address",
811
- description: "Get seller entities by address with flexible query parameters including pagination, ordering, and filtering",
697
+ description: "Get seller entities by address with flexible query parameters including pagination, ordering, and filtering. Requires configId parameter.",
812
698
  mimeType: "application/json",
813
699
  }, async (uri) => {
814
700
  const urlParams = new URLSearchParams(uri.search);
815
701
  const queryParams = {};
816
702
  // Extract address parameter (required)
817
- const address = urlParams.get("address");
818
- if (!address) {
703
+ if (!urlParams.has("address")) {
819
704
  throw new Error("address parameter is required");
820
705
  }
821
- queryParams.address = address;
706
+ const address = urlParams.get("address");
822
707
  // Extract pagination parameters
823
- const sellersSkip = urlParams.get("sellersSkip");
824
- if (sellersSkip !== null) {
825
- queryParams.sellersSkip = parseInt(sellersSkip, 10);
708
+ if (urlParams.has("sellersSkip")) {
709
+ queryParams.sellersSkip = parseInt(urlParams.get("sellersSkip"), 10);
826
710
  }
827
- const sellersFirst = urlParams.get("sellersFirst");
828
- if (sellersFirst !== null) {
829
- queryParams.sellersFirst = parseInt(sellersFirst, 10);
711
+ if (urlParams.has("sellersFirst")) {
712
+ queryParams.sellersFirst = parseInt(urlParams.get("sellersFirst"), 10);
830
713
  }
831
714
  // Extract ordering parameters
832
- const sellersOrderBy = urlParams.get("sellersOrderBy");
833
- if (sellersOrderBy !== null) {
834
- queryParams.sellersOrderBy = sellersOrderBy;
715
+ if (urlParams.has("sellersOrderBy")) {
716
+ queryParams.sellersOrderBy = urlParams.get("sellersOrderBy");
835
717
  }
836
- const sellersOrderDirection = urlParams.get("sellersOrderDirection");
837
- if (sellersOrderDirection !== null) {
838
- queryParams.sellersOrderDirection = sellersOrderDirection;
718
+ if (urlParams.has("sellersOrderDirection")) {
719
+ queryParams.sellersOrderDirection = urlParams.get("sellersOrderDirection");
839
720
  }
840
721
  // Extract include flags
841
- const includeExchanges = urlParams.get("includeExchanges");
842
- if (includeExchanges !== null) {
843
- queryParams.includeExchanges = includeExchanges === "true";
722
+ if (urlParams.has("includeExchanges")) {
723
+ queryParams.includeExchanges =
724
+ urlParams.get("includeExchanges") === "true";
844
725
  }
845
- const includeOffers = urlParams.get("includeOffers");
846
- if (includeOffers !== null) {
847
- queryParams.includeOffers = includeOffers === "true";
726
+ if (urlParams.has("includeOffers")) {
727
+ queryParams.includeOffers = urlParams.get("includeOffers") === "true";
848
728
  }
849
- const includeFunds = urlParams.get("includeFunds");
850
- if (includeFunds !== null) {
851
- queryParams.includeFunds = includeFunds === "true";
729
+ if (urlParams.has("includeFunds")) {
730
+ queryParams.includeFunds = urlParams.get("includeFunds") === "true";
852
731
  }
853
- const includeLogs = urlParams.get("includeLogs");
854
- if (includeLogs !== null) {
855
- queryParams.includeLogs = includeLogs === "true";
732
+ if (urlParams.has("includeLogs")) {
733
+ queryParams.includeLogs = urlParams.get("includeLogs") === "true";
856
734
  }
857
735
  // Process filter parameters
858
736
  const sellersFilter = (0, sellersByAddressFilter_js_1.sellersByAddressProcessFilterParams)(urlParams);
@@ -860,23 +738,22 @@ class BosonMCPServer {
860
738
  queryParams.sellersFilter = sellersFilter;
861
739
  }
862
740
  // Validate arguments
863
- const validatedArgs = validation_js_1.getSellersByAddressValidation.parse(queryParams);
741
+ const validatedArgs = validation_js_1.getSellersByAddressResourceValidation.parse(queryParams);
864
742
  // Call the handler
865
- const result = await getSellersByAddressHandler(validatedArgs);
866
- return {
867
- contents: [
868
- {
869
- uri: uri.toString(),
870
- mimeType: "application/json",
871
- text: result,
872
- },
873
- ],
874
- };
743
+ return this.createResourceHandler((getSDK) => {
744
+ return async () => {
745
+ return await (0, accounts_js_1.createGetSellersByAddressHandler)(getSDK)({
746
+ ...validatedArgs,
747
+ address,
748
+ });
749
+ };
750
+ })(uri);
875
751
  });
876
752
  // Add the products resource with flexible query parameters
877
753
  server.resource("products", new mcp_js_1.ResourceTemplate(productsFilter_js_1.productsUriTemplate, {
878
754
  list: undefined,
879
755
  complete: {
756
+ configId: () => configValidation_js_1.supportedConfigIds,
880
757
  productsSkip: () => {
881
758
  return ["0", "10", "20", "50", "100"];
882
759
  },
@@ -892,28 +769,24 @@ class BosonMCPServer {
892
769
  },
893
770
  }), {
894
771
  name: "Products",
895
- description: "Get all products with not voided variants with flexible query parameters including pagination, ordering, and filtering",
772
+ description: "Get all products with not voided variants with flexible query parameters including pagination, ordering, and filtering. Requires configId parameter.",
896
773
  mimeType: "application/json",
897
774
  }, async (uri) => {
898
775
  const urlParams = new URLSearchParams(uri.search);
899
776
  const queryParams = {};
900
777
  // Extract pagination parameters
901
- const productsSkip = urlParams.get("productsSkip");
902
- if (productsSkip !== null) {
903
- queryParams.productsSkip = parseInt(productsSkip, 10);
778
+ if (urlParams.has("productsSkip")) {
779
+ queryParams.productsSkip = parseInt(urlParams.get("productsSkip"), 10);
904
780
  }
905
- const productsFirst = urlParams.get("productsFirst");
906
- if (productsFirst !== null) {
907
- queryParams.productsFirst = parseInt(productsFirst, 10);
781
+ if (urlParams.has("productsFirst")) {
782
+ queryParams.productsFirst = parseInt(urlParams.get("productsFirst"), 10);
908
783
  }
909
784
  // Extract ordering parameters
910
- const productsOrderBy = urlParams.get("productsOrderBy");
911
- if (productsOrderBy !== null) {
912
- queryParams.productsOrderBy = productsOrderBy;
785
+ if (urlParams.has("productsOrderBy")) {
786
+ queryParams.productsOrderBy = urlParams.get("productsOrderBy");
913
787
  }
914
- const productsOrderDirection = urlParams.get("productsOrderDirection");
915
- if (productsOrderDirection !== null) {
916
- queryParams.productsOrderDirection = productsOrderDirection;
788
+ if (urlParams.has("productsOrderDirection")) {
789
+ queryParams.productsOrderDirection = urlParams.get("productsOrderDirection");
917
790
  }
918
791
  // Process filter parameters
919
792
  const productsFilter = (0, productsFilter_js_1.productsProcessFilterParams)(urlParams);
@@ -921,29 +794,24 @@ class BosonMCPServer {
921
794
  queryParams.productsFilter = productsFilter;
922
795
  }
923
796
  // Validate arguments
924
- const validatedArgs = validation_js_1.getAllProductsWithNotVoidedVariantsValidation.parse(queryParams);
797
+ const validatedArgs = validation_js_1.getAllProductsWithNotVoidedVariantsResourceValidation.parse(queryParams);
925
798
  // Call the handler
926
- const result = await getAllProductsWithNotVoidedVariantsHandler(validatedArgs);
927
- return {
928
- contents: [
929
- {
930
- uri: uri.toString(),
931
- mimeType: "application/json",
932
- text: result,
933
- },
934
- ],
935
- };
799
+ return this.createResourceHandler((getSDK) => {
800
+ return async () => {
801
+ return await (0, offers_js_1.createGetAllProductsWithNotVoidedVariantsHandler)(getSDK)(validatedArgs);
802
+ };
803
+ })(uri);
936
804
  });
937
805
  }
938
806
  async startStdio() {
939
807
  const server = this.createServerInstance();
940
808
  const transport = new stdio_js_1.StdioServerTransport();
941
809
  await server.connect(transport);
942
- log("Boson Protocol MCP server running on stdio");
810
+ (0, index_js_1.log)("Boson Protocol MCP server running on stdio");
943
811
  }
944
812
  async startHttp(port = 3000) {
945
- const express = await Promise.resolve().then(() => __importStar(require("express")));
946
- const app = express.default();
813
+ const { default: express } = await Promise.resolve().then(() => __importStar(require("express")));
814
+ const app = express();
947
815
  app.use(express.json());
948
816
  // Get allowed hosts from environment variable
949
817
  const allowedHosts = process.env.ALLOWED_HOSTS?.split(",").map((h) => h.trim()) || ["127.0.0.1", "localhost"];
@@ -1026,7 +894,7 @@ class BosonMCPServer {
1026
894
  });
1027
895
  // Clean up transport when closed
1028
896
  transport.onclose = () => {
1029
- log("transport has been closed");
897
+ (0, index_js_1.log)("transport has been closed");
1030
898
  if (transport.sessionId) {
1031
899
  delete transports[transport.sessionId];
1032
900
  }
@@ -1084,10 +952,10 @@ class BosonMCPServer {
1084
952
  // Get bind address from environment variable
1085
953
  const bindAddress = process.env.BIND_ADDRESS || "127.0.0.1";
1086
954
  app.listen(port, bindAddress, () => {
1087
- log(`Boson MCP Server running on http://${bindAddress}:${port}`);
1088
- log(`Web interface: http://${bindAddress}:${port}`);
1089
- log(`MCP endpoint: http://${bindAddress}:${port}/mcp`);
1090
- log(`Health check: http://${bindAddress}:${port}/health`);
955
+ (0, index_js_1.log)(`Boson MCP Server running on http://${bindAddress}:${port}`);
956
+ (0, index_js_1.log)(`Web interface: http://${bindAddress}:${port}`);
957
+ (0, index_js_1.log)(`MCP endpoint: http://${bindAddress}:${port}/mcp`);
958
+ (0, index_js_1.log)(`Health check: http://${bindAddress}:${port}/health`);
1091
959
  });
1092
960
  }
1093
961
  async run() {
@@ -1107,6 +975,6 @@ exports.BosonMCPServer = BosonMCPServer;
1107
975
  // Only run server if not in test environment
1108
976
  if (process.env.NODE_ENV !== "test" && process.env.VITEST !== "true") {
1109
977
  const server = new BosonMCPServer();
1110
- server.run().catch(log);
978
+ server.run().catch(index_js_1.log);
1111
979
  }
1112
980
  //# sourceMappingURL=index.js.map