Search / io.github.gweber/siteguardian
SiteGuardian
R0· no sign-inEU-hosted website monitoring + 17-framework compliance MCP. One anonymous tool, four authenticated.
v1.0.0 · active · repository · website · descriptor JSON · versions
Search / io.github.gweber/siteguardian
R0· no sign-inEU-hosted website monitoring + 17-framework compliance MCP. One anonymous tool, four authenticated.
v1.0.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"siteguardian": {
"type": "http",
"url": "https://mcp.siteguardian.io",
"headers": {
"Authorization": "Bearer ${SITEGUARDIAN_TOKEN}"
}
}
}
}claude mcp add --transport http siteguardian https://mcp.siteguardian.io --header "Authorization: Bearer ${SITEGUARDIAN_TOKEN}"[mcp_servers.siteguardian]
url = "https://mcp.siteguardian.io"
bearer_token_env_var = "SITEGUARDIAN_TOKEN"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"siteguardian": {
"type": "remote",
"url": "https://mcp.siteguardian.io",
"enabled": true,
"headers": {
"Authorization": "Bearer {env:SITEGUARDIAN_TOKEN}"
}
}
}
}{
"mcpServers": {
"siteguardian": {
"type": "http",
"url": "https://mcp.siteguardian.io",
"headers": {
"Authorization": "Bearer ${SITEGUARDIAN_TOKEN}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=siteguardian&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLnNpdGVndWFyZGlhbi5pbyIsImhlYWRlcnMiOnsiQXV0aG9yaXphdGlvbiI6IkJlYXJlciAke1NJVEVHVUFSRElBTl9UT0tFTn0ifX0%3D"
}{
"servers": {
"siteguardian": {
"type": "http",
"url": "https://mcp.siteguardian.io",
"headers": {
"Authorization": "Bearer ${SITEGUARDIAN_TOKEN}"
}
}
}
}{
"mcpServers": {
"siteguardian": {
"httpUrl": "https://mcp.siteguardian.io",
"headers": {
"Authorization": "Bearer ${SITEGUARDIAN_TOKEN}"
}
}
}
}extensions:
"siteguardian":
enabled: true
name: "siteguardian"
type: streamable_http
uri: "https://mcp.siteguardian.io"
headers:
"Authorization": "Bearer ${SITEGUARDIAN_TOKEN}"
timeout: 300
Placeholders to fill from your own secret store: ${SITEGUARDIAN_TOKEN}. The registry never accepts secret values.
protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length1 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations5 of 5 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 1,429 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changesno tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website +reachable +uptime-99% ~updated-178d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://mcp.siteguardian.io streamable-http | none | yes | 99% | 650 ms | 2025-11-25 | 2026-10-20 |
get_domain_statusread-only | 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. Use 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. Do 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. |
get_drift_eventsread-only | 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. Use 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. Do 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. |
get_fix_recommendationsread-only | 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. Use 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). Do 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. |
list_monitored_domainsread-only | 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. Use 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. Do 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. |
scan_domainread-only | 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. Use 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. Do 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. |
Schemas: list_tools.
{
"name": "io.github.gweber/siteguardian",
"title": "SiteGuardian",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://mcp.siteguardian.io",
"type": "streamable-http",
"headers": [
{
"name": "Authorization",
"isSecret": true,
"description": "Bearer <api-key> — required for the four authenticated tools (list_monitored_domains, get_domain_status, get_drift_events, get_fix_recommendations). The scan_domain tool works anonymously without this header. Get a key at https://siteguardian.io/settings"
}
]
}
],
"version": "1.0.0",
"repository": {
"url": "https://github.com/gweber/siteguardian-mcp-examples",
"source": "github"
},
"websiteUrl": "https://siteguardian.io/docs/mcp",
"description": "EU-hosted website monitoring + 17-framework compliance MCP. One anonymous tool, four authenticated."
}