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 44 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
- Repository
- nanoparse-dev/nanoparse-mcp
- GitHub Stars
- 0
- Server Listing
- nanoparse-mcp
TDQS
Scored across 2 tools
nanoparse_fetch reads a URL into Markdown while nanoparse_status inspects wallet, quota, and payment readiness; the two purposes are completely non-overlapping and the descriptions reinforce the distinction (status is explicitly 'use before spending').
Both tools use the identical server-prefixed snake_case pattern (nanoparse_fetch, nanoparse_status), giving a predictable, readable convention with no deviation.
Two tools is thin even for a narrowly scoped paid-fetch service; status is essentially a preflight helper for fetch, so the surface is minimal. It is defensible for the single-purpose domain but sits at the borderline of the 3-15 range.
The core lifecycle (pay/read a page, check quota and balance before paying) is fully covered with clear error semantics for unreadable pages. The notable gap is batch/sitemap retrieval — the description tells agents to build a list and loop one URL per call — but that workaround is documented, so it is a minor rather than blocking omission.
Available Tools
2 toolsnanoparse_fetchInspect
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 per month with a signed wallet (pass wallet_address + wallet_signature), or 3 anonymous free tries per network. 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 |
nanoparse_statusAInspect
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?
With no annotations, the description carries the full burden. It implies a read-only inspection and discloses the useful behavioral fact that it predicts whether the next fetch succeeds without payment. It does not state permissions, rate limits, or whether the query is side-effect-free explicitly, leaving gaps for a zero-annotation 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?
Two compact sentences, front-loaded with what is checked and followed by the usage rationale. No filler, every clause earns its place.
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?
An output schema exists, so return values need no explanation, and the description covers the four queried aspects plus the actionable outcome (how much to fund). The optional address parameter is left to the schema, a minor gap given 0 required params.
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% and there is only one parameter, so the schema already documents the address fully. The description adds no meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
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 ('Check') and enumerates the exact resources returned: wallet balance, USDC balance, quota state, and payment-free fetch eligibility. This clearly distinguishes it from the sibling nanoparse_fetch, which spends, versus this which inspects.
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 trigger condition, and the second clause frames it as the funding-decision step preceding /fetch. It does not explicitly name nanoparse_fetch as the alternative, but the pre-spend context makes the relationship 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
Pay-per-call x402 web reading: page to Markdown, link previews, RSS feeds, links, sitemaps.
51Web page or HTML to clean LLM-ready Markdown or JSON. x402 pay-per-call, $0.005, no API key.
Web pages to Markdown, metadata and small crawls for agents. Free daily calls, then USDC x402/MPP.
Stealth scraping API for AI agents. Clean Markdown from any URL. x402 crypto payments.
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.8 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.171 npm3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to convert HTML content into clean Markdown, stripping scripts and styles while preserving headings, links, lists, and images, with pay-per-call x402 micropayments and no API keys.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.