openfang-rail
by 89rat · remote · no sign-in to list tools · v1.2.1 · published by GitHub user 89rat
Deterministic banking, LEI, VAT, SWIFT & compliance checks via MCP with signed XDR-1 receipts.
24 tools: 2 do something that can't be undone, 17 change things and 5 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone2Claude Code: ask: see these tools
- Changes things17Claude Code: ask: see these tools
- Only reads5Claude Code: allow: see these tools
5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http openfang-rail https://hcrb.in/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnerc20_balance
The input schema at examples[0].token_address contains a 42-character base64 string.
What this check looks forMatched text
inputSchema.examples[0].token_address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
The input schema at examples[0].address contains a 42-character base64 string.
What this check looks forMatched text
inputSchema.examples[0].address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
The server marks "calculate_fx_savings" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The input carries an amount (input.amount) and a currency, so it moves money.
- Warnbatch_validate
The server marks "batch_validate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The name "batch_validate" says "validate": a word for reading.
The server marks "pre_disbursement_guard" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The name "pre_disbursement_guard" says "disbursement": a word that usually means money moves, which cannot be taken back.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
24 tools
Can't be undone 2Claude Code: ask
calculate_fx_savingsArithmetic comparison of a USDC settlement against comparator percentages YOU supply (bank_fee_pct, custodial_fee_pct) across 14 global fiat currencies.1 finding
Why it is in this group
- The input carries an amount (input.amount) and a currency, so it moves money.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "calculate_fx_savings" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The input carries an amount (input.amount) and a currency, so it moves money.
Description, as the server wrote it Arithmetic comparison of a USDC settlement against comparator percentages YOU supply (bank_fee_pct, custodial_fee_pct) across 14 global fiat currencies. The comparators are assumptions, not measurements of any bank or provider; no protocol fee is deducted on this rail.
Annotations the server declares
- title: Calculate cross-border FX savings
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
pre_disbursement_guardEvaluate supplied identifiers, domain-age evidence and mismatch signals.1 finding
Why it is in this group
- The name "pre_disbursement_guard" says "disbursement": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "pre_disbursement_guard" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The name "pre_disbursement_guard" says "disbursement": a word that usually means money moves, which cannot be taken back.
Description, as the server wrote it Evaluate supplied identifiers, domain-age evidence and mismatch signals. Requires a preceding receipt hash. An advisory result is not verified identity, fraud clearance or authorization to release funds.
Annotations the server declares
- title: Counterparty Risk Indicators
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
Changes things 17Claude Code: ask
balance_checkNative ETH and one ERC-20 balance (default USDC) for an address on Base, raw and formatted.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Native ETH and one ERC-20 balance (default USDC) for an address on Base, raw and formatted. Result carries a signed receipt.
Annotations the server declares
- title: Base Account Balance Snapshot
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
batch_validateRun up to 50 supported {tool, value} checks in one request.1 finding
Why it is in this group
- The name "batch_validate" says "validate": a word for reading.
- The description's first verb is "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "batch_validate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}; The name "batch_validate" says "validate": a word for reading.
Description, as the server wrote it Run up to 50 supported {tool, value} checks in one request. Each result states its scope. Compare the current batch quote with individual quotes; savings depend on batch size.
Annotations the server declares
- title: Batch Identifier Checks (up to 50 items)
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
block_infoBase block header: number, timestamp, transaction count and base fee for the latest or a given block.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Base block header: number, timestamp, transaction count and base fee for the latest or a given block. Result carries a signed receipt.
Annotations the server declares
- title: Base Block Header Info
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
check_priceInstant zero-cost pricing hook for code402 tools.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Instant zero-cost pricing hook for code402 tools. Returns the live price, an opaque quote_id, TTL, and the settlement URL. Free forever — feeds the price index into an agent planner's context without creating any financial obligation. If the planner acts on the quote, it hits the settlement_url with an EIP-3009 signed voucher.
Annotations the server declares
- title: Zero-cost price index and gasless x402 quote generator
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
context_distillDeterministic text digest: word count, top-5 most frequent meaningful words (stop words excluded), first sentence, and a keccak-256 content hash.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Deterministic text digest: word count, top-5 most frequent meaningful words (stop words excluded), first sentence, and a keccak-256 content hash. Pure function — no external calls, no ML.
Annotations the server declares
- title: Context distill
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
crypto_tickerSpot USD price for a crypto ticker or CoinGecko id from public price feeds, cached 60 s.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Spot USD price for a crypto ticker or CoinGecko id from public price feeds, cached 60 s. Result carries a signed receipt.
Annotations the server declares
- title: Crypto ticker
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
erc20_balanceRaw and formatted ERC-20 balanceOf for an address on Base, with decimals read from the token.1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The input schema at examples[0].token_address contains a 42-character base64 string.
What this check looks forMatched text
inputSchema.examples[0].token_address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
Description, as the server wrote it Raw and formatted ERC-20 balanceOf for an address on Base, with decimals read from the token. Result carries a signed receipt.
Annotations the server declares
- title: ERC-20 Token Balance Snapshot
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
fx_spot_price_oracleReference fiat and stablecoin conversion rate from a static table, not a live feed.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Reference fiat and stablecoin conversion rate from a static table, not a live feed. Returns rate and inverse; result carries a signed receipt.
Annotations the server declares
- title: FX spot price oracle
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
ifsc_checkCheck the 11-character Indian IFSC format, including its fifth-character zero.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check the 11-character Indian IFSC format, including its fifth-character zero. No bank-branch registry lookup or account verification.
Annotations the server declares
- title: IFSC Format Check
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
india_supplier_checkOne call, one receipt: GSTIN + PAN + UPI VPA + IFSC for an Indian counterparty.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it One call, one receipt: GSTIN + PAN + UPI VPA + IFSC for an Indian counterparty. Four deterministic structural checks, each stating its own scope. Built for cross-border procurement where the buyer is an agent that cannot open an INR account.
Annotations the server declares
- title: India Supplier Verification Pack
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
receipt_verifyVerifies a signed XDR-1 receipt from ANY x402 service: recomputes the canonical digest and recovers the signer, then compares it to the declared signer.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Verifies a signed XDR-1 receipt from ANY x402 service: recomputes the canonical digest and recovers the signer, then compares it to the declared signer. Free forever — no account, no quota, no storage (stateless). A valid receipt proves the signer signed that tool call at that timestamp; it does NOT prove funds moved or any business claim.
Annotations the server declares
- title: Verify any XDR-1 receipt — free, stateless, any issuer
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
sanctions_address_screenExact EVM-address comparison against the identified address snapshot and existing operator block policy.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Exact EVM-address comparison against the identified address snapshot and existing operator block policy. Current legal status is unknown; is_sanctioned is null. valid=false preserves a local block; valid=null never authorizes a transaction. Names are not screened. Missing, stale or incomplete evidence is explicit; no UN/EU coverage or sanctions clearance is provided.
Annotations the server declares
- title: Address Snapshot & Operator Policy Comparison
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
swift_bic_checkCheck SWIFT/BIC structure and country code.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check SWIFT/BIC structure and country code. Does not establish bank existence, active routing or beneficiary identity.
Annotations the server declares
- title: SWIFT/BIC Structure Check
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
token_contract_riskDeterministic Base contract facts: ERC-20 metadata, proxy slots, owner(), privileged-function selectors and flags.1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The input schema at examples[0].address contains a 42-character base64 string.
What this check looks forMatched text
inputSchema.examples[0].address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
Description, as the server wrote it Deterministic Base contract facts: ERC-20 metadata, proxy slots, owner(), privileged-function selectors and flags. Not a safety verdict. Result carries a signed receipt.
Annotations the server declares
- title: Token contract facts (Base)
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
tx_activityOutbound transaction count (nonce) and contract-or-EOA check for an address on Base.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Outbound transaction count (nonce) and contract-or-EOA check for an address on Base. Result carries a signed receipt.
Annotations the server declares
- title: Tx Activity & Contract Detection
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
vat_mod97_checkCheck the supported Belgian VAT format and MOD-97 checksum.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check the supported Belgian VAT format and MOD-97 checksum. BE only; not VIES, other EU VAT formats, registration status or tax compliance.
Annotations the server declares
- title: Belgian VAT MOD-97 Check
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
vendor_onboarding_packCheck supplied IBAN, LEI, Belgian VAT and UK company-number fields in one result.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check supplied IBAN, LEI, Belgian VAT and UK company-number fields in one result. Structural checks only; no ownership, registry or fraud clearance.
Annotations the server declares
- title: Vendor Identifier Check Pack
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
Only reads 5Claude Code: allow
clean_markdown_scraperFetch a public web page by URL (or take your HTML) and return Markdown plus headings.No findings
Why it is in this group
- The description's first verb is "fetch": a word for reading.
Description, as the server wrote it Fetch a public web page by URL (or take your HTML) and return Markdown plus headings. No JavaScript rendering. Result carries a signed receipt.
Annotations the server declares
- title: Clean markdown scraper
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
gstin_checkValidate an Indian GSTIN by structure (2-digit state code + PAN + entity code + 'Z') and its mod-36 cross-sum checksum.No findings
Why it is in this group
- The description's first verb is "validate": a word for reading.
Description, as the server wrote it Validate an Indian GSTIN by structure (2-digit state code + PAN + entity code + 'Z') and its mod-36 cross-sum checksum.
Annotations the server declares
- title: GSTIN check (India)
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
iban_checkValidate IBAN structure and MOD-97 checksum.No findings
Why it is in this group
- The description's first verb is "validate": a word for reading.
Description, as the server wrote it Validate IBAN structure and MOD-97 checksum. Does not establish account ownership, beneficiary identity or absence of fraud.
Annotations the server declares
- title: IBAN Structure and Checksum Check
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
instant_json_schema_verifierValidate JSON data payloads against schema definitions.No findings
Why it is in this group
- The description's first verb is "validate": a word for reading.
Description, as the server wrote it Validate JSON data payloads against schema definitions. Preflighted for agent tool call pipelines.
Annotations the server declares
- title: Instant JSON schema verifier
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
lei_checkValidate a 20-character LEI and MOD-97 check digits.No findings
Why it is in this group
- The description's first verb is "validate": a word for reading.
Description, as the server wrote it Validate a 20-character LEI and MOD-97 check digits. No registry lookup, active-registration check or legal-entity identity verification.
Annotations the server declares
- title: LEI Structure and Checksum Check
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
- x402: [object Object]
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.2.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http openfang-rail https://hcrb.in/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__openfang-rail__clean_markdown_scraper",
"mcp__openfang-rail__instant_json_schema_verifier",
"mcp__openfang-rail__iban_check",
"mcp__openfang-rail__lei_check",
"mcp__openfang-rail__gstin_check"
],
"ask": [
"mcp__openfang-rail__crypto_ticker",
"mcp__openfang-rail__erc20_balance",
"mcp__openfang-rail__fx_spot_price_oracle",
"mcp__openfang-rail__block_info",
"mcp__openfang-rail__tx_activity",
"mcp__openfang-rail__token_contract_risk",
"mcp__openfang-rail__context_distill",
"mcp__openfang-rail__balance_check",
"mcp__openfang-rail__calculate_fx_savings",
"mcp__openfang-rail__vat_mod97_check",
"mcp__openfang-rail__swift_bic_check",
"mcp__openfang-rail__batch_validate",
"mcp__openfang-rail__vendor_onboarding_pack",
"mcp__openfang-rail__india_supplier_check",
"mcp__openfang-rail__pre_disbursement_guard",
"mcp__openfang-rail__ifsc_check",
"mcp__openfang-rail__sanctions_address_screen",
"mcp__openfang-rail__check_price",
"mcp__openfang-rail__receipt_verify"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as openfang-rail. Review it before you use it.
