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,87 @@
1
+ import { z } from "zod";
2
+ export declare const createListingSchema: {
3
+ name: z.ZodString;
4
+ price: z.ZodNumber;
5
+ description: z.ZodOptional<z.ZodString>;
6
+ tagline: z.ZodOptional<z.ZodString>;
7
+ stock: z.ZodOptional<z.ZodNumber>;
8
+ cover: z.ZodOptional<z.ZodString>;
9
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
10
+ };
11
+ export declare const getListingSchema: {
12
+ listing_id: z.ZodString;
13
+ };
14
+ export declare const updateListingSchema: {
15
+ listing_id: z.ZodString;
16
+ name: z.ZodOptional<z.ZodString>;
17
+ slug: z.ZodOptional<z.ZodString>;
18
+ price: z.ZodOptional<z.ZodNumber>;
19
+ description: z.ZodOptional<z.ZodString>;
20
+ tagline: z.ZodOptional<z.ZodString>;
21
+ stock: z.ZodOptional<z.ZodNumber>;
22
+ cover: z.ZodOptional<z.ZodString>;
23
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ };
25
+ export declare const listListingsSchema: {
26
+ cursor: z.ZodOptional<z.ZodString>;
27
+ limit: z.ZodOptional<z.ZodNumber>;
28
+ };
29
+ export declare const publishListingSchema: {
30
+ listing_id: z.ZodString;
31
+ };
32
+ export declare const setDeliverablesSchema: {
33
+ listing_id: z.ZodString;
34
+ deliverables: z.ZodArray<z.ZodObject<{
35
+ type: z.ZodEnum<["file", "url", "text"]>;
36
+ token: z.ZodOptional<z.ZodString>;
37
+ value: z.ZodOptional<z.ZodString>;
38
+ label: z.ZodOptional<z.ZodString>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ type: "url" | "text" | "file";
41
+ token?: string | undefined;
42
+ value?: string | undefined;
43
+ label?: string | undefined;
44
+ }, {
45
+ type: "url" | "text" | "file";
46
+ token?: string | undefined;
47
+ value?: string | undefined;
48
+ label?: string | undefined;
49
+ }>, "many">;
50
+ };
51
+ export declare const removeDeliverablesSchema: {
52
+ listing_id: z.ZodString;
53
+ };
54
+ export declare const deleteListingSchema: {
55
+ listing_id: z.ZodString;
56
+ };
57
+ export declare const uploadFileSchema: {
58
+ url: z.ZodString;
59
+ filename: z.ZodOptional<z.ZodString>;
60
+ };
61
+ export declare const listOrdersSchema: {
62
+ cursor: z.ZodOptional<z.ZodString>;
63
+ limit: z.ZodOptional<z.ZodNumber>;
64
+ };
65
+ export declare const getOrderSchema: {
66
+ order_id: z.ZodString;
67
+ };
68
+ export declare const deliverOrderSchema: {
69
+ order_id: z.ZodString;
70
+ deliverables: z.ZodArray<z.ZodObject<{
71
+ type: z.ZodEnum<["file", "url", "text"]>;
72
+ token: z.ZodOptional<z.ZodString>;
73
+ value: z.ZodOptional<z.ZodString>;
74
+ label: z.ZodOptional<z.ZodString>;
75
+ }, "strip", z.ZodTypeAny, {
76
+ type: "url" | "text" | "file";
77
+ token?: string | undefined;
78
+ value?: string | undefined;
79
+ label?: string | undefined;
80
+ }, {
81
+ type: "url" | "text" | "file";
82
+ token?: string | undefined;
83
+ value?: string | undefined;
84
+ label?: string | undefined;
85
+ }>, "many">;
86
+ };
87
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkCxB,eAAO,MAAM,mBAAmB;;;;;;;;CA6B/B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;CAE5B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;CA6B/B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAG9B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;CAEhC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;CAMjC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;CAEpC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;CAa5B,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;CAM9B,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { z } from "zod";
2
+ // --- Shared field descriptions ---
3
+ const listingIdDesc = "Listing ID (lst_...). You MUST use an actual listing ID from a previous response.";
4
+ const orderIdDesc = "Order ID (ord_...). You MUST use an actual order ID from a previous response.";
5
+ const cursorDesc = "Pagination cursor from a previous list response. Omit to start from the beginning.";
6
+ const limitDesc = "Number of items to return (1-100). Defaults to 20.";
7
+ // --- Deliverable schema (reused in set_deliverables and deliver_order) ---
8
+ const deliverableSchema = z.object({
9
+ type: z
10
+ .enum(["file", "url", "text"])
11
+ .describe("Deliverable type: 'file' (uploaded file token), 'url' (link), or 'text' (plain text)."),
12
+ token: z
13
+ .string()
14
+ .optional()
15
+ .describe("File token from upload_file. Required when type is 'file'."),
16
+ value: z
17
+ .string()
18
+ .optional()
19
+ .describe("URL or text content. Required when type is 'url' or 'text'."),
20
+ label: z
21
+ .string()
22
+ .optional()
23
+ .describe("Human-readable label shown to the buyer (e.g. 'Download link')."),
24
+ });
25
+ // --- Listing tools ---
26
+ export const createListingSchema = {
27
+ name: z.string().describe("Product name shown to buyers."),
28
+ price: z
29
+ .number()
30
+ .int()
31
+ .min(100)
32
+ .describe("Price in minor units (cents). Minimum $1.00 (100 cents)."),
33
+ description: z
34
+ .string()
35
+ .optional()
36
+ .describe("Product description shown on the product page. Supports markdown."),
37
+ tagline: z
38
+ .string()
39
+ .optional()
40
+ .describe("Short tagline displayed below the product name."),
41
+ stock: z
42
+ .number()
43
+ .int()
44
+ .min(0)
45
+ .optional()
46
+ .describe("Available stock quantity. Omit for unlimited."),
47
+ cover: z
48
+ .string()
49
+ .optional()
50
+ .describe("File token for cover image (from upload_file)."),
51
+ metadata: z
52
+ .record(z.unknown())
53
+ .optional()
54
+ .describe("Arbitrary key-value metadata attached to the listing."),
55
+ };
56
+ export const getListingSchema = {
57
+ listing_id: z.string().describe(listingIdDesc),
58
+ };
59
+ export const updateListingSchema = {
60
+ listing_id: z.string().describe(listingIdDesc),
61
+ name: z.string().optional().describe("New product name."),
62
+ slug: z
63
+ .string()
64
+ .optional()
65
+ .describe("New URL slug. Must be globally unique."),
66
+ price: z
67
+ .number()
68
+ .int()
69
+ .min(100)
70
+ .optional()
71
+ .describe("New price in minor units (cents)."),
72
+ description: z.string().optional().describe("New product description."),
73
+ tagline: z.string().optional().describe("New tagline."),
74
+ stock: z
75
+ .number()
76
+ .int()
77
+ .min(0)
78
+ .optional()
79
+ .describe("New stock quantity. Omit for unlimited."),
80
+ cover: z
81
+ .string()
82
+ .optional()
83
+ .describe("New cover image file token."),
84
+ metadata: z
85
+ .record(z.unknown())
86
+ .optional()
87
+ .describe("Replace all metadata with these key-value pairs."),
88
+ };
89
+ export const listListingsSchema = {
90
+ cursor: z.string().optional().describe(cursorDesc),
91
+ limit: z.number().int().min(1).max(100).optional().describe(limitDesc),
92
+ };
93
+ export const publishListingSchema = {
94
+ listing_id: z.string().describe(listingIdDesc),
95
+ };
96
+ export const setDeliverablesSchema = {
97
+ listing_id: z.string().describe(listingIdDesc),
98
+ deliverables: z
99
+ .array(deliverableSchema)
100
+ .min(1)
101
+ .describe("Array of deliverables to attach. At least one required."),
102
+ };
103
+ export const removeDeliverablesSchema = {
104
+ listing_id: z.string().describe(listingIdDesc),
105
+ };
106
+ export const deleteListingSchema = {
107
+ listing_id: z.string().describe(listingIdDesc),
108
+ };
109
+ // --- File tools ---
110
+ export const uploadFileSchema = {
111
+ url: z
112
+ .string()
113
+ .url()
114
+ .describe("Public URL of a file to upload. The server fetches this URL — only provide URLs from the user or trusted sources."),
115
+ filename: z
116
+ .string()
117
+ .optional()
118
+ .describe("Filename for the uploaded file. If omitted, derived from the URL."),
119
+ };
120
+ // --- Order tools ---
121
+ export const listOrdersSchema = {
122
+ cursor: z.string().optional().describe(cursorDesc),
123
+ limit: z.number().int().min(1).max(100).optional().describe(limitDesc),
124
+ };
125
+ export const getOrderSchema = {
126
+ order_id: z.string().describe(orderIdDesc),
127
+ };
128
+ export const deliverOrderSchema = {
129
+ order_id: z.string().describe(orderIdDesc),
130
+ deliverables: z
131
+ .array(deliverableSchema)
132
+ .min(1)
133
+ .describe("Deliverables to send to the buyer."),
134
+ };
135
+ // --- Stripe tools (no input params) ---
136
+ // start_stripe_connect has no input schema
137
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ interface CreateServerOptions {
3
+ apiKey: string;
4
+ baseUrl?: string;
5
+ toolFilter?: Set<string>;
6
+ }
7
+ /**
8
+ * Create and configure the MCP server with all tools registered.
9
+ */
10
+ export declare function createServer(options: CreateServerOptions): McpServer;
11
+ export {};
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +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"}
package/dist/server.js ADDED
@@ -0,0 +1,149 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ListBeeClient } from "./client.js";
3
+ import { loadManifest, indexManifest } from "./manifest.js";
4
+ import { autoTitle, buildDescription } from "./tools/shared.js";
5
+ import * as schemas from "./schemas.js";
6
+ import { handleCreateListing, handleGetListing, handleUpdateListing, handleListListings, handlePublishListing, handleSetDeliverables, handleRemoveDeliverables, handleDeleteListing, } from "./tools/listings.js";
7
+ import { handleListOrders, handleGetOrder, handleDeliverOrder, } from "./tools/orders.js";
8
+ import { handleUploadFile } from "./tools/files.js";
9
+ import { handleStartStripeConnect } from "./tools/stripe.js";
10
+ // Read version from package.json
11
+ import { readFileSync } from "node:fs";
12
+ import { resolve, dirname } from "node:path";
13
+ import { fileURLToPath } from "node:url";
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const pkg = JSON.parse(readFileSync(resolve(__dirname, "..", "package.json"), "utf-8"));
16
+ const SERVER_INSTRUCTIONS = `ListBee is a commerce API for AI agents.
17
+ Golden path: create_listing → set_deliverables → get_listing (check readiness) → publish_listing.
18
+ Always call get_listing after mutations to inspect readiness.
19
+ readiness.sellable tells you if the listing is live.
20
+ readiness.actions lists what's missing — kind:api means you can fix it, kind:human means the user must.`;
21
+ /**
22
+ * Annotation defaults per HTTP method pattern.
23
+ */
24
+ function annotationsFor(name) {
25
+ if (name.startsWith("get_") || name.startsWith("list_")) {
26
+ return { readOnlyHint: true, destructiveHint: false, openWorldHint: false };
27
+ }
28
+ if (name.startsWith("delete_") || name === "remove_deliverables") {
29
+ return {
30
+ readOnlyHint: false,
31
+ destructiveHint: true,
32
+ openWorldHint: false,
33
+ };
34
+ }
35
+ if (name.startsWith("update_") || name === "set_deliverables") {
36
+ return {
37
+ readOnlyHint: false,
38
+ destructiveHint: false,
39
+ idempotentHint: true,
40
+ openWorldHint: false,
41
+ };
42
+ }
43
+ if (name === "upload_file") {
44
+ return {
45
+ readOnlyHint: false,
46
+ destructiveHint: false,
47
+ openWorldHint: true,
48
+ };
49
+ }
50
+ // create, publish, stripe connect
51
+ return {
52
+ readOnlyHint: false,
53
+ destructiveHint: false,
54
+ openWorldHint: false,
55
+ };
56
+ }
57
+ /**
58
+ * Schema map — links tool names to their Zod input shapes.
59
+ */
60
+ 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
74
+ };
75
+ /**
76
+ * Handler map — links tool names to their handler functions.
77
+ */
78
+ 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
+ const handler = handlers[name];
95
+ if (handler) {
96
+ return (args) => handler(client, args);
97
+ }
98
+ // Special case: start_stripe_connect takes no args
99
+ if (name === "start_stripe_connect") {
100
+ return () => handleStartStripeConnect(client);
101
+ }
102
+ return undefined;
103
+ }
104
+ /**
105
+ * Create and configure the MCP server with all tools registered.
106
+ */
107
+ export function createServer(options) {
108
+ const client = new ListBeeClient(options.apiKey, options.baseUrl);
109
+ const allTools = loadManifest();
110
+ const metaIndex = indexManifest(allTools);
111
+ const server = new McpServer({ name: "listbee-mcp", version: pkg.version }, {
112
+ capabilities: { tools: {} },
113
+ instructions: SERVER_INSTRUCTIONS,
114
+ });
115
+ // Register each tool
116
+ for (const [toolName, schema] of Object.entries(schemaMap)) {
117
+ // Apply filter if specified
118
+ if (options.toolFilter && !options.toolFilter.has(toolName)) {
119
+ continue;
120
+ }
121
+ const meta = metaIndex.get(toolName);
122
+ if (!meta) {
123
+ console.error(`Warning: no manifest entry for tool "${toolName}", skipping.`);
124
+ continue;
125
+ }
126
+ const description = buildDescription(meta);
127
+ const title = autoTitle(toolName);
128
+ const annotations = annotationsFor(toolName);
129
+ const handler = getHandler(toolName, client);
130
+ if (!handler) {
131
+ console.error(`Warning: no handler for tool "${toolName}", skipping.`);
132
+ continue;
133
+ }
134
+ if (schema) {
135
+ server.tool(toolName, description, schema, annotations, async (args) => {
136
+ return await handler(args);
137
+ });
138
+ }
139
+ else {
140
+ // No input schema (e.g. start_stripe_connect)
141
+ server.tool(toolName, description, annotations, async () => {
142
+ return await handler({});
143
+ });
144
+ }
145
+ console.error(` Registered tool: ${title} (${toolName})`);
146
+ }
147
+ return server;
148
+ }
149
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { ListBeeClient } from "../client.js";
3
+ export declare function handleUploadFile(client: ListBeeClient, args: {
4
+ url: string;
5
+ filename?: string;
6
+ }): Promise<CallToolResult>;
7
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
@@ -0,0 +1,34 @@
1
+ import { safeTool } from "../types.js";
2
+ // --- upload_file ---
3
+ export async function handleUploadFile(client, args) {
4
+ return safeTool(async () => {
5
+ // Fetch the file from the provided URL
6
+ const res = await fetch(args.url);
7
+ if (!res.ok) {
8
+ throw new Error(`Failed to fetch file from ${args.url}: ${res.status} ${res.statusText}`);
9
+ }
10
+ const buffer = new Uint8Array(await res.arrayBuffer());
11
+ // Derive filename from URL if not provided
12
+ const filename = args.filename ?? deriveFilename(args.url) ?? "uploaded-file";
13
+ const data = await client.uploadFile(buffer, filename);
14
+ return data;
15
+ });
16
+ }
17
+ /**
18
+ * Extract a reasonable filename from a URL path.
19
+ */
20
+ function deriveFilename(url) {
21
+ try {
22
+ const pathname = new URL(url).pathname;
23
+ const segments = pathname.split("/").filter(Boolean);
24
+ const last = segments[segments.length - 1];
25
+ if (last && last.includes(".")) {
26
+ return decodeURIComponent(last);
27
+ }
28
+ return undefined;
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,sBAAsB;AAEtB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,IAAwC;IAExC,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,uCAAuC;QACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CACzE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAEvD,2CAA2C;QAC3C,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;QAE/D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { ListBeeClient } from "../client.js";
3
+ import type { Deliverable } from "./shared.js";
4
+ export declare function handleCreateListing(client: ListBeeClient, args: {
5
+ name: string;
6
+ price: number;
7
+ description?: string;
8
+ tagline?: string;
9
+ stock?: number;
10
+ cover?: string;
11
+ metadata?: Record<string, unknown>;
12
+ }): Promise<CallToolResult>;
13
+ export declare function handleGetListing(client: ListBeeClient, args: {
14
+ listing_id: string;
15
+ }): Promise<CallToolResult>;
16
+ export declare function handleUpdateListing(client: ListBeeClient, args: {
17
+ listing_id: string;
18
+ name?: string;
19
+ slug?: string;
20
+ price?: number;
21
+ description?: string;
22
+ tagline?: string;
23
+ stock?: number;
24
+ cover?: string;
25
+ metadata?: Record<string, unknown>;
26
+ }): Promise<CallToolResult>;
27
+ export declare function handleListListings(client: ListBeeClient, args: {
28
+ cursor?: string;
29
+ limit?: number;
30
+ }): Promise<CallToolResult>;
31
+ export declare function handlePublishListing(client: ListBeeClient, args: {
32
+ listing_id: string;
33
+ }): Promise<CallToolResult>;
34
+ export declare function handleSetDeliverables(client: ListBeeClient, args: {
35
+ listing_id: string;
36
+ deliverables: Deliverable[];
37
+ }): Promise<CallToolResult>;
38
+ export declare function handleRemoveDeliverables(client: ListBeeClient, args: {
39
+ listing_id: string;
40
+ }): Promise<CallToolResult>;
41
+ export declare function handleDeleteListing(client: ListBeeClient, args: {
42
+ listing_id: string;
43
+ }): Promise<CallToolResult>;
44
+ //# sourceMappingURL=listings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listings.d.ts","sourceRoot":"","sources":["../../src/tools/listings.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,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACA,OAAO,CAAC,cAAc,CAAC,CAezB;AAID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,cAAc,CAAC,CAIzB;AAID,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACA,OAAO,CAAC,cAAc,CAAC,CAYzB;AAID,wBAAsB,kBAAkB,CACtC,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,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,cAAc,CAAC,CAQzB;AAID,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,GACxD,OAAO,CAAC,cAAc,CAAC,CAQzB;AAID,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,cAAc,CAAC,CAQzB;AAID,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,cAAc,CAAC,CAKzB"}
@@ -0,0 +1,83 @@
1
+ import { safeTool } from "../types.js";
2
+ // --- create_listing ---
3
+ export async function handleCreateListing(client, args) {
4
+ return safeTool(async () => {
5
+ const body = {
6
+ name: args.name,
7
+ price: args.price,
8
+ };
9
+ if (args.description !== undefined)
10
+ body.description = args.description;
11
+ if (args.tagline !== undefined)
12
+ body.tagline = args.tagline;
13
+ if (args.stock !== undefined)
14
+ body.stock = args.stock;
15
+ if (args.cover !== undefined)
16
+ body.cover = args.cover;
17
+ if (args.metadata !== undefined)
18
+ body.metadata = args.metadata;
19
+ const data = await client.request("POST", "/v1/listings", body);
20
+ return data;
21
+ });
22
+ }
23
+ // --- get_listing ---
24
+ export async function handleGetListing(client, args) {
25
+ return safeTool(async () => {
26
+ return await client.request("GET", `/v1/listings/${args.listing_id}`);
27
+ });
28
+ }
29
+ // --- update_listing ---
30
+ export async function handleUpdateListing(client, args) {
31
+ return safeTool(async () => {
32
+ const { listing_id, ...rest } = args;
33
+ // Only include fields that were explicitly provided
34
+ const body = {};
35
+ for (const [key, value] of Object.entries(rest)) {
36
+ if (value !== undefined) {
37
+ body[key] = value;
38
+ }
39
+ }
40
+ return await client.request("PUT", `/v1/listings/${listing_id}`, body);
41
+ });
42
+ }
43
+ // --- list_listings ---
44
+ export async function handleListListings(client, args) {
45
+ return safeTool(async () => {
46
+ const params = new URLSearchParams();
47
+ if (args.cursor)
48
+ params.set("cursor", args.cursor);
49
+ if (args.limit !== undefined)
50
+ params.set("limit", String(args.limit));
51
+ const qs = params.toString();
52
+ const path = `/v1/listings${qs ? `?${qs}` : ""}`;
53
+ return await client.request("GET", path);
54
+ });
55
+ }
56
+ // --- publish_listing ---
57
+ export async function handlePublishListing(client, args) {
58
+ return safeTool(async () => {
59
+ const data = await client.request("POST", `/v1/listings/${args.listing_id}/publish`);
60
+ return data;
61
+ });
62
+ }
63
+ // --- set_deliverables ---
64
+ export async function handleSetDeliverables(client, args) {
65
+ return safeTool(async () => {
66
+ return await client.request("PUT", `/v1/listings/${args.listing_id}/deliverables`, { deliverables: args.deliverables });
67
+ });
68
+ }
69
+ // --- remove_deliverables ---
70
+ export async function handleRemoveDeliverables(client, args) {
71
+ return safeTool(async () => {
72
+ await client.request("DELETE", `/v1/listings/${args.listing_id}/deliverables`);
73
+ return { success: true, message: "Deliverables removed." };
74
+ });
75
+ }
76
+ // --- delete_listing ---
77
+ export async function handleDeleteListing(client, args) {
78
+ return safeTool(async () => {
79
+ await client.request("DELETE", `/v1/listings/${args.listing_id}`);
80
+ return { success: true, message: "Listing deleted." };
81
+ });
82
+ }
83
+ //# sourceMappingURL=listings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listings.js","sourceRoot":"","sources":["../../src/tools/listings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { ListBeeClient } from "../client.js";
3
+ import type { Deliverable } from "./shared.js";
4
+ export declare function handleListOrders(client: ListBeeClient, args: {
5
+ cursor?: string;
6
+ limit?: number;
7
+ }): Promise<CallToolResult>;
8
+ export declare function handleGetOrder(client: ListBeeClient, args: {
9
+ order_id: string;
10
+ }): Promise<CallToolResult>;
11
+ export declare function handleDeliverOrder(client: ListBeeClient, args: {
12
+ order_id: string;
13
+ deliverables: Deliverable[];
14
+ }): Promise<CallToolResult>;
15
+ //# sourceMappingURL=orders.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,28 @@
1
+ import { safeTool } from "../types.js";
2
+ // --- list_orders ---
3
+ export async function handleListOrders(client, args) {
4
+ return safeTool(async () => {
5
+ const params = new URLSearchParams();
6
+ if (args.cursor)
7
+ params.set("cursor", args.cursor);
8
+ if (args.limit !== undefined)
9
+ params.set("limit", String(args.limit));
10
+ const qs = params.toString();
11
+ const path = `/v1/orders${qs ? `?${qs}` : ""}`;
12
+ return await client.request("GET", path);
13
+ });
14
+ }
15
+ // --- get_order ---
16
+ export async function handleGetOrder(client, args) {
17
+ return safeTool(async () => {
18
+ return await client.request("GET", `/v1/orders/${args.order_id}`);
19
+ });
20
+ }
21
+ // --- deliver_order ---
22
+ export async function handleDeliverOrder(client, args) {
23
+ return safeTool(async () => {
24
+ const data = await client.request("POST", `/v1/orders/${args.order_id}/deliver`, { deliverables: args.deliverables });
25
+ return data;
26
+ });
27
+ }
28
+ //# sourceMappingURL=orders.js.map