listbee-mcp 0.1.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.
Files changed (48) hide show
  1. package/LICENSE +184 -0
  2. package/README.md +202 -0
  3. package/dist/client.d.ts +18 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +61 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +98 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/manifest.d.ts +22 -0
  12. package/dist/manifest.d.ts.map +1 -0
  13. package/dist/manifest.js +26 -0
  14. package/dist/manifest.js.map +1 -0
  15. package/dist/schemas.d.ts +87 -0
  16. package/dist/schemas.d.ts.map +1 -0
  17. package/dist/schemas.js +137 -0
  18. package/dist/schemas.js.map +1 -0
  19. package/dist/server.d.ts +12 -0
  20. package/dist/server.d.ts.map +1 -0
  21. package/dist/server.js +149 -0
  22. package/dist/server.js.map +1 -0
  23. package/dist/tools/files.d.ts +7 -0
  24. package/dist/tools/files.d.ts.map +1 -0
  25. package/dist/tools/files.js +34 -0
  26. package/dist/tools/files.js.map +1 -0
  27. package/dist/tools/listings.d.ts +44 -0
  28. package/dist/tools/listings.d.ts.map +1 -0
  29. package/dist/tools/listings.js +83 -0
  30. package/dist/tools/listings.js.map +1 -0
  31. package/dist/tools/orders.d.ts +15 -0
  32. package/dist/tools/orders.d.ts.map +1 -0
  33. package/dist/tools/orders.js +28 -0
  34. package/dist/tools/orders.js.map +1 -0
  35. package/dist/tools/shared.d.ts +18 -0
  36. package/dist/tools/shared.d.ts.map +1 -0
  37. package/dist/tools/shared.js +31 -0
  38. package/dist/tools/shared.js.map +1 -0
  39. package/dist/tools/stripe.d.ts +4 -0
  40. package/dist/tools/stripe.d.ts.map +1 -0
  41. package/dist/tools/stripe.js +21 -0
  42. package/dist/tools/stripe.js.map +1 -0
  43. package/dist/types.d.ts +22 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +61 -0
  46. package/dist/types.js.map +1 -0
  47. package/mcp-tools.yaml +170 -0
  48. package/package.json +44 -0
@@ -0,0 +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"}
@@ -0,0 +1,18 @@
1
+ import type { ToolMeta } from "../manifest.js";
2
+ export interface Deliverable {
3
+ type: string;
4
+ token?: string;
5
+ value?: string;
6
+ label?: string;
7
+ }
8
+ /**
9
+ * Auto-generate a human-readable title from a snake_case tool name.
10
+ * e.g. "create_listing" → "Create Listing"
11
+ */
12
+ export declare function autoTitle(name: string): string;
13
+ /**
14
+ * Build a structured description from manifest metadata.
15
+ * Complex tools get structured markdown; simple ones get a single sentence.
16
+ */
17
+ export declare function buildDescription(meta: ToolMeta): string;
18
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAsBvD"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Auto-generate a human-readable title from a snake_case tool name.
3
+ * e.g. "create_listing" → "Create Listing"
4
+ */
5
+ export function autoTitle(name) {
6
+ return name
7
+ .split("_")
8
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
9
+ .join(" ");
10
+ }
11
+ /**
12
+ * Build a structured description from manifest metadata.
13
+ * Complex tools get structured markdown; simple ones get a single sentence.
14
+ */
15
+ export function buildDescription(meta) {
16
+ const parts = [];
17
+ if (meta.description) {
18
+ parts.push(meta.description.trim());
19
+ }
20
+ if (meta.when_to_use) {
21
+ parts.push(`**When to use:** ${meta.when_to_use}`);
22
+ }
23
+ if (meta.hints && meta.hints.length > 0) {
24
+ parts.push(`**Tips:**\n${meta.hints.map((h) => `- ${h}`).join("\n")}`);
25
+ }
26
+ if (meta.requires_human) {
27
+ parts.push("**Note:** This action requires human intervention. You cannot complete it yourself.");
28
+ }
29
+ return parts.join("\n\n");
30
+ }
31
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CACR,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { ListBeeClient } from "../client.js";
3
+ export declare function handleStartStripeConnect(client: ListBeeClient): Promise<CallToolResult>;
4
+ //# sourceMappingURL=stripe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/tools/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
@@ -0,0 +1,21 @@
1
+ import { errorResult } from "../types.js";
2
+ // --- start_stripe_connect ---
3
+ export async function handleStartStripeConnect(client) {
4
+ try {
5
+ const data = await client.request("POST", "/v1/account/stripe/connect");
6
+ const url = data.url;
7
+ return {
8
+ content: [
9
+ { type: "text", text: JSON.stringify(data, null, 2) },
10
+ {
11
+ type: "text",
12
+ text: `IMPORTANT: You cannot complete Stripe onboarding. Share this URL with the user so they can complete it in their browser: ${url}`,
13
+ },
14
+ ],
15
+ };
16
+ }
17
+ catch (err) {
18
+ return errorResult(err);
19
+ }
20
+ }
21
+ //# sourceMappingURL=stripe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/tools/stripe.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,+BAA+B;AAE/B,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAqB;IAErB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,MAAM,EACN,4BAA4B,CAC7B,CAAC;QAEF,MAAM,GAAG,GAAI,IAAwB,CAAC,GAAG,CAAC;QAE1C,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;gBACrD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4HAA4H,GAAG,EAAE;iBACxI;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ /**
3
+ * Error thrown by ListBeeClient on non-2xx responses.
4
+ */
5
+ export declare class ListBeeApiError extends Error {
6
+ readonly status: number;
7
+ readonly body: unknown;
8
+ constructor(status: number, body: unknown);
9
+ }
10
+ /**
11
+ * Format a successful result as JSON text content.
12
+ */
13
+ export declare function jsonResult(data: unknown): CallToolResult;
14
+ /**
15
+ * Format an error as an isError result so the LLM can reason about it.
16
+ */
17
+ export declare function errorResult(err: unknown): CallToolResult;
18
+ /**
19
+ * Wraps an async function so errors never propagate — they become { isError: true } results.
20
+ */
21
+ export declare function safeTool<T>(fn: () => Promise<T>): Promise<CallToolResult>;
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,OAAO;gBADb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO;CAShC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAIxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAyBxD;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAO/E"}
package/dist/types.js ADDED
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Error thrown by ListBeeClient on non-2xx responses.
3
+ */
4
+ export class ListBeeApiError extends Error {
5
+ status;
6
+ body;
7
+ constructor(status, body) {
8
+ const msg = typeof body === "object" && body !== null && "detail" in body
9
+ ? String(body.detail)
10
+ : JSON.stringify(body);
11
+ super(`ListBee API error ${status}: ${msg}`);
12
+ this.status = status;
13
+ this.body = body;
14
+ this.name = "ListBeeApiError";
15
+ }
16
+ }
17
+ /**
18
+ * Format a successful result as JSON text content.
19
+ */
20
+ export function jsonResult(data) {
21
+ return {
22
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
23
+ };
24
+ }
25
+ /**
26
+ * Format an error as an isError result so the LLM can reason about it.
27
+ */
28
+ export function errorResult(err) {
29
+ if (err instanceof ListBeeApiError) {
30
+ return {
31
+ isError: true,
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: JSON.stringify({
36
+ status: err.status,
37
+ error: err.body,
38
+ }, null, 2),
39
+ },
40
+ ],
41
+ };
42
+ }
43
+ const message = err instanceof Error ? err.message : String(err);
44
+ return {
45
+ isError: true,
46
+ content: [{ type: "text", text: message }],
47
+ };
48
+ }
49
+ /**
50
+ * Wraps an async function so errors never propagate — they become { isError: true } results.
51
+ */
52
+ export async function safeTool(fn) {
53
+ try {
54
+ const result = await fn();
55
+ return jsonResult(result);
56
+ }
57
+ catch (err) {
58
+ return errorResult(err);
59
+ }
60
+ }
61
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAEtB;IACA;IAFlB,YACkB,MAAc,EACd,IAAa;QAE7B,MAAM,GAAG,GACP,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI;YAC3D,CAAC,CAAC,MAAM,CAAE,IAAgC,CAAC,MAAM,CAAC;YAClD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,CAAC,qBAAqB,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;QAP7B,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAS;QAO7B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,KAAK,EAAE,GAAG,CAAC,IAAI;qBAChB,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,EAAoB;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
package/mcp-tools.yaml ADDED
@@ -0,0 +1,170 @@
1
+ version: 1
2
+
3
+ # Priority scale:
4
+ # 10 = golden-path / core workflow
5
+ # 7-9 = common operations
6
+ # 4-6 = situational
7
+ # 1-3 = rare / cleanup
8
+
9
+ tools:
10
+ # --- Listings ---
11
+ - type: operation
12
+ operation_id: create_listing
13
+ name: create_listing
14
+ category: listings
15
+ priority: 10
16
+ status: active
17
+ when_to_use: "Use when the user wants to sell something new."
18
+ description: >
19
+ Create a new listing for sale. Returns a checkout URL and readiness status.
20
+ hints:
21
+ - "Always check readiness.sellable in the response"
22
+ - "readiness.next tells you the highest-priority action to take"
23
+ input_example:
24
+ name: "50 Cold Outreach Templates"
25
+ price: 1900
26
+
27
+ - type: operation
28
+ operation_id: get_listing
29
+ name: get_listing
30
+ category: listings
31
+ priority: 9
32
+ status: active
33
+ when_to_use: "Use after any mutation (create, update, set_deliverables) to inspect readiness and determine what to do next."
34
+ description: >
35
+ Get a listing's full state including readiness. This is the readiness
36
+ inspection tool — call it after every change to check what's needed.
37
+ hints:
38
+ - "This is how you check readiness — call it after every create/update"
39
+ - "readiness.sellable tells you if the listing is live"
40
+ - "readiness.actions lists what's missing, with kind (api/human) and resolve details"
41
+ - "readiness.next points to the highest-priority action"
42
+
43
+ - type: operation
44
+ operation_id: update_listing
45
+ name: update_listing
46
+ category: listings
47
+ priority: 9
48
+ status: active
49
+ when_to_use: "Use when changing title, price, or other listing details."
50
+ input_example:
51
+ name: "100 Cold Outreach Templates (Updated)"
52
+ price: 2900
53
+
54
+ - type: operation
55
+ operation_id: list_listings
56
+ name: list_listings
57
+ category: listings
58
+ priority: 7
59
+ status: active
60
+ when_to_use: "Use to see all listings for the current account."
61
+
62
+ - type: operation
63
+ operation_id: publish_listing
64
+ name: publish_listing
65
+ category: listings
66
+ priority: 10
67
+ status: active
68
+ when_to_use: "Use when the user wants the listing to go live and readiness indicates it can be published."
69
+ description: >
70
+ Publish a listing so buyers can access the product page.
71
+ Only works when readiness.publishable is true.
72
+ hints:
73
+ - "Check readiness first — this fails if listing is not publishable"
74
+
75
+ - type: operation
76
+ operation_id: set_deliverables
77
+ name: set_deliverables
78
+ category: listings
79
+ priority: 9
80
+ status: active
81
+ when_to_use: "Use after creating a listing to attach digital content for automatic delivery."
82
+ description: >
83
+ Set digital deliverables (files, URLs, or text) on a listing.
84
+ Required for managed fulfillment mode.
85
+ input_example:
86
+ deliverables:
87
+ - type: "url"
88
+ value: "https://example.com/templates.zip"
89
+ label: "Download link"
90
+
91
+ - type: operation
92
+ operation_id: remove_deliverables
93
+ name: remove_deliverables
94
+ category: listings
95
+ priority: 3
96
+ status: active
97
+ when_to_use: "Use when switching a listing from managed to external fulfillment."
98
+
99
+ - type: operation
100
+ operation_id: delete_listing
101
+ name: delete_listing
102
+ category: listings
103
+ priority: 2
104
+ status: active
105
+ when_to_use: "Use when the user wants to permanently remove a listing."
106
+
107
+ # --- Files ---
108
+ - type: operation
109
+ operation_id: upload_file
110
+ name: upload_file
111
+ category: files
112
+ priority: 8
113
+ status: active
114
+ when_to_use: "Use when the user has a file to sell. Upload first, then use the returned token in set_deliverables."
115
+ description: >
116
+ Fetches the file from the URL and uploads it to ListBee. Only use with URLs the user has provided or that you trust.
117
+ hints:
118
+ - "Returns a file token — pass it to set_deliverables to attach the file to a listing"
119
+
120
+ # --- Orders ---
121
+ - type: operation
122
+ operation_id: list_orders
123
+ name: list_orders
124
+ category: orders
125
+ priority: 7
126
+ status: active
127
+ when_to_use: "Use when the user wants to see their sales or check order status."
128
+
129
+ - type: operation
130
+ operation_id: get_order
131
+ name: get_order
132
+ category: orders
133
+ priority: 6
134
+ status: active
135
+ when_to_use: "Use to get full details of a specific order including buyer info and payment."
136
+
137
+ - type: operation
138
+ operation_id: deliver_order
139
+ name: deliver_order
140
+ category: orders
141
+ priority: 8
142
+ status: active
143
+ when_to_use: "Use only for external fulfillment orders when content must be sent after purchase by your app or workflow."
144
+ description: >
145
+ Push digital content to a buyer for an external fulfillment order.
146
+ Not needed for managed delivery — ListBee handles that automatically.
147
+
148
+ # --- Stripe ---
149
+ - type: operation
150
+ operation_id: start_stripe_connect
151
+ name: start_stripe_connect
152
+ category: stripe
153
+ priority: 10
154
+ status: active
155
+ requires_human: true
156
+ when_to_use: "Use when readiness says Stripe is not connected. Returns a URL the human must visit."
157
+ description: >
158
+ Start Stripe Connect onboarding. Returns a URL for the human to complete
159
+ in a browser. Required before selling through Stripe.
160
+ hints:
161
+ - "You cannot complete this — the human must open the URL"
162
+ - "After the human completes onboarding, check readiness again"
163
+
164
+ # --- Future composite tools (v2+) ---
165
+ # - type: composite
166
+ # name: create_and_publish
167
+ # category: workflows
168
+ # priority: 10
169
+ # steps: [create_listing, set_deliverables, publish_listing]
170
+ # when_to_use: "Use for one-shot listing creation when all details are ready."
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "listbee-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for ListBee — commerce API for AI agents",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "bin": {
8
+ "listbee-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "mcp-tools.yaml"
13
+ ],
14
+ "engines": {
15
+ "node": ">=20"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc && chmod +x dist/index.js",
19
+ "dev": "tsc --watch",
20
+ "lint": "tsc --noEmit",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "dependencies": {
24
+ "@modelcontextprotocol/sdk": "1.29.0",
25
+ "yaml": "2.8.3",
26
+ "zod": "3.25.76"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "22.19.17",
30
+ "typescript": "5.9.3"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/listbee-dev/listbee-mcp.git"
35
+ },
36
+ "homepage": "https://listbee.so",
37
+ "keywords": [
38
+ "mcp",
39
+ "listbee",
40
+ "commerce",
41
+ "ai-agents",
42
+ "model-context-protocol"
43
+ ]
44
+ }