storefront-guard-mcp-server
This server lets an AI shopping agent verify a merchant storefront's legitimacy before paying, returning an explainable trust score and a clear action recommendation.
Verify any storefront domain via the
verify_storefrontMCP tool and receive a trust score (0-100), risk level, confidence, and plain-English reasonsGet a top-level action recommendation:
proceed,pause_for_confirmation, ordo_not_proceedwith a user-safe explanationCheck domain registration age and recent changes via RDAP
Check SSL certificate issuance history via Certificate Transparency logs (crt.sh)
Validate current HTTPS certificate validity
Cross-reference known-scam blocklists: URLhaus and Google Safe Browsing
Look up US corporate registration via OpenCorporates
Verify legal entity name via GLEIF registry
Check web traffic rank against Tranco top-1M
Check federal exclusions via SAM.gov debarment list
Use FDA enforcement data as a corroborating risk signal
Submit transaction outcome feedback via the
/feedbackendpoint to help build future ML training dataRun in multiple deployment modes: local MCP (stdio), streamable HTTP MCP, pay-per-call x402 API, REST API with API key auth, or all servers at once
Gracefully degrades when optional data-source keys are missing, lowering confidence instead of throwing errors
Checks storefront domains against Google Safe Browsing's known-scam blocklist as part of the merchant verification trust score.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@storefront-guard-mcp-servercheck if example-shop.com is legitimate before I pay"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
storefront-guard-mcp-server
Agent-side merchant verification. A shopping agent calls verify_storefront
with a domain before paying, and gets back a trust score built from
free public data sources.
This is the mirror image of merchant-side agent-verification protocols like Visa's Trusted Agent Protocol: those let a merchant confirm an incoming agent is legitimate. This tool lets the agent confirm the merchant is legitimate before committing payment.
What it checks
Domain registration age & recent changes — via free public RDAP lookups. A domain registered days ago, or one whose registration data changed in the last two weeks, is a red flag.
SSL certificate issuance history — via free public Certificate Transparency logs (crt.sh). A cert reissued very recently on an otherwise long-established domain can indicate a takeover or hosting change, even when the domain itself looks old and trustworthy.
HTTPS validity — does the site currently serve a valid cert at all.
Known-scam blocklist — URLhaus and Google Safe Browsing.
Corporate registration — US entity lookup via OpenCorporates.
Legal name verification — GLEIF entity registry cross-check.
Web traffic rank — Tranco top-1M ranking.
Federal exclusions — SAM.gov debarment check.
FDA enforcement — corroborating signal when other risks are present.
Every deduction from the trust score comes with a plain-English reason in
the reasons array — this is deliberately an explainable heuristic, not a
black-box model.
Related MCP server: acuris-agent-guard
Setup
Requires Node.js 18+.
npm install
npm run buildCopy .env.example to .env and fill in your keys.
Running it
As a local MCP server (stdio):
npm startAs a remote MCP server (streamable HTTP) with x402 payment:
npm run start:http
# POST http://localhost:3000/mcpAs a pay-per-call x402 HTTP API:
npm run start:x402
# POST http://localhost:4021/verify { "domain": "example-shop.com" }As a REST API (API key auth):
npm run start:rest
# POST http://localhost:4022/verify { "domain": "example-shop.com" }
# Header: X-API-KEY: your-keyAll three servers at once:
npm run start:all
# MCP: http://localhost:3000/mcp
# x402: http://localhost:4021/verify
# REST: http://localhost:4022/verifyFeedback endpoint
Submit outcome data after a transaction to help build training data for future ML scoring:
POST http://localhost:4022/feedback
Header: X-API-KEY: your-key
Body: { "domain": "example-shop.com", "outcome": "legit" | "scam" }How to use the recommendation field
Every verification result includes a top-level recommendation string alongside the
numeric trustScore. Agents should branch on it rather than implementing their own
threshold logic against the raw score.
Value | Suggested agent behavior |
| Complete the transaction silently. Trust score is low-risk with high confidence. |
| Stop before paying and show |
| Block the transaction and actively notify the user — do not fail silently. |
recommendationReason is a one-line plain-English explanation safe to show directly to users.
Pricing
$0.01/call via x402. Set your wallet address in PAY_TO_ADDRESS and network in X402_NETWORK (default: base).
Environment variables
Variable | Required | Description |
| Yes (x402) | Your wallet address for USDC payments |
| No | Blockchain network (default: |
| No | Per-call price (default: |
| Yes (REST) | Comma-separated valid API keys |
| No | Degrades gracefully if unset |
| No | Degrades gracefully if unset |
| No | Degrades gracefully if unset |
| No | Path for feedback JSONL log (default: |
| No | MCP server port (default: |
| No | x402 server port (default: |
| No | REST API port (default: |
Available Tools
1 toolverify_storefrontVerify Storefront LegitimacyARead-only
Checks whether a merchant storefront looks like the same legitimate entity it appeared to be recently, BEFORE an agent commits payment to it.
This is the mirror image of merchant-side agent-verification protocols (e.g. Visa's Trusted Agent Protocol): those let a merchant confirm an incoming agent is legitimate. This tool lets the AGENT confirm the MERCHANT is legitimate before paying.
It does NOT guarantee a storefront is safe - it is a fast, explainable pre-purchase signal built from free public data sources (domain registration history via RDAP, SSL certificate issuance history via Certificate Transparency logs, HTTPS validity, and a known-scam-domain check). Treat a "high" risk result as a strong reason to pause and get human confirmation before paying, and a "low" risk result as one input among others, not a guarantee.
Args:
domain (string): the bare domain of the storefront to check, e.g. "example-shop.com"
Returns: { "domain": string, "trustScore": number, // 0-100, higher = more trustworthy "riskLevel": "low" | "medium" | "high" | "unknown", "confidence": "low" | "medium" | "high", // how many signals could actually be resolved "reasons": string[], // human-readable explanation for the score "recommendation": "proceed" | "pause_for_confirmation" | "do_not_proceed", "recommendationReason": string, // one-line explanation of why this recommendation was made "signals": { ...raw signal data for audit/debugging... }, "checkedAt": string // ISO timestamp - this is a point-in-time result, do not cache it }
Recommendation values and suggested agent behavior:
"proceed": trust score is high with high confidence — complete the transaction silently, no user confirmation needed
"pause_for_confirmation": score is borderline or confidence is insufficient — pause and show recommendationReason to the user before completing payment
"do_not_proceed": domain matched a scam list or trust score is critically low — block the transaction and actively notify the user (do not fail silently)
Examples:
Use when: an agent is about to submit payment to a storefront it found via search or a marketplace listing
Use when: comparing several candidate storefronts for the same product before choosing one to buy from
Don't use when: verifying a well-known, previously-transacted-with merchant on every single repeat purchase - reserve for new or unfamiliar storefronts, since results are not meant to be cached long-term but also aren't needed for every routine repeat transaction
Error Handling:
Never throws - if a data source is unreachable, the affected signal is returned as null and "confidence" drops accordingly rather than failing the call
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The bare domain of the storefront to verify, e.g. 'example-shop.com'. Strip protocol and path if given a full URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral traits: results are point-in-time and should not be cached, the tool never throws and degrades gracefully by returning null signals, and risk outputs are advisory rather than guarantees. This adds substantial behavioral context that annotations alone do not provide.
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?
Although lengthy, the description is well-structured with clear sections (Args, Returns, Recommendation values, Examples, Error Handling) and every section serves a distinct purpose. Core guidance is front-loaded, and the length is justified by the tool's behavioral complexity.
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 present, the description compensates fully by explaining the return structure, each recommendation value, and the suggested agent behavior for each outcome. It also covers error handling and usage boundaries, making the tool callable correctly without additional external knowledge.
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?
The schema already fully documents the single parameter with a clear description, including the example and the instruction to strip protocol/path. The description's Arg section essentially repeats this information without adding significant new meaning, so the schema carries the burden and the baseline of 3 is appropriate.
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 clearly states a specific verb ('Checks whether') and a specific resource ('a merchant storefront'), with a concrete decision context ('BEFORE an agent commits payment'). It also clarifies what the tool does not do ('does NOT guarantee a storefront is safe'), leaving no ambiguity about its role.
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 explicit 'Use when' and 'Don't use when' guidance, including concrete scenarios like submitting payment to a newly found storefront, comparing candidates, and avoiding routine repeat purchases. It also maps return values to specific agent behaviors, so an agent knows exactly when to proceed, pause, or block.
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 tool update
v0.2.0- First observed
verify_storefront
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion or overlap. The tool's purpose is singular and clearly defined, so agents cannot misselect between alternatives.
The single tool name 'verify_storefront' follows the verb_noun pattern consistently. With one tool, there are no naming inconsistencies or mixed conventions to evaluate.
The server has only one tool, which feels thin for a domain that could reasonably include additional operations like reporting a scam or checking verification history. However, the narrow purpose of storefront verification is adequately covered by this single comprehensive tool, making it borderline appropriate.
For the stated purpose of pre-purchase storefront verification, the tool covers all necessary signals (domain registration, SSL, HTTPS, scam list) and returns actionable recommendations. There are no obvious gaps or dead ends for the defined use case.
Maintenance
Related MCP Connectors
Merchant verification for AI shopping agents.
Verify x402 payment endpoints before an AI agent pays: scam scan, on-chain checks, trust scores.
Is a website ready for AI shopping agents? Readiness score (0-100) + agent shopping simulation.
Pre-purchase trust checks for AI agents: recalls, scam signals, proceed/caution/avoid verdict.
Related MCP Servers
- AlicenseBqualityDmaintenanceMachine-readable merchant verification infrastructure for AI shopping agents and agentic commerce systems.13MIT

acuris-agent-guardofficial
AlicenseNot gradedqualityCmaintenanceMCP server that verifies storefront merchants before AI agents make payments, checking if the merchant is a real legal entity bound to the domain, and returning a PROCEED, ABORT, or REVIEW decision to prevent payment to clones or fraudulent stores.MIT- FlicenseNot gradedqualityCmaintenanceProvides trust infrastructure for AI agents by enabling reputation lookup, website trust scanning, and identity verification via MCP tools.1-

attest-mcpofficial
AlicenseAqualityDmaintenanceEnables AI agents to scan payment endpoints for safety, returning a letter grade (A–F) and verdict before authorizing payments.221 npmMIT