Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://devdome.com
Added "generate_file" (19 tools before, 20 now)
Generate File — Generate a ready-to-use file or link, the same output as the free DevDome tools, nothing fetched or stored: robots_txt = a WordPress robots.txt from a preset (standard, woo, ai, privacy) or a rules list (admin, ajax, rest, search, feeds, trackbacks, woo, ai_training, ai_search) with an optional sitemap_url, plus the WordPress robots_txt filter snippet; htaccess_redirects = Apache rewrite rules from redirects [{from, to}] (code 301 default, 302, 307, 308) and site-wide rules (force_https, www add or strip with domain, trailing_slash, wordpress_block); utm_url = a campaign link from url + sourc…
Authorization not required, issuer https://devdome.com
Added "inspect_page"; changed the definition of "get_goals" (18 tools before, 19 now)
⟨7 unchanged words⟩ Goals) with how many human and botvisitsvisitors completed each one in thewindow.window: type page (a path, * = any part), click (an outbound destination), event (a custom event name) or scroll (a scroll depth percent). Each row carries the goal id for the goal filter.
Inspect Page — On-page SEO and content checks of ANY public web page, fetched live by DevDome (first 300 KB): meta_tags = title and description with lengths, robots / noindex, viewport, charset, Open Graph and Twitter tags, social tags misplaced in the body; canonical = the canonical link (resolved, self-referencing or not, host mismatch, duplicates) and hreflang; schema = JSON-LD blocks with their @type values and parse errors, plus microdata types; mixed_content = http:// resources on an https page; image_alt = images without an alt attribute with sample URLs; all = every check in one fetch (default). Eac…
Added "check_domain", "check_url", "get_events" and 5 more; changed the definition of "get_bot_report", "get_breakdown", "get_site_health" and 3 more (10 tools before, 18 now)
⟨3 unchanged words⟩ {"days":{"type":"number"},"filters":{"additionalProperties":false,"description":"Narrow the report to the visits that match ALL of these (the dashboard's click-to-filter), inside the same window as the report. Omit for everything.","properties":{"browser":{"description":"Browser name as get_breakdown dimension=browsers lists it","type":"string"},"campaign":{"description":"utm source|medium|campaign exactly as a get_breakdown dimension=campaigns row; an empty part matches any, e.g. newsletter||","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 code, e.g. US; several joined with |, e.g. US|DE","type":"string"},"device":{"description":"Device class as get_breakdown dimension=devices lists it (desktop, mobile, tablet)","type":"string"},"event":{"description":"Visits that fired this custom event name (get_events lists the names)","type":"string"},"goal":{"description":"Visits that completed this saved goal, by the id get_goals returns","type":"string"},"os":{"description":"Operating system as get_breakdown dimension=os lists it","type":"string"},"page":{"description":"Visits that viewed this page path, e.g. /pricing","type":"string"},"referrer":{"description":"Visits that arrived from this referrer host, e.g. google.com","type":"string"}},"type":"object"},"from":{"description":"YYYY-MM-DD","type": ⟨29 unchanged words⟩
Changed the definition of "get_stats"
⟨38 unchanged words⟩ / visits; average visit duration = session_seconds /dur_sessionsvisits (visitseverywithvisit counts, ameasuredbouncedwellas 0 s); bounces are one-page visits without an outbound click; visitors are page loaders only, hop_only_visitors passed through a redirect link without loading a page; CTR = clicks / visits. Defaults to the ⟨69 unchanged words⟩
Changed the definition of "get_stats"
Headline KPIs for a site as raw counts: visits, visitors, pageviews,outboundclicks (outbound), bots,CTRbounces, session_seconds, dur_sessions, each for the current and the previous period. Derive the rates yourself the way the dashboard does: bounce rate,session=duration.bounces / visits; average visit duration = session_seconds / dur_sessions (visits with a measured dwell); CTR = clicks / visits. Defaults to the full retained history. new_visitors is ⟨64 unchanged words⟩
Changed the definition of "get_stats", "get_timeseries" and "get_visitors"
⟨14 unchanged words⟩ session duration. Defaults to the full retained history. new_visitors is null (and returning_visitors 0) when the site's Cookieless tracking setting is on: the daily id cannot tell a return visit, do not report them. If new_visitors is almost equal to visitors, the tracker runs cookieless but the dashboard switch is off: tell the user to turn on Website Settings > Cookieless tracking for that site. visitors includes redirect-only hops, so it can exceed pageviews.
⟨13 unchanged words⟩ in the site's timezone). Window by days,only;or from and toare
Changed the definition of "get_bot_report" and "get_breakdown"
⟨3 unchanged words⟩ {"days":{"type":"number"},"from":{"description":"YYYY-MM-DD","type":"string"},"kind":{"enum":["bots","threats" ⟨10 unchanged words⟩ for threats","type":"number"},"site":{"type":"string"},"to":{"type":"string"}},"required" ⟨3 unchanged words⟩
⟨14 unchanged words⟩ ,"dates","keywords","products","redirects","campaigns"],"type":"string"},"from":{ ⟨16 unchanged words⟩
Changed the definition of "add_site", "get_bot_report", "get_timeseries" and 1 more
Add a website to the account. Returns thetrackingverificationsnippetfile toinstall;upload (verify_file_path + verify_content, served at /.well-known/devdome-analytics.txt); the site stays pending until verified.
⟨9 unchanged words⟩ ,"threats"],"type":"string"},"limit":{"description":"Row cap for kind bots; ignored for threats","type":"number"},"site":{"type":"string"}},"required
Changed the definition of "add_site", "get_bot_report", "get_breakdown" and 7 more
before
—after
Add Sitebefore
—after
{"destructiveHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Add Site"}before
—Get Bot Report
Certificate recorded, valid to 2026-11-30
Authorization not required
First tool surface recorded: 10 tools (server version 1.0.0)
Showing the latest 14 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Top-N breakdown of a site's traffic by one dimension. regions needs country (ISO alpha-2); cities needs country and takes region. countries / regions / cities ignore the page, referrer, campaign, event and goal filters (they are the country-scoped views themselves).{"additionalProperties":false,"properties":{"country":{"description":"ISO 3166-1 alpha-2, required for regions and cities","type":"string"},"days":{"type":"number"},"dimension":{"enum":["pages","referrers","countries","regions","cities","devices","browsers","os","dates"," ⟨3 unchanged words⟩ ,"campaigns"],"type":"string"},"filters":{"additionalProperties":false,"description":"Narrow the report to the visits that match ALL of these (the dashboard's click-to-filter), inside the same window as the report. Omit for everything.","properties":{"browser":{"description":"Browser name as get_breakdown dimension=browsers lists it","type":"string"},"campaign":{"description":"utm source|medium|campaign exactly as a get_breakdown dimension=campaigns row; an empty part matches any, e.g. newsletter||","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 code, e.g. US; several joined with |, e.g. US|DE","type":"string"},"device":{"description":"Device class as get_breakdown dimension=devices lists it (desktop, mobile, tablet)","type":"string"},"event":{"description":"Visits that fired this custom event name (get_events lists the names)","type":"string"},"goal":{"description":"Visits that completed this saved goal, by the id get_goals returns","type":"string"},"os":{"description":"Operating system as get_breakdown dimension=os lists it","type":"string"},"page":{"description":"Visits that viewed this page path, e.g. /pricing","type":"string"},"referrer":{"description":"Visits that arrived from this referrer host, e.g. google.com","type":"string"}},"type":"object"},"from":{"type":"string"},"limit":{"type":"number"},"region":{"description":"Region name as dimension=regions returns it (cities)","type":"string"},"site":{"type":"string"} ⟨8 unchanged words⟩
⟨5 unchanged words⟩ status, response time, TLS/domain checks, open incidents, the latest daily audit (DNS, certificate, security headers, SEO basics, tracker) and the Malware Scanner roll-up. Compact: the raw 24h probe list and the scanner file list are left out (the dashboard has them); days = the last 30 daily uptime rows; use get_incidents to page through older incidents.
⟨72 unchanged words⟩ a redirect link without loading a page; CTR (the dashboard's CTR/V1 tile) = (clicks - bot_clicks) / visits. Defaults to the full retained history. ⟨66 unchanged words⟩
⟨10 unchanged words⟩ full history)","type":"number"},"filters":{"additionalProperties":false,"description":"Narrow the report to the visits that match ALL of these (the dashboard's click-to-filter), inside the same window as the report. Omit for everything.","properties":{"browser":{"description":"Browser name as get_breakdown dimension=browsers lists it","type":"string"},"campaign":{"description":"utm source|medium|campaign exactly as a get_breakdown dimension=campaigns row; an empty part matches any, e.g. newsletter||","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 code, e.g. US; several joined with |, e.g. US|DE","type":"string"},"device":{"description":"Device class as get_breakdown dimension=devices lists it (desktop, mobile, tablet)","type":"string"},"event":{"description":"Visits that fired this custom event name (get_events lists the names)","type":"string"},"goal":{"description":"Visits that completed this saved goal, by the id get_goals returns","type":"string"},"os":{"description":"Operating system as get_breakdown dimension=os lists it","type":"string"},"page":{"description":"Visits that viewed this page path, e.g. /pricing","type":"string"},"referrer":{"description":"Visits that arrived from this referrer host, e.g. google.com","type":"string"}},"type":"object"},"from":{"description":"YYYY-MM-DD","type": ⟨13 unchanged words⟩
⟨3 unchanged words⟩ {"days":{"type":"number"},"filters":{"additionalProperties":false,"description":"Narrow the report to the visits that match ALL of these (the dashboard's click-to-filter), inside the same window as the report. Omit for everything.","properties":{"browser":{"description":"Browser name as get_breakdown dimension=browsers lists it","type":"string"},"campaign":{"description":"utm source|medium|campaign exactly as a get_breakdown dimension=campaigns row; an empty part matches any, e.g. newsletter||","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 code, e.g. US; several joined with |, e.g. US|DE","type":"string"},"device":{"description":"Device class as get_breakdown dimension=devices lists it (desktop, mobile, tablet)","type":"string"},"event":{"description":"Visits that fired this custom event name (get_events lists the names)","type":"string"},"goal":{"description":"Visits that completed this saved goal, by the id get_goals returns","type":"string"},"os":{"description":"Operating system as get_breakdown dimension=os lists it","type":"string"},"page":{"description":"Visits that viewed this page path, e.g. /pricing","type":"string"},"referrer":{"description":"Visits that arrived from this referrer host, e.g. google.com","type":"string"}},"type":"object"},"from":{"description":"Window start, YYYY-MM-DD" ⟨17 unchanged words⟩
⟨26 unchanged words⟩ ,"days":{"type":"number"},"filters":{"additionalProperties":false,"description":"Narrow the report to the visits that match ALL of these (the dashboard's click-to-filter), inside the same window as the report. Omit for everything.","properties":{"browser":{"description":"Browser name as get_breakdown dimension=browsers lists it","type":"string"},"campaign":{"description":"utm source|medium|campaign exactly as a get_breakdown dimension=campaigns row; an empty part matches any, e.g. newsletter||","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 code, e.g. US; several joined with |, e.g. US|DE","type":"string"},"device":{"description":"Device class as get_breakdown dimension=devices lists it (desktop, mobile, tablet)","type":"string"},"event":{"description":"Visits that fired this custom event name (get_events lists the names)","type":"string"},"goal":{"description":"Visits that completed this saved goal, by the id get_goals returns","type":"string"},"os":{"description":"Operating system as get_breakdown dimension=os lists it","type":"string"},"page":{"description":"Visits that viewed this page path, e.g. /pricing","type":"string"},"referrer":{"description":"Visits that arrived from this referrer host, e.g. google.com","type":"string"}},"type":"object"},"from":{"description":"YYYY-MM-DD","type": ⟨14 unchanged words⟩
Check Domain — Live DNS and domain checks for ANY public domain (not only account sites): dns = records of one type (A, AAAA, CNAME, MX, NS, TXT, SOA, CAA; default A), mx / ns / txt = that record set, email_auth = SPF + DMARC + DKIM (common selectors, or dkim_selector), whois = registrar, status and expiry from the public RDAP registry, ssl = the live certificate (issuer, expiry, days left), reverse_dns = the hostname behind an ip. Answers come from public resolvers (Cloudflare 1.1.1.1), so a cached answer can lag a DNS change by its TTL. For a site on this account get_site_health already holds the daily au…
Check URL — Live HTTP check of ANY public https URL from Cloudflare's network: status = status code, final URL, response time and the main response headers; redirects = the hop-by-hop redirect chain (up to 10 hops) with each status and location; security_headers = the DevDome security-header audit of that URL (HSTS, CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) with pass / warn / fail per header. One request per call, no page content is returned. For an account site's homepage get_site_health already holds this from the daily audit.
Get Custom Events — Custom events the site sends (devdome('event', name) or the plugin's event tracking): one row per event name with counts for the window. Event names feed the event filter.
Get Goals — The site's saved goals (Website Settings > Goals) with how many human and bot visits completed each one in the window. Each row carries the goal id for the goal filter.
Get Hourly Traffic — The last 24 hours by hour (UTC timestamps): visits, visitors, pageviews, clicks, bots per hour. Fixed window, no days/from/to.
Get Downtime Incidents — Downtime incidents of a site, newest first, with start, end, confirmation time, failing status and category. Pages: when has_more is true, pass the started_at of the last row as before.
Get Entry Page Journeys — The visitors who ENTERED the site on one page, each with the step-by-step path they took afterwards. page = the entry page path, e.g. /pricing.
Look Up Bot User Agent — Is this user-agent string a known bot or crawler, and which one: matched against DevDome's bot catalog (AI crawlers, search engines, SEO tools, monitors) and the live crawler feed the analytics use. A user agent can be forged, so a match says what the client CLAIMS to be; get_bot_report shows what actually hit a site.
⟨5 unchanged words⟩ :"number"},"from":{"description":"Accepted, not applied:Windowusestart,daysYYYY-MM-DD","type":"string"},"site":{"type":"string"},"to":{"description":"Accepted, notWindowapplied:end,useYYYY-MM-DDdays(inclusive)","type":"string"}},"required": ⟨3 unchanged words⟩
{"additionalProperties":false,"properties":{"before":{"description":"Page further back: the last_seen of the last row you got; a page shorter than limit is the end","type":"string"},"days":{"type":"number"},"from" ⟨17 unchanged words⟩
⟨10 unchanged words⟩ bots per day, in the site's timezone). Window by days only; from and to are accepted for compatibility but not applied.
⟨4 unchanged words⟩ {"type":"number"},"from":{"description":"Accepted, not applied: use days","type":"string"},"site":{"type":"string"},"to":{"description":"Accepted, not applied: use days","type":"string"}},"required":[" ⟨3 unchanged words⟩
⟨3 unchanged words⟩ {"days":{"type":"number"},"from":{"description":"YYYY-MM-DD","type":"string"},"limit":{"type":"number"},"site":{"type":"string"},"to":{"type":"string"}},"required" ⟨3 unchanged words⟩
before
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Bot Report"}before
—after
Get Traffic Breakdownbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Traffic Breakdown"}before
—after
Get Realtime Visitorsbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Realtime Visitors"}before
—after
Get Site Healthbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Site Health"}before
—after
Get Site Statsbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Site Stats"}before
—after
Get Daily Trafficbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Daily Traffic"}before
—after
Get Recent Visitsbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"Get Recent Visits"}before
—after
List Sitesbefore
—after
{"openWorldHint":false,"readOnlyHint":true,"title":"List Sites"}before
—after
Verify Sitebefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Verify Site"}