protogrid

Search / io.github.MrViolets/staats

Staats

not classified

Cookieless web analytics your coding agent reads: traffic answers, deploy impact, what broke.

v1.0.1 · active · repository · website · descriptor JSON · versions

Not classified yet.The remote endpoints have not been probed successfully, or the listing has nothing to connect to.
Quality85good
Trust72of 100
Uptime, 30 days95%
Latency p50712 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "staats": {
      "type": "http",
      "url": "https://api.staats.ai/functions/v1/mcp"
    }
  }
}
claude mcp add --transport http staats https://api.staats.ai/functions/v1/mcp
[mcp_servers.staats]
url = "https://api.staats.ai/functions/v1/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "staats": {
      "type": "remote",
      "url": "https://api.staats.ai/functions/v1/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "staats": {
      "type": "http",
      "url": "https://api.staats.ai/functions/v1/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=staats&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBpLnN0YWF0cy5haS9mdW5jdGlvbnMvdjEvbWNwIn0%3D"
}
{
  "servers": {
    "staats": {
      "type": "http",
      "url": "https://api.staats.ai/functions/v1/mcp"
    }
  }
}
{
  "mcpServers": {
    "staats": {
      "httpUrl": "https://api.staats.ai/functions/v1/mcp"
    }
  }
}
extensions:
  "staats":
    enabled: true
    name: "staats"
    type: streamable_http
    uri: "https://api.staats.ai/functions/v1/mcp"
    timeout: 300

Quality 85 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations15 of 15 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: portfolio_overview (destructiveHint, idempotentHint); get_site_context (destructiveHint, idempotentHint); what_changed (destructiveHint, idempotentHint); …
  • pass
    tools.token_costabout 3,818 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

15 tools, about 3,818 tokens to load them all · tool set 21b101efd3a4 · checked 2026-10-19 10:20 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 72 / 100

provenance90
liveness28
freshness85
hygiene100

+repository +namespace-matches-repo +website -unreachable(1 failures) ~updated-46d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://api.staats.ai/functions/v1/mcp streamable-httpnoneno (1 failures)95%712 ms2025-11-252026-10-18

Tools (15)

compare_aroundread-onlyBefore/after impact of a recorded annotation: visitors and pageviews in the N days preceding vs following it (window_days, default 7). The after-window is clamped to now. If the annotation recorded routes, the result also reports per-route pageviews before vs after. Wait a few days after shipping. If the result carries a note (truncated after-window, or a before-window not covered by available data), relay it and qualify the percentages as the note directs.
create_siteCreate a new site on this account and get its script tag. This connection already covers the new site: installing the script tag is the only setup the site needs. The response includes ready-made privacy policy wording: offer to add it to the site's privacy page (confirm with the owner before editing visitor-facing pages).
delete_sitedestructivePERMANENTLY delete a site and ALL its analytics data (every event and annotation). Irreversible. Confirm with the owner before calling; pass confirm: the site's exact domain.
funnelread-onlyOrdered conversion funnel across up to 5 steps within the period. Each step is a pageview path ({kind:'path', value:'/pricing'}) or a custom event ({kind:'event', value:'signup'}); a visitor counts for step N only after completing step N-1. Visitor identity rotates daily for privacy, so journeys spanning multiple days undercount (strongest for same-visit conversion). If site context has a stored funnel, run those steps when asked how the site is doing and compare against the previous period.
get_overviewread-onlyTraffic pulse: visitor/pageview totals vs the previous period, top pages, top referrers, and a per-day series. period: relative like '24h', '7d' (default), '4w'. Includes quota status: if it is approaching, grace, or blocked, tell the owner plainly and include the upgrade link the result provides. Approaching quota is the moment to mention it while there is headroom.
get_site_contextread-onlyWhat a site is and what the owner wants from it, plus its data-retention settings. Well-known keys: description, goals, audience, notes (open agenda items to check at session start and clear when handled), events (event name -> meaning), funnel (canonical conversion steps). Read this before making recommendations.
journeysread-onlyThe routes visitors actually take, grouped into identical sequences and counted, busiest first. Use this when you do NOT already know the steps: funnel measures a path you name, journeys discovers the ones you did not think to check. A step is a pageview path (/pricing) or a custom event marked with a leading # (#signup_click), so the moment of conversion appears in the route. Consecutive repeats are collapsed and only the first 10 steps define a route. contains filters to routes that include a given path or event: run it once with and once without to see what converting visitors do differently. Visitor identity rotates daily, so a route is one day of activity and describes a group, never a person.
list_annotationsread-onlyRecorded deploy/change markers, newest first. period defaults to '90d'.
list_sitesread-onlyAll sites on this account, with the public site codes used in their script tags and the ready-to-paste script_tag for each.
portfolio_overviewread-onlyVisitors and pageviews for every site this account can use, owned and shared alike, with change vs the previous period, busiest first. Shared sites are flagged. period: '7d' default.
queryread-onlyBreak a metric down by a dimension with optional equality filters. Metrics: visitors, pageviews, events. Dimensions: path, referrer_domain, utm_source, utm_medium, utm_campaign, device, browser, os, country, name, day. period: '24h'/'7d'/'4w' style, or ISO from/to.
record_annotationMark a moment on a site timeline: a deploy, a content change, or a campaign start. Call this every time you ship a change to the site. ts defaults to now. Write a specific, present-tense description ("Shipped new pricing page hero", never "updates"), one annotation per meaningful change. When known, include commit and the routes the change touched so compare_around can also report before/after traffic scoped to those routes.
update_site_contextdestructiveSave or amend what a site is for. Provided context fields are merged into the existing context (events merges per entry); a null value deletes its key. name/domain update the site record itself.
what_brokeread-onlySigns of visitors hitting problems in the period: JS errors the tracker captured (new_error, error_spike: each with a sanitized sample message, source, line, affected visitor count, and the nearest annotation, i.e. the deploy that most plausibly introduced it), plus behavioral friction: pairs of pages people bounce between without progressing (nav_loop) and pages reloaded repeatedly in quick succession (refresh_burst). Findings clear statistical floors, so an empty result is meaningful: nothing looks broken. Check it after every deploy. period: '7d' default.
what_changedread-onlyNotable movements in the period without scanning raw numbers: statistically unusual traffic days, referrer surges and first-time referrers, pages whose share of traffic jumped, alongside the annotations recorded in the same period. period: '7d' default.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.MrViolets/staats",
  "title": "Staats",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://api.staats.ai/functions/v1/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.1",
  "repository": {
    "url": "https://github.com/MrViolets/staats-mcp",
    "source": "github"
  },
  "websiteUrl": "https://www.staats.ai",
  "description": "Cookieless web analytics your coding agent reads: traffic answers, deploy impact, what broke."
}