RevClamp MCP Server
Server Details
Zero-take-rate Stripe 2025-03-31.basil, Visa CE 3.0 & EU/XI VIES VAT guardrails MCP server.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- lhphong09t2/revclamp-mcp
- GitHub Stars
- 1
- Server Listing
- deprecated-legacy-sandbox
TDQS
Scored across 9 tools
Most tools occupy clearly separate problem spaces (portfolio audit vs. per-customer ghost-usage evaluation, VAT validation vs. net-terms reconciliation, signature verification vs. replay simulation), and several descriptions explicitly cross-reference sibling tools to disambiguate. The main fuzzy pair is revclamp_lint_dispute_evidence vs. revclamp_stage_stripe_dispute_ce3, which both concern CE 3.0 evidence and differ mainly in lint-vs-qualify/stage, requiring the agent to read descriptions carefully.
All nine tools use the same revclamp_ namespace prefix followed by a snake_case verb_noun construction (audit_, calculate_, evaluate_, lint_, reconcile_, simulate_, stage_, validate_, verify_). The pattern is fully predictable despite some long multi-clause names.
Nine tools is well within the ideal 3-15 range and each maps to a distinct capability in the billing/dispute-compliance workflow. No redundant or filler tools are present.
The surface covers the core lifecycle: portfolio audit, per-customer gating, ROI planning, dispute qualification/staging, evidence linting, VAT compliance, net-terms reconciliation, and webhook integrity. Gaps exist around retrieval—there is no tool to list or fetch actual disputes/charges/customers, and submission is intentionally hardcoded off, so agents must supply all inputs inline and cannot close the loop on dispute filing.
Available Tools
9 toolsrevclamp_audit_revenue_leakageAudit B2B Revenue Leakage & Dispute ReadinessARead-onlyIdempotentInspect
Run a deterministic 90-day B2B revenue leakage and chargeback readiness audit across Stripe subscriptions, AI/API usage telemetry events, and open disputes. Executes as a 100% read-only, stateless diagnostic with zero external Stripe mutations. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, dunningGracePeriodDays, costPerEventCents, and audit (scannedCustomers, scannedEvents, ghostLeakEventsCount, affectedCustomersCount, estimatedBleedUsd, disputesEligibleForAutoEvidence). Use this tool for portfolio-wide multi-customer audits; use revclamp_evaluate_ghost_usage for single-customer entitlement checks or revclamp_stage_stripe_dispute_ce3 to build a single dispute's Visa CE 3.0 evidence bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional simulation flag (boolean) for deterministic sample audit preview. | |
| disputes | No | 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'). | |
| customers | No | 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. | |
| usageEvents | No | 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). | |
| costPerEventCents | No | Estimated marginal compute or API cost per leaked usage event in integer USD cents (valid range: 1 to 100000, default: 142 i.e. $1.42/event). | |
| dunningGracePeriodDays | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds substantive context beyond annotations: it is stateless and ephemeral, performs zero external Stripe mutations, and enumerates the structuredContent return fields so an agent knows what to expect.
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?
Three dense sentences: purpose first, behavioral guarantees second, routing guidance third. The enumeration of return fields is long but earns its place because there is no output schema.
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?
Complete for a stateless audit tool with no output schema: annotations cover safety, the input schema covers all parameters, and the description covers return fields and sibling routing. Nothing an agent needs to invoke it correctly is missing.
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 100%, so the schema already documents all six parameters with types, ranges, defaults, and examples. The description does not add parameter-level semantics beyond the schema, so the baseline of 3 applies.
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: a deterministic 90-day B2B revenue leakage and chargeback readiness audit across Stripe subscriptions, usage telemetry, and disputes. It clearly distinguishes itself from the named sibling tools for single-customer checks and single-dispute evidence 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?
Explicitly says to use this tool for portfolio-wide multi-customer audits and names the alternatives: revclamp_evaluate_ghost_usage for single-customer entitlement checks and revclamp_stage_stripe_dispute_ce3 for a single dispute's Visa CE 3.0 evidence bundle. This gives clear when-to-use and when-to-use-something-else guidance.
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_fitCalculate B2B 0% Take-Rate ROI & Optimal Plan FitARead-onlyIdempotentInspect
Deterministically calculate monthly and annual B2B margin savings using exact integer USD cents when replacing a 25%-30% contingency chargeback agency with RevClamp flat-rate 0% commission plans ($19 Starter, $59 Growth, $199 Scale). Evaluates monthlyWonDisputeUsd, monthlyGhostBleedUsd, contingencyTakeRatePercent, and monthlyUsageEvents to recommend the optimal tier. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, recommendedTier, annualNetMarginSavedUsd, roiMultiple, and calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| monthlyUsageEvents | No | Monthly verified usage events across your workspace (integer 0 to 50000000, default: 250000) used to recommend Starter (<=100k), Growth (<=1M), or Scale (<=5M). | |
| monthlyGhostBleedUsd | No | Monthly unpaid AI/API or SaaS usage bleed stopped by RevClamp basil entitlement guards in USD (valid range: 0 to 10000000, default: 600). | |
| monthlyWonDisputeUsd | No | Monthly won Stripe chargeback volume in USD (valid range: 0 to 10000000, default: 10000) subject to legacy agency take-rate fees. | |
| contingencyTakeRatePercent | No | Competitor chargeback agency contingency commission percentage (valid range: 1 to 50, default: 25 for 25% take-rate tools). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context by stating the calculation is deterministic, uses exact integer USD cents, and returns structuredContent fields including statelessEphemeralAudit and calculation.
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 front-loaded with the core calculation and plan-fit purpose, then covers inputs and return fields in three efficient sentences. The output field list is justified because no output schema exists.
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?
The input schema is fully described, annotations cover safety and idempotency, and because there is no output schema the description usefully enumerates the key returned structuredContent fields. Nothing essential for correct invocation appears missing.
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 100%, so the schema already documents ranges, defaults, and tier thresholds for all four parameters. The description repeats the parameter names and their role in recommending a tier, but adds no parameter semantics beyond what the schema provides.
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 gives a specific verb and resource: calculate monthly and annual B2B margin savings and recommend the optimal RevClamp plan tier. It distinguishes the tool from sibling audit/evaluate tools by focusing on ROI calculation and plan fit rather than leakage auditing or usage evaluation.
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 provides a clear usage context: replacing a 25%-30% contingency chargeback agency with RevClamp flat-rate plans. It does not explicitly name when-not to use it or name sibling alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_evaluate_ghost_usageEvaluate Single-Customer Stripe Basil Ghost UsageARead-onlyIdempotentInspect
Evaluate whether a specific customer's AI or API usage event constitutes unpaid ghost usage across multi-subscription Stripe 2025-03-31.basil state, enforcing fail-closed pagination (has_more must be explicitly false) and configurable 0-14 day dunning grace windows. Executes as a stateless, read-only entitlement evaluator with zero side effects. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, and evaluation (isGhostLeak, isGhostUsage, reason). Use this tool for real-time per-customer entitlement gating; use revclamp_audit_revenue_leakage for batch multi-customer portfolio audits.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional simulation flag (boolean) for deterministic ghost-usage preview. | |
| customerId | No | Stripe customer identifier to evaluate (format example: 'cus_9s6XKzkNRiz8i3', max 64 chars). | |
| usageEvent | No | Optional metered usage event object containing customer_id (or stripe_customer_id), event_name, and occurred_at (or occurred_at_sec). | |
| occurredAtSec | No | Optional alias for usageTimestampSec: Unix epoch timestamp in integer seconds (e.g. 1761264000) when the usage event occurred (used when usageTimestampSec is omitted). | |
| subscriptions | Yes | 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. | |
| usageTimestampSec | No | 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). | |
| subscriptionsHasMore | No | 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. | |
| dunningGracePeriodDays | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive, and closed-world behavior, so the redundancy of 'read-only... zero side effects' is minor. The description adds real value by disclosing statelessness, fail-closed pagination behavior (has_more must be explicitly false), and the exact structuredContent fields returned, which matters because there is no output schema.
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?
Front-loaded with the core purpose and sibling routing, then return shape. It is dense but mostly earns its space; the only waste is slight repetition of read-only/no-side-effects already implied by annotations.
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 an 8-parameter evaluator with nested subscription objects and no output schema, the description covers purpose, routing, pagination safety, dunning behavior, and return fields. It does not discuss authentication, Stripe API key requirements, or precise error behavior, but the critical invocation semantics are present.
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 100%, so the schema carries the field-level detail. The description still adds conceptual meaning: it frames subscriptions as multi-subscription basil state, explains the fail-closed purpose of subscriptionsHasMore, and connects dunningGracePeriodDays to past_due entitlement, beyond the bare field descriptions.
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: evaluating whether one customer's AI/API usage is unpaid ghost usage across multi-subscription Stripe basil state. It also names the sibling it is not (batch portfolio audits via revclamp_audit_revenue_leakage), so an agent can distinguish it without opening either schema.
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?
Explicitly says when to use it (real-time per-customer entitlement gating) and when to use the alternative (revclamp_audit_revenue_leakage for batch multi-customer portfolio audits). It also states the fail-closed pagination precondition, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_lint_dispute_evidenceStripe Dispute Evidence UTF-16 & CE 3.0 Completeness LinterBRead-onlyIdempotentInspect
Deterministically lint a Stripe dispute evidence[access_activity_log] payload against Stripe's 18,000 UTF-16 code unit (String.prototype.length) ceiling, UTF-8 byte length, non-destructive --- BEGIN REVCLAMP CE3 EVIDENCE --- / --- END REVCLAMP CE3 EVIDENCE --- (or [RevClamp Verified Product Usage Log] / [/RevClamp Verified Product Usage Log]) delimiter markers, existing merchant note preservation, 17,922/17,920-char fixed wrapper capacity threshold (SKIP_POST_PRESERVE_DRAFT), and Visa Compelling Evidence 3.0 (CE 3.0) prior-charge (>= 2) + IP/device overlap qualification. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, lint, utf16CodeUnits, maxUtf16Ceiling, remainingUtf16Units, withinCeiling, utf8Bytes, nonDestructiveMarkersPresent, merchantNotesPreserved, merchantNotesUtf16CodeUnits, fixedWrapperUtf16CodeUnits, merchantLogAtCapacity, stagingActionWhenAtCapacity, priorMatchedCount, hasIpMatch, hasDeviceMatch, ce3RubricPassed, and overallVerdict.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Set true to lint a sample preset fixture when evidenceLogText / accessActivityLog is omitted. | |
| preset | No | Scenario preset to evaluate when custom evidenceLogText / accessActivityLog is omitted (default: 'valid_ce3_non_destructive'). | valid_ce3_non_destructive |
| hasIpMatch | No | Whether the disputed charge IPv4/IPv6 address matches the historical undisputed charges. | |
| hasDeviceMatch | No | Whether the disputed charge device_id fingerprint matches the historical undisputed charges. | |
| evidenceLogText | No | 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. | |
| accessActivityLog | No | Alias for evidenceLogText representing Stripe dispute evidence[access_activity_log] payload. | |
| priorMatchedCount | No | Number of prior undisputed Stripe charges (120d-365d old) with matching customer_id and IP/device fingerprint (Visa CE 3.0 requires >= 2). | |
| priorTransactions | No | Optional historical undisputed Stripe charges (120d-365d prior) evaluated for Visa CE 3.0 two-identifier overlap. | |
| disputedTransaction | No | Optional disputed Stripe charge/transaction metadata evaluated against priorTransactions for Visa CE 3.0 qualification. | |
| existingMerchantNotes | No | Existing human AE/support notes inside evidence[access_activity_log] that must be preserved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantive context: it is deterministic, stateless (statelessEphemeralAudit, tenantId), non-destructive of existing merchant notes, and it discloses the fixed-wrapper capacity threshold plus the SKIP_POST_PRESERVE_DRAFT staging behavior when at capacity. The long field enumeration at the end dilutes rather than deepens this, which keeps it below a 5.
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 body is a single run-on sentence packing every threshold, delimiter literal, and rule into one clause chain, followed by a bare comma-separated dump of ~22 return field names. Information is present but not front-loaded or grouped, and the return-field list reads as exhaust rather than explanation.
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 10 parameters, nested objects, and no output schema, listing return fields is genuinely useful, and the CE 3.0 rules plus capacity thresholds are covered. However, the returned fields are named without meaning (e.g., overallVerdict, merchantLogAtCapacity), preset semantics and demo/preset override behavior are unexplained, and there is no guidance on which input path to choose.
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 100%, so the baseline is 3; the description largely restates schema facts (18,000 UTF-16 ceiling, delimiter markers, prior-charge >= 2 with IP/device overlap). It does not resolve the one genuinely ambiguous point the schema leaves open, namely how evidenceLogText and accessActivityLog interact as aliases or when preset overrides custom input.
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 ('Deterministically lint') and a precisely scoped resource ('a Stripe dispute evidence[access_activity_log] payload') with the exact checks performed (18,000 UTF-16 ceiling, delimiters, CE 3.0 qualification). The purpose is unmistakable, but it never names the closest sibling (revclamp_stage_stripe_dispute_ce3) to draw the boundary 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 statement of when to call this versus alternatives, no prerequisites, and no exclusions. The mention of 'SKIP_POST_PRESERVE_DRAFT' and a staging action hints that a separate staging tool exists, but the description never routes the agent there or explains the handoff.
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_termsReconcile B2B Wholesale Net-15/30/60 Deposits & Credit NotesARead-onlyIdempotentInspect
Reconcile B2B wholesale Net-15, Net-30, and Net-60 invoice deposits, partial payments, and credit notes using exact integer minor-unit (EUR/USD cent) arithmetic with zero IEEE-754 floating-point drift. Executes as a pure, stateless, read-only financial reconciliation function. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, and reconciliation (state, status, fulfillmentHold, releaseHoldAction, requiredDepositCents, remainingBalanceCents, creditDueCents, overpaidWarning, orderTag). Use this tool for B2B wholesale order deposit gating and Net-terms balance calculation; use revclamp_validate_eu_vat_vies for cross-border EU VAT number validation.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional sandbox flag (boolean). | |
| orderId | No | B2B wholesale order or invoice identifier (e.g. 'gid://shopify/Order/908812' or 'ORD-2026-9088', default: 'ord_local_b2b_01', max 64 chars). | |
| toleranceCents | No | Optional rounding/FX reconciliation tolerance in integer cents (valid range: 0 to min(500, 1% of totalOrderCents), default: 0). | |
| creditNoteCents | No | Optional post-invoice credit notes or return adjustments in integer cents (valid range: 0 to totalOrderCents, default: 0; singular alias for creditNotesCents). | |
| orderTotalCents | No | Alias for totalOrderCents: gross invoice total in positive integer minor currency units / cents (must be > 0). | |
| paidAmountCents | Yes | Required cumulative amount collected from the buyer in non-negative integer cents (e.g. 75000 for 750.00 EUR; must be >= 0). | |
| totalOrderCents | No | Gross invoice total in positive integer minor currency units / cents (e.g. 250000 for 2,500.00 EUR; must be > 0). | |
| creditNotesCents | No | Optional post-invoice credit notes or return adjustments in integer cents (valid range: 0 to totalOrderCents, default: 0; plural alias for creditNoteCents). | |
| paymentTermsDays | No | 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). | |
| requiredDepositCents | No | Optional explicit upfront deposit threshold in integer cents (valid range: 0 to effectiveTotalCents). Overrides requiredDepositPercent when provided. | |
| requiredDepositPercent | No | Optional upfront deposit percentage required before releasing warehouse fulfillment hold (valid range: 0 to 100, default: 30 i.e. 30% upfront deposit). | |
| daysElapsedSinceInvoice | No | Optional elapsed integer days since invoice issuance (valid range: 0 to 3650, default: 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the description only needs to add context. It does add substantive behavior beyond annotations: pure stateless execution, exact integer minor-unit arithmetic with no floating-point drift, and the enumerated return fields in structuredContent. Gaps remain around alias precedence (orderTotalCents vs totalOrderCents, creditNoteCents vs creditNotesCents) and how tolerance interacts with the deposit threshold, which are behavioral ambiguities an agent would want disclosed.
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?
Three front-loaded sentences with the purpose first and the alternative last; the long parenthetical return-field list is dense but functional since there is no output schema. Minor redundancy in restating read-only, which annotations already cover.
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 12-parameter financial tool with an output schema absent, the description supplies purpose, usage routing, arithmetic semantics, and the return-shape field list, which is most of what an agent needs. The alias-precedence and tolerance-deposit interaction remain undocumented, keeping it just short of complete.
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 100%, with defaults, ranges, enums, and examples given for every one of the 12 parameters, so the schema does the heavy lifting and the baseline is 3. The description adds no parameter-level meaning beyond what the schema already states.
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?
Names a specific verb (reconcile) and resource (B2B wholesale Net-15/30/60 invoice deposits, partial payments, credit notes) plus the arithmetic guarantee. It explicitly names a sibling (revclamp_validate_eu_vat_vies) as the tool for a different job, so an agent can distinguish it without opening the schema.
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?
States the exact scenario it is for (B2B wholesale order deposit gating and Net-terms balance calculation) and routes EU VAT validation to a named sibling. It does not cover the other six siblings or describe when not to use it, so it falls short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_simulate_webhook_replaySimulate Webhook Replay & Out-of-Order State MachineARead-onlyIdempotentInspect
Deterministically evaluate an ordered or out-of-order sequence of 1-10 Stripe/Shopify/RevClamp subscription lifecycle webhooks against a 72-hour idempotency deduplication Set (eventId), a configurable idempotencyWindowSec (60s-2592000s, default: 259200s / 72h), and a monotonic transition timestamp guard (event.createdSec >= lastAppliedCreatedSec). Compares RevClamp's monotonic FSM against a naive overwrite-on-arrival handler to detect resurrected canceled subscriptions, stale tier downgrades, and duplicate retry side-effects. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, simulation, steps, finalStatus, finalTier, finalEntitlementDecision, naiveFinalStatus, and naiveHandlerBug.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional sandbox flag to run the preset replay simulation. | |
| events | No | Optional custom array of 1 to 10 webhook events ({ eventId, eventType, createdSec, subscriptionStatus, tier, currentPeriodEndSec }) in arrival order. | |
| nowSec | No | Reference evaluation timestamp in Unix seconds used to check the 72-hour idempotency window. | |
| scenarioPreset | No | Scenario preset to evaluate when custom events are omitted (default: 'out_of_order_stale_update_after_cancel'). | |
| idempotencyWindowSec | No | Deduplication and replay-acceptance window in seconds (valid range: 60 to 2592000, default: 259200 for 72 hours). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it explains the deterministic evaluation model, the 72-hour dedup Set keyed on eventId, the monotonic guard on event.createdSec, and that the operation is a statelessEphemeralAudit. It does not explain failure/`ok:false` conditions or error behavior, which keeps it from a 5.
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?
Two dense, front-loaded sentences with no filler — the core purpose and mechanism come first, then the return contract. The second sentence enumerating return fields is justified because no output schema exists. It is slightly run-on and could be split for readability, but every clause carries information.
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 simulation tool with no output schema, the description does the necessary work of enumerating returned fields (ok, simulation, steps, finalStatus, naiveFinalStatus, naiveHandlerBug) and framing what the comparison detects. It stops short of describing edge behaviors such as what happens when `events` and `scenarioPreset` conflict, or what an `ok:false` result indicates.
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 100%, so the baseline is 3; the description goes beyond the schema by explaining the semantic effect of the key parameters — the 1-10 event cap, the 60s-2592000s idempotency window with its 72h default, and the monotonic timestamp comparison rule. It reinforces rather than merely repeats the schema, though it does not clarify the interplay between `demo`, `scenarioPreset`, and `events` precedence.
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 a specific verb and resource: evaluate a sequence of 1-10 subscription lifecycle webhooks against an idempotency dedup Set and a monotonic timestamp guard. The purpose (replay/out-of-order FSM simulation) is clearly distinct from the sibling revclamp_verify_webhook_signature, which handles signature verification, even though siblings are not named. An agent can tell immediately this is a simulation/diagnostic tool, not a write or verification tool.
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 implied through the inputs — pass a custom `events` array or fall back to a `scenarioPreset` — but there is no explicit 'use this when…' statement or exclusion against the sibling tools. The agent must infer that this is the right tool for replay/out-of-order scenarios rather than, say, reconciliation. Adequate but with a clear gap in routing guidance.
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_ce3Stage Visa CE 3.0 Stripe Dispute Evidence DraftARead-onlyIdempotentInspect
Evaluate Visa Compelling Evidence 3.0 (CE 3.0) qualification across 120-to-365-day historical charges (requiring at least 2 settled, non-refunded, non-disputed prior transactions sharing IP address, device fingerprint, or billing email) and assemble a non-destructive Stripe dispute evidence draft with submit hardcoded to false. Executes as a pure read-only staging computation that never auto-submits to card networks. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, submitForcedFalse, ce3Qualification, and drawer (including stripeUpdateParams with submit: false and merged access_activity_log). Use this tool for single-dispute CE 3.0 qualification and evidence staging; use revclamp_audit_revenue_leakage for portfolio-wide dispute readiness counts.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional simulation flag (boolean) to stage a labeled sample dispute preview. | |
| disputeId | No | Stripe dispute identifier being staged (format example: 'du_1QxyzEnterpriseDispute01', default: 'du_mcp_staged_01', max 64 chars). | |
| customerId | No | Stripe customer identifier associated with the disputed charge (format example: 'cus_enterprise_88', default: 'cus_mcp_enterprise_01', max 64 chars). | |
| usageEvents | No | 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. | |
| disputeReason | No | Stripe dispute reason code (e.g. 'fraudulent', 'unrecognized', 'subscription_canceled', 'product_unacceptable', 'general'; default: 'fraudulent'; Visa CE 3.0 applies to 'fraudulent' disputes). | |
| priorTransactions | No | Optional array of up to 1000 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). | |
| disputedTransaction | No | Optional disputed charge snapshot object containing id (e.g. 'ch_disputed_01'), occurredAtSec (Unix seconds), customer_id, email, ip_address, and device_id. | |
| existingAccessActivityLog | No | Optional alias for existingUncategorizedText: existing merchant evidence notes in Stripe evidence.access_activity_log (up to 18,000 chars) to preserve via append-only merge. | |
| existingUncategorizedText | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotent/non-destructive annotations, it discloses the key behavioral guarantees: submit is hardcoded to false, the tool never auto-submits to card networks, staging is stateless/ephemeral, and existing evidence text is preserved via append-only merge. It also enumerates the return payload (ok, mode, tenantId, ce3Qualification, drawer with stripeUpdateParams) despite there being no output schema.
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?
Structure is strong — purpose first, then behavioral guarantees, then return shape, then sibling routing. It is somewhat dense, particularly the long enumeration of returned structuredContent fields, which could be trimmed since it is not needed to select or invoke the 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 9 optional parameters, nested objects, and no output schema, this description fills the gaps: it explains the eligibility criteria driving the computation, the no-submit safety contract, and what the response contains. Nothing essential for a correct call is missing.
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 100%, so the baseline is 3; the description earns a step up by explaining the CE 3.0 qualification logic that connects the parameters — a 120-to-365-day window requiring at least 2 settled, non-refunded, non-disputed prior transactions sharing IP, device fingerprint, or billing email. That adds meaning the schema alone does not convey about how priorTransactions and disputedTransaction relate.
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 a specific verb and resource (evaluate Visa CE 3.0 qualification and assemble a Stripe dispute evidence draft) and names the exact alternative (revclamp_audit_revenue_leakage) for the portfolio-wide case. An agent can distinguish it from the sibling without opening the schema.
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 explicitly routes the agent: 'Use this tool for single-dispute CE 3.0 qualification and evidence staging; use revclamp_audit_revenue_leakage for portfolio-wide dispute readiness counts.' It also implies the applicable condition ('Visa CE 3.0 applies to fraudulent disputes'). However, it never mentions revclamp_lint_dispute_evidence, a closely related sibling, so the boundary with that tool is left to inference.
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_viesValidate EU/XI B2B VAT ID & VIES Reverse-Charge StateARead-onlyIdempotentInspect
Normalize EU-27 and Northern Ireland (XI) B2B VAT identifiers (including mandatory Greece ISO-3166 GR to EL prefix normalization) and evaluate cross-border 0% VAT reverse-charge eligibility, VIES consultation evidence, or MS_UNAVAILABLE circuit-breaker fulfillment hold actions. Read-only and non-destructive; supports deterministic simulation modes ('VALID', 'INVALID', 'MS_UNAVAILABLE') or real-time European Commission VIES SOAP/REST lookup ('LIVE'). Returns structuredContent containing ok, mode, statelessEphemeralAudit, simulatedViesLookup, tenantId, normalizedVat, reverseChargeEligible, and viesDecision (status, action, zeroRateAllowed, consultationId). Use this tool for EU/XI VAT tax compliance; use revclamp_reconcile_b2b_net_terms for wholesale Net-15/30/60 deposit and credit-note accounting.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional simulation flag (boolean) for deterministic VIES gateway preset evaluation. | |
| viesMode | No | VIES evaluation mode: 'FORMAT_ONLY' (deterministic EU/XI syntax validation without consultation), 'VALID' (deterministic active VAT simulation, default), 'INVALID' (deterministic rejected VAT simulation), 'MS_UNAVAILABLE' or 'GLOBAL_MAX_CONCURRENT_REQ' (deterministic member-state outage circuit-breaker simulation), or 'LIVE' (real-time European Commission VIES lookup). | |
| buyerVatId | Yes | Required buyer EU or Northern Ireland VAT registration number to normalize and validate (e.g. 'DE123456789', 'GR123456789', 'NL123456789B01', 'XI123456789', max 40 chars). | |
| sellerCountry | No | 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'). | |
| consultationNumber | No | Optional VIES requester consultation reference number (e.g. 'WAPIAAAAW998877', max 64 chars) to attach to deterministic 'VALID' mode tax audit records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description still adds real value beyond that by disclosing the GR→EL prefix normalization rule, the deterministic-vs-LIVE execution distinction, the circuit-breaker hold behavior, and the statelessEphemeralAudit flag. It does not mention authentication requirements or rate/latency characteristics of the LIVE VIES call, which keeps it short of a 5.
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?
Content is front-loaded: identity and normalization come first, then eligibility, then modes, then return shape, then sibling routing. The second sentence is a single very long clause chain dense with parenthetical field lists, which costs some readability, but every sentence carries information and nothing is padded.
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 no output schema, the description usefully names the structuredContent keys (ok, mode, normalizedVat, reverseChargeEligible, viesDecision), which the agent would otherwise have to discover at runtime. Error semantics for a failed LIVE lookup and any auth prerequisites for the European Commission endpoint are the remaining gaps, but for a 5-parameter read-only tool this is close to sufficient.
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 100%, so the schema already documents every parameter, including the mode enum and its default. The description only partially restates the enum ('VALID', 'INVALID', 'MS_UNAVAILABLE', 'LIVE') and omits FORMAT_ONLY and GLOBAL_MAX_CONCURRENT_REQ, adding no syntax or format detail beyond what the schema provides — baseline 3 applies.
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 opens with a specific verb pair (normalize/evaluate) and a precisely bounded resource (EU-27 and XI B2B VAT identifiers, reverse-charge eligibility). It explicitly names the sibling it is not (revclamp_reconcile_b2b_net_terms) and its domain, so an agent can distinguish it from all eight siblings without opening a schema.
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 states the use case directly ('Use this tool for EU/XI VAT tax compliance') and supplies the alternative plus the condition that selects it (Net-15/30/60 deposit and credit-note accounting). The mode enumeration also tells the agent which evaluation path to pick for simulation vs. live lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revclamp_verify_webhook_signatureVerify Stripe, Shopify & RevClamp Webhook HMAC-SHA256 SignaturesARead-onlyIdempotentInspect
Generate and verify canonical Stripe-Signature (t=,v1=<hex_sha256>), X-Shopify-Hmac-Sha256 (<base64_sha256>), and X-RevClamp-Signature (t=,v1=<hex_sha256>) headers over exact UTF-8 webhook payload bytes using crypto.timingSafeEqual and a 300-second replay window guard. Enforces a Zero-Trust guard that blocks known live/production credential patterns (sk_live_, rk_live_, non-test whsec_..., shpss_..., shpat_..., rg_live_, rc_live_, AKIA..., and PEM private keys) with -32602 LIVE_SECRET_FORBIDDEN_IN_SANDBOX. Returns structuredContent containing ok, mode, statelessEphemeralAudit, tenantId, and verification (provider, verificationMode, headerName, generatedHeader, expectedSignature, signatureValid, verificationReason, timingSafeCompared, replayWindowApplicable, timestampSec, timestampSkewSeconds, toleranceSeconds, withinReplayWindow, payloadByteLength, payloadSha256, commonIntegrationTrap). Use this tool to debug webhook signature mismatches and replay skew.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Optional sandbox flag; uses synthetic defaults when provider, secret, or rawPayload are omitted. | |
| secret | No | Synthetic or test webhook signing secret (default: 'whsec_test_revclamp_sandbox_secret_2026', max 256 chars, or comma-separated rotation secrets). Live production secrets (sk_live_, rk_live_, non-test whsec_..., shpss_..., shpat_..., rg_live_, rc_live_, AKIA..., and PEM private keys) are rejected. | |
| secrets | No | Optional array of 1 to 5 synthetic/test webhook signing secrets (each <= 256 chars) to evaluate during rolling webhook secret rotation. | |
| provider | No | 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>). | |
| rawPayload | No | 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. | |
| timestampSec | No | 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. | |
| toleranceSec | No | Optional replay window tolerance in integer seconds (valid range: 1 to 3600, default: 300). | |
| signatureHeader | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnly/non-destructive annotations, the description discloses the timing-safe comparison, the 300-second replay window guard, the Zero-Trust live-credential blocklist with the exact -32602 LIVE_SECRET_FORBIDDEN_IN_SANDBOX error, default payload/secret fallbacks, and the full structuredContent shape. This is unusually rich behavioral context for a sandbox tool.
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 core purpose is front-loaded, but it is delivered as two very long run-on sentences stuffed with parenthetical header formats and a long enumerated blocklist. Listing every structuredContent field inline aids completeness but bloats the prose, and some enumeration belongs in structured data rather than the description.
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 an 8-parameter tool with no output schema, the description compensates well: it names the returned fields, explains the guard/failure code, the replay window, defaults for omitted inputs, and both operating modes. An agent has what it needs to call this correctly and interpret the result.
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 100%, so all 8 parameters are already documented, and most of the description's parameter talk (rotation secrets, default secret, non-test whsec_ rejection) restates the schema. The only added semantic is that omitting signatureHeader switches to GENERATE_AND_SELF_VERIFY mode, which is marginal added value against a fully covered schema.
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 a specific verb and resource: generate and verify canonical HMAC-SHA256 signature headers for Stripe, Shopify, and RevClamp webhooks, plus a debug use case. It is clearly distinguishable from most siblings, though the very close sibling revclamp_simulate_webhook_replay is never named or contrasted.
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 closing sentence gives a usage context ('debug webhook signature mismatches and replay skew'), and the signatureHeader param note explains the generate-vs-verify mode. However there are no exclusions and no comparison to the near-identical sibling simulate_webhook_replay, leaving the agent to infer which to pick.
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.
9 tool updates
- 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
Related MCP Connectors
Zero-take-rate Stripe 2025-03-31.basil, Visa CE 3.0 & EU/UK VIES VAT guardrails MCP server.
Hosted Stripe MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
AI VAT Number Validation: hosted MCP server for EU VAT number checks via VIES.
- mcpOAuthcom.stripe
MCP server integrating with Stripe - tools for customers, products, payments, and more.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProduction-grade MCP server for Stripe financial operations, enabling AI assistants to manage payments, customers, subscriptions, invoices, products, prices, refunds, and balance checks.MIT
- AlicenseAqualityAmaintenanceMerchant of record MCP server: create products, payment links, checkouts, subscriptions, invoices and discount codes, with VAT and sales tax handled in 135+ jurisdictions.43143 npm5Apache 2.0
- AlicenseCqualityBmaintenanceStripe Billing - MCP server providing AI-powered tools and automation by MEOK AI Labs83 npm40 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceMCP server providing EU compliance APIs for VAT validation, sanctions screening, counterparty checks, and invoice extraction. Enables AI agents to make pay-per-call requests settled in USDC on Base via x402, with no account or API key required.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.