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.
Changed the definition of "exposure_counts_for_domain" and "exposure_samples_for_domain"
⟨14 unchanged words⟩ Sources: known breaches, infostealer infections, unattributedULPheapbundlesof ULP (heapUrl,Login,Password) bundles, stolen cookies. All figures are INDEXATION dates, ⟨80 unchanged words⟩ are stripped and subdomains collapse to the registrabledomain.domain (multi-tenant hosting suffixes such as github.io are not collapsed). An IDN must already be in punycode (xn--) form. Invalid input (not a domain, an IP address) returns an error. If the domain is not in the index at all, every counter and both dates are null: that means NO DATA, not that the domain is clean - never report it as 'no exposure'. first_indexed_at and last_indexed_at give the date range of the domain's records; use last_indexed_at as the 'last updated' date for the domain. Free, no auth.
⟨13 unchanged words⟩ rebuild, not from request time. Every _total/_month/_weekisandcountedboth dates are by INDEXATION date, not by when the leak or infection happened. All counters and both dates are null when the domain is not in the index (no data - not the same as clean). staff = login is an address at thisdomain (employees);domain; users = login belongs elsewhere but the record is for this domain's site (customers). For public mailbox providers (e.g. gmail.com, ukr.net) staff means holders of mailboxes at that domain, NOT employees, and the numbers can be huge - do not present them as an employee compromise. Placeholder or test domains (e.g. example.com) also produce staff records that belong to nobody in particular.","properties":{"breaches_month":{"description":"Indexed in last 30d. Subset of breaches_total.","type":["integer","null"]},"breaches_total":{"description":"Records from known breach incidents, indexed all time.","type":["integer","null"]},"breaches_week":{"description":"Indexed in last 7d. Subset of breaches_month.","type":["integer","null"]},"cookies_month":{"description":"Indexed in last 30d. Subset of cookies_total.","type":["integer","null"]},"cookies_total":{"description":"Stolen browser
A small RANDOM sample of individual exposure records for a domain - metadata only, capped innumber.number: up to 20 records per type (stealers_users, stealers_staff, heap_users, heap_staff, breaches). Cookies are not sampled - see cookies_* in exposure_counts_for_domain. The sample is neither the newest nor the largest nor the most severe records, and it can differ between calls; identical-looking records can repeat and because of different logins/passwords. Each record says WHICH url was affected, WHICH ⟨17 unchanged words⟩ the record was indexed. It carries NO credentialsand identifies NO individual: no password, no username, and the ⟨5 unchanged words⟩ Use exposure_counts_for_domain first for the scale of theproblem;problem and for freshness (last_indexed_at); use this only when the user asks to see concrete examples.The sampleCallingisagaincappedreturnsandanother
Added "exposure_samples_for_domain"; changed the definition of "exposure_counts_for_domain" (1 tools before, 2 now)
⟨38 unchanged words⟩ 'newly leaked' - the underlying leak may bemonthsyears old. Windows nest (_total includes _month includes ⟨24 unchanged words⟩ same input within a day return identical values—- do not re-query to check for changes. Accepts a bare domain or a full URL; scheme,URLpath,orport,IDNcaseinandpunycodea
Certificate recorded, valid to 2026-12-21
Authorization not required
Unknown → Live
First tool surface recorded: 1 tool (server version 0.1.0)
https://mcp.alerts.bar/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 7 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"description":"A random capped sample of exposure records. Metadata only - ⟨33 unchanged words⟩ records in this response as the number ofexposures.exposures, and never infer how recent the domain's exposure is from this list.","properties":{"domain":{"description": ⟨17 unchanged words⟩ :"string"},"records":{"description":"TheAsampledrandom subset of up to 20 records per type, listed by indexed_at descending inside this response. NOT the newestindexedrecords:first.a recent or old indexed_at here says nothing about the domain's overall recency - use last_indexed_at from exposure_counts_for_domain. Capped server-side; an empty array means nothing is ⟨6 unchanged words⟩ ":{"estimated_incident_at":{"description":"Unix seconds or null, and its meaning follows type. stealers_*: ESTIMATED ⟨26 unchanged words⟩ say 'published', never 'happened'. heap_*: always null,because heap(unknown)records-carrynevernorenderincidentitdateasataall;date, say the leak date isunknown and give no number.unknown.","type":["integer","null"]},"indexed_at":{"description":"Unixseconds.seconds (UTC). When AlertsBar indexed this record. Always a fact, ⟨15 unchanged words⟩ discovered - say 'newly discovered', never 'newly leaked'. Many breach records share one identical indexed_at because they were bulk-imported.","type":"integer"},"login":{ ⟨7 unchanged words⟩ PART REDACTED, e.g. ...@company.com - only thedomainpart after @ is real, and no address, name or ⟨20 unchanged words⟩ queried domain, meaning an address at thisorganisationdomain was found with credentials for url; for *_users it is usually an outside provider (gmail.com and such), meaning an external person's credentials for this organisation's site were taken. For stealers_users the part after @ can also be a bare host label (e.g. ...@local) or missing entirely (just '...'), and letter case is as captured. Use it to explain WHY a record belongs ⟨43 unchanged words⟩ },"source":{"description":"Opaque internalreferenceidforofthistherecordsource feed or breach insideAlertsBar.AlertsBar, shared by every record that came from it - it identifies the feed, not the individual row. It is NOT a name: do not read ⟨64 unchanged words⟩ it out of the summary.","type":["integer","string"]},"type":{"description":"Which source ⟨22 unchanged words⟩ heap_* = credentials found in an unattributed ULP (Url,Login,Password) bundle, with no linkable incident, device or ⟨11 unchanged words⟩ = the login was an address at thisdomain (employee);domain; *_users = the login belonged elsewhere but the record targets this domain's site (customer). For public mailbox providers (gmail.com, ukr.net) *_staff means a mailbox holder, not an employee. Cookies never appear here.","enum":["stealers_users","stealers_staff"," ⟨5 unchanged words⟩ "},"url":{"description":"The URL, hostname or app identifier the captured credentials were for,-showntheasspecificcapturedloginandendpointNOT normalized: it may lack a scheme,notincludejustathepath,domain.beThisan android:// app id, a localhost/dev address or a placeholder host. For *_users it is normally a system of theactionablequeriedfield:organisation. For *_staff itsaysiswhichoftenofa THIRD-PARTY site the employee signed in to, not the organisation'ssystemsownissystemaffected.- do not say the organisation's system was breached unless the host belongs to the queried domain.","type":"string"}},"required": ⟨15 unchanged words⟩
⟨2 unchanged words⟩ {"description":"Domain to check, e.g. example.com. A full URL is accepted and normalized.","type":"string"}},"required": ⟨3 unchanged words⟩
before
—after
{"readOnlyHint":true,"title":"Domain exposure counters"}A small sample of individual exposure records for a domain - metadata only, capped in number. Each record says WHICH url was affected, WHICH domain the captured login belonged to, from WHICH source type, roughly when the incident was, and when the record was indexed. It carries NO credentials and identifies NO individual: no password, no username, and the login's local part is redacted. Use exposure_counts_for_domain first for the scale of the problem; use this only when the user asks to see concrete examples. The sample is capped and does not grow on repeat calls - never call it again to col…