Perimeter Watch

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

Should I use this

Quality & Safety

B
Description quality
100%
Schema completeness
55%
Naming quality
83%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~694Tokens (tool definitions)
~318 BTypical response size
Moderate attention impact (0.54% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "perimeter-watch-scanner": {
      "url": "https://perimeter-watch-api-production.up.railway.app/mcp/"
    }
  }
}

Remote endpoints

https://perimeter-watch-api-production.up.railway.app/mcp/streamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢pw_health

Liveness check for the Perimeter Watch API. Returns ok, service, version. Call first to verify connectivity before pw_snapshot.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "pw_healthArguments"
}
🟢pw_snapshot(domain, authority)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "title": "Domain",
      "type": "string"
    },
    "authority": {
      "title": "Authority",
      "type": "boolean"
    }
  },
  "required": [
    "domain",
    "authority"
  ],
  "title": "pw_snapshotArguments"
}
🟢pw_watch_status(domain)

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)

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "title": "Domain",
      "type": "string"
    }
  },
  "required": [
    "domain"
  ],
  "title": "pw_watch_statusArguments"
}
🟢pw_stats

Service funnel counters: page views, snapshots run, paid registrations. Read-only.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "pw_statsArguments"
}
🟢skills_list_tool

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`.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "skills_list_toolArguments"
}
🟢read_skill(uri)

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`.

Input Schema

{
  "type": "object",
  "properties": {
    "uri": {
      "title": "Uri",
      "type": "string"
    }
  },
  "required": [
    "uri"
  ],
  "title": "read_skillArguments"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools