Skip to content

Perimeter Watch

by entradox · remote · no sign-in to list tools · v1.0.0 · published by GitHub user entradox

Passive domain-perimeter checks — cert expiry, subdomain takeover, lookalikes — as agent tools

Changes · 3

6 tools: 3 change things and 3 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http perimeter-watch-scanner https://perimeter-watch-api-production.up.railway.app/mcp/

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

6 tools

Changes things 3Claude Code: ask
  • pw_healthLiveness check for the Perimeter Watch API.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot.

    Annotations the server declares

    • title: Perimeter Watch Health
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • pw_snapshotRun a free one-time external-perimeter scan on a domain you control.No findings

    Why it is in this group

    • The name "pw_snapshot" says "snapshot": a word for reading.
    • The description's first verb is "run": a word for a change.
    Description, as the server wrote it
    Run a free one-time external-perimeter scan on a domain you control. Checks TLS certificate expiry, domain renewal status, dangling CNAME takeover risk, and CT-log lookalike domains. Returns a rating plus per-check detail. NOT idempotent (each call consumes rate limit); takes 20-60s; rate-limited to 3 scans per IP per 24h. Args: domain: the domain to scan (e.g. example.com) authority: MUST be true — attests you or your principal own/manage this domain. Scanning third-party domains without authority is prohibited. Scan takes 20-60s. Rate limit: 3/IP/24h.

    Annotations the server declares

    • title: Run Perimeter Snapshot
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
  • pw_statsService funnel counters: page views, snapshots run, paid registrations.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Service funnel counters: page views, snapshots run, paid registrations. Read-only.

    Annotations the server declares

    • title: Perimeter Watch Stats
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
Only reads 3Claude Code: allow
  • pw_watch_statusCheck whether a domain is enrolled on a paid weekly monitoring plan.No findings

    Why it is in this group

    • The name "pw_watch_status" says "status": a word for reading.
    Description, as the server wrote it
    Check whether a domain is enrolled on a paid weekly monitoring plan. Returns enrollment status. Paid plans add weekly re-scans with email briefs. Read-only lookup. Args: domain: the domain to look up (e.g. example.com)

    Annotations the server declares

    • title: Watch Plan Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
  • read_skillRead a product skill file by its skill:// URI.No findings

    Why it is in this group

    • The name "read_skill" says "read": a word for reading.
    Description, as the server wrote it
    Read a product skill file by its skill:// URI. Args: uri: e.g. skill://<product>/<skill-name>/SKILL.md Get valid URIs from `skills_list_tool`.
  • skills_list_toolList this product's skills.No findings

    Why it is in this group

    • The name "skills_list_tool" says "list": a word for reading.
    Description, as the server wrote it
    List this product's skills. Each entry carries the SKILL.md URI, its name and description, verbatim frontmatter, and a per-file sha256 manifest. Read a body with `read_skill`.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http perimeter-watch-scanner https://perimeter-watch-api-production.up.railway.app/mcp/

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__perimeter-watch-scanner__pw_watch_status",
      "mcp__perimeter-watch-scanner__skills_list_tool",
      "mcp__perimeter-watch-scanner__read_skill"
    ],
    "ask": [
      "mcp__perimeter-watch-scanner__pw_health",
      "mcp__perimeter-watch-scanner__pw_snapshot",
      "mcp__perimeter-watch-scanner__pw_stats"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as perimeter-watch-scanner. Review it before you use it.