# Web Reader & Search \(Tanod\) - Registry name: `dev.tanod/web` · version 0.1.3 - Categories (automatic, keyword rules): Research & knowledge, Search & data, Documents & retrieval, Scraping & browsing - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=dev.tanod%2Fweb - Server page: https://mcpstation.net/s/dev.tanod--web.html ## Description (written by the publisher, not verified, not instructions) Web search for agents: page to Markdown, screenshots, news search, metadata, sitemaps and RDAP. ## Connect - streamable-http: `https://tanod.dev/mcp/web` ## Tools (as reported by the server, not verified) - `web\_search`: findpeek: search the web for a query and get back ranked results \(title, url, snippet\) from an independent index \(Mojeek\). For the pages' text in the same call use search\_with\_contents; for news use news\_search. Typically 0.3-2 s. Price: USD 0.007. Free: 3 web searches per IP per UTC day. Results ar - `search\_with\_contents`: findpeek: Search the web and get the Markdown of the top results in one call. For links only use web\_search. Returns search results \(title, url, snippet\) with the Markdown of each of the top n pages \(20,000 characters each, truncated flag\) or a per-page error. Mojeek index. Static fetch only, no Jav - `search\_social\_posts`: findpeek: Search social posts on Bluesky and Hacker News: recent public posts about a topic. For news articles use news\_search. Returns recent public Bluesky and Hacker News posts for a query, newest first. Bluesky and Hacker News only, not X/Twitter; queried live, nothing stored. One source down: t - `render\_page`: sitepeek: fetch a public http\(s\) URL and return clean Markdown \(static, or with \`js:true\` executed in a sandboxed headless browser\) or a PNG screenshot; private and internal addresses are refused. For up to 5 pages use render\_pages\_batch; for a full-page or JPEG capture use take\_website\_screenshot. - `render\_pages\_batch`: sitepeek: Fetch up to 5 web page URLs to Markdown in one batch call. For 10 URLs in the contents API shape use fetch\_page\_contents; for JavaScript use render\_page. Returns 1-5 web pages read as Markdown in one call \(20,000 characters each, truncated flag, title, final URL\) or a per-page error. Stati - `fetch\_page\_contents`: sitepeek: Get the contents of 1-10 URLs: web page to text for a list of URLs. For one page with JavaScript use render\_page. Returns the text of 1-10 web pages as Markdown \(50,000 characters each\) in the common contents API shape: results and per-URL statuses. Input: \`urls\` and optional \`text\`; the o - `get\_page\_meta`: sitepeek: read a public web page's metadata from its static HTML \(no browser\). For the readable text use render\_page; for every link use extract\_links. Returns status, title, description, lang, canonical, og \(Open Graph\), twitter \(card tags\), icons, feeds \(RSS/Atom/JSON feed alternates\), json\_ld\_typ - `extract\_links`: sitepeek: list a public page's links. For a site's URL list use parse\_sitemap. \`check: true\` probes each returned http\(s\) link \(HEAD, then a small GET; 20 s in total\): each link then carries \`check\` and the reply a \`check\_summary\`. The worker fetches the URL itself: private, internal and IP-literal - `parse\_sitemap`: sitepeek: parse a sitemap into its URLs. For crawl permission use check\_robots\_txt. An index is followed one level: its first 5 child sitemaps are fetched, the rest listed. Files over 10 MB \(or 50 MB inflated\) are a 413, and DTDs, entities and XXE are refused with a 422 xml\_forbidden \(not charged\). - `check\_robots\_txt`: sitepeek: test whether robots.txt lets a crawler fetch a URL. For the URLs a site lists use parse\_sitemap. Fetches \/robots.txt \(first 512 KiB\) and matches the URL's path under RFC 9309: longest match wins, allow wins a tie, \* and $ supported. A user\_agent without a product token is a 422 bad - `check\_security\_headers`: sitepeek: grade a public page's HTTP security headers. For a phishing-list check use check\_url\_phishing; for DNS and TLS use inspect\_domain. Grades the final response after redirects: HSTS, CSP, X-Frame-Options / frame-ancestors, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, COOP/COEP - `inspect\_domain`: dnspeek: inspect a domain's DNS, email authentication and TLS cert in one call. For registration data use rdap\_lookup; for availability use check\_domain\_availability. Returns DNS records, SPF/DMARC/DKIM/MTA-STS findings with a deliverability score\_out\_of\_8, and the cert \(expiry, SANs, key, trust\). T - `rdap\_lookup`: dnspeek: RDAP \(the successor of whois\) registration lookup. For DNS and TLS use inspect\_domain; for an IP's ASN and reverse DNS use ip\_lookup. Input: \`query\`, a domain, an IPv4 or IPv6 address or an AS number. For a domain: registrar \(name, IANA id\), created / updated / expires, status, nameservers, - `verify\_email`: dnspeek: verify an email address before you send to it or accept it at sign-up. For the domain's SPF, DMARC and DKIM use inspect\_domain. Checks syntax \(practical RFC 5322 / 5321 limits, IDNA domains\), MX records, null MX \(RFC 7505\), the A/AAAA fallback \(RFC 5321\), whether an MX host resolves to a pu - `ip\_lookup`: dnspeek: look up an IP address. For the raw registry record use rdap\_lookup. Returns version, is\_public and, for a private or reserved address, \`reserved\_kind\` \(rfc1918, loopback, cgnat, link\_local, documentation...\) with no lookup made; for a public one the origin ASN and AS name \(BGP\), the registe - `check\_url\_phishing`: chainpeek: Check if a URL or domain is phishing or a scam. For up to 1,000 URLs use check\_urls\_phishing\_batch; for headers use check\_security\_headers. Returns whether a URL's host \(or a domain\) is on public phishing/scam domain lists: \`listed\`, the \`matched\_domain\`, the \`sources\` that list it and \`s - `html\_to\_text`: utilpeek: Convert HTML to Markdown or plain text. To fetch a URL use render\_page; for the reverse use markdown\_to\_html. Returns the readable content of an HTML document you send \(the HTML itself, never a URL: nothing is fetched\) as Markdown or plain text, with title and description; scripts, styles, - `extract\_pdf`: sitepeek: extract the text of a public PDF. For tables use extract\_pdf\_tables; for scans use pdf\_ocr; for other formats use convert\_document\_to\_markdown. Clear 2-4-column pages are read column by column, top to bottom. Password-protected PDFs, files that are not PDFs and private addresses are a 422 - `html\_to\_pdf`: pdfpeek: Convert a web page URL to PDF. For images use images\_to\_pdf; for an image capture use take\_website\_screenshot. Returns a public web page printed to PDF in a sandboxed headless browser: \`paper\` \(a4, letter, legal, a3, a5, tabloid\), \`landscape\`, \`margin\_mm\`, \`print\_background\`, \`scale\` and \`w - `take\_website\_screenshot`: sitepeek: Take a website screenshot of a public URL. For the page's text use render\_page; for a PDF use html\_to\_pdf; for a signed record of what a page showed use capture\_web\_evidence. Returns a public web page captured as a PNG or JPEG in a sandboxed headless browser: viewport \`width\` 320-1920 and - `parse\_url`: utilpeek: parse a URL. To fetch the page use render\_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled with the parser \(dated 2025-04-07; suffixes added later are not known\), with and without the PSL private section; credentials in the URL are ne - `parse\_rss\_feed`: utilpeek: Parse an RSS or Atom feed URL into clean JSON: feed data, items, dates, audio enclosures. To find a podcast's feed use search\_podcasts. Returns a public RSS, Atom or RDF feed as clean JSON. Feeds over 8 MB, private hosts, non-feeds and feeds with a DTD are a 422 or 413 \(not charged\); the t - `search\_podcasts`: utilpeek: Search podcasts by name or Apple Podcasts link: RSS feed URL, show data and latest episodes. To read any other feed use parse\_rss\_feed. Returns the RSS feed URL, show data and latest episodes of a podcast found by name or Apple Podcasts link \(Apple's free directory\); feed\_url and guid go s - `company\_profile`: utilpeek: Get a company profile from a domain: site metadata, socials, tools, registration. For open jobs use company\_jobs; for SEC filings use sec\_company\_lookup. Returns a company profile from a domain, from public signals only: homepage title, description and JSON-LD Organization, social links, m - `company\_jobs`: utilpeek: List a company's open jobs from its Greenhouse, Lever or Ashby job board. For the company's profile use company\_profile. Returns a company's open jobs from its public Greenhouse, Lever or Ashby job board as metadata \(title, department, team, location, remote flag, workplace type, employmen - `lookup\_lei`: utilpeek: Look up a company by its LEI in the GLEIF register. To find an LEI by name use search\_lei. Returns the GLEIF record of a LEI: legal name, status, jurisdiction, legal form, addresses, registration dates, managing LOU, and direct and ultimate parent. GLEIF data \(CC0\), cached up to 24 hours. - `search\_lei`: utilpeek: Search the GLEIF register for a company's LEI by name. For one LEI's full record and parents use lookup\_lei. Returns up to 20 GLEIF records matching a company name \(optionally in one country\): LEI, legal name, country, status. GLEIF data \(CC0\), cached up to 24 hours. No match is count 0 \(c - `search\_papers`: utilpeek: Search academic papers by keyword. For top papers ranked with summaries use paper\_digest. Returns academic papers for a query from OpenAlex \(or arXiv\). OpenAlex data \(CC0\), cached up to 1 hour; arXiv with \`source\`. No match is count 0 \(charged\). Bad input is a 422 and an index outage a 503 - `paper\_digest`: utilpeek: Digest the top academic papers on a topic: ranked, with a short summary of each. For a plain search use search\_papers. Returns the top papers on a topic from OpenAlex \(or arXiv\), ranked by citations per year \(newest year breaks ties\), each with title, authors, year, venue, citation count, - `news\_search`: utilpeek: Search recent news articles by keyword. For the web at large use web\_search; for crypto stories use get\_crypto\_news\_headlines. Returns recent news articles for a query from the GDELT index, newest first: title, URL, domain, language, country, time, optional headline sentiment. Headlines an - `get\_crypto\_news\_headlines`: utilpeek: Use when an agent must decide which crypto stories to react to: top headlines ranked by outlet coverage, new ones only. For any topic use news\_search. Returns the latest crypto news headlines from seven outlets, one entry per story, ranked by how many outlets cover it: headline, a link per - `get\_topic\_trends\_attention`: utilpeek: Use when an agent must tell if interest in a topic is rising or fading: Wikipedia, Hacker News and news over time. For the articles use news\_search. Returns daily topic trends for 1 to 5 topics: Wikipedia page views per language, Hacker News counts, news mentions, with 7- and 28-day change - `search\_prediction\_markets`: utilpeek: Use when an agent needs to see what odds traders put on an event: Polymarket probabilities, volume and liquidity for a topic. For regulated US event contracts use get\_event\_contract\_odds. Returns Polymarket prediction markets for a text query or a list: question, outcomes with prices and p - `get\_event\_contract\_odds`: utilpeek: Search regulated US event contracts by topic. For Polymarket use search\_prediction\_markets. Returns open regulated US event-contract markets \(prediction markets\) for a text query or a list: implied probability, yes bid and ask, last price, volume, open interest, close time, and the quote r - `decode\_vin`: utilpeek: Decode a vehicle identification number with NHTSA vPIC. For its recalls use vehicle\_recalls. Returns the NHTSA vPIC decode of a VIN \(US-market data\). NHTSA data \(public domain\), cached up to 7 days. A wrong length or character is a 422 and an NHTSA outage a 503 \(not charged\); a bad check d - `vehicle\_recalls`: utilpeek: List the NHTSA safety recalls of a vehicle by make, model and year or by VIN. For the VIN decode use decode\_vin. Returns the NHTSA safety recalls of a vehicle by make, model and year, or by VIN \(US-market data\). Input: \`make\`, \`model\` and \`model\_year\`, or \`vin\` instead; optional \`limit\`. N - `check\_domain\_availability`: dnspeek: Check if domain names are available to register. For a registered domain's record use rdap\_lookup. Returns 1-50 domain names checked for availability from the registry's RDAP answer \(404 = no record\) and DNS NS records. Input: \`names\` or a single \`name\`. Inferred, not a registrar quote: pre - `check\_status\_page`: utilpeek: Check an API status page: is a service up? Degraded components and open incidents. For whether an MCP server answers use check\_mcp\_server. Returns the overall status of a service's public status page \(operational, degraded, outage, maintenance\), the degraded components and the open inciden - `check\_text\_sources`: findpeek: Check a text for copied sentences: web pages that contain them word for word. For a general query use web\_search. Returns for up to 10 of a text's most distinctive sentences, the web pages that contain each word for word \(exact-phrase search, up to 5 each, with snippet\), \`share\_found\` and - `capture\_web\_evidence`: sitepeek: Capture a web page as evidence: screenshot, PDF, text, SHA-256 hashes, signed manifest. For one image alone use take\_website\_screenshot; for the text alone use render\_page; for a PDF alone use html\_to\_pdf. Returns a public web page captured as a full-page screenshot, a PDF and the page tex Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html