NanoParse
Server Details
Clean Markdown from any URL with Litmus trust signals. $0.005 per page via x402, no account.
- Status
- Healthy
- Uptime
- 100.0% over 64 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- nanoparse-dev/nanoparse-mcp
- GitHub Stars
- 0
- Server Listing
- nanoparse-mcp
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
nanoparse_fetch reads a URL; nanoparse_status inspects wallet/quota state. The two verbs target entirely different concerns and the descriptions reinforce the split (status is explicitly a pre-flight check for fetch). No plausible misselection between them.
Both tools share the nanoparse_ prefix and snake_case, which is clean and predictable. The only wrinkle is that 'status' is a noun while 'fetch' is a verb, so the action pattern isn't uniform, but it's readable and conventional.
Two tools is on the thin side — essentially one core operation plus a helper/diagnostics call. For a single-purpose paid fetch service this is defensible, but the surface offers little beyond the minimum.
The domain (fetch a page as Markdown with trust signals, plus pre-flight payment/quota awareness) is fully covered: the paid-read lifecycle and the cost-check are both present, and error/reason reporting is described. Missing niceties like batch fetch or sitemap discovery are acknowledged with a documented single-URL loop workaround, so no dead ends.
Available Tools
2 toolsnanoparse_fetchARead-onlyInspect
Read one URL into clean Markdown with Litmus signals (source authority, freshness, structural trust). Price: $0.005 per page actually read, USDC on Base via x402. Free tier: 10 free parses a month, no account and no key. On a cloud host (where the anonymous allowance does not apply) pass wallet_address + wallet_signature once — a plain EIP-191 signature, no payment — to claim the same 10. A page we cannot read — bot wall, consent wall, paywall, PDF — is reported with a named reason and never charged. To read a whole site or a list: call this tool once per URL. Build your list first (GET https:///sitemap.xml, or use URLs you already have), then loop. No minimum, no commitment, no balance to spend down: stop whenever you like. If you already know the price and the payTo address, pay on the first call and skip the 402 round trip. Otherwise, when the tool returns a payment_required error, sign the included payment_terms and retry with the payment_signature argument (works in every MCP client; no custom headers needed).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to fetch and parse | |
| wallet_address | No | Your wallet address (0x...) to claim the free tier — no payment needed. | |
| wallet_signature | No | EIP-191 personal_sign signature (0x... hex, 65 bytes r||s||v) over the exact string "nanoparse.app free tier: sign this message to claim 10 free parses (no payment).". Proves you own wallet_address and unlocks 10 free parses per month. | |
| payment_signature | No | x402 payment signature — base64-encoded JSON payment terms. Only needed after the free tier is exhausted: the payment_required error response includes the payment_terms to sign. Pass the signed terms here (or as a Payment-Signature header if your client supports headers). |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | No | Array of content items returned by the tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/openWorld/non-idempotent/non-destructive, and the description adds everything an agent actually needs on top: $0.005 per page read, 10 free parses per month with no key, cloud-host wallet attestation via plain EIP-191 with no payment, and the crucial guarantee that unreadable pages (bot wall, consent wall, paywall, PDF) return a named reason and are never charged. The per-call billing also implicitly explains the non-idempotent hint, since a retry costs another page.
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 correctly — what it does, what it costs, then the auth and payment mechanics — and most sentences carry distinct operational facts. It is longer than ideal, with mild redundancy between the free-tier sentence and the cloud-host wallet-claim sentence, plus a marketing-ish 'no minimum, no commitment, no balance to spend down' clause that could be cut.
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 paid, auth-gated, open-world fetch tool with 100% schema coverage and an output schema handling return shape, the description covers every decision point an agent faces: cost, free allowance, host-dependent auth, batching strategy, failure-mode billing, and the full x402 retry loop. Nothing needed to call 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 coverage is 100%, so all four parameters are self-documenting and the baseline is 3. The description earns an increment by giving the sequencing the schema cannot: payment_signature is normally obtained by reading payment_terms out of a payment_required error response, and wallet_address/wallet_signature are a one-time claim rather than per-call.
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 ('Read one URL into clean Markdown with Litmus signals') and immediately bounds the scope by contrasting it with site-wide or list reads, which must loop one URL per call. An agent knows exactly what unit of work this performs, and the name plus that scope statement distinguish it from the status sibling without ambiguity.
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?
Gives explicit invocation routing: use wallet_address + wallet_signature on cloud hosts to claim the free tier, pay on the first call if price and payTo are known, otherwise sign the payment_terms from the returned payment_required error and retry. It does not mention when to consult the nanoparse_status sibling, so the alternative-selection guidance is strong on the payment path but incomplete on the sibling path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nanoparse_statusARead-onlyIdempotentInspect
Check wallet balance, USDC balance, quota state, and whether the next /fetch call will succeed without payment. Use before spending — tells the agent exactly how much to fund.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | The Ethereum wallet address to query (0x...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| quota | Yes | |
| funding_uri | No | |
| usdc_balance | Yes | |
| balance_error | No | |
| balance_known | No | |
| wallet_address | Yes | |
| price_per_parse | Yes | |
| usdc_balance_raw | No | Balance in micro-USDC; null when the chain could not be read |
| next_call_will_succeed | No | null when the free tier is exhausted and the balance is unknown |
| estimated_parses_remaining | No | null when the balance is unknown — never 0, which would imply an empty wallet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, open-world behavior, so the bar is lower. The description adds real value by framing this as a predictive pre-flight check (will the next call succeed without payment) rather than a plain status read, though it says nothing about auth requirements, caching, or staleness of the quota reading.
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 tight sentences, no filler, with the enumeration of what is checked front-loaded ahead of the usage directive. 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?
Output schema exists, so return fields need not be re-explained, and annotations cover the safety profile. The one real gap is the optional 0-required-parameter address: the description never clarifies whether omitting it falls back to a configured/default wallet.
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% for the single address parameter, so the schema already documents it fully. The description adds no address-format or default-behavior detail — notably it never explains what happens when address is omitted, which the schema marks as not required.
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?
Specific verb (check) plus concrete resources (wallet balance, USDC balance, quota state) and a forward-looking outcome (whether the next /fetch will succeed without payment). Naming the /fetch call explicitly separates it from the sibling nanoparse_fetch.
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?
"Use before spending" gives a clear situational trigger and the reason (to know how much to fund). It stops short of stating when not to call it or contrasting the cost of calling it vs. skipping, but the pre-flight role is unambiguous.
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
- Changed
nanoparse_fetch2 fields changed- added
Input schema / properties / wallet_addressAdded value: +{ + "description": "Your wallet address (0x...) to claim the free tier — no payment needed.", + "type": "string" +} - added
Input schema / properties / wallet_signatureAdded value: +{ + "description": "EIP-191 personal_sign signature (0x... hex, 65 bytes r||s||v) over the exact string \"nanoparse.app free tier: sign this message to claim 10 free parses (no payment).\". Proves you own wallet_address and unlocks 10 free parses per month.", + "type": "string" +}
1 tool update
- Changed
nanoparse_fetch1 field changed- removed
Output schema / requiredRemoved value: -[ - "content" -]
1 tool update
- Changed
nanoparse_status14 fields changed- added
Output schema / descriptionAdded value: +"Machine-readable status fields. This schema describes structuredContent — strict MCP clients validate structuredContent against it, so it must NOT require the result-envelope `content` array." - added
Output schema / properties / balance_errorAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / balance_knownAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / contentRemoved value: -{ - "description": "Human-readable status report as text content", - "items": { - "properties": { - "text": { - "description": "Multi-line status report: wallet, USDC balance, price, estimated parses, free tier, funding URI", - "type": "string" - }, - "type": { - "enum": [ - "text" - ], - "type": "string" - } - }, - "required": [ - "type", - "text" - ], - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / estimated_parses_remainingAdded value: +{ + "description": "null when the balance is unknown — never 0, which would imply an empty wallet", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / funding_uriAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_call_will_succeedAdded value: +{ + "description": "null when the free tier is exhausted and the balance is unknown", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / price_per_parseAdded value: +{ + "type": "string" +} - added
Output schema / properties / quotaAdded value: +{ + "type": "object" +} - removed
Output schema / properties / structuredContentRemoved value: -{ - "description": "Machine-readable status fields", - "properties": { - "balance_error": { - "type": [ - "string", - "null" - ] - }, - "estimated_parses_remaining": { - "type": "number" - }, - "funding_uri": { - "type": "string" - }, - "next_call_will_succeed": { - "type": "boolean" - }, - "price_per_parse": { - "type": "string" - }, - "quota": { - "type": "object" - }, - "usdc_balance": { - "type": "string" - }, - "usdc_balance_raw": { - "type": "string" - }, - "wallet_address": { - "type": "string" - } - }, - "type": "object" -} - added
Output schema / properties / usdc_balanceAdded value: +{ + "type": "string" +} - added
Output schema / properties / usdc_balance_rawAdded value: +{ + "description": "Balance in micro-USDC; null when the chain could not be read", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / wallet_addressAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "content" -]New value: +[ + "wallet_address", + "usdc_balance", + "price_per_parse", + "quota" +]
2 tool updates
- First observed
nanoparse_fetch - First observed
nanoparse_status
Related MCP Connectors
Read any public web page as clean Markdown for LLMs. Respects robots.txt. Free tier; x402 paid API.
Pay-per-call x402 web reading: page to Markdown, link previews, RSS feeds, links, sitemaps.
$0.001/read URL-to-Markdown via x402 on Base. Settle-proven end-to-end 2026-11-02 (SELF-PROOF).
Web page or HTML to clean LLM-ready Markdown or JSON. x402 pay-per-call, $0.005, no API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables extracting clean, structured markdown from any URL—stripping nav, ads, and scripts—for RAG pipelines and AI research agents, with pay-per-call micropayments via x402.MIT
- AlicenseNot gradedqualityDmaintenanceEnables extracting clean Markdown from any webpage by paying $0.005 USDC per call via the x402 protocol, with automatic wallet-based payment settlement.9 npmMIT
- AlicenseAqualityCmaintenancePay-per-use clean web reader for AI agents. URL in, markdown plus metadata out, in milliseconds. Settled per-call in USDC over x402 — no signup, no API keys.1115 npm3MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents and MCP clients to inspect a URL for reachability, then extract clean structured Markdown, headings, and links from public web pages, paid per successful request via x402 micropayments with no accounts or API keys.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.