{"server":{"name":"dev.fetchgate/fetchgate","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://fetchgate.dev/mcp","type":"streamable-http"}],"version":"0.1.0","websiteUrl":"https://fetchgate.dev","description":"Fetch any URL as clean Markdown or metadata, and buy digital goods via x402 — for AI agents."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-08-22T06:48:55.570694Z","publishedAt":"2026-08-22T06:48:55.570694Z","statusChangedAt":"2026-08-22T06:48:55.570694Z"},"dev.protogrid/connectability":{"class":"R0","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://fetchgate.dev/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2025-06-18"],"stateless":true},"health":{"reachable":true,"uptime_30d":0.98245615,"latency_ms_p50":366,"consecutive_failures":0,"last_probe_at":"2026-10-19T10:28:56.184Z","last_ok_at":"2026-10-19T10:28:56.184Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"check_base_token","title":"Check a Base token before swapping into it","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"check_x402_endpoint","title":"Check an x402 endpoint before paying it","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"get_agent_census","title":"Get Agent Web Crawler Census","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"get_metadata","title":"Get URL Metadata","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"get_purchase_info","title":"Get Purchase Info","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"list_products","title":"List Products","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"read_url","title":"Read URL as Markdown","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"scan_for_prompt_injection","title":"Scan a web page or text for prompt-injection attempts","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"scan_mcp_server","title":"Scan an MCP server's tool descriptions for poisoning patterns","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"},{"name":"search_x402_services","title":"Find live, paid-for x402 APIs for a task","description":"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.","annotations":null,"source":"probe","observed_at":"2026-10-19T10:28:56.184Z"}],"dev.protogrid/trust":{"score":79,"components":{"hygiene":80,"liveness":99,"freshness":85,"provenance":55},"drivers":["+dns-namespace","+website","+reachable","+uptime-98%","~updated-58d-ago","-no-repository"],"flags":["no-repository"],"blocked":false,"computed_at":"2026-10-19T15:46:33.170Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":79,"label":"good","components":{"auth":null,"hygiene":71,"protocol":75,"stability":100,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28","status":"warn","category":"protocol"},{"id":"protocol.stateless","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones","status":"fail","category":"hygiene"},{"id":"tools.directory_hints","detail":"no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list_products (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_agent_census (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); scan_for_prompt_injection (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …","status":"fail","category":"hygiene"},{"id":"tools.token_cost","detail":"about 1,909 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"5 tool changes in 30 days","status":"pass","category":"stability"},{"id":"stability.rug_pull","detail":"no tool changed its meaning under the same name","status":"pass","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-tools.annotations","-tools.directory_hints","~protocol.modern"],"flags":[],"tool_count":10,"token_estimate":1909,"tools_hash":"7aa647f606080daae50ef9bbe1e35b7f","tools_changed_at":"2026-10-14T20:59:47.745Z","computed_at":"2026-10-19T15:48:21.482Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"dev.fetchgate/fetchgate","aliases":[],"alias_count":0,"repository_key":null,"owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/dev.fetchgate%2Ffetchgate/tools","arguments":{"name":"dev.fetchgate/fetchgate"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/dev.fetchgate%2Ffetchgate/connection?target=mcpServers","arguments":{"name":"dev.fetchgate/fetchgate","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}