Purpose
aso-audit-mcp is a free, open-source ASO (Agent Signal Optimization) scanner provided as an MCP server. Its goal is to assess whether websites, APIs, and product interfaces are capable of being discovered, trusted, understood, and used by AI agents. The project likens ASO to SEO for agents: SEO makes pages visible to people and search engines, while ASO enables services to be selected, invoked, paid for, and reused by AI agents.
Main Capabilities
The scanner covers 6 major pillars and a total of 34 signals, checking for gaps in discoverability, trust, interoperability, and commercial capability, covering various emerging agent standards. Each check returns one of three results: pass / partial / fail, along with specific evidence and remediation recommendations. The results are aggregated into six ASO pillar scores: Discoverability 20, Identity 20, Trust 15, Commerce 15, Reputation 15, Memory 15, ultimately forming an ASO score and maturity level.
The checks include AI rules in robots.txt, llms.txt, agent cards, MCP server cards, and OAuth metadata, among others. The project states that it tracks Google's current agent readiness guidance, but does not overinterpret it: Google Search says that traditional SEO fundamentals still apply to generative AI search, llms.txt is ignored by Google Search itself, and browser agents benefit from clean DOM, screenshots, and accessibility tree signals. The scanner retains the llms.txt check because non-Google agents use it, and adds browser agent UX checks covering semantic controls, associated labels, ARIA/role fallbacks, and hidden overlay risks.
In addition, the scanner provides a deterministic x402 v2 endpoint audit tool, audit_x402_endpoint, which performs a no-cost protocol audit of a single paid endpoint, returning a 0-100 score, A-F grade, compliance determination, per-item booleans, failed items, and observed schemes/networks/extensions. It verifies live 402 challenges, but never sends PAYMENT-SIGNATURE, therefore payment cannot be authorized or settled. Check items include HTTPS/TLS, HTTP 402, PAYMENT-REQUIRED, Base64 JSON, x402Version: 2, non-empty accepts, CAIP-2 network, required payment fields, and JSON content type. For body-gated routes, method, body, and optional content_type can be passed in. This result is deliberately reported separately from the ASO score: protocol compliance does not prove discoverability, trust, settlement, idempotency, or paid response quality.
How to Use
Requires Node.js ≥ 20. Published to npm under the package name @forgemeshlabs/aso-audit-mcp, no cloning or building required. Running directly with npx is recommended, and it works with any MCP client such as Claude Desktop, Cursor, Windsurf, etc. The current version is v0.4.4, the transport is local stdio, local stdio usage requires no authentication, and the scanner does not require API keys, tokens, cookies, or third-party credentials. The npm package does not have HTTP deployment enabled; any public HTTP deployment must add authentication, per-client rate limiting, request logging, and egress policies before being exposed.
After connecting to an MCP client, example usages to try include: "Scan example.com for agent readiness", "What's my ASO score?", "Give me a fix plan to make my site agent-ready." The repository also includes glama.json for ownership and installation metadata for the Glama MCP registry, and provides a production Dockerfile and GLAMA.md build specification.
Applicable Scenarios
Suitable for developers, product teams, and operations personnel who want to understand whether their website or API is friendly to AI agents and whether it has discoverability and readiness signals. It can be used to self-check the ASO score, locate gaps in discoverability/trust/interoperability/commerce, and obtain a fix plan. x402 endpoint auditing is suitable for scenarios that need to check the protocol compliance of paid endpoints.
Limitations and Security Design
The ASO score is experimental and will evolve as agent standards mature. The score produced by the scanner is directional self-Evaluation; ASO certification (ASO-3+) requires verified evidence. Reputation signals (citations, reviews, success rates) cannot be automatically verified by the crawler, are reported manually, and score 0 until verified, so the highest automatically verifiable score is 89/100, which is a deliberate honesty design rather than a flaw. Emerging specifications (MCP Server Cards SEP-1649/SEP-2127, DNS-AID, Web Bot Auth, UCP/ACP/MPP) change quickly.
Because the scanner makes outbound requests to user-provided URLs, it has built-in protection against SSRF abuse: only http/https protocols are allowed; after DNS resolution it rejects loopback, private (RFC 1918), link-local, CGNAT, reserved, multicast, and cloud metadata addresses (169.254.169.254), covering IPv6 loopback/ULA/link-local and IPv4-mapped forms; it uses fixed-IP transport while TLS still verifies the original hostname; automatic redirect following is disabled, and every hop is revalidated, with a maximum of 5 redirects; resolved manifests are omitted from tool output by default (opt in with include_artifacts: true, and they are explicitly marked as untrusted), and embedded text fragments undergo control-character sanitization and length limits; GET only, UA is ASO-Scanner/1.0, maximum 6 concurrent, 10-second timeout, 512KB response cap, never authenticates, never POSTs, and does not crawl content outside well-known paths. npm test covers hardening tests such as insecure URL rejection, private IP ranges, artifact sanitization, redirect blocking, and redirect hop limits.
Regarding the sponsored card (Lulu Ads): there is no paid ForgeMesh server behind this MCP; every tool directly fetches the scanned site, so the Lulu Ads card can only be attached client-side, and only to list_tools. It is an ordinary, labeled data field on the JSON result, never text that a model could read as instructions. The package does not ship with ad credentials; the card renders only when the operator running the MCP sets LULU_ADS_PUBLISHER_ID and LULU_ADS_API_KEY (both required). For end users running npx -y @forgemeshlabs/aso-audit-mcp without credentials, the package makes zero calls to the adnetwork, and no card appears. LULU_ADS_ENABLED=false is the kill switch. The scan/audit tools never touch this SDK. Fail open: any SDK error or timeout (hard budget 2 seconds) returns the original response as-is. Apart from the scanned site, the only external host this package contacts is ads.getlulu.dev. The card can be removed by deleting result.sponsored.
The project is MIT licensed and free for everyone.