listbee-mcp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,98 +1,95 @@
1
1
  #!/usr/bin/env node
2
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
- import { createServer } from "./server.js";
2
+ import { runStdio } from "./transports/stdio.js";
4
3
  function parseArgs(argv) {
5
- const result = { help: false };
6
- const args = argv.slice(2); // skip node and script path
7
- for (let i = 0; i < args.length; i++) {
8
- const arg = args[i];
9
- if (arg === "--help" || arg === "-h") {
10
- result.help = true;
4
+ const result = { transport: "stdio", help: false };
5
+ for (let i = 0; i < argv.length; i++) {
6
+ const arg = argv[i];
7
+ if (arg === "--transport" && argv[i + 1]) {
8
+ const val = argv[++i];
9
+ if (val !== "stdio" && val !== "http") {
10
+ console.error(`Invalid transport: "${val}". Must be "stdio" or "http".`);
11
+ process.exit(1);
12
+ }
13
+ result.transport = val;
14
+ }
15
+ else if (arg === "--api-key" && argv[i + 1]) {
16
+ result.apiKey = argv[++i];
11
17
  }
12
- else if (arg === "--api-key" && i + 1 < args.length) {
13
- result.apiKey = args[++i];
18
+ else if (arg === "--base-url" && argv[i + 1]) {
19
+ result.baseUrl = argv[++i];
14
20
  }
15
- else if (arg === "--base-url" && i + 1 < args.length) {
16
- result.baseUrl = args[++i];
21
+ else if (arg === "--port" && argv[i + 1]) {
22
+ result.port = parseInt(argv[++i], 10);
17
23
  }
18
- else if (arg === "--tools" && i + 1 < args.length) {
19
- result.tools = args[++i].split(",").map((s) => s.trim()).filter(Boolean);
24
+ else if (arg === "--tools" && argv[i + 1]) {
25
+ result.tools = argv[++i];
26
+ }
27
+ else if (arg === "--help" || arg === "-h") {
28
+ result.help = true;
20
29
  }
21
30
  }
22
31
  return result;
23
32
  }
24
- function resolveConfig(parsed) {
25
- const apiKey = parsed.apiKey ?? process.env.LISTBEE_API_KEY;
33
+ function resolveConfig(parsed, env) {
34
+ const baseUrl = parsed.baseUrl || env.LISTBEE_BASE_URL || "https://api.listbee.so";
35
+ const toolFilter = parsed.tools
36
+ ? new Set(parsed.tools.split(",").map((t) => t.trim()))
37
+ : undefined;
38
+ if (parsed.transport === "http") {
39
+ const port = parsed.port || parseInt(env.PORT || "8080", 10);
40
+ return { transport: "http", baseUrl, port, toolFilter };
41
+ }
42
+ const apiKey = parsed.apiKey || env.LISTBEE_API_KEY;
26
43
  if (!apiKey) {
27
- return {
28
- ok: false,
29
- error: "API key required. Set LISTBEE_API_KEY environment variable or pass --api-key <key>.",
30
- };
44
+ return "API key required. Use --api-key or set LISTBEE_API_KEY.";
31
45
  }
32
- const baseUrl = parsed.baseUrl ?? process.env.LISTBEE_BASE_URL;
33
- const toolFilter = parsed.tools ? new Set(parsed.tools) : undefined;
34
- return { ok: true, config: { apiKey, baseUrl, toolFilter } };
46
+ return { transport: "stdio", apiKey, baseUrl, toolFilter };
35
47
  }
36
- // --- Help text ---
37
48
  const HELP_TEXT = `
38
49
  listbee-mcp — MCP server for ListBee commerce API
39
50
 
40
51
  Usage:
41
- listbee-mcp [options]
52
+ npx listbee-mcp [options]
42
53
 
43
54
  Options:
44
- --api-key <key> ListBee API key (or set LISTBEE_API_KEY env var)
45
- --base-url <url> API base URL (default: https://api.listbee.so)
46
- --tools <list> Comma-separated tool names to expose (default: all)
47
- -h, --help Show this help text
55
+ --transport <stdio|http> Transport mode (default: stdio)
56
+ --api-key <key> API key (required for stdio, or set LISTBEE_API_KEY)
57
+ --base-url <url> API base URL (default: https://api.listbee.so)
58
+ --port <number> HTTP port (default: 8080, http mode only)
59
+ --tools <list> Comma-separated tool names to expose
60
+ -h, --help Show this help
48
61
 
49
- Examples:
50
- LISTBEE_API_KEY=lb_xxx listbee-mcp
51
- listbee-mcp --api-key lb_xxx
52
- listbee-mcp --api-key lb_xxx --tools create_listing,get_listing,publish_listing
62
+ Transports:
63
+ stdio Local mode for Claude Desktop, Cursor, Cline (default)
64
+ http Streamable HTTP for ChatGPT Apps, Claude API Connector, remote agents
53
65
 
54
- Claude Desktop config (claude_desktop_config.json):
55
- {
56
- "mcpServers": {
57
- "listbee": {
58
- "command": "npx",
59
- "args": ["-y", "listbee-mcp"],
60
- "env": { "LISTBEE_API_KEY": "lb_xxx" }
61
- }
62
- }
63
- }
66
+ Examples:
67
+ npx listbee-mcp --api-key lb_xxx
68
+ npx listbee-mcp --transport http --port 3000
69
+ LISTBEE_API_KEY=lb_xxx npx listbee-mcp
64
70
  `.trim();
65
- // --- Main ---
66
71
  async function main() {
67
- // Handle signals gracefully
68
- process.on("SIGINT", () => process.exit(0));
69
- process.on("SIGTERM", () => process.exit(0));
70
- const parsed = parseArgs(process.argv);
72
+ const parsed = parseArgs(process.argv.slice(2));
71
73
  if (parsed.help) {
72
- console.error(HELP_TEXT);
74
+ console.log(HELP_TEXT);
73
75
  process.exit(0);
74
76
  }
75
- const result = resolveConfig(parsed);
76
- if (!result.ok) {
77
- console.error(`Error: ${result.error}`);
77
+ const config = resolveConfig(parsed, process.env);
78
+ if (typeof config === "string") {
79
+ console.error(config);
80
+ console.error("Run with --help for usage.");
78
81
  process.exit(1);
79
82
  }
80
- const { config } = result;
81
- console.error("Starting ListBee MCP server...");
82
- if (config.toolFilter && config.toolFilter.size > 0) {
83
- console.error(` Tool filter: ${[...config.toolFilter].join(", ")}`);
83
+ if (config.transport === "http") {
84
+ const { runHttp } = await import("./transports/http.js");
85
+ await runHttp(config);
86
+ }
87
+ else {
88
+ await runStdio(config);
84
89
  }
85
- const server = createServer({
86
- apiKey: config.apiKey,
87
- baseUrl: config.baseUrl,
88
- toolFilter: config.toolFilter,
89
- });
90
- const transport = new StdioServerTransport();
91
- await server.connect(transport);
92
- console.error("ListBee MCP server running on stdio.");
93
90
  }
94
91
  main().catch((err) => {
95
- console.error("Fatal error:", err);
92
+ console.error("Fatal:", err);
96
93
  process.exit(1);
97
94
  });
98
95
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2CpE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAiGD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAmDpE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6CpE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AA8FD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAqEpE"}
package/dist/server.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
2
3
  import { ListBeeClient } from "./client.js";
3
4
  import { loadManifest, indexManifest } from "./manifest.js";
4
5
  import { autoTitle, buildDescription } from "./tools/shared.js";
5
- import * as schemas from "./schemas.js";
6
+ import { schemas } from "./generated/schemas.js";
6
7
  import { handleCreateListing, handleGetListing, handleUpdateListing, handleListListings, handlePublishListing, handleSetDeliverables, handleRemoveDeliverables, handleDeleteListing, } from "./tools/listings.js";
7
- import { handleListOrders, handleGetOrder, handleDeliverOrder, } from "./tools/orders.js";
8
+ import { handleListOrders, handleGetOrder, handleDeliverOrder, handleShipOrder, } from "./tools/orders.js";
8
9
  import { handleUploadFile } from "./tools/files.js";
9
10
  import { handleStartStripeConnect } from "./tools/stripe.js";
10
11
  // Read version from package.json
@@ -32,7 +33,7 @@ function annotationsFor(name) {
32
33
  openWorldHint: false,
33
34
  };
34
35
  }
35
- if (name.startsWith("update_") || name === "set_deliverables") {
36
+ if (name.startsWith("update_") || name === "set_deliverables" || name === "ship_order") {
36
37
  return {
37
38
  readOnlyHint: false,
38
39
  destructiveHint: false,
@@ -54,51 +55,44 @@ function annotationsFor(name) {
54
55
  openWorldHint: false,
55
56
  };
56
57
  }
58
+ // Manual override for upload_file: the API uses multipart upload but the MCP tool
59
+ // takes a URL + filename and handles the fetch-and-upload server-side.
60
+ const uploadFileSchema = z.object({
61
+ url: z.string().url().describe("Public URL of a file to upload. The server fetches this URL — only provide URLs from the user or trusted sources."),
62
+ filename: z.string().optional().describe("Filename for the uploaded file. If omitted, derived from the URL."),
63
+ });
57
64
  /**
58
- * Schema map — links tool names to their Zod input shapes.
65
+ * Schema map — links tool names to their Zod input schemas (or null for no-input tools).
66
+ * Derived from generated schemas with manual overrides where needed.
59
67
  */
60
68
  const schemaMap = {
61
- create_listing: schemas.createListingSchema,
62
- get_listing: schemas.getListingSchema,
63
- update_listing: schemas.updateListingSchema,
64
- list_listings: schemas.listListingsSchema,
65
- publish_listing: schemas.publishListingSchema,
66
- set_deliverables: schemas.setDeliverablesSchema,
67
- remove_deliverables: schemas.removeDeliverablesSchema,
68
- delete_listing: schemas.deleteListingSchema,
69
- upload_file: schemas.uploadFileSchema,
70
- list_orders: schemas.listOrdersSchema,
71
- get_order: schemas.getOrderSchema,
72
- deliver_order: schemas.deliverOrderSchema,
73
- start_stripe_connect: undefined, // no input
69
+ ...schemas,
70
+ upload_file: uploadFileSchema,
74
71
  };
75
72
  /**
76
73
  * Handler map — links tool names to their handler functions.
77
74
  */
75
+ const handlers = {
76
+ create_listing: handleCreateListing,
77
+ get_listing: handleGetListing,
78
+ update_listing: handleUpdateListing,
79
+ list_listings: handleListListings,
80
+ publish_listing: handlePublishListing,
81
+ set_deliverables: handleSetDeliverables,
82
+ remove_deliverables: handleRemoveDeliverables,
83
+ delete_listing: handleDeleteListing,
84
+ upload_file: handleUploadFile,
85
+ list_orders: handleListOrders,
86
+ get_order: handleGetOrder,
87
+ deliver_order: handleDeliverOrder,
88
+ ship_order: (c, a) => handleShipOrder(c, a),
89
+ start_stripe_connect: (c) => handleStartStripeConnect(c),
90
+ };
78
91
  function getHandler(name, client) {
79
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
- const handlers = {
81
- create_listing: handleCreateListing,
82
- get_listing: handleGetListing,
83
- update_listing: handleUpdateListing,
84
- list_listings: handleListListings,
85
- publish_listing: handlePublishListing,
86
- set_deliverables: handleSetDeliverables,
87
- remove_deliverables: handleRemoveDeliverables,
88
- delete_listing: handleDeleteListing,
89
- upload_file: handleUploadFile,
90
- list_orders: handleListOrders,
91
- get_order: handleGetOrder,
92
- deliver_order: handleDeliverOrder,
93
- };
94
92
  const handler = handlers[name];
95
93
  if (handler) {
96
94
  return (args) => handler(client, args);
97
95
  }
98
- // Special case: start_stripe_connect takes no args
99
- if (name === "start_stripe_connect") {
100
- return () => handleStartStripeConnect(client);
101
- }
102
96
  return undefined;
103
97
  }
104
98
  /**
@@ -131,18 +125,27 @@ export function createServer(options) {
131
125
  console.error(`Warning: no handler for tool "${toolName}", skipping.`);
132
126
  continue;
133
127
  }
134
- if (schema) {
135
- server.tool(toolName, description, schema, annotations, async (args) => {
136
- return await handler(args);
137
- });
128
+ server.registerTool(toolName, {
129
+ description,
130
+ annotations,
131
+ ...(schema ? { inputSchema: schema } : {}),
132
+ },
133
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
+ async (args) => {
135
+ return await handler((args ?? {}));
136
+ });
137
+ console.error(` Registered tool: ${title} (${toolName})`);
138
+ }
139
+ // Startup validation: every manifest tool must be fully wired
140
+ for (const tool of allTools) {
141
+ const name = tool.name;
142
+ if (!handlers[name]) {
143
+ throw new Error(`Startup validation failed: tool "${name}" has no handler registered`);
138
144
  }
139
- else {
140
- // No input schema (e.g. start_stripe_connect)
141
- server.tool(toolName, description, annotations, async () => {
142
- return await handler({});
143
- });
145
+ const ann = annotationsFor(name);
146
+ if (ann.readOnlyHint === undefined) {
147
+ throw new Error(`Startup validation failed: tool "${name}" is missing readOnlyHint annotation`);
144
148
  }
145
- console.error(` Registered tool: ${title} (${toolName})`);
146
149
  }
147
150
  return server;
148
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -12,4 +12,5 @@ export declare function handleDeliverOrder(client: ListBeeClient, args: {
12
12
  order_id: string;
13
13
  deliverables: Deliverable[];
14
14
  }): Promise<CallToolResult>;
15
+ export declare function handleShipOrder(client: ListBeeClient, args: Record<string, unknown>): Promise<CallToolResult>;
15
16
  //# sourceMappingURL=orders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,cAAc,CAAC,CASzB;AAID,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,cAAc,CAAC,CAIzB;AAID,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,GACtD,OAAO,CAAC,cAAc,CAAC,CASzB"}
1
+ {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,cAAc,CAAC,CASzB;AAID,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,cAAc,CAAC,CAIzB;AAID,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,GACtD,OAAO,CAAC,cAAc,CAAC,CASzB;AAID,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,cAAc,CAAC,CAWzB"}
@@ -25,4 +25,17 @@ export async function handleDeliverOrder(client, args) {
25
25
  return data;
26
26
  });
27
27
  }
28
+ // --- ship_order ---
29
+ export async function handleShipOrder(client, args) {
30
+ return safeTool(async () => {
31
+ const { order_id, ...rest } = args;
32
+ const body = {};
33
+ for (const [key, value] of Object.entries(rest)) {
34
+ if (value !== undefined) {
35
+ body[key] = value;
36
+ }
37
+ }
38
+ return await client.request("POST", `/v1/orders/${order_id}/ship`, body);
39
+ });
40
+ }
28
41
  //# sourceMappingURL=orders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,sBAAsB;AAEtB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,IAAyC;IAEzC,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/C,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AAEpB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAqB,EACrB,IAA0B;IAE1B,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wBAAwB;AAExB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,IAAuD;IAEvD,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,MAAM,EACN,cAAc,IAAI,CAAC,QAAQ,UAAU,EACrC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CACpC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,sBAAsB;AAEtB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,IAAyC;IAEzC,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/C,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AAEpB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAqB,EACrB,IAA0B;IAE1B,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wBAAwB;AAExB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,IAAuD;IAEvD,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,MAAM,EACN,cAAc,IAAI,CAAC,QAAQ,UAAU,EACrC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CACpC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qBAAqB;AAErB,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAqB,EACrB,IAA6B;IAE7B,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface HttpConfig {
2
+ baseUrl: string;
3
+ port: number;
4
+ toolFilter?: Set<string>;
5
+ }
6
+ export declare function runHttp(config: HttpConfig): Promise<void>;
7
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AA8BD,wBAAsB,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF/D"}
@@ -0,0 +1,96 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
3
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
+ import { createServer } from "../server.js";
6
+ const transports = new Map();
7
+ const sessions = new Map();
8
+ const SESSION_TTL_MS = 30 * 60 * 1000;
9
+ const SWEEP_INTERVAL_MS = 5 * 60 * 1000;
10
+ function startTtlSweep() {
11
+ setInterval(() => {
12
+ const cutoff = Date.now() - SESSION_TTL_MS;
13
+ for (const [id, meta] of sessions) {
14
+ if (meta.lastSeenAt < cutoff) {
15
+ const transport = transports.get(id);
16
+ if (transport) {
17
+ transport.close();
18
+ transports.delete(id);
19
+ }
20
+ sessions.delete(id);
21
+ console.error(`[http] Evicted idle session ${id}`);
22
+ }
23
+ }
24
+ }, SWEEP_INTERVAL_MS);
25
+ }
26
+ export async function runHttp(config) {
27
+ // Bind to 0.0.0.0 for container/remote deployments — DNS rebinding protection
28
+ // is not applied for non-localhost hosts, which is correct for remote MCP.
29
+ const app = createMcpExpressApp({ host: "0.0.0.0" });
30
+ // Auth middleware — reject unauthenticated requests before MCP sees them
31
+ app.use("/mcp", (req, res, next) => {
32
+ const auth = req.headers.authorization;
33
+ if (!auth?.startsWith("Bearer ")) {
34
+ res.status(401).json({ error: "Missing Authorization: Bearer header" });
35
+ return;
36
+ }
37
+ next();
38
+ });
39
+ // MCP endpoint — handles all HTTP methods (GET for SSE, POST for requests, DELETE for close)
40
+ app.all("/mcp", async (req, res) => {
41
+ const sessionId = req.headers["mcp-session-id"];
42
+ // Route to existing session
43
+ if (sessionId && transports.has(sessionId)) {
44
+ const transport = transports.get(sessionId);
45
+ const meta = sessions.get(sessionId);
46
+ if (meta)
47
+ meta.lastSeenAt = Date.now();
48
+ await transport.handleRequest(req, res, req.body);
49
+ return;
50
+ }
51
+ // New session — must be an initialize request
52
+ if (req.method === "POST" && isInitializeRequest(req.body)) {
53
+ const apiKey = req.headers.authorization.replace("Bearer ", "");
54
+ const transport = new StreamableHTTPServerTransport({
55
+ sessionIdGenerator: () => randomUUID(),
56
+ onsessioninitialized: (sid) => {
57
+ transports.set(sid, transport);
58
+ sessions.set(sid, {
59
+ createdAt: Date.now(),
60
+ lastSeenAt: Date.now(),
61
+ });
62
+ transport.onclose = () => {
63
+ transports.delete(sid);
64
+ sessions.delete(sid);
65
+ console.error(`[http] Session closed: ${sid}`);
66
+ };
67
+ console.error(`[http] New session: ${sid}`);
68
+ },
69
+ });
70
+ const server = createServer({
71
+ apiKey,
72
+ baseUrl: config.baseUrl,
73
+ toolFilter: config.toolFilter,
74
+ });
75
+ await server.connect(transport);
76
+ await transport.handleRequest(req, res, req.body);
77
+ return;
78
+ }
79
+ res.status(400).json({
80
+ error: "Bad request — missing Mcp-Session-Id or not an initialize request",
81
+ });
82
+ });
83
+ // Health checks
84
+ app.get("/health", (_req, res) => {
85
+ res.json({ status: "ok" });
86
+ });
87
+ app.get("/ready", (_req, res) => {
88
+ res.json({ status: "ready", sessions: sessions.size });
89
+ });
90
+ startTtlSweep();
91
+ app.listen(config.port, "0.0.0.0", () => {
92
+ console.error(`ListBee MCP server (HTTP) listening on port ${config.port}`);
93
+ console.error(`Endpoint: http://localhost:${config.port}/mcp`);
94
+ });
95
+ }
96
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface StdioConfig {
2
+ apiKey: string;
3
+ baseUrl: string;
4
+ toolFilter?: Set<string>;
5
+ }
6
+ export declare function runStdio(config: StdioConfig): Promise<void>;
7
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjE"}
@@ -0,0 +1,18 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import { createServer } from "../server.js";
3
+ export async function runStdio(config) {
4
+ const server = createServer({
5
+ apiKey: config.apiKey,
6
+ baseUrl: config.baseUrl,
7
+ toolFilter: config.toolFilter,
8
+ });
9
+ const transport = new StdioServerTransport();
10
+ await server.connect(transport);
11
+ const shutdown = async () => {
12
+ await server.close();
13
+ process.exit(0);
14
+ };
15
+ process.on("SIGINT", shutdown);
16
+ process.on("SIGTERM", shutdown);
17
+ }
18
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQ5C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAmB;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
package/mcp-tools.yaml CHANGED
@@ -145,6 +145,24 @@ tools:
145
145
  Push digital content to a buyer for an external fulfillment order.
146
146
  Not needed for managed delivery — ListBee handles that automatically.
147
147
 
148
+ - type: operation
149
+ operation_id: ship_order
150
+ name: ship_order
151
+ category: orders
152
+ priority: 7
153
+ status: active
154
+ when_to_use: "Use when a physical order needs shipping info recorded. Only for external fulfillment orders with physical goods."
155
+ description: >
156
+ Record shipping info (carrier + tracking code) and transition order to FULFILLED.
157
+ Only valid for external fulfillment orders. Idempotent with same tracking code.
158
+ hints:
159
+ - "Only works on orders in PAID state for EXTERNAL fulfillment listings"
160
+ - "Fires order.fulfilled webhook with shipping details"
161
+ input_example:
162
+ order_id: "ord_9xM4kP7nR2qT5wY1"
163
+ carrier: "USPS"
164
+ tracking_code: "9400111899223"
165
+
148
166
  # --- Stripe ---
149
167
  - type: operation
150
168
  operation_id: start_stripe_connect
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "listbee-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for ListBee — commerce API for AI agents",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -15,9 +15,11 @@
15
15
  "node": ">=20"
16
16
  },
17
17
  "scripts": {
18
- "build": "tsc && chmod +x dist/index.js",
19
- "dev": "tsc --watch",
20
- "lint": "tsc --noEmit",
18
+ "generate": "tsx scripts/generate.ts",
19
+ "generate:check": "tsx scripts/generate.ts --check",
20
+ "build": "npm run generate && tsc && chmod +x dist/index.js",
21
+ "dev": "tsx src/index.ts",
22
+ "lint": "npm run generate:check && tsc --noEmit",
21
23
  "prepublishOnly": "npm run build"
22
24
  },
23
25
  "dependencies": {
@@ -26,7 +28,10 @@
26
28
  "zod": "3.25.76"
27
29
  },
28
30
  "devDependencies": {
31
+ "@types/express": "^5.0.6",
29
32
  "@types/node": "22.19.17",
33
+ "json-schema-to-zod": "^2.8.1",
34
+ "tsx": "^4.21.0",
30
35
  "typescript": "5.9.3"
31
36
  },
32
37
  "repository": {