SiteGuardian

io.github.gweberPublished by GitHub account gweberv1.0.0Updated Oct 27, 2026

EU-hosted website monitoring + 17-framework compliance MCP. One anonymous tool, four authenticated.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingSecurity & Monitoring

Overview

AI-generated overview

Hosted MCP endpoint for SiteGuardian that lets an assistant run website security scans and query monitoring, drift and fix data for domains.

What you can do
  • Run a free one-off security scan of a domain, returning an A–F grade, timestamp, top issues and a report link
  • List the domains under continuous monitoring for the account, with grades and last-scan times
  • Get the current grade and active issues for a monitored domain
  • Review recent configuration drift events such as TLS, DNSSEC, header, cookie and third-party JS host changes
  • Fetch copy-paste-ready fix recommendations (nginx, Apache, DNS, shell) for issues on a paid domain
When to use it
Useful when you want an assistant to check a website's security posture, keep an eye on monitored domains, or explain what changed and how to fix it, without leaving the chat client.
Requirements
Remote Streamable HTTP endpoint; no local install. The scan tool works anonymously. The four monitoring tools need an API key from a SiteGuardian account (Monitor, Compliance or Enterprise plan) sent as an Authorization Bearer header. Fix recommendations additionally require an active subscription or a purchased one-off report for the domain.
Before you install
The Authorization header carries a live API key, so keep it out of shared configs. Fix recommendations are gated behind a paid plan or purchased report, so calls may involve billing. The service is a closed-source SaaS; tool calls are logged and hash-chained for abuse prevention and billing, and domain names are sent to the provider.

Installation

In SourceWeft

  1. Open SiteGuardian in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.gweber%2Fsiteguardian/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "siteguardian": {
      "type": "http",
      "url": "https://mcp.siteguardian.io/"
    }
  }
}

README

SiteGuardian MCP — Examples & Client Configurations

[MCP] [EU] [Docs]

Client configurations, copy-paste examples, and the MCP server manifest for the SiteGuardian Model Context Protocol server.

Note: This repository contains examples and client integration code only. The MCP server itself is hosted at https://mcp.siteguardian.io and is operated as a SaaS — server source is closed. Everything in this repo is MIT-licensed and free to fork.

What is the SiteGuardian MCP server?

A hosted MCP endpoint that lets Claude Desktop, Claude Code, Cursor, Windsurf, and VS Code Copilot query website-monitoring data and run security/compliance scans through natural-language tool calls.

  • Endpoint: https://mcp.siteguardian.io (or the canonical https://siteguardian.io/mcp)
  • Transport: Streamable HTTP
  • Hosting: Hetzner, Germany — EU data residency
  • Documentation: https://siteguardian.io/docs/mcp

Five tools

ToolAuthPurpose
scan_domainanonymousOne-off security scan, A–F grade + top 3 issues + permalink
list_monitored_domainsBearerDomains under continuous monitoring for the account
get_domain_statusBearerCurrent grade + active issues for a monitored domain
get_drift_eventsBearerRecent posture changes (TLS, DNSSEC, headers, cookies, JS hosts)
get_fix_recommendationsBearer + paid plannginx/Apache/DNS snippets + verify commands

Try the anonymous tool (no setup required)

bash
curl -X POST https://mcp.siteguardian.io/ \  -H 'Content-Type: application/json' \  -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"scan_domain","arguments":{"domain":"example.com"}}}'

Rate-limited to 10 calls/hour/IP. Cached for 2h per domain. Full curl/Python/JS examples in examples/.

Install in your client

All clients use the same endpoint. Copy-paste configs in clients/:

Authentication

The scan_domain tool is anonymous. The four monitoring tools require a Bearer key:

  1. Sign in at https://siteguardian.io
  2. Open Settings → API & Integrations
  3. Click Generate key, name it, copy it
  4. Add to your client config:
    json
    "headers": {"Authorization": "Bearer sg_live_..."}

API keys are available on the Monitor, Compliance, and Enterprise plans.

Privacy

  • EU-hosted. Hetzner Germany. No US sub-processor.
  • No LLM in the response path. Tool answers are deterministic from monitoring data.
  • No training on your queries. Logged for abuse prevention and billing only.
  • Audit trail. Every tool call is recorded in the SHA-256 hash chain.

Server manifest

The full machine-readable MCP server manifest is in server.json — this is the file consumed by the Anthropic MCP Registry and the various community directories.

Roadmap

  • OAuth 2.1 (per current MCP spec)
  • resources and prompts in addition to tools
  • Listing in the official Anthropic MCP Registry
  • Listing on Smithery and mcp.so

License

Examples and client configurations in this repository are released under the MIT License — see LICENSE.

The SiteGuardian MCP server itself is proprietary and hosted as a SaaS. Server source is not distributed.

Support

Source: README.md at commit 92d01ef

Tools

5

scan_domain

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.

Parametersdomainrequired

list_monitored_domains

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.

Takes no parameters.

get_domain_status

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.

Parametersdomainrequired

get_drift_events

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.

Parameterslimitsincedomainrequired

get_fix_recommendations

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.

Parametersdomainrequiredissue_id

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts