{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_nkt79fza2nxe","handle":"perimeter-watch","url":"https://wellknown.network/agents/perimeter-watch","links":{"self":"https://wellknown.network/agents/perimeter-watch/record.json","html":"https://wellknown.network/agents/perimeter-watch","markdown":"https://wellknown.network/agents/perimeter-watch/record.md","api":"https://wellknown.network/api/v1/agents/perimeter-watch","status":"https://wellknown.network/api/v1/agents/perimeter-watch/status","claim":"https://wellknown.network/agents/perimeter-watch/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/perimeter-watch/claim.json","badge":"https://wellknown.network/agents/perimeter-watch/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/perimeter-watch/history","tools":"https://wellknown.network/api/v1/agents/perimeter-watch/tools"},"ard":{"identifier":"urn:air:perimeter-watch-api-production.up.railway.app:server:perimeter-watch","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Perimeter Watch","summary":"Passive domain-perimeter checks — cert expiry, subdomain takeover, lookalikes — as agent tools","description":"Passive domain-perimeter checks — cert expiry, subdomain takeover, lookalikes — as agent tools","publisher":{"name":"entradox","url":null},"homepage":"https://entradox.github.io/perimeter-watch-site/","repository":"https://github.com/entradox/perimeter-watch-scanner","version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://perimeter-watch-api-production.up.railway.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-09-03T22:28:00.517783Z","publishedAt":"2026-09-03T22:28:00.517783Z","registryName":"io.github.entradox/perimeter-watch-scanner"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"dev.monitoring","name":"Monitoring & Observability","confidence":0.554,"provenance":"derived"}],"categories":["dev"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-10T02:31:08.999Z","lastProbedAt":"2026-10-10T02:31:08.999Z","statusComputedAt":"2026-10-10T02:32:04.538Z","reliability30d":{"probes":106,"successRate":0.9811,"p50Ms":327,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":105,"ok":103,"authBoundaryOk":0,"serviceOk":103,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T02:31:08.999Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":320,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T20:31:12.303Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":332,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T14:31:17.251Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":306,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T07:25:31.649Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":420,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T19:22:54.541Z","kind":"mcp_initialize","ok":false,"httpStatus":404,"latencyMs":151,"error":"http 404","detail":null},{"at":"2026-10-08T12:27:02.786Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":322,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:23:20.613Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":332,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T00:24:59.538Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":364,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T17:28:42.875Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":335,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T10:48:45.498Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":350,"error":null,"detail":{"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"toolCount":6,"toolsHash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","serverName":"perimeter-watch","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.30.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"pw_health","description":"Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot."},{"name":"pw_snapshot","description":"Run a free one-time external-perimeter scan on a domain you control.\n\nChecks TLS certificate expiry, domain renewal status, dangling CNAME\ntakeover risk, and CT"},{"name":"pw_watch_status","description":"Check whether a domain is enrolled on a paid weekly monitoring plan.\n\nReturns enrollment status. Paid plans add weekly re-scans with email\nbriefs. Read-only loo"},{"name":"pw_stats","description":"Service funnel counters: page views, snapshots run, paid registrations. Read-only."},{"name":"skills_list_tool","description":"List this product's skills. Each entry carries the SKILL.md URI,\nits name and description, verbatim frontmatter, and a per-file\nsha256 manifest. Read a body wit"},{"name":"read_skill","description":"Read a product skill file by its skill:// URI.\n\nArgs:\n    uri: e.g. skill://<product>/<skill-name>/SKILL.md\n         Get valid URIs from `skills_list_tool`.\n"}],"package":null,"toolSurface":{"id":"ts_vqf4xb7tvz3v","endpointId":"ep_uhvpuppkf2bn","hash":"90db25451f9b54ade34e5913530d23c95a371b6fe111a266ab789cbfa81de1ac","toolCount":6,"serverName":"perimeter-watch","serverVersion":"1.30.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-14T23:21:32.889Z","lastSeenAt":"2026-10-10T02:31:08.992Z","observations":88,"toolNames":["pw_health","pw_snapshot","pw_watch_status","pw_stats","skills_list_tool","read_skill"],"distinctSurfaces":2},"endpointFacts":[{"id":"ep_uhvpuppkf2bn","url":"https://perimeter-watch-api-production.up.railway.app/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-08T00:24:59.561Z","auth":{"observedAt":"2026-10-08T00:24:59.713Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-08T00:24:59.722Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"*.up.railway.app","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-27T03:01:43.000Z","validTo":"2026-12-26T03:01:42.000Z","daysToExpiry":76,"sanCount":2,"fingerprint256":"FB:37:0C:A2:68:42:DA:2B:2F:F8:E3:18:2E:0E:8C:FC:6F:B8:EA:C3:2C:DB:57:18:F4:5A:4B:39:B9:E1:40:AF"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.entradox/perimeter-watch-scanner","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.entradox%2Fperimeter-watch-scanner","firstSeenAt":"2026-09-06T14:17:54.244Z","fetchedAt":"2026-10-07T10:41:37.659Z","normalizedAt":"2026-10-07T10:41:37.659Z"}]},"firstSeenAt":"2026-09-06T14:17:54.244Z","updatedAt":"2026-10-10T02:33:13.962Z"}