RevClamp MCP Server
OfficialRevClamp MCP Server provides 9 local-first deterministic B2B FinOps and compliance tools for Stripe, Visa CE 3.0, EU VIES VAT, Shopify B2B net terms, webhook security, replay simulation, and ROI planning.
Audit 90-day revenue leakage and CE 3.0 readiness across Stripe subscriptions, usage events, and disputes.
Evaluate ghost usage under Stripe 2025-03-31.basil with dunning grace windows.
Stage non-destructive Visa CE 3.0 dispute evidence drafts with an 18,000 UTF-16 code-unit cap and IP/device overlap checks.
Normalize and validate EU and XI VAT IDs, including GR -> EL conversion, reverse-charge eligibility, and VIES error wrappers/live mode.
Reconcile Shopify Plus B2B Net-15/30/60 invoices, deposits, credit notes, and tolerances using integer EUR-cent accounting.
Generate and verify Stripe, Shopify, and RevClamp HMAC-SHA256 webhook signatures with timestamp replay protection.
Calculate monthly and annual ROI plus optimal plan fit against chargeback contingency fees.
Simulate out-of-order and duplicate webhooks using 72-hour deduplication and monotonic state guards.
Lint dispute evidence for UTF-16 limits, CE 3.0 markers, merchant note preservation, and two-identifier overlap.
Run all tools locally in-process by default with zero network/API keys; optional cloud mode adds persistent audit ledger, autonomous webhook outbox, and live VIES consultation.
Provides tools for Shopify and Shopify Plus B2B merchants: generates and verifies X-Shopify-Hmac-Sha256 webhook signatures over raw UTF-8 bodies with 300s replay protection, and reconciles Net-15/30/60 upfront deposits and credit notes using integer-cent accounting.
Provides tools for auditing and reconciling Stripe billing data: runs 90-day B2B revenue leakage and dispute-readiness audits over subscriptions, usage events and disputes; evaluates multi-subscription customer snapshots and 0–14d dunning grace windows for unpaid API/LLM usage (with Stripe 2025-03-31.basil entitlement handling); stages submit:false Visa CE 3.0 dispute drafts from prior undisputed charges; lints dispute evidence payloads against the 18,000 UTF-16 code unit limit; verifies Stripe-Signature webhook HMACs over raw bodies with replay checks; and simulates subscription lifecycle webhook replays.
Supports Visa Compelling Evidence 3.0 (CE 3.0) dispute readiness: identifies qualifying prior undisputed charges in the 120d–365d window via ip_subnet/device_id overlap, stages non-destructive draft evidence responses within the 18,000 UTF-16 code unit ceiling, and lints evidence payloads for CE 3.0 markers and merchant note preservation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RevClamp MCP ServerRun a 90-day revenue leakage audit on our Stripe billing data."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RevClamp MCP Server & CLI (revclamp-mcp)

revclamp-mcp is a standalone, zero-dependency Open-Source Model Context Protocol (MCP) Server & CLI (index.mjs + local_engine.mjs) implementing 9 deterministic B2B FinOps, Stripe 2025-03-31.basil, Visa CE 3.0, EU/XI VIES VAT, Shopify Plus B2B Net-15/30/60, and Webhook Security tools in pure Node.js.
100% Local In-Process Execution (Default — Zero Network / Zero API Key Required): All 9 MCP tools (
initialize,tools/list, andtools/call) execute locally in-process insidelocal_engine.mjsusing pure Node.js (node:cryptoHMAC-SHA256 verification, integer-cent double-entry accounting, 72-hour webhook replay state machines, and18,000UTF-16 code unit CE 3.0 linting). Zero network calls are ever made unlessREVCLAMP_API_KEYorREVCLAMP_MCP_URLis explicitly configured.Optional Hosted Cloud Workspace Sync (
REVCLAMP_API_KEY): WhenREVCLAMP_API_KEY(rg_live_...) is configured,revclamp-mcpconnects to RevClamp Enterprise (https://api.revclamp.com/api/mcp) to unlock the 90-day SQLite WAL usage & audit ledger, 24/7 autonomous Stripe dispute & entitlement webhook outbox, and real-time EU Commission VIES SOAP gateway consultation numbers.
Local Open-Core (local_engine.mjs) vs. Hosted Cloud (REVCLAMP_API_KEY)
Capability | Local Open-Core Default (Zero API Key) | Hosted Cloud ( |
Execution & Network | 100% in-process ( | HTTPS JSON-RPC to |
Usage & Audit Storage | Stateless evaluation of caller-supplied JSON snapshots | Persistent 90-day SQLite WAL ledger + Stripe historical backfill |
Dispute & Entitlement Action | Returns non-destructive | 24/7 autonomous Stripe webhook outbox ( |
EU & | Deterministic syntax & | Live EU Commission VIES SOAP consultation IDs + circuit-breaker retry queue ( |
Monthly Event Tiers | Unlimited local in-process evaluations (0 network cost) | Free Sandbox ( |
Data Privacy ( | Nothing ever leaves your machine | Only explicit |
Related MCP server: CLI Anything Hub MCP
Open-Source MCP Tools Implemented in local_engine.mjs (9)
Tool Name | Domain | Local In-Process Implementation ( | Execution Mode |
| Stripe Billing & Usage | Evaluates caller-supplied customer/usage arrays ( | Local In-Process (or Optional Cloud Key) |
| Stripe | Evaluates multi-subscription customer snapshots ( | Local In-Process (or Optional Cloud Key) |
| Visa 10.4 / CE 3.0 | Evaluates 120d–365d prior undisputed charges ( | Local In-Process (or Optional Cloud Key) |
| EU & | Normalizes 27 EU member states + Northern Ireland ( | Local In-Process (or Optional Live VIES) |
| B2B Wholesale Net-30 | Reconciles Net-15/30/60 upfront deposits and credit notes using integer EUR-cent double-entry accounting | Local In-Process (or Optional Cloud Key) |
| Webhook HMAC-SHA256 | Generates and verifies | Local In-Process (or Optional Cloud Key) |
| 0% Take-Rate ROI & Plan Fit | Calculates monthly and annual B2B margin savings in integer USD cents vs. 25%–30% chargeback agencies and recommends the optimal tier | Local In-Process (or Optional Cloud Key) |
| Webhook Replay & FSM | Simulates subscription lifecycle webhooks against a 72h deduplication | Local In-Process (or Optional Cloud Key) |
| Dispute Evidence UTF-16 & CE 3.0 | Lints | Local In-Process (or Optional Cloud Key) |
Quick Start (Claude Desktop / Cursor / Windsurf)
Add revclamp-mcp to your claude_desktop_config.json or .cursor/mcp.json. By default, revclamp-mcp runs 100% locally in-process with zero network calls and zero API keys required:
{
"mcpServers": {
"revclamp": {
"command": "npx",
"args": ["-y", "github:revclamp/revclamp-mcp"]
}
}
}(Optional) To connect to a live workspace on https://revclamp.com/dashboard, pass REVCLAMP_API_KEY in env or use the hosted Streamable HTTP endpoint (POST https://api.revclamp.com/api/mcp):
curl -sS -X POST https://api.revclamp.com/api/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'CLI Usage
# List all 9 MCP tools and JSON schemas (runs locally in-process)
node index.mjs --list-tools
# Validate an EU or Northern Ireland (XI) B2B VAT ID (auto-converts Greece GR -> EL)
node index.mjs --check-vat GR123456789 DE
# Calculate 0% take-rate ROI and optimal flat-rate plan fit (runs locally in-process)
node index.mjs --calc-roi 10000 600 25 250000
# Simulate out-of-order webhook replay and 72-hour deduplication state machine (runs locally)
node index.mjs --sim-replay out_of_order_stale_update_after_cancel
# Lint Stripe dispute evidence UTF-16 code units and non-destructive CE 3.0 markers (runs locally)
node index.mjs --lint-evidence valid_ce3_non_destructive
# Verify webhook HMAC-SHA256 using REVCLAMP_WEBHOOK_SECRET from environment (runs locally)
REVCLAMP_WEBHOOK_SECRET="whsec_test_secret_revclamp_sandbox_2026" node index.mjs --verify-webhook stripe
# Invoke Visa CE 3.0 readiness staging locally (pass demo: true for synthetic sample or usageEvents for real logs)
node index.mjs --call revclamp_stage_stripe_dispute_ce3 '{"disputeId":"du_1Qxyz01","customerId":"cus_ent_88","disputeReason":"fraudulent","demo":true}'Architecture & Engineering Deep-Dives (7 Post-Mortems & 8 Interactive Browser Tools)
1. Stripe 2025-03-31.basil Entitlement Guard & Visa CE 3.0 Two-Tier Routing

Engineering Post-Mortem #1: Stripe's
basilAPI broke my grace-period logic, and CE 3.0 turned out to be a routing problemEngineering Post-Mortem #7: Visa CE 3.0
18,000UTF-16 Code Unit Evidence Truncation & Non-Destructive StagingInteractive Tools (No Signup):
2. EU VIES HTTP 200 OK Soft-Failure Circuit Breaker & B2B Net-Terms Reconciliation

Engineering Post-Mortem #2: VIES returns
HTTP 200when it's down, and I charged the wrong VAT because of itEngineering Post-Mortem #3: Shopify Plus B2B Net-15/30/60 Integer-Cent Deposit & Credit-Note Reconciliation
Interactive Tools (No Signup):
3. Webhook HMAC-SHA256 Raw-Body Security, 72h Replay FSM & 0% Take-Rate ROI
Engineering Post-Mortem #4: Why Stripe and Shopify Webhook HMAC-SHA256 Verification Fails on Parsed JSON Bodies
Engineering Post-Mortem #5: Chargeback Contingency Fees (25%–30%) vs. Flat-Rate 0% Commission Automation
Engineering Post-Mortem #6: Webhook Idempotency & Out-of-Order Subscription State Machines
Interactive Tools (No Signup):
Security & Resource Bounds
Local-First Deterministic Execution: Runs all 9 tools locally in-process inside
local_engine.mjswith zero external npm dependencies.Strict Origin Pinning (Cloud Mode): When
REVCLAMP_API_KEYis provided, only connects tohttps://api.revclamp.com/api/mcporhttps://revclamp.com/api/mcpover TLS (redirect: "error").Bounded Execution: Enforces a hard
10,000msrequest timeout (AbortSignal.timeout) and a32,768-byte request/response payload cap.Full LLM Reference:
https://revclamp.com/llms-full.txt
License
MIT © RevClamp Enterprise
Available Tools
9 toolsrevclamp_audit_revenue_leakageCInspect
Runs a deterministic 90-day B2B revenue leakage and Visa CE 3.0 readiness audit across caller-supplied Stripe subscriptions (2025-03-31.basil item-level periods), usage events, and disputes.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Set true only to generate a labeled sample preview when customers/usageEvents are omitted. | |
| disputes | No | Optional array of Stripe dispute objects. | |
| customers | No | Array of Stripe customer objects with subscriptions ({ id, subscriptions: { data, has_more } }). | |
| usageEvents | No | Array of metered API/SaaS usage events ({ customer_id, event_name, occurred_at }). | |
| costPerEventCents | No | ||
| dunningGracePeriodDays | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral-disclosure burden. It adds some useful context by saying the audit is deterministic, covers a 90-day window, and expects Stripe 2025-03-31.basil item-level subscription periods, but it does not state whether the tool is read-only, what permissions or auth are required, whether it mutates data, or what its output/error behavior is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence that states the core action and scope without repetition or filler. It is appropriately sized for a tool with no annotations and no output schema, though the sentence is dense and packs technical details into one long clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex audit tool with no annotations, no output schema, and only 67% parameter-description coverage, the description is incomplete. It identifies the audit scope and primary input categories but omits the return/report shape, safety profile, prerequisites, and semantics for costPerEventCents and dunningGracePeriodDays.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%: 'demo', 'disputes', 'customers', and 'usageEvents' have schema descriptions, while 'costPerEventCents' and 'dunningGracePeriodDays' do not. The description mentions subscriptions, usage events, and disputes, aligning with three parameters, but it does not add meaning for the two undocumented economic parameters. A 3 is appropriate because the schema carries most of the semantic load and the description provides only partial mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Runs') and clearly names the resource: a 90-day B2B revenue leakage and Visa CE 3.0 readiness audit. It also scopes the tool to caller-supplied Stripe subscriptions, usage events, and disputes. It does not explicitly differentiate itself from related sibling tools such as revclamp_stage_stripe_dispute_ce3 or revclamp_lint_dispute_evidence, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor does it state prerequisites or exclusions. The schema's 'demo' parameter hints at a sample-preview mode, but the description itself does not explain when to invoke the audit, when to avoid it, or how it relates to sibling audit/dispute tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_calculate_roi_and_plan_fitBInspect
Calculates monthly and annual B2B margin savings in integer USD cents comparing 0% take-rate flat pricing against 25%-30% chargeback contingency agencies and recommends the optimal tier.
| Name | Required | Description | Default |
|---|---|---|---|
| monthlyUsageEvents | No | ||
| monthlyGhostBleedUsd | No | ||
| monthlyWonDisputeUsd | No | ||
| contingencyTakeRatePercent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose useful behavioural facts: the computation compares a 0% take-rate against a contingency take-rate, and results are expressed in integer USD cents. However it does not state that the operation is a side-effect-free simulation (no writes, no external calls), nor does it explain the model assumptions behind ghost bleed or won-dispute inputs, which matter for trusting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with no filler, and the core purpose is front-loaded in the opening verb. It packs comparison basis, units, and the recommendation into one clause chain, which is efficient though slightly breathless for a calculation with four opaque inputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description partially covers the return: monthly and annual savings plus a recommended tier. But for a four-parameter calculation with zero annotation and zero schema-description support, an agent still lacks the input semantics and the pricing model's assumptions needed to call it confidently with non-default values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it largely does not: monthlyUsageEvents, monthlyGhostBleedUsd, and monthlyWonDisputeUsd are never mentioned, leaving the agent to guess units and role. The description also says contingency rates of '25%-30%' while the parameter allows 1–50, creating ambiguity about the meaningful range. The one genuine addition is the output unit (integer USD cents), which does not resolve the unclear input units (defaults such as 600 and 10000 look like dollars, not cents).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: calculates monthly and annual B2B margin savings comparing flat 0% take-rate pricing against 25–30% contingency agencies, and recommends a tier. That is far more specific than any sibling (audit_revenue_leakage, evaluate_ghost_usage). The only soft spot is 'optimal tier', which is never defined and has no corresponding parameter, so an agent cannot tell what a tier is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the framing of the comparison — an agent can infer it is for pricing-model ROI evaluation rather than a sibling's audit/lint/validation job. There is no explicit when-to-use, no when-not-to-use, and no named alternative despite eight siblings that could plausibly be confused with a revenue-leakage calculation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_evaluate_ghost_usageBInspect
Evaluates whether a metered API/SaaS usage event belongs to an entitled customer or represents post-cancellation / post-grace ghost usage under Stripe 2025-03-31.basil.
| Name | Required | Description | Default |
|---|---|---|---|
| usageEvent | Yes | Metered usage event with customer_id, event_name, occurred_at (or occurred_at_sec). | |
| subscriptions | Yes | Stripe subscriptions list envelope ({ data: [...], has_more: false }). | |
| dunningGracePeriodDays | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It explains the conceptual evaluation but does not state whether the tool is read-only, what permissions or Stripe API access are required, how missing or malformed subscriptions are handled, or what the result contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted text. The purpose and domain context are stated immediately, and the Stripe version qualifier is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there are no annotations, no output schema, three parameters including two nested objects, and incomplete schema descriptions, the single sentence is not complete enough. It omits return-value behavior, dunning grace semantics, error conditions, and operational constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 67%, and the description adds no parameter-level meaning beyond the schema. It does not explain the dunningGracePeriodDays parameter at all, nor does it clarify the expected shape or handling of usageEvent and subscriptions beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Evaluates whether,' and a precise resource: a metered API/SaaS usage event being entitled versus post-cancellation or post-grace ghost usage. It is clearly distinguishable from all listed sibling tools, which cover VAT validation, webhook verification, revenue leakage audits, ROI calculation, dispute linting, reconciliation, webhook replay, and dispute staging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context by framing the tool as determining whether a usage event is entitled or ghost usage. However, it gives no explicit when-to-use guidance, no exclusions, and no alternatives among the revclamp sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_lint_dispute_evidenceBInspect
Lints Stripe dispute evidence[access_activity_log] payloads against the 18,000 UTF-16 code unit ceiling, non-destructive RevClamp CE 3.0 block markers, merchant note preservation, and Visa CE 3.0 two-identifier overlap.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Set true to lint a sample preset fixture when accessActivityLog is omitted. | |
| preset | No | valid_ce3_non_destructive | |
| accessActivityLog | No | ||
| priorTransactions | No | ||
| disputedTransaction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden; it does add useful traits ('non-destructive' block markers, merchant note preservation) suggesting a read-only, safe operation. But it never states the return shape (violations list? booleans?), whether it fails hard or reports findings, or how the preset/demo path differs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the verb and resource and then enumerates the checks. No filler, though the bracketed notation and stacked clauses make it slightly hard to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with nested objects, zero annotations, and no output schema, the description should explain what lint results look like and what the demo/preset switches do. It covers the rule set well but leaves the input modes and output contract underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 20%, so three of five parameters (accessActivityLog, priorTransactions, disputedTransaction) are undocumented in both places. The description implicitly ties accessActivityLog to the UTF-16 ceiling and the two-identifier overlap to the transaction objects, adding some meaning, but not enough to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb ('Lints') plus a specific resource ('Stripe dispute evidence payloads') and the exact rules enforced (18,000 UTF-16 ceiling, CE 3.0 block markers, two-identifier overlap). This is clearly a validation tool, distinguishable from the sibling stage_stripe_dispute_ce3, though it never names that sibling or states the relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to run this versus revclamp_stage_stripe_dispute_ce3, or whether it is a pre-flight gate before staging. The 'demo' and 'preset' parameters imply a sample/fixture path, but no guidance is given on when to use them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_reconcile_b2b_net_termsBInspect
Reconciles Shopify Plus B2B Net-15/30/60 wholesale invoices, upfront deposits, credit notes, and rounding tolerances using integer EUR-cent double-entry accounting.
| Name | Required | Description | Default |
|---|---|---|---|
| toleranceCents | No | ||
| orderTotalCents | Yes | ||
| paidAmountCents | Yes | ||
| creditNotesCents | No | ||
| paymentTermsDays | Yes | ||
| requiredDepositPercent | Yes | ||
| daysElapsedSinceInvoice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose meaningful behavioral context — integer EUR-cent arithmetic and double-entry accounting, implying exact, float-free, deterministic computation in a single currency — but it never states whether the tool is side-effect-free, whether it persists anything, or what the reconciliation result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that packs the domain, terms, and accounting model with no filler. It is dense but every clause carries information; only a slight readability cost from cramming many qualifiers into one sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the description is under-specified: the agent cannot tell what is returned (a status, a delta, a journal entry?), how overdue terms interact with daysElapsedSinceInvoice, or what the reconciliation outcome means. The return-side burden falls entirely on nothing since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it partially does: credit notes, upfront deposits, payment terms (Net-15/30/60), order totals, and rounding tolerances all map to named parameters. However, daysElapsedSinceInvoice is never mentioned, and semantics such as what happens when the deposit is short or how toleranceCents changes the outcome are left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Reconciles") and a precise resource domain (Shopify Plus B2B Net-15/30/60 wholesale invoices, deposits, credit notes, rounding tolerances). This is clearly distinct from the sibling tools (VAT validation, webhook signature, dispute linting, revenue-leakage audit), though it does not explicitly name or exclude those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives, no prerequisites (e.g., that Shopify Plus B2B orders are required), and no conditions under which it is inappropriate. The scope is implied by the description's subject matter alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_simulate_webhook_replayCInspect
Simulates out-of-order and duplicate subscription lifecycle webhooks against a 72-hour deduplication Set and monotonic createdSec watermark vs. a naive arrival-order handler.
| Name | Required | Description | Default |
|---|---|---|---|
| events | No | ||
| scenarioPreset | No | out_of_order_stale_update_after_cancel | |
| idempotencyWindowSec | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It usefully discloses the core behavioral model — deduplication Set with a 72-hour window and a monotonic createdSec watermark compared against a naive handler — but says nothing about side effects (whether events actually hit an endpoint), return shape, or what 'simulate' produces. Meaningful but incomplete disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the core mechanism comes first. The density of undisclosed jargon ('monotonic createdSec watermark') makes it slightly harder to parse than necessary, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, no required parameters, and 0% schema description coverage mean the description is the only source of truth — yet it omits return values and the semantics of two of three parameters. For a simulation tool whose output is the whole point, this leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and all three parameters are undocumented. The description implies the 72-hour window that idempotencyWindowSec defaults to, but doesn't state the window is configurable, doesn't describe what the 'events' array items look like, and doesn't explain how scenarioPreset interacts with events (precedence or mutual exclusivity).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Simulates') and a precise resource (out-of-order/duplicate subscription lifecycle webhooks) plus the mechanism it tests (72-hour dedup Set, monotonic createdSec watermark, naive arrival-order baseline). This clearly separates it from the only webhook-adjacent sibling, revclamp_verify_webhook_signature, though it never names siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not, or alternative-tool guidance. The phrase 'vs. a naive arrival-order handler' hints at a comparison/testing purpose but leaves the agent to infer when to pick this over other revclamp tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_stage_stripe_dispute_ce3CInspect
Evaluates Visa Compelling Evidence 3.0 (CE 3.0) 120d-365d historical footprint overlap (IP / device_id) and builds a non-destructive access_activity_log draft (<= 18,000 UTF-16 code units, submit: false).
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Set true only to generate a labeled sample preview when usageEvents is omitted. | |
| disputeId | Yes | ||
| customerId | Yes | ||
| usageEvents | No | ||
| disputeReason | No | fraudulent | |
| priorTransactions | No | ||
| disputedTransaction | No | ||
| existingAccessActivityLog | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the operation is non-destructive and limited to 18,000 UTF-16 code units, but it omits permissions, side effects, validation/error behavior, and return format. It also references 'submit: false' even though the input schema has no submit parameter and disallows additional properties.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense sentence that front-loads the core purpose and key draft/size constraints. There is no filler, although the compression hides important usage and parameter guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex 8-parameter, nested-object tool with no annotations and no output schema, so the description needs to do more. It covers the high-level purpose and draft limit but leaves parameter meanings, expected outputs, prerequisites, and failure modes largely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, and the description does not explain the roles of disputeId, customerId, usageEvents, priorTransactions, disputedTransaction, existingAccessActivityLog, or disputeReason. Worse, it mentions a 'submit' flag that does not exist in the schema, which can mislead invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific operations: evaluating Visa CE 3.0 120d-365d footprint overlap and building a non-destructive access_activity_log draft. It is clear enough to distinguish this as a specialized dispute-evidence staging tool, but it does not name sibling tools or clarify how it differs from lint_dispute_evidence or evaluate_ghost_usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a staging/non-submitting use case via 'submit: false' and the demo parameter's schema note, but it never states when to use this tool versus alternatives. It also gives no prerequisites, exclusions, or routing guidance for the many sibling dispute-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_validate_eu_vat_viesCInspect
Normalizes 27 EU member states + Northern Ireland (XI) B2B VAT IDs (auto-converting Greece GR -> EL) and checks cross-border reverse-charge format eligibility locally (or simulates VIES states when demo: true).
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Required when using simulated viesMode values (VALID, INVALID, MS_UNAVAILABLE, GLOBAL_MAX_CONCURRENT_REQ) in local mode. | |
| viesMode | No | FORMAT_ONLY | |
| buyerVatId | Yes | ||
| sellerCountry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It states local checking and demo simulation, but it does not explain LIVE mode, external VIES calls, failure/error behavior, concurrency/rate limits suggested by GLOBAL_MAX_CONCURRENT_REQ, or whether the operation has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler, and the parentheticals carry useful constraints. It is dense but appropriately sized for a utility tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, 25% schema description coverage, no annotations, and no output schema, the description needs to compensate for missing invocation details. It gives the core business rule but leaves viesMode selection, sellerCountry format, LIVE/network behavior, and return values undocumented, so it is not complete enough to call confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%; only demo has a schema description. The description implies buyerVatId is the VAT ID and sellerCountry drives cross-border eligibility and notes GR→EL, but it leaves sellerCountry's expected format and all viesMode enum semantics unexplained, especially FORMAT_ONLY versus LIVE.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete operation: normalizing EU/XI B2B VAT IDs and checking cross-border reverse-charge format eligibility, including the GR→EL conversion. It is clear enough to separate this from the other revclamp tools, though it does not explicitly compare itself to any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool is for local format eligibility and says demo:true covers simulated VIES states, but it gives no explicit when-to-use/when-not guidance, prerequisites, or alternatives for the LIVE and FORMAT_ONLY modes. The agent must infer which viesMode to select.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_verify_webhook_signatureBInspect
Generates and verifies raw-UTF8 HMAC-SHA256 webhook signatures for Stripe (Stripe-Signature t=,v1=), Shopify (X-Shopify-Hmac-Sha256 base64), and RevClamp (X-RevClamp-Signature) with 300s timestamp replay protection.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | Yes | ||
| provider | Yes | ||
| rawPayload | Yes | ||
| timestampSec | No | ||
| toleranceSec | No | ||
| signatureHeader | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose meaningful behavior: raw-UTF8 encoding, the exact HMAC algorithm, per-provider header conventions, and a 300s timestamp replay-protection window. It stops short of the behaviors that matter most for a combined generate/verify tool - which mode is selected and when, and what a failed verification produces (error vs. boolean).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb, and every clause carries information an agent cannot get from the bare schema. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no annotations and no output schema, the description leaves critical gaps: the return shape of a verification (boolean, parsed result, or thrown error) is unknown, and the role of signatureHeader in choosing generation versus verification is unstated. An agent could call it correctly on inputs but not predict its outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, so the description must compensate and largely does not. It maps provider values to header formats and implies toleranceSec via the 300s window, but secret, rawPayload, timestampSec, and especially signatureHeader (which appears to be the generate-vs-verify switch) are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb pair (generates and verifies) plus the resource (HMAC-SHA256 webhook signatures) and even enumerates the three supported providers with their header formats. What it does not do is differentiate this tool from the sibling revclamp_simulate_webhook_replay, which an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus revclamp_simulate_webhook_replay or any other sibling, and no prerequisites are given (where the secret comes from, whether rawPayload must be the unparsed body). The provider/header breakdown hints at inbound webhook validation, but usage is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.20.2- Changed
revclamp_audit_revenue_leakage3 fields changed- changed
Input schema / properties / customers / descriptionPrevious value: -"Optional array of Stripe customer objects with subscriptions."New value: +"Array of Stripe customer objects with subscriptions ({ id, subscriptions: { data, has_more } })." - added
Input schema / properties / demoAdded value: +{ + "default": false, + "description": "Set true only to generate a labeled sample preview when customers/usageEvents are omitted.", + "type": "boolean" +} - changed
Input schema / properties / usageEvents / descriptionPrevious value: -"Optional array of metered API/SaaS usage events."New value: +"Array of metered API/SaaS usage events ({ customer_id, event_name, occurred_at })."
- Changed
revclamp_evaluate_ghost_usage1 field changed- changed
Input schema / properties / usageEvent / descriptionPrevious value: -"Metered usage event with customer_id, event_name, occurred_at."New value: +"Metered usage event with customer_id, event_name, occurred_at (or occurred_at_sec)."
- Changed
revclamp_lint_dispute_evidence1 field changed- added
Input schema / properties / demoAdded value: +{ + "default": false, + "description": "Set true to lint a sample preset fixture when accessActivityLog is omitted.", + "type": "boolean" +}
- Changed
revclamp_stage_stripe_dispute_ce31 field changed- added
Input schema / properties / demoAdded value: +{ + "default": false, + "description": "Set true only to generate a labeled sample preview when usageEvents is omitted.", + "type": "boolean" +}
- Changed
revclamp_validate_eu_vat_vies3 fields changed- added
Input schema / properties / demoAdded value: +{ + "default": false, + "description": "Required when using simulated viesMode values (VALID, INVALID, MS_UNAVAILABLE, GLOBAL_MAX_CONCURRENT_REQ) in local mode.", + "type": "boolean" +} - changed
Input schema / properties / viesMode / defaultPrevious value: -"VALID"New value: +"FORMAT_ONLY" - changed
Input schema / properties / viesMode / enumPrevious value: -[ - "VALID", - "INVALID", - "MS_UNAVAILABLE", - "GLOBAL_MAX_CONCURRENT_REQ", - "LIVE" -]New value: +[ + "FORMAT_ONLY", + "VALID", + "INVALID", + "MS_UNAVAILABLE", + "GLOBAL_MAX_CONCURRENT_REQ", + "LIVE" +]
9 tool updates
v1.20.1- Changed
revclamp_audit_revenue_leakage8 fields changed- added
Input schema / properties / costPerEventCents / defaultAdded value: +142 - removed
Input schema / properties / costPerEventCents / descriptionRemoved value: -"Estimated marginal compute or API cost per leaked usage event in integer USD cents (valid range: 1 to 10000, default: 142 i.e. $1.42/event)." - changed
Input schema / properties / costPerEventCents / maximumPrevious value: -10000New value: +100000 - changed
Input schema / properties / customers / descriptionPrevious value: -"Optional array of up to 50 Stripe customer snapshots (each with id like 'cus_123', optional email, subscriptions array or list object, and subscriptionsHasMore: false). Omit to run against workspace telemetry or deterministic sandbox fixtures."New value: +"Optional array of Stripe customer objects with subscriptions." - changed
Input schema / properties / disputes / descriptionPrevious value: -"Optional array of up to 50 Stripe dispute objects (each with id like 'du_123', customer, amount in cents, reason such as 'fraudulent', and status such as 'needs_response')."New value: +"Optional array of Stripe dispute objects." - added
Input schema / properties / dunningGracePeriodDays / defaultAdded value: +3 - removed
Input schema / properties / dunningGracePeriodDays / descriptionRemoved value: -"Custom dunning grace window in integer days (valid range: 0 to 14, default: 3) allowed after latest_invoice_failed_at before flagging past_due subscriptions as unpaid ghost usage." - changed
Input schema / properties / usageEvents / descriptionPrevious value: -"Optional array of up to 200 product/AI API usage telemetry events (each with stripe_customer_id or email, event_name, and occurredAtSec Unix timestamp in seconds)."New value: +"Optional array of metered API/SaaS usage events."
- Changed
revclamp_calculate_roi_and_plan_fit8 fields changed- added
Input schema / properties / contingencyTakeRatePercent / defaultAdded value: +25 - removed
Input schema / properties / contingencyTakeRatePercent / descriptionRemoved value: -"Competitor chargeback agency contingency commission percentage (valid range: 1 to 50, default: 25 for 25% take-rate tools)." - added
Input schema / properties / monthlyGhostBleedUsd / defaultAdded value: +600 - removed
Input schema / properties / monthlyGhostBleedUsd / descriptionRemoved value: -"Monthly unpaid AI/API or SaaS usage bleed stopped by RevClamp basil entitlement guards in USD (valid range: 0 to 10000000, default: 600)." - added
Input schema / properties / monthlyUsageEvents / defaultAdded value: +250000 - removed
Input schema / properties / monthlyUsageEvents / descriptionRemoved value: -"Monthly verified usage events across your workspace (integer 0 to 50000000, default: 250000) used to recommend Starter (<=100k), Growth (<=1M), or Scale (<=5M)." - added
Input schema / properties / monthlyWonDisputeUsd / defaultAdded value: +10000 - removed
Input schema / properties / monthlyWonDisputeUsd / descriptionRemoved value: -"Monthly won Stripe chargeback volume in USD (valid range: 0 to 10000000, default: 10000) subject to legacy agency take-rate fees."
- Changed
revclamp_evaluate_ghost_usage10 fields changed- removed
Input schema / properties / customerIdRemoved value: -{ - "description": "Required Stripe customer identifier to evaluate (format example: 'cus_9s6XKzkNRiz8i3', max 64 chars).", - "type": "string" -} - added
Input schema / properties / dunningGracePeriodDays / defaultAdded value: +3 - removed
Input schema / properties / dunningGracePeriodDays / descriptionRemoved value: -"Dunning grace window in integer days (valid range: 0 to 14, default: 3) after latest_invoice_failed_at during which past_due subscriptions remain entitled." - removed
Input schema / properties / occurredAtSecRemoved value: -{ - "description": "Optional alias for usageTimestampSec: Unix epoch timestamp in integer seconds (e.g. 1761264000) when the usage event occurred (used when usageTimestampSec is omitted).", - "type": "integer" -} - changed
Input schema / properties / subscriptions / descriptionPrevious value: -"Required Stripe customer subscriptions payload: either a Stripe list object ({ data: [...], has_more: false }) or a raw array of up to 50 subscription objects containing id, status ('active', 'trialing', 'past_due', 'canceled', 'unpaid'), current_period_end, or items.data[].current_period_end in Unix seconds."New value: +"Stripe subscriptions list envelope ({ data: [...], has_more: false })." - added
Input schema / properties / subscriptions / typeAdded value: +"object" - removed
Input schema / properties / subscriptionsHasMoreRemoved value: -{ - "description": "Pagination completeness flag (boolean). Must be explicitly set to false when passing a raw subscriptions array so RevClamp can verify no active subscription was truncated on a later page.", - "type": "boolean" -} - added
Input schema / properties / usageEventAdded value: +{ + "description": "Metered usage event with customer_id, event_name, occurred_at.", + "type": "object" +} - removed
Input schema / properties / usageTimestampSecRemoved value: -{ - "description": "Optional Unix epoch timestamp in integer seconds (e.g. 1761264000) when the AI/API usage event occurred (defaults to current server Unix timestamp if omitted).", - "type": "integer" -} - changed
Input schema / requiredPrevious value: -[ - "customerId", - "subscriptions" -]New value: +[ + "subscriptions", + "usageEvent" +]
- Changed
revclamp_lint_dispute_evidence11 fields changed- added
Input schema / properties / accessActivityLogAdded value: +{ + "type": "string" +} - added
Input schema / properties / disputedTransactionAdded value: +{ + "type": "object" +} - removed
Input schema / properties / evidenceLogTextRemoved value: -{ - "description": "Merged or candidate Stripe dispute evidence[access_activity_log] payload evaluated against the 18,000 UTF-16 code unit ceiling and non-destructive delimiter markers.", - "maxLength": 30000, - "type": "string" -} - removed
Input schema / properties / existingMerchantNotesRemoved value: -{ - "description": "Existing human AE/support notes inside evidence[access_activity_log] that must be preserved.", - "maxLength": 18000, - "type": "string" -} - removed
Input schema / properties / hasDeviceMatchRemoved value: -{ - "description": "Whether the disputed charge device_id fingerprint matches the historical undisputed charges.", - "type": "boolean" -} - removed
Input schema / properties / hasIpMatchRemoved value: -{ - "description": "Whether the disputed charge IPv4/IPv6 address matches the historical undisputed charges.", - "type": "boolean" -} - added
Input schema / properties / preset / defaultAdded value: +"valid_ce3_non_destructive" - removed
Input schema / properties / preset / descriptionRemoved value: -"Scenario preset to evaluate when custom evidenceLogText is omitted (default: 'valid_ce3_non_destructive')." - changed
Input schema / properties / preset / enumPrevious value: -[ - "valid_ce3_non_destructive", - "utf16_overflow_19k", - "missing_device_and_overwrite_risk", - "custom" -]New value: +[ + "valid_ce3_non_destructive", + "utf16_overflow_19k", + "missing_device_and_overwrite_risk" +] - removed
Input schema / properties / priorMatchedCountRemoved value: -{ - "description": "Number of prior undisputed Stripe charges (120d-365d old) with matching customer_id and IP/device fingerprint (Visa CE 3.0 requires >= 2).", - "maximum": 50, - "minimum": 0, - "type": "integer" -} - added
Input schema / properties / priorTransactionsAdded value: +{ + "type": "array" +}
- Changed
revclamp_reconcile_b2b_net_terms18 fields changed- removed
Input schema / properties / creditNoteCentsRemoved value: -{ - "description": "Optional post-invoice credit notes or return adjustments in integer cents (valid range: 0 to totalOrderCents, default: 0; singular alias for creditNotesCents).", - "type": "integer" -} - added
Input schema / properties / creditNotesCents / defaultAdded value: +0 - removed
Input schema / properties / creditNotesCents / descriptionRemoved value: -"Optional post-invoice credit notes or return adjustments in integer cents (valid range: 0 to totalOrderCents, default: 0; plural alias for creditNoteCents)." - added
Input schema / properties / creditNotesCents / minimumAdded value: +0 - added
Input schema / properties / daysElapsedSinceInvoiceAdded value: +{ + "default": 0, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / orderIdRemoved value: -{ - "description": "Required B2B wholesale order or invoice identifier (e.g. 'gid://shopify/Order/908812' or 'ORD-2026-9088', max 64 chars).", - "type": "string" -} - added
Input schema / properties / orderTotalCentsAdded value: +{ + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / paidAmountCents / descriptionRemoved value: -"Required cumulative amount collected from the buyer in non-negative integer cents (e.g. 75000 for 750.00 EUR; must be >= 0)." - added
Input schema / properties / paidAmountCents / minimumAdded value: +0 - removed
Input schema / properties / paymentTermsDays / descriptionRemoved value: -"Optional B2B net payment terms maturity window in integer days (allowed values: 15, 30, or 60 for Net-15, Net-30, or Net-60; default: 30)." - added
Input schema / properties / paymentTermsDays / enumAdded value: +[ + 15, + 30, + 60 +] - removed
Input schema / properties / requiredDepositCentsRemoved value: -{ - "description": "Optional explicit upfront deposit threshold in integer cents (valid range: 0 to totalOrderCents). Overrides requiredDepositPercent when provided.", - "type": "integer" -} - removed
Input schema / properties / requiredDepositPercent / descriptionRemoved value: -"Optional upfront deposit percentage required before releasing warehouse fulfillment hold (valid range: 0 to 100, default: 30 i.e. 30% upfront deposit)." - added
Input schema / properties / requiredDepositPercent / maximumAdded value: +100 - added
Input schema / properties / requiredDepositPercent / minimumAdded value: +0 - added
Input schema / properties / toleranceCentsAdded value: +{ + "default": 0, + "maximum": 500, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / totalOrderCentsRemoved value: -{ - "description": "Required gross invoice total in positive integer minor currency units / cents (e.g. 250000 for 2,500.00 EUR; must be > 0).", - "type": "integer" -} - changed
Input schema / requiredPrevious value: -[ - "orderId", - "totalOrderCents", - "paidAmountCents" -]New value: +[ + "orderTotalCents", + "paidAmountCents", + "requiredDepositPercent", + "paymentTermsDays" +]
- Changed
revclamp_simulate_webhook_replay10 fields changed- removed
Input schema / properties / events / descriptionRemoved value: -"Optional custom array of 1 to 10 webhook events ({ eventId, eventType, createdSec, subscriptionStatus, tier, currentPeriodEndSec }) in arrival order." - removed
Input schema / properties / events / itemsRemoved value: -{ - "additionalProperties": false, - "properties": { - "createdSec": { - "description": "Provider event creation timestamp in Unix seconds (must be <= nowSec + 34560000 / 400 days) compared monotonically against lastAppliedCreatedSec.", - "maximum": 4102444800, - "minimum": 946684800, - "type": "integer" - }, - "currentPeriodEndSec": { - "description": "Optional subscription current_period_end timestamp in Unix seconds.", - "maximum": 4102444800, - "minimum": 946684800, - "type": "integer" - }, - "eventId": { - "description": "Unique provider webhook event ID (e.g. evt_cancel_final_1050) checked against the 72-hour deduplication Set.", - "maxLength": 96, - "minLength": 1, - "pattern": "^[A-Za-z0-9_.:-]{1,96}$", - "type": "string" - }, - "eventType": { - "description": "Webhook event type string (e.g. customer.subscription.deleted, customer.subscription.updated, invoice.payment_failed).", - "maxLength": 96, - "minLength": 1, - "pattern": "^[A-Za-z0-9_.-]{1,96}$", - "type": "string" - }, - "subscriptionStatus": { - "description": "Subscription lifecycle status carried by this webhook event.", - "enum": [ - "active", - "trialing", - "past_due", - "paused", - "canceled", - "cancelled", - "unpaid", - "cancel_at_period_end", - "expired" - ], - "type": "string" - }, - "tier": { - "description": "Optional RevClamp plan tier associated with the subscription state (default: 'growth_59').", - "enum": [ - "free", - "starter_19", - "growth_59", - "scale_199" - ], - "type": "string" - } - }, - "required": [ - "eventId", - "eventType", - "createdSec", - "subscriptionStatus" - ], - "type": "object" -} - removed
Input schema / properties / events / maxItemsRemoved value: -10 - removed
Input schema / properties / events / minItemsRemoved value: -1 - added
Input schema / properties / idempotencyWindowSec / defaultAdded value: +259200 - removed
Input schema / properties / idempotencyWindowSec / descriptionRemoved value: -"Deduplication and replay-acceptance window in seconds (valid range: 60 to 2592000, default: 259200 for 72 hours)." - removed
Input schema / properties / nowSecRemoved value: -{ - "description": "Reference evaluation timestamp in Unix seconds used to check the 72-hour idempotency window.", - "maximum": 4102444800, - "minimum": 946684800, - "type": "integer" -} - added
Input schema / properties / scenarioPreset / defaultAdded value: +"out_of_order_stale_update_after_cancel" - removed
Input schema / properties / scenarioPreset / descriptionRemoved value: -"Scenario preset to evaluate when custom events are omitted (default: 'out_of_order_stale_update_after_cancel')." - changed
Input schema / properties / scenarioPreset / enumPrevious value: -[ - "out_of_order_stale_update_after_cancel", - "duplicate_event_id_replay_72h", - "valid_monotonic_upgrade_sequence", - "expired_72h_window_stale_event", - "custom" -]New value: +[ + "out_of_order_stale_update_after_cancel", + "duplicate_event_id_replay_72h", + "valid_monotonic_upgrade_sequence", + "expired_72h_window_stale_event" +]
- Changed
revclamp_stage_stripe_dispute_ce311 fields changed- removed
Input schema / properties / customerId / descriptionRemoved value: -"Stripe customer identifier associated with the disputed charge (format example: 'cus_enterprise_88', default: 'cus_mcp_enterprise_01', max 64 chars)." - removed
Input schema / properties / disputeId / descriptionRemoved value: -"Stripe dispute identifier being staged (format example: 'du_1QxyzEnterpriseDispute01', default: 'du_mcp_staged_01', max 64 chars)." - added
Input schema / properties / disputeReason / defaultAdded value: +"fraudulent" - removed
Input schema / properties / disputeReason / descriptionRemoved value: -"Stripe dispute reason code (e.g. 'fraudulent', 'unrecognized', 'subscription_canceled'; default: 'fraudulent'; Visa CE 3.0 applies to 'fraudulent' disputes)." - added
Input schema / properties / disputeReason / enumAdded value: +[ + "fraudulent", + "subscription_canceled", + "product_unacceptable", + "general" +] - removed
Input schema / properties / disputedTransaction / descriptionRemoved value: -"Optional disputed charge snapshot object containing id (e.g. 'ch_disputed_01'), occurredAtSec (Unix seconds), customer_id, email, ip_address, and device_id." - added
Input schema / properties / existingAccessActivityLogAdded value: +{ + "type": "string" +} - removed
Input schema / properties / existingUncategorizedTextRemoved value: -{ - "description": "Optional existing merchant evidence notes in Stripe evidence.uncategorized_text or access_activity_log (up to 18,000 chars) to preserve via append-only merge without overwriting.", - "type": "string" -} - removed
Input schema / properties / priorTransactions / descriptionRemoved value: -"Optional array of up to 50 historical Stripe charge objects (each with id, status: 'succeeded', disputed: false, refunded: false, occurredAtSec 120-365 days prior to disputedTransaction, email, ip_address, and device_id)." - removed
Input schema / properties / usageEvents / descriptionRemoved value: -"Optional array of up to 200 customer product/API usage telemetry events (each with occurredAtSec Unix seconds, stripe_customer_id, and event_name) for append-only access_activity_log staging." - added
Input schema / requiredAdded value: +[ + "disputeId", + "customerId" +]
- Changed
revclamp_validate_eu_vat_vies7 fields changed- removed
Input schema / properties / buyerVatId / descriptionRemoved value: -"Required buyer EU or Northern Ireland VAT registration number to normalize and validate (e.g. 'DE123456789', 'GR123456789', 'NL123456789B01', 'XI123456789', max 40 chars)." - removed
Input schema / properties / consultationNumberRemoved value: -{ - "description": "Optional VIES requester consultation reference number (e.g. 'WAPIAAAAW998877', max 64 chars) to attach to deterministic 'VALID' mode tax audit records.", - "type": "string" -} - removed
Input schema / properties / sellerCountry / descriptionRemoved value: -"Two-letter EU-27 or XI member state prefix of the merchant's dispatch warehouse (e.g. 'DE', 'NL', 'FR', 'EL', 'XI'; 'GR' is automatically normalized to 'EL'; default: 'DE')." - added
Input schema / properties / viesMode / defaultAdded value: +"VALID" - removed
Input schema / properties / viesMode / descriptionRemoved value: -"VIES evaluation mode: 'VALID' (deterministic active VAT simulation, default), 'INVALID' (deterministic rejected VAT simulation), 'MS_UNAVAILABLE' (deterministic member-state outage circuit-breaker simulation), or 'LIVE' (real-time European Commission VIES lookup)." - changed
Input schema / properties / viesMode / enumPrevious value: -[ - "VALID", - "INVALID", - "MS_UNAVAILABLE", - "LIVE" -]New value: +[ + "VALID", + "INVALID", + "MS_UNAVAILABLE", + "GLOBAL_MAX_CONCURRENT_REQ", + "LIVE" +] - changed
Input schema / requiredPrevious value: -[ - "buyerVatId" -]New value: +[ + "sellerCountry", + "buyerVatId" +]
- Changed
revclamp_verify_webhook_signature9 fields changed- removed
Input schema / properties / provider / descriptionRemoved value: -"Webhook signature provider scheme to evaluate: 'stripe' (Stripe-Signature t=<sec>,v1=<hex>, default), 'shopify' (X-Shopify-Hmac-Sha256 Base64 raw UTF-8 HMAC), or 'revclamp' (X-RevClamp-Signature t=<sec>,v1=<hex>)." - removed
Input schema / properties / rawPayload / descriptionRemoved value: -"Exact unparsed UTF-8 webhook request body string (up to 16,384 chars) used to compute the canonical SHA-256 HMAC digest. Defaults to a provider-specific sample JSON event if omitted." - removed
Input schema / properties / secret / descriptionRemoved value: -"Synthetic or test webhook signing secret (default: 'whsec_test_revclamp_sandbox_secret_2026', max 256 chars). Live production secrets (sk_live_, rk_live_, non-test whsec_..., shpss_..., shpat_..., rg_live_, rc_live_, AKIA..., and PEM private keys) are rejected." - removed
Input schema / properties / signatureHeader / descriptionRemoved value: -"Optional supplied HTTP signature header value to verify via crypto.timingSafeEqual (e.g. 't=1760000000,v1=...' or Base64 digest, max 512 chars). Omit to run in GENERATE_AND_SELF_VERIFY mode." - removed
Input schema / properties / timestampSec / descriptionRemoved value: -"Optional Unix epoch timestamp in integer seconds (valid range: 1 to 9999999999; defaults to current server Unix timestamp) used when generating or verifying timestamped Stripe/RevClamp headers." - removed
Input schema / properties / timestampSec / maximumRemoved value: -9999999999 - removed
Input schema / properties / timestampSec / minimumRemoved value: -1 - added
Input schema / properties / toleranceSecAdded value: +{ + "default": 300, + "maximum": 3600, + "minimum": 1, + "type": "integer" +} - added
Input schema / requiredAdded value: +[ + "provider", + "secret", + "rawPayload" +]
9 tool updates
v1.20.0- First observed
revclamp_audit_revenue_leakage - First observed
revclamp_calculate_roi_and_plan_fit - First observed
revclamp_evaluate_ghost_usage - First observed
revclamp_lint_dispute_evidence - First observed
revclamp_reconcile_b2b_net_terms - First observed
revclamp_simulate_webhook_replay - First observed
revclamp_stage_stripe_dispute_ce3 - First observed
revclamp_validate_eu_vat_vies - First observed
revclamp_verify_webhook_signature
TDQS
Scored across 9 tools
Most tools target clearly distinct tasks (VAT validation, webhook signatures, revenue audit, ROI, ghost usage, dispute linting, net-terms reconciliation, replay simulation, CE 3.0 staging). A few adjacent areas—audit_revenue_leakage vs. evaluate_ghost_usage, and lint_dispute_evidence vs. stage_stripe_dispute_ce3—could be confused at a glance, but descriptions clarify the boundaries.
All nine tools use the same revclamp_ prefix followed by a consistent snake_case verb_noun pattern. No mixed casing or inconsistent verb styles.
Nine tools is well within the ideal range for a focused compliance/audit server. Each tool maps to a distinct workflow step or check, with no obvious filler.
The surface covers the core lifecycle for B2B revenue leakage and Stripe/Shopify dispute readiness: VAT validation, webhook signing, auditing, ROI, ghost usage, evidence linting, net-terms reconciliation, replay simulation, and CE 3.0 staging. Some peripheral operations, such as broader tax/refund handling or additional evidence-generation paths, are not represented, but core workflows are complete.
Maintenance
Related MCP Connectors
One MCP endpoint for your company's tools, with per-person sign-in, policy and audit.
A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
Read-only MCP over your own revenue and net margin across 14 billing rails
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePer-call billing and metering proxy for MCP tool servers. Providers set pricing via the open MCP Billing Spec (MIT), consumers pay through Stripe Connect with signed receipts and SLA monitoring.MIT
- FlicenseNot gradedqualityDmaintenancePaid remote MCP server enabling CLI tool execution with structured receipts, usage logs, and audit-ready evidence for agent and CI workflows.1-
- FlicenseNot gradedqualityDmaintenancePaid remote MCP for hosted MCP server providing structured receipts, usage logs, and audit-ready evidence for agent and CI workflows.-
- AlicenseNot gradedqualityCmaintenanceEnables creating, sending, and tracking invoices from MCP clients like Claude, Cursor, or Windsurf, using a hosted endpoint with API token.MIT