Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,547Letters: 14Defects: 1,324counted 4 min ago
teppi

Server definition

Hash
sha256:392d8b466da507fc1e8a4d4c0d867227d325987ba045fd1225b4bb5e668fc716
What it is
What a remote MCP server returned when asked what it offers: 5 tools

The blob, as servednamed by its sha256

{ "instructions": "SiteGuardian.io MCP server. Five tools: scan_domain (anonymous), list_monitored_domains, get_domain_status, get_drift_events, get_fix_recommendations. Anonymous access is allowed ONLY for scan_domain; every other tool requires Authorization: Bearer <api-key>.", "tools": [ { "description": "Returns the current security grade (A–F), last-scan timestamp, and list of active issues for a domain that is ALREADY under SiteGuardian monitoring by the authenticated account. Each issue carries a stable id, a severity, a short title, and an impact description. The response also includes a relative dashboard URL.\n\nUse this when the user asks about the current state of a specific monitored domain, wants to confirm a recent change landed, or needs issue ids to call get_fix_recommendations with a specific issue_id.\n\nDo NOT use this for domains not yet under monitoring — it will return a domain_not_monitored error; call scan_domain for one-off checks instead. Compliance framework tags (NIS2 / GDPR / DORA) are NOT included in v1; framework tagging on the monitored-domain path is tracked as a follow-up. Requires a valid API key.", "inputSchema": { "additionalProperties": false, "properties": { "domain": { "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_domain_status", "outputSchema": { "properties": { "active_issues": { "items": { "description": "One security issue surfaced by a tool's output.\n\nCanonical shape used by ``scan_domain`` and ``get_domain_status``.\nThe ``id`` is stable across calls and locales — derived from the\nissue's stable ``code`` (see recommendation_view.py, P1 + P4).", "properties": { "category": { "anyOf": [ { "enum": [ "website", "email", "dns", "server", "uncategorized" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "Which product area this issue belongs to." }, "code": { "description": "Raw stable code (e.g. 'headers.sri_missing') — survives i18n translation.", "type": "string" }, "id": { "description": "Stable 12-char hex id; use as the issue_id argument to get_fix_recommendations.", "type": "string" }, "impact": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "One-sentence explanation of why it matters." }, "severity": { "enum": [ "critical", "high", "medium", "low", "info" ], "type": "string" }, "title": { "description": "Short user-facing title, localised.", "type": "string" } }, "required": [ "id", "code", "severity", "title" ], "type": "object" }, "type": "array" }, "dashboard_url": { "type": "string" }, "domain": { "type": "string" }, "grade": { "anyOf": [ { "enum": [ "A", "B", "C", "D", "F" ], "type": "string" }, { "type": "null" } ], "default": null }, "last_scan_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null } }, "required": [ "domain", "active_issues", "dashboard_url" ], "type": "object" } }, { "description": "Returns recent configuration drift events for a domain under monitoring by the authenticated account — TLS changes, DNSSEC state changes, new or removed security headers, shifts in third-party JS hosts, new cookies. Each event carries its observed-at timestamp, a kind (tls/dnssec/cookies/js_hosts/headers), a severity classified centrally (high for tls/dnssec/headers, medium for cookies/js_hosts, otherwise low), a short summary, and a sanitised detail payload.\n\nUse this when the user asks 'what changed' on a domain, wants to audit recent posture shifts, or is diagnosing an unexpected issue. Pair it with get_domain_status to see the current state and get_drift_events to see how it got there.\n\nDo NOT use this for a domain that is not under monitoring — you'll get a domain_not_monitored error; monitoring has to be active for the drift history to accumulate. Optional since (ISO-8601) and limit (1..100) params narrow the window. Requires a valid API key.", "inputSchema": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "limit": { "default": 20, "type": "integer" }, "since": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null } }, "required": [ "domain" ], "type": "object" }, "name": "get_drift_events", "outputSchema": { "properties": { "domain": { "type": "string" }, "events": { "items": { "properties": { "detail": { "additionalProperties": true, "description": "Sanitized payload excerpt; fields vary by kind.", "type": "object" }, "kind": { "enum": [ "tls", "dnssec", "cookies", "js_hosts", "headers" ], "type": "string" }, "observed_at": { "format": "date-time", "type": "string" }, "severity": { "description": "Classified by app/services/drift_severity.py — shared with future consumers.", "enum": [ "critical", "high", "medium", "low", "info" ], "type": "string" }, "summary": { "description": "Short human-readable summary of what changed.", "type": "string" } }, "required": [ "observed_at", "kind", "severity", "summary", "detail" ], "type": "object" }, "type": "array" } }, "required": [ "domain", "events" ], "type": "object" } }, { "description": "Returns copy-paste-ready fix recommendations (nginx, Apache, DNS, shell) for the issues found on a domain the caller has already paid for — either an active Monitor/Compliance subscription covering the domain, OR a purchased one-off Report for the domain. Each recommendation carries a stable issue_id, a priority (high/medium/low), a title, prose instructions, one or more config snippets with the target domain already interpolated, a verify command, and a category tag.\n\nUse this when the user asks how to fix an issue, wants the exact config to apply, or needs to verify a fix worked. Pass the optional issue_id to scope the response to one specific finding. The response is read-only — this tool NEVER triggers a fresh scan; fixes are computed from the most recent stored scan (including the Report-included re-scan if that was used).\n\nDo NOT use this for domains the caller hasn't purchased coverage for — you'll get an upgrade_required error that links to the pricing page. Do NOT use this to run or trigger a scan; call scan_domain for anonymous checks. Requires a valid API key.", "inputSchema": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "issue_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null } }, "required": [ "domain" ], "type": "object" }, "name": "get_fix_recommendations", "outputSchema": { "properties": { "domain": { "type": "string" }, "recommendations": { "description": "Priority-sorted list of actionable fixes.", "items": { "properties": { "category": { "enum": [ "website", "email", "dns", "server", "uncategorized" ], "type": "string" }, "code": { "type": "string" }, "instructions": { "type": "string" }, "issue_id": { "type": "string" }, "priority": { "enum": [ "high", "medium", "low" ], "type": "string" }, "snippets": { "items": { "properties": { "code": { "description": "Copy-paste-ready config/command with {domain} interpolated.", "type": "string" }, "platform": { "enum": [ "nginx", "apache", "dns", "shell", "other" ], "type": "string" }, "verify": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null } }, "required": [ "platform", "code" ], "type": "object" }, "type": "array" }, "title": { "type": "string" } }, "required": [ "issue_id", "code", "title", "priority", "instructions", "snippets", "category" ], "type": "object" }, "type": "array" }, "scanned_at": { "description": "Timestamp of the underlying scan the fixes were computed from.", "format": "date-time", "type": "string" }, "source": { "description": "Which purchased product backed this response — 'monitor' for a subscription, 'report' for a one-off Report.", "enum": [ "monitor", "report" ], "type": "string" } }, "required": [ "domain", "source", "scanned_at", "recommendations" ], "type": "object" } }, { "description": "Returns the full list of domains under continuous SiteGuardian monitoring for the authenticated account. Each entry includes the domain, current security grade (A–F), timestamp of the last completed scan, and a relative dashboard URL.\n\nUse this when the user asks what they are monitoring, wants an inventory summary, or needs to look up a specific domain's exact spelling before calling get_domain_status / get_drift_events / get_fix_recommendations. The list is scoped entirely by the API key — there is no filter parameter to widen or narrow the result.\n\nDo NOT use this to enumerate domains the user does not own or monitor — it only returns their own inventory. Do NOT call it to trigger a scan (it does not); use scan_domain for one-off checks. Requires a valid API key.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "list_monitored_domains", "outputSchema": { "properties": { "domains": { "items": { "properties": { "dashboard_url": { "description": "Relative URL to the monitor detail page.", "type": "string" }, "domain": { "type": "string" }, "grade": { "anyOf": [ { "enum": [ "A", "B", "C", "D", "F" ], "type": "string" }, { "type": "null" } ], "default": null }, "last_scan_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null } }, "required": [ "domain", "dashboard_url" ], "type": "object" }, "type": "array" } }, "required": [ "domains" ], "type": "object" } }, { "description": "Runs a free one-off security scan of the given domain and returns its grade (A–F), scan timestamp, and up to three top-priority issues with a permalink to the full report on siteguardian.io.\n\nUse this when the user asks for a quick security check of a domain that is NOT yet under SiteGuardian monitoring, or when they want a fresh assessment before subscribing. Results are cached for two hours, so repeated calls about the same domain return the same snapshot and mark it with cached=True.\n\nDo NOT use this for domains already under monitoring by the user — call get_domain_status instead for the account-scoped view with framework tags. Do NOT use this to batch-scan many domains as a competitive-intelligence tool; per-source-IP and per-target rate limits bound usage. This tool does not require authentication.", "inputSchema": { "additionalProperties": false, "properties": { "domain": { "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "scan_domain", "outputSchema": { "properties": { "cached": { "description": "True when the result was served from the 2-hour ScanLog cache.", "type": "boolean" }, "domain": { "type": "string" }, "grade": { "enum": [ "A", "B", "C", "D", "F" ], "type": "string" }, "report_url": { "description": "Permalink to the full scan report on siteguardian.io.", "type": "string" }, "scanned_at": { "format": "date-time", "type": "string" }, "score": { "maximum": 100, "minimum": 0, "type": "integer" }, "top_issues": { "description": "Up to 3 top-priority issues found. Sorted high → medium → low.", "items": { "description": "One security issue surfaced by a tool's output.\n\nCanonical shape used by ``scan_domain`` and ``get_domain_status``.\nThe ``id`` is stable across calls and locales — derived from the\nissue's stable ``code`` (see recommendation_view.py, P1 + P4).", "properties": { "category": { "anyOf": [ { "enum": [ "website", "email", "dns", "server", "uncategorized" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "Which product area this issue belongs to." }, "code": { "description": "Raw stable code (e.g. 'headers.sri_missing') — survives i18n translation.", "type": "string" }, "id": { "description": "Stable 12-char hex id; use as the issue_id argument to get_fix_recommendations.", "type": "string" }, "impact": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "One-sentence explanation of why it matters." }, "severity": { "enum": [ "critical", "high", "medium", "low", "info" ], "type": "string" }, "title": { "description": "Short user-facing title, localised.", "type": "string" } }, "required": [ "id", "code", "severity", "title" ], "type": "object" }, "type": "array" } }, "required": [ "domain", "grade", "score", "scanned_at", "cached", "top_issues", "report_url" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:392d8b466da507fc1e8a4d4c0d867227d325987ba045fd1225b4bb5e668fc716 | sha256sum