
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
@site-spy/mcp-server
Advanced tools
Let an AI agent watch web pages for you. This MCP server connects your assistant to Site Spy: it can start monitoring a URL, tell you what changed between two points in time, and fetch or search the web on demand. Full docs at docs.sitespy.app.
Get an API key from Settings → API. Every plan, including the free one, can read and write — you are bounded by watch count and daily requests, not by which tools you may call.
If your client has a CLI, this is the whole setup:
# Claude Code
claude mcp add site-spy --env SITE_SPY_API_KEY=your-key -- npx -y @site-spy/mcp-server
# Codex CLI
codex mcp add site-spy --env SITE_SPY_API_KEY=your-key -- npx -y @site-spy/mcp-server
# Gemini CLI (the -- matters: without it, -y is parsed as a gemini flag)
gemini mcp add -s user -e SITE_SPY_API_KEY=your-key site-spy npx -- -y @site-spy/mcp-server
# OpenClaw
openclaw mcp add site-spy --command npx --arg -y --arg @site-spy/mcp-server \
--env SITE_SPY_API_KEY=your-key
# VS Code
code --add-mcp '{"name":"site-spy","command":"npx","args":["-y","@site-spy/mcp-server"],"env":{"SITE_SPY_API_KEY":"your-key"}}'
Otherwise add this to your client's config file:
{
"mcpServers": {
"site-spy": {
"command": "npx",
"args": ["-y", "@site-spy/mcp-server"],
"env": {
"SITE_SPY_API_KEY": "your-key"
}
}
}
}
| Client | Config file | Shape |
|---|---|---|
| Claude Code | .mcp.json (project) or ~/.claude.json | as above |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.jsonWindows: %APPDATA%\Claude\claude_desktop_config.json | as above |
| Cursor | .cursor/mcp.json or ~/.cursor/mcp.json | as above |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | as above |
| Gemini CLI | .gemini/settings.json or ~/.gemini/settings.json | as above |
| Codex CLI | ~/.codex/config.toml | TOML, see below |
| OpenCode | opencode.json or ~/.config/opencode/opencode.json | differs, see below |
| OpenClaw | ~/.openclaw/openclaw.json | differs, see below |
| VS Code | .vscode/mcp.json | differs, see below |
| Zed | run the zed: open settings file action | differs, see below |
Restart the client afterwards; the tools appear on their own.
Codex CLI — TOML, and the key is mcp_servers. The same file is read by the Codex
CLI, the ChatGPT desktop app, and the IDE extension.
[mcp_servers.site-spy]
command = "npx"
args = ["-y", "@site-spy/mcp-server"]
[mcp_servers.site-spy.env]
SITE_SPY_API_KEY = "your-key"
OpenCode — key is mcp, command is one array, and the env key is environment.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"site-spy": {
"type": "local",
"command": ["npx", "-y", "@site-spy/mcp-server"],
"enabled": true,
"environment": { "SITE_SPY_API_KEY": "your-key" }
}
}
}
OpenClaw — servers nest under mcp.servers.
{
"mcp": {
"servers": {
"site-spy": {
"command": "npx",
"args": ["-y", "@site-spy/mcp-server"],
"env": { "SITE_SPY_API_KEY": "your-key" },
"enabled": true
}
}
}
}
VS Code — key is servers, and inputs keeps the key out of the file.
{
"inputs": [
{
"type": "promptString",
"id": "site-spy-key",
"description": "Site Spy API key",
"password": true
}
],
"servers": {
"site-spy": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@site-spy/mcp-server"],
"env": { "SITE_SPY_API_KEY": "${input:site-spy-key}" }
}
}
}
Zed — key is context_servers.
{
"context_servers": {
"site-spy": {
"command": "npx",
"args": ["-y", "@site-spy/mcp-server"],
"env": { "SITE_SPY_API_KEY": "your-key" }
}
}
}
If you skip SITE_SPY_API_KEY, the agent asks you to authenticate interactively — but
that key lives in memory only and is gone when the server restarts.
Read tools are annotated readOnlyHint, so most clients stop asking permission for them.
| Tool | Does | Plan |
|---|---|---|
list_watches | List monitored pages, with limit / offset | all |
get_watch | Full detail for one watch | all |
search_watches | Find watches by URL or title | all |
get_change_history | Timestamps where a change was detected | all |
get_snapshot | The page as captured at one timestamp | all |
get_diff | What changed between two timestamps | all |
get_rss_settings | Current feed settings and token | all |
get_notifications | Current notification settings | all |
auth_status | Whether the server is connected | all |
create_watch | Start monitoring a URL | all |
update_watch | Rename, repoint, pause, change interval, mute | all |
delete_watch | Stop monitoring and drop the history | all |
trigger_recheck | Check everything now instead of on schedule | all |
authenticate | Supply an API key at runtime | all |
generate_rss_token | Mint a feed token — invalidates existing feed URLs | all |
revoke_rss_token | Kill feed access immediately | all |
fetch_url | Fetch one URL, with a browser backend for JS pages | all |
web_search | Find URLs to fetch, instead of guessing them | all |
get_ai_summary | Plain-English summary of the latest change | Pro |
get_snapshot and get_diff cap output at 20,000 characters; pass max_chars for more.
Once a token exists, feed URLs are https://sitespy.app/api/rss?token={token} for
everything and …/api/rss/watch/{uuid}?token={token} for one watch.
| Variable | Description | Default |
|---|---|---|
SITE_SPY_API_KEY | API key | — (interactive auth) |
SITE_SPY_API_URL | Backend API URL | https://api.sitespy.app/api/v1 |
SITE_SPY_AUTH_URL | URL shown when a key is needed | https://sitespy.app/dashboard |
Self-hosting: the backend fetch_url endpoint can be restricted with
FETCH_URL_API_ENABLED, FETCH_URL_REQUIRE_MASTER_ADMIN, or
FETCH_URL_ALLOWED_API_KEYS.
npx
runs (Node.js 20.19+).fetch_url keeps timing out — pass fetch_backend explicitly. html_requests is
fast and right for static pages; html_webdriver renders JavaScript; flaresolverr is
for Cloudflare. auto tries all three and gives up at 30s. On failure the response
carries attempts[] and cascade_summary showing what was tried.FAQs
MCP server for Site Spy — lets AI agents monitor websites for changes
The npm package @site-spy/mcp-server receives a total of 52 weekly downloads. As such, @site-spy/mcp-server popularity was classified as not popular.
We found that @site-spy/mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.