{"_id":"@armor/zuora-mcp","_rev":"5-fab0aa553cdbd20230023f15bfddecbe","name":"@armor/zuora-mcp","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.1":{"name":"@armor/zuora-mcp","version":"1.0.1","keywords":["zuora","billing","mcp","model-context-protocol","invoices","subscriptions"],"author":{"name":"Armor Defense, Inc."},"license":"SEE LICENSE IN LICENSE","_id":"@armor/zuora-mcp@1.0.1","maintainers":[{"name":"armor_ci","email":"ci@armor.com"},{"name":"straineanu.armor","email":"sharon.traineanu@armor.com"},{"name":"rkotra","email":"ramakrishna.kotra@armor.com"},{"name":"yogeeshgc","email":"yogeesh.chikkamath@armor.com"},{"name":"sushilnpm302","email":"sushil.shinde@armor.com"},{"name":"armor-preston","email":"preston.mitcham@armor.com"},{"name":"wbjarvis","email":"bryan.jarvis@armor.com"},{"name":"mojo-armor","email":"moyinoluwa.ojo@armor.com"},{"name":"harishnetha","email":"harish.netha@armor.com"},{"name":"ssalunke","email":"suyash.salunke@armor.com"},{"name":"vshivanna","email":"vinay.shivanna@armor.com"}],"homepage":"https://github.com/armor/zuora-mcp#readme","bugs":{"url":"https://github.com/armor/zuora-mcp/issues"},"bin":{"zuora-mcp":"dist/index.js"},"dist":{"shasum":"1d3b871f8e492a7103def6221c3464921e4d1478","tarball":"https://registry.npmjs.org/@armor/zuora-mcp/-/zuora-mcp-1.0.1.tgz","fileCount":27,"integrity":"sha512-+/5LNkhIe0QZtyRmLXZ1Bn6RZSUHmLOQ8JVX4F8PoeL3i4zdlKpwGPh7y0Nk8TZrEt3/f5uIqfwykvjowMBVtg==","signatures":[{"sig":"MEYCIQDeqfvGdPmom1pAVC7du8DT2MjDL7QxjDvtwOon+w8khAIhAIW1VeH2+3/6o3OK1UA9FqA7uuEZl+TAb9y6E5u8DbyL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216964},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"472e2d80ab40e7f509fc29d17d02ea7c479acba3","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"npm run build && node --test tests/*.test.mjs","build":"tsc","clean":"rm -rf dist","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"armor_ci","email":"ci@armor.com"},"repository":{"url":"git+ssh://git@github.com/armor/zuora-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Zuora Billing MCP Server - Account, invoice, subscription, and payment management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.25.0","dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.25.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.0.0","typescript":"^5.6.0","@types/node":"^22.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/zuora-mcp_1.0.1_1772503189114_0.11641659969646878","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@armor/zuora-mcp","version":"1.1.0","keywords":["zuora","billing","mcp","model-context-protocol","invoices","subscriptions"],"author":{"name":"Armor Defense, Inc."},"license":"SEE LICENSE IN LICENSE","_id":"@armor/zuora-mcp@1.1.0","maintainers":[{"name":"armor_ci","email":"ci@armor.com"},{"name":"straineanu.armor","email":"sharon.traineanu@armor.com"},{"name":"rkotra","email":"ramakrishna.kotra@armor.com"},{"name":"yogeeshgc","email":"yogeesh.chikkamath@armor.com"},{"name":"sushilnpm302","email":"sushil.shinde@armor.com"},{"name":"armor-preston","email":"preston.mitcham@armor.com"},{"name":"wbjarvis","email":"bryan.jarvis@armor.com"},{"name":"mojo-armor","email":"moyinoluwa.ojo@armor.com"},{"name":"harishnetha","email":"harish.netha@armor.com"},{"name":"ssalunke","email":"suyash.salunke@armor.com"},{"name":"vshivanna","email":"vinay.shivanna@armor.com"}],"homepage":"https://github.com/armor/zuora-mcp#readme","bugs":{"url":"https://github.com/armor/zuora-mcp/issues"},"bin":{"zuora-mcp":"dist/cli.js"},"dist":{"shasum":"9a1a4bfafd6986712957939f4041806b801fc195","tarball":"https://registry.npmjs.org/@armor/zuora-mcp/-/zuora-mcp-1.1.0.tgz","fileCount":47,"integrity":"sha512-euH/cIufFZnbOqiy2mx7x4P5rmpIpjbL2yX3zdG8S9nN9p4mv30iTcqKCLKU4NgVHAUg53NqlHA8df4nCXG6xA==","signatures":[{"sig":"MEYCIQD+JqwuVeXTc3PI/M3lnHxQuyuIU+3svGCHGAoXc8PbwAIhAKfGtQSiLaWWK9IWO3MVL46MiVXQwLMhkNbdIQ3JM+yb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":399684},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"df214bf1e2d3ed61041e1da8752d41a5b3918ba8","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"npm run build && node --test tests/*.test.mjs","build":"tsc","clean":"rm -rf dist","setup":"node dist/cli.js setup","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"armor_ci","email":"ci@armor.com"},"repository":{"url":"git+ssh://git@github.com/armor/zuora-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Zuora Billing MCP Server - Account, invoice, subscription, and payment management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.25.0","dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.25.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.0.0","typescript":"^5.6.0","@types/node":"^22.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/zuora-mcp_1.1.0_1772536191083_0.8841227462781216","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@armor/zuora-mcp","version":"1.2.0","keywords":["zuora","billing","mcp","model-context-protocol","invoices","subscriptions"],"author":{"name":"Armor Defense, Inc."},"license":"SEE LICENSE IN LICENSE","_id":"@armor/zuora-mcp@1.2.0","maintainers":[{"name":"armor_ci","email":"ci@armor.com"},{"name":"straineanu.armor","email":"sharon.traineanu@armor.com"},{"name":"rkotra","email":"ramakrishna.kotra@armor.com"},{"name":"yogeeshgc","email":"yogeesh.chikkamath@armor.com"},{"name":"sushilnpm302","email":"sushil.shinde@armor.com"},{"name":"armor-preston","email":"preston.mitcham@armor.com"},{"name":"wbjarvis","email":"bryan.jarvis@armor.com"},{"name":"mojo-armor","email":"moyinoluwa.ojo@armor.com"},{"name":"harishnetha","email":"harish.netha@armor.com"},{"name":"ssalunke","email":"suyash.salunke@armor.com"},{"name":"vshivanna","email":"vinay.shivanna@armor.com"}],"homepage":"https://github.com/armor/zuora-mcp#readme","bugs":{"url":"https://github.com/armor/zuora-mcp/issues"},"bin":{"zuora-mcp":"dist/cli.js"},"dist":{"shasum":"0128ef3e258babadc7dd0a134921ac7aac02f2c6","tarball":"https://registry.npmjs.org/@armor/zuora-mcp/-/zuora-mcp-1.2.0.tgz","fileCount":47,"integrity":"sha512-bpSSx7FlHBNIIzb0ZO9mmBUbNEJvao9/Y1Mo7K30+kp83v0Yw6WoJupP3UI86+d+N3RNtehFqOTf8NecXzUAOQ==","signatures":[{"sig":"MEYCIQCKyZ1gqzq5xwSmOB9r4JosJMkn+9GTpvSMv43MBgrRHAIhANyZhjC+VnNUZ1AZea4KKj7CLsHlMcl1yxR+tCNaB+Wi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":466091},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"487eba74f216e83c0b1fa8d9f6f5cd4d1ece3986","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"npm run build && node --test tests/*.test.mjs","build":"tsc","clean":"rm -rf dist","setup":"node dist/cli.js setup","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"armor_ci","email":"ci@armor.com"},"repository":{"url":"git+ssh://git@github.com/armor/zuora-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Zuora Billing MCP Server - Account, invoice, subscription, and payment management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.25.0","dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.25.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.0.0","typescript":"^5.6.0","@types/node":"^22.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/zuora-mcp_1.2.0_1772551826274_0.9367813964067926","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-development":{"name":"@armor/zuora-mcp","version":"0.0.0-development","keywords":["zuora","billing","mcp","model-context-protocol","invoices","subscriptions"],"author":{"name":"Armor Defense, Inc."},"license":"SEE LICENSE IN LICENSE","_id":"@armor/zuora-mcp@0.0.0-development","maintainers":[{"name":"armor_ci","email":"ci@armor.com"},{"name":"straineanu.armor","email":"sharon.traineanu@armor.com"},{"name":"rkotra","email":"ramakrishna.kotra@armor.com"},{"name":"yogeeshgc","email":"yogeesh.chikkamath@armor.com"},{"name":"sushilnpm302","email":"sushil.shinde@armor.com"},{"name":"armor-preston","email":"preston.mitcham@armor.com"},{"name":"wbjarvis","email":"bryan.jarvis@armor.com"},{"name":"mojo-armor","email":"moyinoluwa.ojo@armor.com"},{"name":"harishnetha","email":"harish.netha@armor.com"},{"name":"ssalunke","email":"suyash.salunke@armor.com"},{"name":"vshivanna","email":"vinay.shivanna@armor.com"}],"homepage":"https://github.com/armor/zuora-mcp#readme","bugs":{"url":"https://github.com/armor/zuora-mcp/issues"},"bin":{"zuora-mcp":"dist/cli.js"},"dist":{"shasum":"27cf5cd5b1c6edf48b5eb8791a840bb70ce33351","tarball":"https://registry.npmjs.org/@armor/zuora-mcp/-/zuora-mcp-0.0.0-development.tgz","fileCount":47,"integrity":"sha512-bu9o3bIJ2eI5rqHvLfkqZyIs8I8RQmDLYxtaSH1BIsZ7hr3YKD6LRGxrTBCEz1j1LpcaqREjHL7byyDfeA/dxQ==","signatures":[{"sig":"MEQCICXxgZLQeOOUHmWfBF4JqYgbr0IqFTyI9kKQbA7Zu3hfAiBOS7YTM9DYYZ6b6LJSfhgF8x7dqKJizy4Rq7QZ/TqDhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":467240},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"ebeaea89f29a8a78779e8a6152f64b2d0ccb47d5","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"npm run build && node --test tests/*.test.mjs","build":"tsc","clean":"rm -rf dist","setup":"node dist/cli.js setup","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"armor_ci","email":"ci@armor.com"},"repository":{"url":"git+ssh://git@github.com/armor/zuora-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Zuora Billing MCP Server - Account, invoice, subscription, and payment management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.25.0","dotenv":"^17.2.3","@modelcontextprotocol/sdk":"^1.25.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.0.0","typescript":"^5.6.0","@types/node":"^22.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/zuora-mcp_0.0.0-development_1772554706327_0.9309186810125243","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@armor/zuora-mcp","version":"1.3.0","description":"Zuora Billing MCP Server - Account, invoice, subscription, and payment management","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"zuora-mcp":"dist/cli.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsx src/index.ts","lint":"eslint src/","test":"npm run build && node --test tests/*.test.mjs","typecheck":"tsc --noEmit","setup":"node dist/cli.js setup","clean":"rm -rf dist"},"keywords":["zuora","billing","mcp","model-context-protocol","invoices","subscriptions"],"repository":{"type":"git","url":"git+ssh://git@github.com/armor/zuora-mcp.git"},"author":{"name":"Armor Defense, Inc."},"license":"SEE LICENSE IN LICENSE","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"engines":{"node":">=20.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^1.25.2","dotenv":"^17.2.3","zod":"^3.25.0"},"devDependencies":{"@types/node":"^22.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","eslint":"^9.0.0","tsx":"^4.19.0","typescript":"^5.6.0"},"_id":"@armor/zuora-mcp@1.3.0","gitHead":"3da081cca4fe3ff5c34d056ff5850e6c39b688a1","bugs":{"url":"https://github.com/armor/zuora-mcp/issues"},"homepage":"https://github.com/armor/zuora-mcp#readme","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-e8KhH2KI76LkCtcn/T7NfXzIgc3b+xfem+Hv0gGV/bpvP7PTmxO9mwnS5BfZ7wxvKCavRJM7Jq6xFdSHfVwEQg==","shasum":"412144787aa14657b91e85d6c2fb121045a14c15","tarball":"https://registry.npmjs.org/@armor/zuora-mcp/-/zuora-mcp-1.3.0.tgz","fileCount":47,"unpackedSize":478157,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDkqzmjYDRg+bIq8X0Ue8EWDUkeyxlb8auwHpDyJX22VQIgFtrgr/ANl4aZN7Mo5Fs3v2P4JOfv+IjmoPWqtIu34rk="}]},"_npmUser":{"name":"armor_ci","email":"ci@armor.com"},"directories":{},"maintainers":[{"name":"armor_ci","email":"ci@armor.com"},{"name":"straineanu.armor","email":"sharon.traineanu@armor.com"},{"name":"rkotra","email":"ramakrishna.kotra@armor.com"},{"name":"yogeeshgc","email":"yogeesh.chikkamath@armor.com"},{"name":"sushilnpm302","email":"sushil.shinde@armor.com"},{"name":"armor-preston","email":"preston.mitcham@armor.com"},{"name":"wbjarvis","email":"bryan.jarvis@armor.com"},{"name":"mojo-armor","email":"moyinoluwa.ojo@armor.com"},{"name":"harishnetha","email":"harish.netha@armor.com"},{"name":"ssalunke","email":"suyash.salunke@armor.com"},{"name":"vshivanna","email":"vinay.shivanna@armor.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zuora-mcp_1.3.0_1772610250269_0.7166677302851214"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-03T01:59:49.037Z","modified":"2026-03-04T07:44:10.676Z","1.0.1":"2026-03-03T01:59:49.271Z","1.1.0":"2026-03-03T11:09:51.225Z","1.2.0":"2026-03-03T15:30:26.421Z","0.0.0-development":"2026-03-03T16:18:26.495Z","1.3.0":"2026-03-04T07:44:10.430Z"},"bugs":{"url":"https://github.com/armor/zuora-mcp/issues"},"author":{"name":"Armor Defense, Inc."},"license":"SEE LICENSE IN LICENSE","homepage":"https://github.com/armor/zuora-mcp#readme","keywords":["zuora","billing","mcp","model-context-protocol","invoices","subscriptions"],"repository":{"type":"git","url":"git+ssh://git@github.com/armor/zuora-mcp.git"},"description":"Zuora Billing MCP Server - Account, invoice, subscription, and payment management","maintainers":[{"name":"armor_ci","email":"ci@armor.com"},{"name":"straineanu.armor","email":"sharon.traineanu@armor.com"},{"name":"rkotra","email":"ramakrishna.kotra@armor.com"},{"name":"yogeeshgc","email":"yogeesh.chikkamath@armor.com"},{"name":"sushilnpm302","email":"sushil.shinde@armor.com"},{"name":"armor-preston","email":"preston.mitcham@armor.com"},{"name":"wbjarvis","email":"bryan.jarvis@armor.com"},{"name":"mojo-armor","email":"moyinoluwa.ojo@armor.com"},{"name":"harishnetha","email":"harish.netha@armor.com"},{"name":"ssalunke","email":"suyash.salunke@armor.com"},{"name":"vshivanna","email":"vinay.shivanna@armor.com"}],"readme":"# Zuora MCP Server\n\nA Model Context Protocol (MCP) server that enables Claude to interact with Zuora's billing platform. Query accounts, invoices, subscriptions, payments, and execute ZOQL queries directly from Claude Code.\n\n## Quick Start\n\nRun one command — no cloning, no building:\n\n```bash\nnpx @armor/zuora-mcp setup\n```\n\nThe setup wizard will:\n1. Ask for your Zuora OAuth credentials\n2. Let you choose your Zuora environment (sandbox, production, EU)\n3. Auto-configure Claude Code and/or Claude Desktop\n\nThen restart Claude Code and the Zuora tools are ready.\n\n### Prerequisites\n\n- Node.js 20+\n- Zuora OAuth credentials (create at Zuora Admin > Settings > Administration > OAuth Clients)\n\n### Manual Configuration (Alternative)\n\nIf you prefer to configure manually, add to `~/.claude/.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"zuora\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@armor/zuora-mcp\"],\n      \"env\": {\n        \"ZUORA_CLIENT_ID\": \"your-client-id\",\n        \"ZUORA_CLIENT_SECRET\": \"your-client-secret\",\n        \"ZUORA_BASE_URL\": \"https://rest.apisandbox.zuora.com\"\n      }\n    }\n  }\n}\n```\n\n### Install from Source\n\n```bash\ngit clone git@github.com:armor/zuora-mcp.git\ncd zuora-mcp\nnpm install\nnpm run build\n```\n\nWhen installing from source, point to the built file in your MCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"zuora\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/zuora-mcp/dist/index.js\"],\n      \"env\": {\n        \"ZUORA_CLIENT_ID\": \"your-client-id\",\n        \"ZUORA_CLIENT_SECRET\": \"your-client-secret\",\n        \"ZUORA_BASE_URL\": \"https://rest.apisandbox.zuora.com\"\n      }\n    }\n  }\n}\n```\n\n### Configuration\n\nRequired environment variables:\n\n| Variable | Description |\n|----------|-------------|\n| `ZUORA_CLIENT_ID` | OAuth2 client ID |\n| `ZUORA_CLIENT_SECRET` | OAuth2 client secret |\n| `ZUORA_BASE_URL` | One of the Zuora base URLs (see below) |\n\nOptional variables:\n\n| Variable | Description |\n|----------|-------------|\n| `DEBUG` | Set to `true` for verbose logging |\n\n#### Zuora Base URLs\n\n| Environment | URL |\n|-------------|-----|\n| US Production | `https://rest.zuora.com` |\n| US Sandbox | `https://rest.apisandbox.zuora.com` |\n| EU Production | `https://rest.eu.zuora.com` |\n| EU Sandbox | `https://rest.sandbox.eu.zuora.com` |\n\n### Getting Zuora OAuth Credentials\n\n1. Log into Zuora (production or sandbox)\n2. Navigate to **Settings > Administration > Manage Users**\n3. Select your user or create a service account\n4. Go to **OAuth Clients** tab and create a new client\n5. Copy the **Client ID** and **Client Secret** (secret is shown only once)\n\n## Available Tools\n\n### Account Tools\n\n| Tool | Description |\n|------|-------------|\n| `get_account` | Get account details by key (ID or account number) |\n| `get_account_summary` | Get comprehensive account summary with balances, subscriptions, invoices, and payments |\n\n### Invoice Tools\n\n| Tool | Description |\n|------|-------------|\n| `get_invoice` | Get invoice details including line items |\n| `list_invoices` | List invoices for an account with pagination |\n\n### Subscription Tools\n\n| Tool | Description |\n|------|-------------|\n| `get_subscription` | Get subscription details with rate plans and charges |\n| `list_subscriptions` | List all subscriptions for an account |\n\n### Payment Tools\n\n| Tool | Description |\n|------|-------------|\n| `get_payment` | Get payment details |\n| `list_payments` | List payments with optional account filter and pagination |\n\n### ZOQL Query Tools\n\n| Tool | Description |\n|------|-------------|\n| `execute_zoql_query` | Execute a ZOQL query for ad-hoc data retrieval |\n| `continue_zoql_query` | Continue paginated ZOQL results using queryLocator |\n\n### Product Catalog\n\n| Tool | Description |\n|------|-------------|\n| `list_products` | List products with rate plans and pricing |\n\n## Upgrading\n\n```bash\nnpm update -g @armor/zuora-mcp\n```\n\n## Development\n\n```bash\nnpm run dev        # Run with tsx (no build required)\nnpm run build      # Build TypeScript to dist/\nnpm run lint       # Run ESLint\nnpm run typecheck  # Type check without building\nnpm test           # Build and run tests\nnpm run clean      # Remove dist/\n```\n\n### Debug Mode\n\nSet `DEBUG=true` to enable verbose logging to stderr:\n\n```bash\nDEBUG=true npm start\n```\n\nDebug output goes to stderr to avoid corrupting the stdio JSON-RPC transport.\n\n### Release Process\n\nThis project uses semantic-release with branch-based publishing:\n\n| Branch | npm Tag | Description |\n|--------|---------|-------------|\n| `dev` | `alpha` | Development pre-releases |\n| `stage` | `beta` | Staging pre-releases |\n| `main` | `latest` | Production releases |\n\nMerging to any of these branches triggers the CD pipeline which:\n1. Runs lint, typecheck, build, and tests\n2. Determines the next version from commit messages\n3. Creates a GitHub release with notes\n4. Publishes to npm with the appropriate tag\n\n#### Commit Convention\n\nFollow conventional commits for automatic version bumps:\n\n| Prefix | Version Bump |\n|--------|--------------|\n| `feat:` | Minor (1.x.0) |\n| `fix:` | Patch (1.0.x) |\n| `breaking:` | Major (x.0.0) |\n\n## Architecture\n\n```\nsrc/\n├── cli.ts              # CLI entry point (bin): server, setup, --help, --version\n├── setup.ts            # Interactive setup wizard (zero external deps)\n├── index.ts            # MCP server bootstrap (exports startServer)\n├── config.ts           # Zod-validated environment configuration\n├── token-manager.ts    # OAuth2 token lifecycle (refresh, coalescing)\n├── zuora-client.ts     # Zuora REST API client with resilience\n├── tools.ts            # Tool definitions, Zod schemas, handlers\n├── zoql-helpers.ts     # ZOQL query composition utilities\n├── resources.ts        # MCP resources (data model, ZOQL guides)\n├── prompts.ts          # MCP prompts (finance workflow templates)\n└── types.ts            # TypeScript interfaces\n```\n\n### Authentication\n\nUses OAuth 2.0 Client Credentials flow:\n- Tokens are stored in memory only (not persisted)\n- Proactive refresh 60 seconds before expiry\n- Promise coalescing prevents duplicate refresh requests under concurrency\n- Automatic 401 retry with token refresh\n\n### Resilience\n\n- Exponential backoff with jitter on 429/502/503/504\n- Idempotent methods (GET, PUT, DELETE) retry on transport failures\n- POST requests are NOT retried on HTTP errors (financial safety)\n- 20-second request timeout with AbortController\n\n### Security\n\n- All inputs validated with Zod schemas\n- Sensitive fields (card numbers, bank accounts) redacted from debug logs\n- Bearer tokens scrubbed from error messages\n- OAuth credentials never logged\n- Base URL validated against known Zuora endpoints at startup\n\n## Version History\n\n### v1.0.0\n\n- Initial release with 11 read-only tools\n- OAuth 2.0 authentication with token lifecycle management\n- Account, invoice, subscription, payment, and ZOQL query support\n- Product catalog access\n- Resilient HTTP client with retry and backoff\n","readmeFilename":"README.md"}