@site-spy/mcp-server
Advanced tools
+48
-4
@@ -5,6 +5,5 @@ #!/usr/bin/env node | ||
| import { z } from "zod"; | ||
| //#region src/index.ts | ||
| const API_URL = process.env.SITE_SPY_API_URL ?? "https://detect.coolify.vkuprin.com/api/v1"; | ||
| const AUTH_URL = process.env.SITE_SPY_AUTH_URL ?? "https://app.sitespy.app/dashboard"; | ||
| const AUTH_URL = process.env.SITE_SPY_AUTH_URL ?? "https://sitespy.app/dashboard"; | ||
| let apiKey = process.env.SITE_SPY_API_KEY ?? ""; | ||
@@ -197,6 +196,51 @@ function requireAuth() { | ||
| }); | ||
| server.registerTool("get_rss_settings", { | ||
| description: "Get the current RSS feed settings including whether feeds are enabled and the feed token.", | ||
| inputSchema: z.object({}) | ||
| }, async () => { | ||
| return jsonContent(await api("/rss")); | ||
| }); | ||
| server.registerTool("generate_rss_token", { | ||
| description: "Generate or regenerate an RSS feed token. Use the token to build feed URLs: {server}/rss?token={token} for all watches, {server}/rss/watch/{uuid}?token={token} for a single watch, {server}/rss/tag/{tag_uuid}?token={token} for a tag. Regenerating invalidates all existing feed URLs.", | ||
| inputSchema: z.object({}) | ||
| }, async () => { | ||
| return jsonContent(await api("/rss", { method: "POST" })); | ||
| }); | ||
| server.registerTool("revoke_rss_token", { | ||
| description: "Revoke the RSS feed token, disabling all RSS feed access immediately.", | ||
| annotations: { destructiveHint: true }, | ||
| inputSchema: z.object({}) | ||
| }, async () => { | ||
| return jsonContent(await api("/rss", { method: "DELETE" })); | ||
| }); | ||
| server.registerTool("create_tag", { | ||
| description: "Create a new tag for organizing watches.", | ||
| inputSchema: z.object({ | ||
| title: z.string().describe("Tag name"), | ||
| color: z.string().optional().describe("Tag color (e.g. 'red', 'blue', '#ff0000')") | ||
| }) | ||
| }, async ({ title, color }) => { | ||
| const body = { title }; | ||
| if (color) body.color = color; | ||
| return jsonContent(await api("/tag", { | ||
| method: "POST", | ||
| body | ||
| })); | ||
| }); | ||
| server.registerTool("delete_tag", { | ||
| description: "Delete a tag. Watches using this tag will be untagged.", | ||
| annotations: { destructiveHint: true }, | ||
| inputSchema: z.object({ uuid: z.string().describe("Tag UUID to delete") }) | ||
| }, async ({ uuid }) => { | ||
| return jsonContent(await api(`/tag/${uuid}`, { method: "DELETE" })); | ||
| }); | ||
| server.registerTool("get_notifications", { | ||
| description: "Get the current notification settings (email, Telegram, web push, etc.).", | ||
| inputSchema: z.object({}) | ||
| }, async () => { | ||
| return jsonContent(await api("/notifications")); | ||
| }); | ||
| const transport = new StdioServerTransport(); | ||
| await server.connect(transport); | ||
| //#endregion | ||
| export { }; | ||
| export {}; |
+7
-7
| { | ||
| "name": "@site-spy/mcp-server", | ||
| "version": "0.0.1", | ||
| "version": "0.0.2", | ||
| "description": "MCP server for Site Spy — lets AI agents monitor websites for changes", | ||
@@ -15,3 +15,3 @@ "type": "module", | ||
| "bin": { | ||
| "site-spy-mcp": "dist/index.mjs" | ||
| "site-spy-mcp": "./dist/index.mjs" | ||
| }, | ||
@@ -35,10 +35,10 @@ "exports": { | ||
| "dependencies": { | ||
| "@modelcontextprotocol/sdk": "^1.12.1", | ||
| "zod": "^3.25.67" | ||
| "@modelcontextprotocol/sdk": "^1.27.1", | ||
| "zod": "^4.3.6" | ||
| }, | ||
| "devDependencies": { | ||
| "@site-spy/tsconfig": "workspace:*", | ||
| "@types/node": "^25.3.0", | ||
| "tsdown": "^0.20.3", | ||
| "tsx": "^4.19.4", | ||
| "@types/node": "^25.4.0", | ||
| "tsdown": "^0.21.1", | ||
| "tsx": "^4.21.0", | ||
| "typescript": "^5.9.3", | ||
@@ -45,0 +45,0 @@ "vitest": "^4.0.18" |
+75
-15
@@ -27,2 +27,18 @@ # @site-spy/mcp-server | ||
| **Claude Code** (`.mcp.json`): | ||
| ```json | ||
| { | ||
| "mcpServers": { | ||
| "site-spy": { | ||
| "command": "npx", | ||
| "args": ["-y", "@site-spy/mcp-server"], | ||
| "env": { | ||
| "SITE_SPY_API_KEY": "your-api-key" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| **Cursor** (`.cursor/mcp.json`): | ||
@@ -44,3 +60,3 @@ | ||
| Get your API key from [Site Spy Dashboard](https://app.sitespy.app/dashboard) → Settings → API. | ||
| Get your API key from [Site Spy Dashboard](https://sitespy.app/dashboard/settings?tab=api) → Settings → API. | ||
@@ -51,18 +67,56 @@ If you don't set `SITE_SPY_API_KEY`, the agent will ask you to authenticate interactively. | ||
| ### Authentication | ||
| | Tool | Description | | ||
| | -------------- | ------------------------------------------------ | | ||
| | `authenticate` | Connect with an API key (if not set via env var) | | ||
| | `auth_status` | Check authentication status | | ||
| ### Watch Management | ||
| | Tool | Description | | ||
| | ----------------- | ------------------------------------------------------ | | ||
| | `list_watches` | List all monitored websites (optionally filter by tag) | | ||
| | `create_watch` | Start monitoring a URL for changes | | ||
| | `get_watch` | Get full details of a specific watch | | ||
| | `update_watch` | Update config — pause/resume, change interval, rename | | ||
| | `delete_watch` | Stop monitoring and delete a watch | | ||
| | `search_watches` | Search watches by URL or title | | ||
| | `trigger_recheck` | Force an immediate recheck of all watches | | ||
| ### Change History | ||
| | Tool | Description | | ||
| | -------------------- | ---------------------------------------- | | ||
| | `get_change_history` | Get timestamps of detected changes | | ||
| | `get_snapshot` | Get page content at a specific timestamp | | ||
| | `get_diff` | Compare content between two timestamps | | ||
| ### RSS Feeds | ||
| | Tool | Description | | ||
| | -------------------- | ------------------------------------------------------ | | ||
| | `authenticate` | Connect with an API key (if not set via env var) | | ||
| | `auth_status` | Check authentication status | | ||
| | `list_watches` | List all monitored websites (optionally filter by tag) | | ||
| | `create_watch` | Start monitoring a URL for changes | | ||
| | `get_watch` | Get full details of a specific watch | | ||
| | `update_watch` | Update config — pause/resume, change interval, rename | | ||
| | `delete_watch` | Stop monitoring and delete a watch | | ||
| | `get_change_history` | Get timestamps of detected changes | | ||
| | `get_snapshot` | Get page content at a specific timestamp | | ||
| | `get_diff` | Compare content between two timestamps | | ||
| | `search_watches` | Search watches by URL or title | | ||
| | `list_tags` | List all tags for organizing watches | | ||
| | `trigger_recheck` | Force an immediate recheck of all watches | | ||
| | `get_rss_settings` | Get current RSS feed settings and token | | ||
| | `generate_rss_token` | Generate or regenerate an RSS feed token for feed URLs | | ||
| | `revoke_rss_token` | Revoke the RSS token, disabling all feed access | | ||
| ### Tags & Notifications | ||
| | Tool | Description | | ||
| | ------------------- | ------------------------------------ | | ||
| | `list_tags` | List all tags for organizing watches | | ||
| | `create_tag` | Create a new tag with name and color | | ||
| | `delete_tag` | Delete a tag | | ||
| | `get_notifications` | Get current notification settings | | ||
| ## RSS Feeds | ||
| Site Spy provides per-user RSS feeds so you can subscribe to change notifications in any RSS reader. | ||
| Once you have a token (via `generate_rss_token`), feed URLs follow this pattern: | ||
| - **All watches**: `https://sitespy.app/api/rss?token={token}` | ||
| - **Single watch**: `https://sitespy.app/api/rss/watch/{watch_uuid}?token={token}` | ||
| - **By tag**: `https://sitespy.app/api/rss/tag/{tag_uuid}?token={token}` | ||
| ## Environment Variables | ||
@@ -74,4 +128,8 @@ | ||
| | `SITE_SPY_API_URL` | Backend API URL | `https://detect.coolify.vkuprin.com/api/v1` | | ||
| | `SITE_SPY_AUTH_URL` | URL shown to users for getting API keys | `https://app.sitespy.app/dashboard` | | ||
| | `SITE_SPY_AUTH_URL` | URL shown to users for getting API keys | `https://sitespy.app/dashboard` | | ||
| ## Documentation | ||
| Full documentation is available at [docs.sitespy.app](https://docs.sitespy.app). | ||
| ## Example Prompts | ||
@@ -86,2 +144,4 @@ | ||
| - "Check all my sites right now" | ||
| - "Set up RSS feeds so I can follow changes in my feed reader" | ||
| - "Create a tag called 'production' and assign my watches to it" | ||
@@ -88,0 +148,0 @@ ## License |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
16632
29.79%245
24.37%146
69.77%+ Added
- Removed
Updated