@armor/zuora-mcp 1.0.1 → 1.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/README.md CHANGED
@@ -4,25 +4,34 @@ A Model Context Protocol (MCP) server that enables Claude to interact with Zuora
4
4
 
5
5
  ## Quick Start
6
6
 
7
+ Run one command — no cloning, no building:
8
+
9
+ ```bash
10
+ npx @armor/zuora-mcp setup
11
+ ```
12
+
13
+ The setup wizard will:
14
+ 1. Ask for your Zuora OAuth credentials
15
+ 2. Let you choose your Zuora environment (sandbox, production, EU)
16
+ 3. Auto-configure Claude Code and/or Claude Desktop
17
+
18
+ Then restart Claude Code and the Zuora tools are ready.
19
+
7
20
  ### Prerequisites
8
21
 
9
22
  - Node.js 20+
10
23
  - Zuora OAuth credentials (create at Zuora Admin > Settings > Administration > OAuth Clients)
11
- - npm access to the `@armor` scope (see [npm Setup](#npm-setup))
12
24
 
13
- ### Install from npm (Recommended)
25
+ ### Manual Configuration (Alternative)
14
26
 
15
- ```bash
16
- npm install -g @armor/zuora-mcp
17
- ```
18
-
19
- Then add to your Claude Code MCP config (`~/.claude/.mcp.json`):
27
+ If you prefer to configure manually, add to `~/.claude/.mcp.json`:
20
28
 
21
29
  ```json
22
30
  {
23
31
  "mcpServers": {
24
32
  "zuora": {
25
- "command": "zuora-mcp",
33
+ "command": "npx",
34
+ "args": ["-y", "@armor/zuora-mcp"],
26
35
  "env": {
27
36
  "ZUORA_CLIENT_ID": "your-client-id",
28
37
  "ZUORA_CLIENT_SECRET": "your-client-secret",
@@ -33,18 +42,7 @@ Then add to your Claude Code MCP config (`~/.claude/.mcp.json`):
33
42
  }
34
43
  ```
35
44
 
36
- Restart Claude Code and the Zuora tools will be available.
37
-
38
- ### npm Setup
39
-
40
- One-time setup to access the `@armor` npm scope:
41
-
42
- ```bash
43
- # Get your npm access token from the team lead or npm admin
44
- echo "//registry.npmjs.org/:_authToken=<YOUR_NPM_TOKEN>" >> ~/.npmrc
45
- ```
46
-
47
- ### Install from Source (Alternative)
45
+ ### Install from Source
48
46
 
49
47
  ```bash
50
48
  git clone git@github.com:armor/zuora-mcp.git
@@ -204,11 +202,16 @@ Follow conventional commits for automatic version bumps:
204
202
 
205
203
  ```
206
204
  src/
207
- ├── index.ts # MCP server entry point
205
+ ├── cli.ts # CLI entry point (bin): server, setup, --help, --version
206
+ ├── setup.ts # Interactive setup wizard (zero external deps)
207
+ ├── index.ts # MCP server bootstrap (exports startServer)
208
208
  ├── config.ts # Zod-validated environment configuration
209
209
  ├── token-manager.ts # OAuth2 token lifecycle (refresh, coalescing)
210
210
  ├── zuora-client.ts # Zuora REST API client with resilience
211
211
  ├── tools.ts # Tool definitions, Zod schemas, handlers
212
+ ├── zoql-helpers.ts # ZOQL query composition utilities
213
+ ├── resources.ts # MCP resources (data model, ZOQL guides)
214
+ ├── prompts.ts # MCP prompts (finance workflow templates)
212
215
  └── types.ts # TypeScript interfaces
213
216
  ```
214
217
 
package/dist/cli.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for zuora-mcp.
4
+ *
5
+ * Routes between:
6
+ * zuora-mcp → starts the MCP server (stdio transport)
7
+ * zuora-mcp setup → runs the interactive setup wizard
8
+ * zuora-mcp --help → prints usage
9
+ * zuora-mcp --version → prints version from package.json
10
+ *
11
+ * Dynamic imports keep the server and setup wizard fully isolated —
12
+ * `setup` never loads the MCP SDK, and server code only loads when serving.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
package/dist/cli.js ADDED
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for zuora-mcp.
4
+ *
5
+ * Routes between:
6
+ * zuora-mcp → starts the MCP server (stdio transport)
7
+ * zuora-mcp setup → runs the interactive setup wizard
8
+ * zuora-mcp --help → prints usage
9
+ * zuora-mcp --version → prints version from package.json
10
+ *
11
+ * Dynamic imports keep the server and setup wizard fully isolated —
12
+ * `setup` never loads the MCP SDK, and server code only loads when serving.
13
+ */
14
+ import { readFileSync } from "node:fs";
15
+ function getVersion() {
16
+ try {
17
+ const packageJsonPath = new URL("../package.json", import.meta.url);
18
+ const pkg = JSON.parse(readFileSync(packageJsonPath, "utf8"));
19
+ if (typeof pkg.version === "string" && pkg.version.length) {
20
+ return pkg.version;
21
+ }
22
+ }
23
+ catch {
24
+ // Fall through to safe default.
25
+ }
26
+ return "0.0.0";
27
+ }
28
+ function printHelp() {
29
+ const version = getVersion();
30
+ console.log(`zuora-mcp v${version} — Zuora Billing MCP Server
31
+
32
+ Usage:
33
+ zuora-mcp Start the MCP server (stdio transport)
34
+ zuora-mcp setup Interactive setup wizard for Claude Code / Desktop
35
+ zuora-mcp --help Show this help message
36
+ zuora-mcp --version Show version number
37
+
38
+ Environment variables (required for server mode):
39
+ ZUORA_CLIENT_ID OAuth2 client ID from Zuora Admin
40
+ ZUORA_CLIENT_SECRET OAuth2 client secret
41
+ ZUORA_BASE_URL Zuora API base URL
42
+
43
+ More info: https://github.com/armor/zuora-mcp`);
44
+ }
45
+ async function run() {
46
+ const arg = process.argv[2];
47
+ if (arg === "--help" || arg === "-h") {
48
+ printHelp();
49
+ return;
50
+ }
51
+ if (arg === "--version" || arg === "-v") {
52
+ console.log(getVersion());
53
+ return;
54
+ }
55
+ if (arg === "setup") {
56
+ const { runSetup } = await import("./setup.js");
57
+ await runSetup();
58
+ return;
59
+ }
60
+ if (arg !== undefined) {
61
+ console.error(`Unknown command: ${arg}\n`);
62
+ printHelp();
63
+ process.exit(1);
64
+ }
65
+ // Default: start the MCP server
66
+ const { startServer } = await import("./index.js");
67
+ await startServer();
68
+ }
69
+ run().catch((error) => {
70
+ console.error("Fatal error:", error);
71
+ process.exit(1);
72
+ });
73
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAE3D,CAAC;QACF,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1D,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO;;;;;;;;;;;;;8CAaW,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACrC,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;QAC3C,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,WAAW,EAAE,CAAC;AACtB,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACpB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  /**
3
2
  * Zuora MCP Server
4
3
  *
@@ -18,5 +17,6 @@
18
17
  * - Sensitive data redaction in logs
19
18
  * - OAuth token promise coalescing for concurrency safety
20
19
  */
21
- export {};
20
+ declare function main(): Promise<void>;
21
+ export { main as startServer };
22
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA8DH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+HnC;AAED,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  /**
3
2
  * Zuora MCP Server
4
3
  *
@@ -25,6 +24,8 @@ import { CallToolRequestSchema, ErrorCode, McpError, } from "@modelcontextprotoc
25
24
  import { loadConfig } from "./config.js";
26
25
  import { ZuoraClient } from "./zuora-client.js";
27
26
  import { toolRegistrations, ToolHandlers } from "./tools.js";
27
+ import { registerResources } from "./resources.js";
28
+ import { registerPrompts } from "./prompts.js";
28
29
  const SERVER_NAME = "zuora-mcp";
29
30
  function getServerVersion() {
30
31
  try {
@@ -94,6 +95,10 @@ async function main() {
94
95
  return toCallToolResult(result);
95
96
  });
96
97
  }
98
+ // Register MCP resources (Zuora data model, ZOQL guides)
99
+ registerResources(server);
100
+ // Register MCP prompts (finance workflow templates)
101
+ registerPrompts(server);
97
102
  // Map-based dispatch with protocol-level error handling.
98
103
  // This overrides the SDK's default CallToolRequest handler to provide
99
104
  // proper McpError responses for unknown tools and invalid parameters.
@@ -139,8 +144,5 @@ async function main() {
139
144
  console.error(`[${SERVER_NAME}] Tools registered: ${toolRegistrations.length}`);
140
145
  }
141
146
  }
142
- main().catch((error) => {
143
- console.error("Fatal error:", error);
144
- process.exit(1);
145
- });
147
+ export { main as startServer };
146
148
  //# 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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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP Prompt Definitions for Zuora Finance Workflows
3
+ *
4
+ * Workflow templates that guide Claude through multi-tool sequences
5
+ * for common finance scenarios. Each prompt provides structured
6
+ * instructions for using composite and base tools in the right order
7
+ * with proper formatting.
8
+ */
9
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ export declare function registerPrompts(server: McpServer): void;
11
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6PvD"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * MCP Prompt Definitions for Zuora Finance Workflows
3
+ *
4
+ * Workflow templates that guide Claude through multi-tool sequences
5
+ * for common finance scenarios. Each prompt provides structured
6
+ * instructions for using composite and base tools in the right order
7
+ * with proper formatting.
8
+ */
9
+ import { z } from "zod";
10
+ // ==================== Registration ====================
11
+ export function registerPrompts(server) {
12
+ // Prompt 1: Billing Inquiry
13
+ server.registerPrompt("billing-inquiry", {
14
+ description: "Investigate a billing question for a specific account. " +
15
+ "Guides you through retrieving the account overview, recent invoices, " +
16
+ "payments, and subscriptions to answer billing-related questions.",
17
+ argsSchema: {
18
+ accountKey: z.string().describe("Account number or ID (e.g., A00012345)"),
19
+ question: z.string().optional().describe("The specific billing question"),
20
+ },
21
+ }, async ({ accountKey, question }) => ({
22
+ messages: [
23
+ {
24
+ role: "user",
25
+ content: {
26
+ type: "text",
27
+ text: [
28
+ `Investigate the following billing question for account ${accountKey}:`,
29
+ question ? `Question: ${question}` : "Provide a general billing overview.",
30
+ "",
31
+ "Follow these steps:",
32
+ "1. Call get_account_billing_overview with the account key to get a comprehensive snapshot",
33
+ "2. Review the overview for any red flags (high balance, overdue invoices, payment failures)",
34
+ "3. If there are overdue invoices, note the amounts and due dates",
35
+ "4. If more detail is needed on a specific invoice, use get_invoice",
36
+ "5. If more detail is needed on a specific subscription, use get_subscription",
37
+ "",
38
+ "Format your response as:",
39
+ "- Account summary (name, status, balance, currency)",
40
+ "- Outstanding invoices (if any) with amounts and due dates",
41
+ "- Recent payment activity",
42
+ "- Active subscriptions with MRR",
43
+ "- Answer to the specific billing question",
44
+ "- Recommended actions (if applicable)",
45
+ ].join("\n"),
46
+ },
47
+ },
48
+ ],
49
+ }));
50
+ // Prompt 2: Collections Review
51
+ server.registerPrompt("collections-review", {
52
+ description: "Analyze overdue accounts for collections. Generates an AR aging report, " +
53
+ "identifies high-risk accounts, and provides actionable collection priorities.",
54
+ argsSchema: {
55
+ minAmount: z.string().optional().describe("Minimum overdue amount to include (e.g., 1000). Default: 0"),
56
+ daysOverdue: z.string().optional().describe("Minimum days past due to flag (e.g., 30). Default: 1"),
57
+ },
58
+ }, async ({ minAmount, daysOverdue }) => ({
59
+ messages: [
60
+ {
61
+ role: "user",
62
+ content: {
63
+ type: "text",
64
+ text: [
65
+ "Run a collections review with the following criteria:",
66
+ minAmount ? `- Minimum overdue amount: $${minAmount}` : "- Include all overdue amounts",
67
+ daysOverdue ? `- Minimum days past due: ${daysOverdue}` : "- Include all overdue invoices",
68
+ "",
69
+ "Follow these steps:",
70
+ "1. Call get_invoice_aging_report to get the AR aging breakdown",
71
+ "2. Call get_overdue_invoices to get detailed overdue invoice list",
72
+ minAmount ? ` - Use minBalance: ${minAmount}` : "",
73
+ "3. Call get_account_health_scorecard to identify at-risk accounts",
74
+ "",
75
+ "Format your response as:",
76
+ "",
77
+ "## AR Aging Summary",
78
+ "Table with aging buckets (Current, 1-30, 31-60, 61-90, 90+), invoice count, and total balance per bucket",
79
+ "",
80
+ "## Top Overdue Accounts",
81
+ "Table with account name, account number, total overdue, oldest invoice, days past due",
82
+ "",
83
+ "## At-Risk Accounts",
84
+ "List accounts with low health scores and explain risk factors",
85
+ "",
86
+ "## Recommended Actions",
87
+ "Prioritized list of collection actions based on amount and risk",
88
+ ].join("\n"),
89
+ },
90
+ },
91
+ ],
92
+ }));
93
+ // Prompt 3: Subscription Health
94
+ server.registerPrompt("subscription-health", {
95
+ description: "Analyze subscription health: renewal pipeline, expiring subscriptions, " +
96
+ "recent churn, and revenue by product. Useful for monthly/quarterly reviews.",
97
+ argsSchema: {
98
+ daysAhead: z.string().optional().describe("Days to look ahead for expiring subscriptions (default: 30)"),
99
+ daysBack: z.string().optional().describe("Days to look back for cancelled subscriptions (default: 30)"),
100
+ },
101
+ }, async ({ daysAhead, daysBack }) => ({
102
+ messages: [
103
+ {
104
+ role: "user",
105
+ content: {
106
+ type: "text",
107
+ text: [
108
+ "Analyze subscription health with the following parameters:",
109
+ `- Look ahead for expirations: ${daysAhead ?? "30"} days`,
110
+ `- Look back for cancellations: ${daysBack ?? "30"} days`,
111
+ "",
112
+ "Follow these steps:",
113
+ `1. Call get_expiring_subscriptions with daysAhead: ${daysAhead ?? "30"}`,
114
+ `2. Call get_recently_cancelled_subscriptions with daysBack: ${daysBack ?? "30"}`,
115
+ "3. Call get_revenue_by_product to see MRR breakdown",
116
+ "",
117
+ "Format your response as:",
118
+ "",
119
+ "## Renewal Pipeline",
120
+ "Table of subscriptions expiring soon: account, subscription number, term end date, MRR, auto-renew status",
121
+ "Total MRR at risk",
122
+ "",
123
+ "## Recent Churn",
124
+ "Table of recently cancelled subscriptions: account, subscription number, cancelled date, lost MRR, products",
125
+ "Total MRR lost",
126
+ "",
127
+ "## Revenue by Product",
128
+ "Table: product name, subscription count, total MRR",
129
+ "",
130
+ "## Summary Metrics",
131
+ "- Total MRR at risk (expiring soon, not auto-renewing)",
132
+ "- Recent churn rate (cancelled MRR / total MRR)",
133
+ "- Recommended actions for retention",
134
+ ].join("\n"),
135
+ },
136
+ },
137
+ ],
138
+ }));
139
+ // Prompt 4: Product Analysis
140
+ server.registerPrompt("product-analysis", {
141
+ description: "Analyze a specific product's performance: accounts using it, " +
142
+ "revenue contribution, and invoice history.",
143
+ argsSchema: {
144
+ productName: z.string().describe("Product name to analyze (e.g., 'Security Analytics Log Retention 13 Months')"),
145
+ },
146
+ }, async ({ productName }) => ({
147
+ messages: [
148
+ {
149
+ role: "user",
150
+ content: {
151
+ type: "text",
152
+ text: [
153
+ `Analyze the product: "${productName}"`,
154
+ "",
155
+ "Follow these steps:",
156
+ `1. Call find_accounts_by_product with productName: "${productName}" to find accounts using this product`,
157
+ "2. Call get_revenue_by_product to see this product's MRR contribution vs others",
158
+ `3. Call find_invoices_by_product with productName: "${productName}" to see invoice history`,
159
+ "",
160
+ "Format your response as:",
161
+ "",
162
+ "## Product Overview",
163
+ "- Product name",
164
+ "- Number of accounts using it",
165
+ "- Total MRR from this product",
166
+ "",
167
+ "## Accounts Using This Product",
168
+ "Table: account number, account name, subscription status, MRR",
169
+ "",
170
+ "## Revenue Contribution",
171
+ "How this product's MRR compares to total MRR (percentage)",
172
+ "",
173
+ "## Recent Invoices",
174
+ "Table: invoice number, account, date, charge amount",
175
+ "",
176
+ "## Insights",
177
+ "- Growth or decline trends",
178
+ "- Concentration risk (if few accounts)",
179
+ "- Recommendations",
180
+ ].join("\n"),
181
+ },
182
+ },
183
+ ],
184
+ }));
185
+ // Prompt 5: Month-End Close
186
+ server.registerPrompt("month-end-close", {
187
+ description: "Month-end close checklist: AR aging, overdue invoices, subscription changes, " +
188
+ "payment reconciliation, and revenue summary. Comprehensive financial review.",
189
+ argsSchema: {
190
+ month: z.string().optional().describe("Month to close in YYYY-MM format (e.g., 2024-12). Default: previous month"),
191
+ },
192
+ }, async ({ month }) => ({
193
+ messages: [
194
+ {
195
+ role: "user",
196
+ content: {
197
+ type: "text",
198
+ text: [
199
+ `Run the month-end close checklist${month ? ` for ${month}` : ""}.`,
200
+ "",
201
+ "Execute the following steps in order:",
202
+ "",
203
+ "### Step 1: AR Aging",
204
+ "Call get_invoice_aging_report to get the current AR aging breakdown.",
205
+ "",
206
+ "### Step 2: Overdue Invoices",
207
+ "Call get_overdue_invoices to list all overdue invoices.",
208
+ "",
209
+ "### Step 3: Payment Reconciliation",
210
+ `Call get_payment_reconciliation${month ? ` with startDate and endDate covering ${month}` : " for the previous calendar month"}.`,
211
+ "",
212
+ "### Step 4: Subscription Changes",
213
+ "Call get_recently_cancelled_subscriptions with daysBack: 31 for churn analysis.",
214
+ "Call get_expiring_subscriptions with daysAhead: 30 for upcoming renewals.",
215
+ "",
216
+ "### Step 5: Revenue Summary",
217
+ "Call get_revenue_by_product for MRR breakdown by product.",
218
+ "",
219
+ "### Step 6: Account Health",
220
+ "Call get_account_health_scorecard to identify at-risk accounts.",
221
+ "",
222
+ "Format as a structured month-end report with:",
223
+ "1. **AR Aging Summary** -- Aging buckets table",
224
+ "2. **Overdue Invoice Details** -- Count, total, top overdue accounts",
225
+ "3. **Payment Activity** -- Total collected, payment count, by status",
226
+ "4. **Subscription Activity** -- New, cancelled, expiring, net MRR change",
227
+ "5. **Revenue by Product** -- MRR breakdown table",
228
+ "6. **Risk Assessment** -- At-risk accounts requiring attention",
229
+ "7. **Action Items** -- Prioritized list of follow-ups",
230
+ ].join("\n"),
231
+ },
232
+ },
233
+ ],
234
+ }));
235
+ }
236
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP Resource Definitions for Zuora Data Model & ZOQL Reference
3
+ *
4
+ * Static content that Claude reads to write better ad-hoc ZOQL queries.
5
+ * These resources expose Zuora's data model, relationships, syntax rules,
6
+ * and common query patterns so Claude can construct correct multi-step ZOQL
7
+ * without needing to guess field names or relationships.
8
+ */
9
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ export declare function registerResources(server: McpServer): void;
11
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0czE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwGzD"}