Skip to main content
Glama
revclamp

RevClamp MCP Server

Official

RevClamp MCP Server & CLI (revclamp-mcp)

RevClamp Enterprise — B2B Revenue & Compliance Guardrails

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, and tools/call) execute locally in-process inside local_engine.mjs using pure Node.js (node:crypto HMAC-SHA256 verification, integer-cent double-entry accounting, 72-hour webhook replay state machines, and 18,000 UTF-16 code unit CE 3.0 linting). Zero network calls are ever made unless REVCLAMP_API_KEY or REVCLAMP_MCP_URL is explicitly configured.

  • Optional Hosted Cloud Workspace Sync (REVCLAMP_API_KEY): When REVCLAMP_API_KEY (rg_live_...) is configured, revclamp-mcp connects 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 (REVCLAMP_API_KEY)

Execution & Network

100% in-process (local_engine.mjs), zero network calls

HTTPS JSON-RPC to https://api.revclamp.com/api/mcp (redirect: "error")

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 submit: false draft & revoke_entitlement decision

24/7 autonomous Stripe webhook outbox (disputes.update & signed revoke webhooks)

EU & XI B2B VAT (VIES)

Deterministic syntax & GR -> EL normalization (FORMAT_ONLY default, valid: null)

Live EU Commission VIES SOAP consultation IDs + circuit-breaker retry queue (viesMode: "LIVE" + REVCLAMP_API_KEY)

Monthly Event Tiers

Unlimited local in-process evaluations (0 network cost)

Free Sandbox (5,000 events/mo) · Starter $19/mo (100k) · Growth $59/mo (1M) · Scale $199/mo (5M)

Data Privacy (INV-SAAS-04)

Nothing ever leaves your machine

Only explicit tools/call arguments are sent over TLS after local live-secret scrubbing (scanMcpClientPayloadForSecrets in index.mjs blocks sk_live_, non-test whsec_, shpat_ locally)

Related MCP server: CLI Anything Hub MCP

Open-Source MCP Tools Implemented in local_engine.mjs (9)

Tool Name

Domain

Local In-Process Implementation (local_engine.mjs)

Execution Mode

revclamp_audit_revenue_leakage

Stripe Billing & Usage

Evaluates caller-supplied customer/usage arrays (demo: true for synthetic sample) and returns upgrade hooks when no workspace ledger is connected

Local In-Process (or Optional Cloud Key)

revclamp_evaluate_ghost_usage

Stripe 2025-03-31.basil

Evaluates multi-subscription customer snapshots (has_more: false enforced) and 0–14d dunning grace windows for unpaid API/LLM bleed

Local In-Process (or Optional Cloud Key)

revclamp_stage_stripe_dispute_ce3

Visa 10.4 / CE 3.0

Evaluates 120d–365d prior undisputed charges (ip_subnet/device_id overlap) against caller-supplied usageEvents (demo: true for sample) and stages a non-destructive submit: false draft (<= 18,000 UTF-16 code units)

Local In-Process (or Optional Cloud Key)

revclamp_validate_eu_vat_vies

EU & XI B2B VAT

Normalizes 27 EU member states + Northern Ireland (XI) VAT IDs (GR -> EL), checks syntax locally (FORMAT_ONLY, valid: null), simulates errorWrappers (demo: true), or queries live EU VIES (viesMode: "LIVE" + REVCLAMP_API_KEY)

Local In-Process (or Optional Live VIES)

revclamp_reconcile_b2b_net_terms

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)

revclamp_verify_webhook_signature

Webhook HMAC-SHA256

Generates and verifies Stripe-Signature, X-Shopify-Hmac-Sha256, and X-RevClamp-Signature over raw UTF-8 bytes (node:crypto) with 300s replay checks

Local In-Process (or Optional Cloud Key)

revclamp_calculate_roi_and_plan_fit

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)

revclamp_simulate_webhook_replay

Webhook Replay & FSM

Simulates subscription lifecycle webhooks against a 72h deduplication Set and monotonic createdSec guard vs. naive arrival-order handlers

Local In-Process (or Optional Cloud Key)

revclamp_lint_dispute_evidence

Dispute Evidence UTF-16 & CE 3.0

Lints evidence[access_activity_log] payloads against the 18,000 UTF-16 code unit ceiling, non-destructive CE 3.0 markers, and merchant note preservation

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

Stripe basil entitlement and CE 3.0 flowchart

2. EU VIES HTTP 200 OK Soft-Failure Circuit Breaker & B2B Net-Terms Reconciliation

EU VIES circuit breaker flowchart

3. Webhook HMAC-SHA256 Raw-Body Security, 72h Replay FSM & 0% Take-Rate ROI

Security & Resource Bounds

  • Local-First Deterministic Execution: Runs all 9 tools locally in-process inside local_engine.mjs with zero external npm dependencies.

  • Strict Origin Pinning (Cloud Mode): When REVCLAMP_API_KEY is provided, only connects to https://api.revclamp.com/api/mcp or https://revclamp.com/api/mcp over TLS (redirect: "error").

  • Bounded Execution: Enforces a hard 10,000ms request timeout (AbortSignal.timeout) and a 32,768-byte request/response payload cap.

  • Full LLM Reference: https://revclamp.com/llms-full.txt

License

MIT © RevClamp Enterprise

Available Tools

9 tools
revclamp_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.

NameRequiredDescriptionDefault
demoNoSet true only to generate a labeled sample preview when customers/usageEvents are omitted.
disputesNoOptional array of Stripe dispute objects.
customersNoArray of Stripe customer objects with subscriptions ({ id, subscriptions: { data, has_more } }).
usageEventsNoArray of metered API/SaaS usage events ({ customer_id, event_name, occurred_at }).
costPerEventCentsNo
dunningGracePeriodDaysNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
monthlyUsageEventsNo
monthlyGhostBleedUsdNo
monthlyWonDisputeUsdNo
contingencyTakeRatePercentNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
usageEventYesMetered usage event with customer_id, event_name, occurred_at (or occurred_at_sec).
subscriptionsYesStripe subscriptions list envelope ({ data: [...], has_more: false }).
dunningGracePeriodDaysNo

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
demoNoSet true to lint a sample preset fixture when accessActivityLog is omitted.
presetNovalid_ce3_non_destructive
accessActivityLogNo
priorTransactionsNo
disputedTransactionNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
toleranceCentsNo
orderTotalCentsYes
paidAmountCentsYes
creditNotesCentsNo
paymentTermsDaysYes
requiredDepositPercentYes
daysElapsedSinceInvoiceNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
eventsNo
scenarioPresetNoout_of_order_stale_update_after_cancel
idempotencyWindowSecNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
demoNoSet true only to generate a labeled sample preview when usageEvents is omitted.
disputeIdYes
customerIdYes
usageEventsNo
disputeReasonNofraudulent
priorTransactionsNo
disputedTransactionNo
existingAccessActivityLogNo

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
demoNoRequired when using simulated viesMode values (VALID, INVALID, MS_UNAVAILABLE, GLOBAL_MAX_CONCURRENT_REQ) in local mode.
viesModeNoFORMAT_ONLY
buyerVatIdYes
sellerCountryYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
secretYes
providerYes
rawPayloadYes
timestampSecNo
toleranceSecNo
signatureHeaderNo

TDQS

B3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 5 tool updatesv1.20.2
    • Changedrevclamp_audit_revenue_leakage3 fields changed
      • changedInput schema / properties / customers / description
        Previous value: -"Optional array of Stripe customer objects with subscriptions."New value: +"Array of Stripe customer objects with subscriptions ({ id, subscriptions: { data, has_more } })."
      • addedInput schema / properties / demo
        Added value: +{
        +  "default": false,
        +  "description": "Set true only to generate a labeled sample preview when customers/usageEvents are omitted.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / usageEvents / description
        Previous value: -"Optional array of metered API/SaaS usage events."New value: +"Array of metered API/SaaS usage events ({ customer_id, event_name, occurred_at })."
    • Changedrevclamp_evaluate_ghost_usage1 field changed
      • changedInput schema / properties / usageEvent / description
        Previous 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)."
    • Changedrevclamp_lint_dispute_evidence1 field changed
      • addedInput schema / properties / demo
        Added value: +{
        +  "default": false,
        +  "description": "Set true to lint a sample preset fixture when accessActivityLog is omitted.",
        +  "type": "boolean"
        +}
    • Changedrevclamp_stage_stripe_dispute_ce31 field changed
      • addedInput schema / properties / demo
        Added value: +{
        +  "default": false,
        +  "description": "Set true only to generate a labeled sample preview when usageEvents is omitted.",
        +  "type": "boolean"
        +}
    • Changedrevclamp_validate_eu_vat_vies3 fields changed
      • addedInput schema / properties / demo
        Added value: +{
        +  "default": false,
        +  "description": "Required when using simulated viesMode values (VALID, INVALID, MS_UNAVAILABLE, GLOBAL_MAX_CONCURRENT_REQ) in local mode.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / viesMode / default
        Previous value: -"VALID"New value: +"FORMAT_ONLY"
      • changedInput schema / properties / viesMode / enum
        Previous value: -[
        -  "VALID",
        -  "INVALID",
        -  "MS_UNAVAILABLE",
        -  "GLOBAL_MAX_CONCURRENT_REQ",
        -  "LIVE"
        -]New value: +[
        +  "FORMAT_ONLY",
        +  "VALID",
        +  "INVALID",
        +  "MS_UNAVAILABLE",
        +  "GLOBAL_MAX_CONCURRENT_REQ",
        +  "LIVE"
        +]
  2. 9 tool updatesv1.20.1
    • Changedrevclamp_audit_revenue_leakage8 fields changed
      • addedInput schema / properties / costPerEventCents / default
        Added value: +142
      • removedInput schema / properties / costPerEventCents / description
        Removed 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)."
      • changedInput schema / properties / costPerEventCents / maximum
        Previous value: -10000New value: +100000
      • changedInput schema / properties / customers / description
        Previous 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."
      • changedInput schema / properties / disputes / description
        Previous 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."
      • addedInput schema / properties / dunningGracePeriodDays / default
        Added value: +3
      • removedInput schema / properties / dunningGracePeriodDays / description
        Removed 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."
      • changedInput schema / properties / usageEvents / description
        Previous 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."
    • Changedrevclamp_calculate_roi_and_plan_fit8 fields changed
      • addedInput schema / properties / contingencyTakeRatePercent / default
        Added value: +25
      • removedInput schema / properties / contingencyTakeRatePercent / description
        Removed value: -"Competitor chargeback agency contingency commission percentage (valid range: 1 to 50, default: 25 for 25% take-rate tools)."
      • addedInput schema / properties / monthlyGhostBleedUsd / default
        Added value: +600
      • removedInput schema / properties / monthlyGhostBleedUsd / description
        Removed value: -"Monthly unpaid AI/API or SaaS usage bleed stopped by RevClamp basil entitlement guards in USD (valid range: 0 to 10000000, default: 600)."
      • addedInput schema / properties / monthlyUsageEvents / default
        Added value: +250000
      • removedInput schema / properties / monthlyUsageEvents / description
        Removed value: -"Monthly verified usage events across your workspace (integer 0 to 50000000, default: 250000) used to recommend Starter (<=100k), Growth (<=1M), or Scale (<=5M)."
      • addedInput schema / properties / monthlyWonDisputeUsd / default
        Added value: +10000
      • removedInput schema / properties / monthlyWonDisputeUsd / description
        Removed value: -"Monthly won Stripe chargeback volume in USD (valid range: 0 to 10000000, default: 10000) subject to legacy agency take-rate fees."
    • Changedrevclamp_evaluate_ghost_usage10 fields changed
      • removedInput schema / properties / customerId
        Removed value: -{
        -  "description": "Required Stripe customer identifier to evaluate (format example: 'cus_9s6XKzkNRiz8i3', max 64 chars).",
        -  "type": "string"
        -}
      • addedInput schema / properties / dunningGracePeriodDays / default
        Added value: +3
      • removedInput schema / properties / dunningGracePeriodDays / description
        Removed 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."
      • removedInput schema / properties / occurredAtSec
        Removed 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"
        -}
      • changedInput schema / properties / subscriptions / description
        Previous 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 })."
      • addedInput schema / properties / subscriptions / type
        Added value: +"object"
      • removedInput schema / properties / subscriptionsHasMore
        Removed 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"
        -}
      • addedInput schema / properties / usageEvent
        Added value: +{
        +  "description": "Metered usage event with customer_id, event_name, occurred_at.",
        +  "type": "object"
        +}
      • removedInput schema / properties / usageTimestampSec
        Removed 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"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "customerId",
        -  "subscriptions"
        -]New value: +[
        +  "subscriptions",
        +  "usageEvent"
        +]
    • Changedrevclamp_lint_dispute_evidence11 fields changed
      • addedInput schema / properties / accessActivityLog
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / disputedTransaction
        Added value: +{
        +  "type": "object"
        +}
      • removedInput schema / properties / evidenceLogText
        Removed 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"
        -}
      • removedInput schema / properties / existingMerchantNotes
        Removed value: -{
        -  "description": "Existing human AE/support notes inside evidence[access_activity_log] that must be preserved.",
        -  "maxLength": 18000,
        -  "type": "string"
        -}
      • removedInput schema / properties / hasDeviceMatch
        Removed value: -{
        -  "description": "Whether the disputed charge device_id fingerprint matches the historical undisputed charges.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / hasIpMatch
        Removed value: -{
        -  "description": "Whether the disputed charge IPv4/IPv6 address matches the historical undisputed charges.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / preset / default
        Added value: +"valid_ce3_non_destructive"
      • removedInput schema / properties / preset / description
        Removed value: -"Scenario preset to evaluate when custom evidenceLogText is omitted (default: 'valid_ce3_non_destructive')."
      • changedInput schema / properties / preset / enum
        Previous 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"
        +]
      • removedInput schema / properties / priorMatchedCount
        Removed 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"
        -}
      • addedInput schema / properties / priorTransactions
        Added value: +{
        +  "type": "array"
        +}
    • Changedrevclamp_reconcile_b2b_net_terms18 fields changed
      • removedInput schema / properties / creditNoteCents
        Removed 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"
        -}
      • addedInput schema / properties / creditNotesCents / default
        Added value: +0
      • removedInput schema / properties / creditNotesCents / description
        Removed value: -"Optional post-invoice credit notes or return adjustments in integer cents (valid range: 0 to totalOrderCents, default: 0; plural alias for creditNoteCents)."
      • addedInput schema / properties / creditNotesCents / minimum
        Added value: +0
      • addedInput schema / properties / daysElapsedSinceInvoice
        Added value: +{
        +  "default": 0,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / orderId
        Removed value: -{
        -  "description": "Required B2B wholesale order or invoice identifier (e.g. 'gid://shopify/Order/908812' or 'ORD-2026-9088', max 64 chars).",
        -  "type": "string"
        -}
      • addedInput schema / properties / orderTotalCents
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / paidAmountCents / description
        Removed value: -"Required cumulative amount collected from the buyer in non-negative integer cents (e.g. 75000 for 750.00 EUR; must be >= 0)."
      • addedInput schema / properties / paidAmountCents / minimum
        Added value: +0
      • removedInput schema / properties / paymentTermsDays / description
        Removed 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)."
      • addedInput schema / properties / paymentTermsDays / enum
        Added value: +[
        +  15,
        +  30,
        +  60
        +]
      • removedInput schema / properties / requiredDepositCents
        Removed value: -{
        -  "description": "Optional explicit upfront deposit threshold in integer cents (valid range: 0 to totalOrderCents). Overrides requiredDepositPercent when provided.",
        -  "type": "integer"
        -}
      • removedInput schema / properties / requiredDepositPercent / description
        Removed value: -"Optional upfront deposit percentage required before releasing warehouse fulfillment hold (valid range: 0 to 100, default: 30 i.e. 30% upfront deposit)."
      • addedInput schema / properties / requiredDepositPercent / maximum
        Added value: +100
      • addedInput schema / properties / requiredDepositPercent / minimum
        Added value: +0
      • addedInput schema / properties / toleranceCents
        Added value: +{
        +  "default": 0,
        +  "maximum": 500,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / totalOrderCents
        Removed 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"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "orderId",
        -  "totalOrderCents",
        -  "paidAmountCents"
        -]New value: +[
        +  "orderTotalCents",
        +  "paidAmountCents",
        +  "requiredDepositPercent",
        +  "paymentTermsDays"
        +]
    • Changedrevclamp_simulate_webhook_replay10 fields changed
      • removedInput schema / properties / events / description
        Removed value: -"Optional custom array of 1 to 10 webhook events ({ eventId, eventType, createdSec, subscriptionStatus, tier, currentPeriodEndSec }) in arrival order."
      • removedInput schema / properties / events / items
        Removed 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"
        -}
      • removedInput schema / properties / events / maxItems
        Removed value: -10
      • removedInput schema / properties / events / minItems
        Removed value: -1
      • addedInput schema / properties / idempotencyWindowSec / default
        Added value: +259200
      • removedInput schema / properties / idempotencyWindowSec / description
        Removed value: -"Deduplication and replay-acceptance window in seconds (valid range: 60 to 2592000, default: 259200 for 72 hours)."
      • removedInput schema / properties / nowSec
        Removed value: -{
        -  "description": "Reference evaluation timestamp in Unix seconds used to check the 72-hour idempotency window.",
        -  "maximum": 4102444800,
        -  "minimum": 946684800,
        -  "type": "integer"
        -}
      • addedInput schema / properties / scenarioPreset / default
        Added value: +"out_of_order_stale_update_after_cancel"
      • removedInput schema / properties / scenarioPreset / description
        Removed value: -"Scenario preset to evaluate when custom events are omitted (default: 'out_of_order_stale_update_after_cancel')."
      • changedInput schema / properties / scenarioPreset / enum
        Previous 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"
        +]
    • Changedrevclamp_stage_stripe_dispute_ce311 fields changed
      • removedInput schema / properties / customerId / description
        Removed value: -"Stripe customer identifier associated with the disputed charge (format example: 'cus_enterprise_88', default: 'cus_mcp_enterprise_01', max 64 chars)."
      • removedInput schema / properties / disputeId / description
        Removed value: -"Stripe dispute identifier being staged (format example: 'du_1QxyzEnterpriseDispute01', default: 'du_mcp_staged_01', max 64 chars)."
      • addedInput schema / properties / disputeReason / default
        Added value: +"fraudulent"
      • removedInput schema / properties / disputeReason / description
        Removed value: -"Stripe dispute reason code (e.g. 'fraudulent', 'unrecognized', 'subscription_canceled'; default: 'fraudulent'; Visa CE 3.0 applies to 'fraudulent' disputes)."
      • addedInput schema / properties / disputeReason / enum
        Added value: +[
        +  "fraudulent",
        +  "subscription_canceled",
        +  "product_unacceptable",
        +  "general"
        +]
      • removedInput schema / properties / disputedTransaction / description
        Removed value: -"Optional disputed charge snapshot object containing id (e.g. 'ch_disputed_01'), occurredAtSec (Unix seconds), customer_id, email, ip_address, and device_id."
      • addedInput schema / properties / existingAccessActivityLog
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / existingUncategorizedText
        Removed 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"
        -}
      • removedInput schema / properties / priorTransactions / description
        Removed 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)."
      • removedInput schema / properties / usageEvents / description
        Removed 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."
      • addedInput schema / required
        Added value: +[
        +  "disputeId",
        +  "customerId"
        +]
    • Changedrevclamp_validate_eu_vat_vies7 fields changed
      • removedInput schema / properties / buyerVatId / description
        Removed value: -"Required buyer EU or Northern Ireland VAT registration number to normalize and validate (e.g. 'DE123456789', 'GR123456789', 'NL123456789B01', 'XI123456789', max 40 chars)."
      • removedInput schema / properties / consultationNumber
        Removed 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"
        -}
      • removedInput schema / properties / sellerCountry / description
        Removed 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')."
      • addedInput schema / properties / viesMode / default
        Added value: +"VALID"
      • removedInput schema / properties / viesMode / description
        Removed 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)."
      • changedInput schema / properties / viesMode / enum
        Previous value: -[
        -  "VALID",
        -  "INVALID",
        -  "MS_UNAVAILABLE",
        -  "LIVE"
        -]New value: +[
        +  "VALID",
        +  "INVALID",
        +  "MS_UNAVAILABLE",
        +  "GLOBAL_MAX_CONCURRENT_REQ",
        +  "LIVE"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "buyerVatId"
        -]New value: +[
        +  "sellerCountry",
        +  "buyerVatId"
        +]
    • Changedrevclamp_verify_webhook_signature9 fields changed
      • removedInput schema / properties / provider / description
        Removed 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>)."
      • removedInput schema / properties / rawPayload / description
        Removed 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."
      • removedInput schema / properties / secret / description
        Removed 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."
      • removedInput schema / properties / signatureHeader / description
        Removed 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."
      • removedInput schema / properties / timestampSec / description
        Removed 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."
      • removedInput schema / properties / timestampSec / maximum
        Removed value: -9999999999
      • removedInput schema / properties / timestampSec / minimum
        Removed value: -1
      • addedInput schema / properties / toleranceSec
        Added value: +{
        +  "default": 300,
        +  "maximum": 3600,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / required
        Added value: +[
        +  "provider",
        +  "secret",
        +  "rawPayload"
        +]
  3. 9 tool updatesv1.20.0
    • First observedrevclamp_audit_revenue_leakage
    • First observedrevclamp_calculate_roi_and_plan_fit
    • First observedrevclamp_evaluate_ghost_usage
    • First observedrevclamp_lint_dispute_evidence
    • First observedrevclamp_reconcile_b2b_net_terms
    • First observedrevclamp_simulate_webhook_replay
    • First observedrevclamp_stage_stripe_dispute_ce3
    • First observedrevclamp_validate_eu_vat_vies
    • First observedrevclamp_verify_webhook_signature

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency5/5

All nine tools use the same revclamp_ prefix followed by a consistent snake_case verb_noun pattern. No mixed casing or inconsistent verb styles.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Per-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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Paid remote MCP server enabling CLI tool execution with structured receipts, usage logs, and audit-ready evidence for agent and CI workflows.
    1
    -