Pages Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Pages Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A tiny static-site host with an MCP upload tool. Claude (or any MCP client) uploads static sites/artifacts; they're served over HTTPS at an internal hostname.
https://pages.internal.white.fm/<site>/ (open on the tailnet)https://pages-mcp.internal.white.fm/mcp — Authorization: Bearer <MCP_TOKEN>SITES_DIR (default /data/sites), one dir per site.A <base href="/<site>/"> is injected into served HTML (when absent) so relative-path multi-file sites work under the path prefix, not just self-contained single files.
| Tool | Purpose | |
|---|---|---|
deploy_site(name, files, replace=True) | Upload a site. files = [{path, content, encoding}] (encoding: text\ | base64). replace replaces vs. merges. Returns {url, files, bytes}. |
list_sites() | All sites with URL, file count, size, last-modified. | |
get_site(name) | One site's stats + the list of file paths. | |
delete_site(name) | Remove a site and all its files. |
/healthz is open (used by k8s probes). Site names are lowercase DNS labels (a-z, 0-9, -), 1–63 chars.
| Var | Default | Notes |
|---|---|---|
MCP_TOKEN | _(empty)_ | Bearer token for the control plane. Empty = auth disabled (don't run that way). |
PORT | 8080 | |
SITES_DIR | /data/sites | Persistent storage root. |
SERVE_HOST | pages.internal.white.fm | Content host (Host header → serving plane). |
MCP_HOST | pages-mcp.internal.white.fm | Control host (Host header → /mcp). |
PUBLIC_BASE_URL | https://$SERVE_HOST | Base used in returned URLs. |
MAX_TOTAL_BYTES | 67108864 (64 MiB) | Per-site upload cap. |
GitHub Actions (.github/workflows/build.yml) builds ghcr.io/robertdwhite/pages-mcp (linux/amd64) on push to main / v* tags. Pin the resulting digest in the cluster repo at apps/ai/pages/kustomization.yaml.
# Token from the k8s secret:
sops -d apps/ai/pages/11-secret.sops.yaml | grep MCP_TOKEN
claude mcp add --transport http pages \
https://pages-mcp.internal.white.fm/mcp \
--header "Authorization: Bearer <MCP_TOKEN>"~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.