@getcheddar/cheddar-mcp 1.0.5 → 2.0.1

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 (43) hide show
  1. package/README.md +56 -330
  2. package/bin/cheddar-mcp.mjs +5 -0
  3. package/dist/core.d.ts +17 -0
  4. package/dist/core.d.ts.map +1 -0
  5. package/dist/core.js +79 -0
  6. package/dist/core.js.map +1 -0
  7. package/dist/http.d.ts +6 -0
  8. package/dist/http.d.ts.map +1 -0
  9. package/dist/http.js +65 -0
  10. package/dist/http.js.map +1 -0
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +24 -75
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/legacy-client.d.ts +44 -0
  16. package/dist/lib/legacy-client.d.ts.map +1 -0
  17. package/dist/lib/legacy-client.js +149 -0
  18. package/dist/lib/legacy-client.js.map +1 -0
  19. package/dist/tools/customers.d.ts +2 -2
  20. package/dist/tools/customers.d.ts.map +1 -1
  21. package/dist/tools/customers.js +103 -103
  22. package/dist/tools/customers.js.map +1 -1
  23. package/dist/tools/plans.d.ts +10 -0
  24. package/dist/tools/plans.d.ts.map +1 -0
  25. package/dist/tools/plans.js +26 -0
  26. package/dist/tools/plans.js.map +1 -0
  27. package/package.json +10 -7
  28. package/dist/lib/cheddar-client.d.ts +0 -111
  29. package/dist/lib/cheddar-client.d.ts.map +0 -1
  30. package/dist/lib/cheddar-client.js +0 -101
  31. package/dist/lib/cheddar-client.js.map +0 -1
  32. package/dist/tools/checkout.d.ts +0 -10
  33. package/dist/tools/checkout.d.ts.map +0 -1
  34. package/dist/tools/checkout.js +0 -641
  35. package/dist/tools/checkout.js.map +0 -1
  36. package/dist/tools/payment-methods.d.ts +0 -10
  37. package/dist/tools/payment-methods.d.ts.map +0 -1
  38. package/dist/tools/payment-methods.js +0 -162
  39. package/dist/tools/payment-methods.js.map +0 -1
  40. package/dist/tools/subscriptions.d.ts +0 -10
  41. package/dist/tools/subscriptions.d.ts.map +0 -1
  42. package/dist/tools/subscriptions.js +0 -191
  43. package/dist/tools/subscriptions.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,84 +1,33 @@
1
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
1
+ import "dotenv/config";
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
4
- import { CheddarApiClient } from "./lib/cheddar-client.js";
5
- import { customerTools, handleCustomerTool } from "./tools/customers.js";
6
- import { paymentMethodTools, handlePaymentMethodTool } from "./tools/payment-methods.js";
7
- import { subscriptionTools, handleSubscriptionTool } from "./tools/subscriptions.js";
8
- import { checkoutTools, handleCheckoutTool } from "./tools/checkout.js";
9
- // Configuration from environment
10
- const config = {
11
- apiUrl: process.env.CHEDDAR_API_URL || "https://api.chdr.dev",
12
- clientId: process.env.CHEDDAR_CLIENT_ID || "",
13
- clientSecret: process.env.CHEDDAR_CLIENT_SECRET || "",
14
- accessToken: process.env.CHEDDAR_ACCESS_TOKEN || "",
15
- };
16
- // Validate required config
17
- if (!config.accessToken && (!config.clientId || !config.clientSecret)) {
18
- console.error("Error: CHEDDAR_ACCESS_TOKEN or both CHEDDAR_CLIENT_ID and CHEDDAR_CLIENT_SECRET must be set");
19
- process.exit(1);
20
- }
21
- // Initialize Cheddar API client
22
- const cheddarClient = new CheddarApiClient(config);
23
- // Combine all tools
24
- const ALL_TOOLS = [
25
- ...customerTools,
26
- ...paymentMethodTools,
27
- ...subscriptionTools,
28
- ...checkoutTools,
29
- ];
30
- // Create MCP server
31
- const server = new Server({
32
- name: "cheddar-mcp",
33
- version: "0.1.0",
34
- }, {
35
- capabilities: {
36
- tools: {},
37
- },
38
- });
39
- // Handler for listing available tools
40
- server.setRequestHandler(ListToolsRequestSchema, async () => {
41
- return {
42
- tools: ALL_TOOLS,
43
- };
44
- });
45
- // Handler for tool execution
46
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
47
- const { name, arguments: args } = request.params;
3
+ import { LegacyApiError } from "./lib/legacy-client.js";
4
+ import { createCheddarMcpServer, MCP_PACKAGE_VERSION, runPreflight, } from "./core.js";
5
+ async function main() {
6
+ let server;
7
+ let client;
48
8
  try {
49
- // Route to appropriate handler based on tool name prefix
50
- if (name.startsWith("cheddar_customer_")) {
51
- return await handleCustomerTool(cheddarClient, name, args);
52
- }
53
- if (name.startsWith("cheddar_payment_")) {
54
- return await handlePaymentMethodTool(cheddarClient, name, args);
55
- }
56
- if (name.startsWith("cheddar_subscription_")) {
57
- return await handleSubscriptionTool(cheddarClient, name, args);
58
- }
59
- if (name.startsWith("cheddar_checkout_")) {
60
- return await handleCheckoutTool(cheddarClient, name, args);
61
- }
62
- throw new Error(`Unknown tool: ${name}`);
9
+ ({ server, client } = createCheddarMcpServer(MCP_PACKAGE_VERSION));
63
10
  }
64
- catch (error) {
65
- const errorMessage = error instanceof Error ? error.message : String(error);
66
- return {
67
- content: [
68
- {
69
- type: "text",
70
- text: `Error: ${errorMessage}`,
71
- },
72
- ],
73
- isError: true,
74
- };
11
+ catch (e) {
12
+ console.error(e instanceof Error ? e.message : String(e));
13
+ process.exit(1);
14
+ }
15
+ try {
16
+ await runPreflight(client);
17
+ }
18
+ catch (err) {
19
+ const msg = err instanceof Error ? err.message : String(err);
20
+ console.error(`Cheddar legacy API preflight failed: ${msg}`);
21
+ if (err instanceof LegacyApiError) {
22
+ console.error("[cheddar-mcp] Preflight response body:", typeof err.body === "string"
23
+ ? err.body.slice(0, 4000)
24
+ : JSON.stringify(err.body).slice(0, 4000));
25
+ }
26
+ process.exit(1);
75
27
  }
76
- });
77
- // Start server
78
- async function main() {
79
28
  const transport = new StdioServerTransport();
80
29
  await server.connect(transport);
81
- console.error("Cheddar MCP server running on stdio");
30
+ console.error("Cheddar MCP (legacy HTTP Basic) running on stdio");
82
31
  }
83
32
  main().catch((error) => {
84
33
  console.error("Fatal error:", error);
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":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,KAAK,UAAU,IAAI;IACjB,IAAI,MAAM,CAAC;IACX,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QAC7D,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CACX,wCAAwC,EACxC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAC1B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;gBACzB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC5C,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACpE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,44 @@
1
+ export interface LegacyCheddarConfig {
2
+ /** Product site origin, e.g. https://yoursubdomain.chargevault.com (no trailing slash) */
3
+ baseUrl: string;
4
+ productCode: string;
5
+ /** HTTP Basic username (authorized user email) */
6
+ username: string;
7
+ /** HTTP Basic password (user password or product API key) */
8
+ password: string;
9
+ }
10
+ export declare class LegacyCheddarClient {
11
+ private readonly base;
12
+ private readonly productCode;
13
+ private readonly auth;
14
+ constructor(cfg: LegacyCheddarConfig);
15
+ private parseBody;
16
+ /**
17
+ * GET legacy XML (or JSON if the endpoint supports `format=json`).
18
+ */
19
+ get(pathWithLeadingSlash: string, query?: Record<string, string>): Promise<unknown>;
20
+ /**
21
+ * POST `application/x-www-form-urlencoded` (legacy API style).
22
+ */
23
+ postForm(pathWithLeadingSlash: string, fields: Record<string, string>): Promise<unknown>;
24
+ ping(): Promise<unknown>;
25
+ getCustomer(by: "code" | "id", value: string): Promise<unknown>;
26
+ searchCustomers(params: Record<string, string>): Promise<unknown>;
27
+ getPlans(planCode?: string): Promise<unknown>;
28
+ /**
29
+ * Flat object keys become form keys; nested objects use bracket notation (subscription[planCode]).
30
+ */
31
+ createCustomer(fields: Record<string, unknown>): Promise<unknown>;
32
+ updateCustomer(customerCode: string, fields: Record<string, unknown>): Promise<unknown>;
33
+ }
34
+ export declare class LegacyApiError extends Error {
35
+ readonly status: number;
36
+ readonly body: unknown;
37
+ constructor(status: number, body: unknown);
38
+ }
39
+ /**
40
+ * Flattens `{ firstName: "a", subscription: { planCode: "FREE" } }` into
41
+ * `firstName`, `subscription[planCode]` for legacy form posts.
42
+ */
43
+ export declare function flattenFormFields(obj: Record<string, unknown>, prefix?: string): Record<string, string>;
44
+ //# sourceMappingURL=legacy-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-client.d.ts","sourceRoot":"","sources":["../../src/lib/legacy-client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgBD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,GAAG,EAAE,mBAAmB;YAMtB,SAAS;IAiBvB;;OAEG;IACG,GAAG,CAAC,oBAAoB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBzF;;OAEG;IACG,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBxF,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/D,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjE,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAO9F;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAM1C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,SAAK,GACV,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB"}
@@ -0,0 +1,149 @@
1
+ import { XMLParser } from "fast-xml-parser";
2
+ function trimSlash(s) {
3
+ return s.replace(/\/+$/, "");
4
+ }
5
+ function basicAuthHeader(username, password) {
6
+ const token = Buffer.from(`${username}:${password}`, "utf8").toString("base64");
7
+ return `Basic ${token}`;
8
+ }
9
+ const xmlParser = new XMLParser({
10
+ ignoreAttributes: false,
11
+ attributeNamePrefix: "@_",
12
+ });
13
+ export class LegacyCheddarClient {
14
+ base;
15
+ productCode;
16
+ auth;
17
+ constructor(cfg) {
18
+ this.base = trimSlash(cfg.baseUrl);
19
+ this.productCode = encodeURIComponent(cfg.productCode);
20
+ this.auth = basicAuthHeader(cfg.username, cfg.password);
21
+ }
22
+ async parseBody(res) {
23
+ const text = await res.text();
24
+ const ct = res.headers.get("content-type") || "";
25
+ if (ct.includes("json") || (text.startsWith("{") && text.endsWith("}"))) {
26
+ try {
27
+ return JSON.parse(text);
28
+ }
29
+ catch {
30
+ /* fall through */
31
+ }
32
+ }
33
+ try {
34
+ return xmlParser.parse(text);
35
+ }
36
+ catch {
37
+ return { _raw: text };
38
+ }
39
+ }
40
+ /**
41
+ * GET legacy XML (or JSON if the endpoint supports `format=json`).
42
+ */
43
+ async get(pathWithLeadingSlash, query) {
44
+ const q = new URLSearchParams(query);
45
+ const qs = q.toString();
46
+ const url = `${this.base}${pathWithLeadingSlash}${qs ? `?${qs}` : ""}`;
47
+ const res = await fetch(url, {
48
+ method: "GET",
49
+ headers: {
50
+ Authorization: this.auth,
51
+ Accept: "application/xml, application/json;q=0.9, text/xml;q=0.8, */*;q=0.1",
52
+ },
53
+ });
54
+ const body = await this.parseBody(res);
55
+ if (!res.ok) {
56
+ throw new LegacyApiError(res.status, body);
57
+ }
58
+ return body;
59
+ }
60
+ /**
61
+ * POST `application/x-www-form-urlencoded` (legacy API style).
62
+ */
63
+ async postForm(pathWithLeadingSlash, fields) {
64
+ const url = `${this.base}${pathWithLeadingSlash}`;
65
+ const body = new URLSearchParams(fields);
66
+ const res = await fetch(url, {
67
+ method: "POST",
68
+ headers: {
69
+ Authorization: this.auth,
70
+ "Content-Type": "application/x-www-form-urlencoded",
71
+ Accept: "application/xml, application/json;q=0.9, text/xml;q=0.8, */*;q=0.1",
72
+ },
73
+ body,
74
+ });
75
+ const parsed = await this.parseBody(res);
76
+ if (!res.ok) {
77
+ throw new LegacyApiError(res.status, parsed);
78
+ }
79
+ return parsed;
80
+ }
81
+ async ping() {
82
+ return this.get(`/xml/plans/get/productCode/${this.productCode}`);
83
+ }
84
+ async getCustomer(by, value) {
85
+ const v = encodeURIComponent(value);
86
+ return this.get(`/xml/customers/get/productCode/${this.productCode}/${by}/${v}`);
87
+ }
88
+ async searchCustomers(params) {
89
+ return this.get(`/xml/customers/search/productCode/${this.productCode}`, {
90
+ ...params,
91
+ format: "json",
92
+ });
93
+ }
94
+ async getPlans(planCode) {
95
+ if (planCode) {
96
+ return this.get(`/xml/plans/get/productCode/${this.productCode}/code/${encodeURIComponent(planCode)}`);
97
+ }
98
+ return this.get(`/xml/plans/get/productCode/${this.productCode}`);
99
+ }
100
+ /**
101
+ * Flat object keys become form keys; nested objects use bracket notation (subscription[planCode]).
102
+ */
103
+ async createCustomer(fields) {
104
+ const flat = flattenFormFields(fields);
105
+ return this.postForm(`/xml/customers/new/productCode/${this.productCode}`, flat);
106
+ }
107
+ async updateCustomer(customerCode, fields) {
108
+ const flat = flattenFormFields(fields);
109
+ return this.postForm(`/xml/customers/edit/productCode/${this.productCode}/code/${encodeURIComponent(customerCode)}`, flat);
110
+ }
111
+ }
112
+ export class LegacyApiError extends Error {
113
+ status;
114
+ body;
115
+ constructor(status, body) {
116
+ super(`Cheddar legacy API request failed (HTTP ${status}).`);
117
+ this.name = "LegacyApiError";
118
+ this.status = status;
119
+ this.body = body;
120
+ }
121
+ }
122
+ /**
123
+ * Flattens `{ firstName: "a", subscription: { planCode: "FREE" } }` into
124
+ * `firstName`, `subscription[planCode]` for legacy form posts.
125
+ */
126
+ export function flattenFormFields(obj, prefix = "") {
127
+ const out = {};
128
+ for (const [k, val] of Object.entries(obj)) {
129
+ if (val === undefined || val === null)
130
+ continue;
131
+ const key = prefix ? `${prefix}[${k}]` : k;
132
+ if (typeof val === "object" && !Array.isArray(val)) {
133
+ Object.assign(out, flattenFormFields(val, key));
134
+ }
135
+ else if (Array.isArray(val)) {
136
+ val.forEach((item, i) => {
137
+ out[`${key}[${i}]`] = String(item);
138
+ });
139
+ }
140
+ else if (typeof val === "boolean") {
141
+ out[key] = val ? "1" : "0";
142
+ }
143
+ else {
144
+ out[key] = String(val);
145
+ }
146
+ }
147
+ return out;
148
+ }
149
+ //# sourceMappingURL=legacy-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-client.js","sourceRoot":"","sources":["../../src/lib/legacy-client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- import { CheddarApiClient } from "../lib/cheddar-client.js";
2
+ import { LegacyCheddarClient } from "../lib/legacy-client.js";
3
3
  export declare const customerTools: Tool[];
4
- export declare function handleCustomerTool(client: CheddarApiClient, name: string, args: Record<string, unknown> | undefined): Promise<{
4
+ export declare function handleCustomerTool(client: LegacyCheddarClient, name: string, args: Record<string, unknown> | undefined): Promise<{
5
5
  content: Array<{
6
6
  type: string;
7
7
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAE,IAAI,EA2G/B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2C7D"}
1
+ {"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,eAAO,MAAM,aAAa,EAAE,IAAI,EAkG/B,CAAC;AAQF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6C7D"}
@@ -1,59 +1,67 @@
1
1
  export const customerTools = [
2
2
  {
3
3
  name: "cheddar_customer_get",
4
- description: "Retrieve a customer by their ID or code from Cheddar",
4
+ description: "Fetch one customer via the legacy Cheddar API (HTTP Basic). Use customer code or CG customer id.",
5
5
  inputSchema: {
6
6
  type: "object",
7
7
  properties: {
8
- id: {
8
+ lookup: {
9
9
  type: "string",
10
- description: "The customer ID (UUID) or unique customer code",
10
+ enum: ["code", "id"],
11
+ description: "Whether `value` is the customer code or internal id",
12
+ },
13
+ value: {
14
+ type: "string",
15
+ description: "Customer code or id",
11
16
  },
12
17
  },
13
- required: ["id"],
18
+ required: ["lookup", "value"],
14
19
  },
15
20
  },
16
21
  {
17
- name: "cheddar_customer_create",
18
- description: "Create a new customer in Cheddar",
22
+ name: "cheddar_customers_search",
23
+ description: "Search customers (legacy API). Supports text search and common filters; see GetCheddar docs for query parameters.",
19
24
  inputSchema: {
20
25
  type: "object",
21
26
  properties: {
22
- code: {
27
+ search: { type: "string", description: "Free-text search" },
28
+ subscriptionStatus: {
23
29
  type: "string",
24
- description: "Unique customer code/identifier (required)",
30
+ enum: ["activeOnly", "canceledOnly"],
25
31
  },
26
- firstName: {
32
+ orderBy: {
27
33
  type: "string",
28
- description: "Customer's first name",
34
+ enum: ["name", "company", "plan", "billingDatetime", "createdDatetime"],
29
35
  },
30
- lastName: {
31
- type: "string",
32
- description: "Customer's last name",
33
- },
34
- email: {
35
- type: "string",
36
- description: "Customer's email address",
36
+ orderByDirection: { type: "string", enum: ["asc", "desc"] },
37
+ createdAfterDate: { type: "string", description: "YYYY-MM-DD" },
38
+ createdBeforeDate: { type: "string", description: "YYYY-MM-DD" },
39
+ planCode: {
40
+ type: "array",
41
+ items: { type: "string" },
42
+ description: "Filter by one or more plan codes",
37
43
  },
38
- company: {
39
- type: "string",
40
- description: "Customer's company name",
41
- },
42
- notes: {
43
- type: "string",
44
- description: "Internal notes about the customer",
45
- },
46
- taxRate: {
47
- type: "string",
48
- description: "Tax rate to apply to this customer (e.g., '0.08' for 8%)",
49
- },
50
- isTaxExempt: {
51
- type: "boolean",
52
- description: "Whether the customer is tax exempt",
53
- },
54
- taxNumber: {
55
- type: "string",
56
- description: "Tax/VAT number for the customer",
44
+ },
45
+ },
46
+ },
47
+ {
48
+ name: "cheddar_customer_create",
49
+ description: "Create a customer (legacy POST). Pass top-level fields and optional `subscription` per [GetCheddar docs](https://docs.getcheddar.com/). Prefer hosted checkout or `gatewayToken` flows for card data—do not send raw PAN/CVV through this tool.",
50
+ inputSchema: {
51
+ type: "object",
52
+ properties: {
53
+ code: { type: "string", description: "Required unique customer code" },
54
+ firstName: { type: "string" },
55
+ lastName: { type: "string" },
56
+ email: { type: "string" },
57
+ company: { type: "string" },
58
+ notes: { type: "string" },
59
+ taxRate: { type: "string" },
60
+ isTaxExempt: { type: "boolean" },
61
+ taxNumber: { type: "string" },
62
+ subscription: {
63
+ type: "object",
64
+ description: "Nested subscription fields allowed by the legacy API (e.g. planCode). Avoid raw card numbers; use processor tokenization or hosted collection.",
57
65
  },
58
66
  },
59
67
  required: ["code"],
@@ -61,90 +69,82 @@ export const customerTools = [
61
69
  },
62
70
  {
63
71
  name: "cheddar_customer_update",
64
- description: "Update an existing customer's information in Cheddar",
72
+ description: "Update customer + subscription (legacy POST /customers/edit). Provide customer `code` and fields to change. Prefer token/hosted flows over raw card data.",
65
73
  inputSchema: {
66
74
  type: "object",
67
75
  properties: {
68
- id: {
69
- type: "string",
70
- description: "The customer ID or code to update",
71
- },
72
- firstName: {
73
- type: "string",
74
- description: "Customer's first name",
75
- },
76
- lastName: {
77
- type: "string",
78
- description: "Customer's last name",
79
- },
80
- email: {
81
- type: "string",
82
- description: "Customer's email address",
83
- },
84
- company: {
85
- type: "string",
86
- description: "Customer's company name",
87
- },
88
- notes: {
89
- type: "string",
90
- description: "Internal notes about the customer",
91
- },
92
- taxRate: {
93
- type: "string",
94
- description: "Tax rate to apply to this customer",
95
- },
96
- isTaxExempt: {
97
- type: "boolean",
98
- description: "Whether the customer is tax exempt",
99
- },
100
- taxNumber: {
101
- type: "string",
102
- description: "Tax/VAT number for the customer",
76
+ code: { type: "string", description: "Customer code to edit" },
77
+ firstName: { type: "string" },
78
+ lastName: { type: "string" },
79
+ email: { type: "string" },
80
+ company: { type: "string" },
81
+ notes: { type: "string" },
82
+ taxRate: { type: "string" },
83
+ isTaxExempt: { type: "boolean" },
84
+ taxNumber: { type: "string" },
85
+ subscription: {
86
+ type: "object",
87
+ description: "Subscription fields per legacy API docs; avoid sending full card numbers through the MCP.",
103
88
  },
104
89
  },
105
- required: ["id"],
90
+ required: ["code"],
106
91
  },
107
92
  },
108
93
  ];
94
+ function jsonResult(data) {
95
+ return {
96
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
97
+ };
98
+ }
109
99
  export async function handleCustomerTool(client, name, args) {
100
+ const a = args || {};
110
101
  switch (name) {
111
102
  case "cheddar_customer_get": {
112
- const { id } = args;
113
- const customer = await client.getCustomer(id);
114
- return {
115
- content: [
116
- {
117
- type: "text",
118
- text: JSON.stringify(customer, null, 2),
119
- },
120
- ],
121
- };
103
+ const { lookup, value } = a;
104
+ const data = await client.getCustomer(lookup, value);
105
+ return jsonResult(data);
106
+ }
107
+ case "cheddar_customers_search": {
108
+ const params = {};
109
+ if (a.search)
110
+ params.search = String(a.search);
111
+ if (a.subscriptionStatus)
112
+ params.subscriptionStatus = String(a.subscriptionStatus);
113
+ if (a.orderBy)
114
+ params.orderBy = String(a.orderBy);
115
+ if (a.orderByDirection)
116
+ params.orderByDirection = String(a.orderByDirection);
117
+ if (a.createdAfterDate)
118
+ params.createdAfterDate = String(a.createdAfterDate);
119
+ if (a.createdBeforeDate)
120
+ params.createdBeforeDate = String(a.createdBeforeDate);
121
+ if (Array.isArray(a.planCode)) {
122
+ a.planCode.forEach((c, i) => {
123
+ params[`planCode[${i}]`] = c;
124
+ });
125
+ }
126
+ const data = await client.searchCustomers(params);
127
+ return jsonResult(data);
122
128
  }
123
129
  case "cheddar_customer_create": {
124
- const customer = await client.createCustomer(args);
125
- return {
126
- content: [
127
- {
128
- type: "text",
129
- text: `Customer created successfully:\n${JSON.stringify(customer, null, 2)}`,
130
- },
131
- ],
132
- };
130
+ const { code, subscription, ...rest } = a;
131
+ const fields = { code, ...rest };
132
+ if (subscription)
133
+ fields.subscription = subscription;
134
+ const data = await client.createCustomer(fields);
135
+ return jsonResult(data);
133
136
  }
134
137
  case "cheddar_customer_update": {
135
- const { id, ...updates } = args;
136
- const customer = await client.updateCustomer(id, updates);
137
- return {
138
- content: [
139
- {
140
- type: "text",
141
- text: `Customer updated successfully:\n${JSON.stringify(customer, null, 2)}`,
142
- },
143
- ],
144
- };
138
+ const { code, ...updates } = a;
139
+ const { subscription, ...rest } = updates;
140
+ const fields = { ...rest };
141
+ if (subscription)
142
+ fields.subscription = subscription;
143
+ const data = await client.updateCustomer(code, fields);
144
+ return jsonResult(data);
145
145
  }
146
146
  default:
147
- throw new Error(`Unknown customer tool: ${name}`);
147
+ throw new Error(`Unknown tool: ${name}`);
148
148
  }
149
149
  }
150
150
  //# sourceMappingURL=customers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"customers.js","sourceRoot":"","sources":["../../src/tools/customers.ts"],"names":[],"mappings":"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"}