@armor/zuora-mcp 1.0.1 → 1.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.
- package/README.md +24 -21
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +73 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts +11 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +236 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +11 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +499 -0
- package/dist/resources.js.map +1 -0
- package/dist/setup.d.ts +12 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +188 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools.d.ts +101 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +1070 -0
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +173 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/zoql-helpers.d.ts +68 -0
- package/dist/zoql-helpers.d.ts.map +1 -0
- package/dist/zoql-helpers.js +154 -0
- package/dist/zoql-helpers.js.map +1 -0
- package/dist/zuora-client.d.ts +6 -0
- package/dist/zuora-client.d.ts.map +1 -1
- package/dist/zuora-client.js +20 -0
- package/dist/zuora-client.js.map +1 -1
- package/package.json +3 -2
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
|
-
###
|
|
25
|
+
### Manual Configuration (Alternative)
|
|
14
26
|
|
|
15
|
-
|
|
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": "
|
|
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
|
-
|
|
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
|
-
├──
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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
|
-
|
|
20
|
+
declare function main(): Promise<void>;
|
|
21
|
+
export { main as startServer };
|
|
22
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/prompts.js
ADDED
|
@@ -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;AA8azE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwGzD"}
|