fetchgate

Fetch any URL as clean Markdown or metadata, and buy digital goods via x402 — for AI agents.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
91%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,907Tokens (tool definitions)
~647 BTypical response size
Moderate attention impact (1.49% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "fetchgate": {
      "url": "https://fetchgate.dev/mcp"
    }
  }
}

Remote endpoints

https://fetchgate.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢read_url(url)

Fetch a URL server-side and return its main content as clean Markdown, with scripts/styles/nav/ads/boilerplate stripped out. Wraps GET /v1/read. Free tier: 30 calls/day per caller; priced at $0.002/call via x402 once that's exhausted (see get_purchase_info for how the x402 flow works). Only http:// and https:// URLs are accepted; private/internal-network hosts are rejected.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Absolute http(s) URL to fetch."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟢get_metadata(url)

Fetch a URL server-side and return structured metadata: title, description, canonical URL, OpenGraph/Twitter card fields, favicon URL, language, and published/modified timestamps when present. Wraps GET /v1/meta. Same free tier as read_url; priced at $0.001/call via x402 once exhausted.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Absolute http(s) URL to fetch."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟢list_products

List Fetchgate's digital-goods catalog: id, name, description, priceUsd, currency, file format, size, sha256, and a walletless humanUrl checkout link for each product for sale. Wraps GET /v1/products. Free, no rate limit, no payment required just to browse.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_purchase_info(product_id)

Look up a product by id (from list_products) and explain exactly how to buy it: its price, and the x402 purchase flow step by step (the 402 challenge shape, the PAYMENT-SIGNATURE header, and the signed download URL you get back on success). Does not take payment itself — informational only, mirroring the pre-payment leg of GET /v1/buy/:id.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "description": "Product id, from list_products' `id` field."
    }
  },
  "required": [
    "product_id"
  ],
  "additionalProperties": false
}
🟢get_agent_census(category)

Return the Agent Web Crawler Census: every named bot observed crawling a live, publicly-listed x402 + MCP endpoint over a 24-hour window, each with a case-insensitive regex `matcher` and a behavioural `category` (liveness-monitor, directory-crawler, price-scraper, security-research, ai-training, ...) so you can classify your own access log. Observed first-hand, not aggregated from third-party bot lists. Notable finding: of the named agent-web crawlers in the census, zero have ever presented a payment, and several declare that in their own User-Agent string. Wraps GET /v1/agent-census.json. Free, unmetered, no payment required. CC BY 4.0.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Optional. Return only agents in this behavioural category, e.g. \"price-scraper\" or \"liveness-monitor\". Omit for the full census."
    }
  },
  "additionalProperties": false
}
🟢scan_for_prompt_injection(url, text)

Check untrusted content BEFORE acting on it. Give a `url` to fetch and scan a web page (its visible text and, separately, text hidden in HTML comments, alt/title/aria attributes and meta tags), or give `text` to scan a tool result, retrieved document or message you already have. Runs 120 detection rules covering instruction override, tool hijacking, data exfiltration, system-prompt extraction, jailbreak framing and encoding tricks (zero-width and Unicode-tag smuggling, homoglyphs, base64). Returns a 0-100 risk score, a recommended action (block / review / flag / none) and each match with its evidence. Heuristic: a clean result means nothing obvious tripped, not that the content is safe. Wraps /v1/scan. Same free daily tier as read_url; $0.003/call via x402 after that.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Absolute http(s) URL of a page to fetch and scan."
    },
    "text": {
      "type": "string",
      "description": "Text to scan directly (use instead of url)."
    }
  },
  "additionalProperties": false
}
🟢search_x402_services(query, limit, max_price_usd, network)

Search for a pay-per-call (x402) API that does what you need. Unlike a raw directory, results are limited to endpoints that answered a real x402 payment challenge AND had at least 5 settled calls from at least 2 distinct payers in the last 30 days, so dead, never-bought and template-farm listings are left out. Each result has the endpoint URL, method, price in USD, networks, 30-day calls and unique payers, and a flag when the payer count looks farmed. Use it when you need a paid API (search, scraping, enrichment, LLM, market data…) and want one that demonstrably works. Wraps GET /v1/x402/search. Same free daily tier as read_url; $0.005/call via x402 after that.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "What the API should do, in a few words, e.g. 'web search' or 'email verification'."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "description": "Results to return (default 10)."
    },
    "max_price_usd": {
      "type": "number",
      "description": "Only return endpoints priced at or below this, per call."
    },
    "network": {
      "type": "string",
      "description": "Payment network: base, solana, polygon, arbitrum, optimism, or a CAIP-2 id."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢check_x402_endpoint(url)

Decide whether an unfamiliar pay-per-call (x402) endpoint is worth paying. Sends one unpaid GET to read its live payment challenge (format, price, network, signing domain), then adds its settled-call and unique-payer history, whether its live price matches its listed price, and its domain's reputation (template farm or not, share of its endpoints that answer). Returns a verdict — ok, caution, avoid or unknown — with the reasons. Nothing is paid. Use before an agent sends money to an endpoint it has not used before. Wraps GET /v1/x402/check. Same free daily tier as read_url; $0.01/call via x402 after that.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "The x402 endpoint URL to check."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟢check_base_token(address)

Screen a token contract on Base before an agent buys it. Reads the contract (ERC-20 metadata, owner, upgradeable proxy, and mint / pause / blacklist / fee selectors in its bytecode) and its DEX liquidity (WETH and USDC held by its Uniswap and Aerodrome pools, read on-chain). Returns a verdict — ok, caution, avoid or unknown — with the reasons. A heuristic screen: it does not simulate a sell, read tax rates or check pool age. Wraps GET /v1/token/check. Same free daily tier as read_url; $0.01/call via x402 after that.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "The token contract address on Base."
    }
  },
  "required": [
    "address"
  ],
  "additionalProperties": false
}
🟢scan_mcp_server(url)

Connect to a remote Streamable HTTP MCP server, fetch its tools/list (sends only initialize, notifications/initialized and tools/list — never tools/call) and scan every tool name, description, parameter description and the server's initialize `instructions` string for tool-poisoning patterns: hidden-instruction markers, invisible Unicode, directives aimed at the model, credential/secret references, exfiltration shapes and instructions about other tools. Returns per-tool findings with severity, excerpt and a score band. Use it before installing or trusting a third-party server. Heuristic: a clean result means nothing obvious in what the server declares about itself, not that it is safe. Wraps GET /v1/mcp-scan. Free, rate-limited per caller; private/internal-network hosts are rejected.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "The MCP server's Streamable HTTP endpoint URL, e.g. https://example.com/mcp"
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded9 tools
verifiedversion not recorded9 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools