{
  "serverInfo": {
    "name": "SentryDock",
    "version": "1.1.1",
    "description": "Delegate a standing watch over companies, topics and public sources. Get signed webhook alerts with evidence, status and retries. OAuth or API key; existing plan."
  },
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://www.sentrydock.com/mcp",
    "authentication": {
      "type": "http",
      "scheme": "bearer",
      "description": "OAuth sign-in with PKCE, or a Bearer API key from Settings → Agents."
    }
  },
  "instructions": "Call account.overview first. For a standing watch, choose or create an authorized recurring monitor with explicit triggers, sources and schedule, then delivery.connect with platform webhook, the human's authorized public HTTPS webhook_url and optional monitor_id. Omit monitor_id for all owned recurring monitors; team permission is required. Store signing_secret securely. The receiver's host must accept callbacks and decide what to run; OAuth alone does not wake a chat assistant. Verify signatures, deduplicate event IDs and return 2xx quickly. Temporary failures retry; delivery.get shows webhook_deliveries status and errors. alerts.list with since recovers missed results. News search covers indexed items. A plan_required error links to pricing for the human; never purchase automatically. Confirm consequential changes unless already authorized. Cannot change billing, invite teams, run predictions or delete the account. Guide: https://www.sentrydock.com/help/alerts/webhooks.",
  "links": {
    "docs": "https://www.sentrydock.com/agents",
    "apiCatalog": "https://www.sentrydock.com/.well-known/api-catalog",
    "agentSkills": "https://www.sentrydock.com/.well-known/agent-skills/index.json",
    "openapi": "https://www.sentrydock.com/openapi.json",
    "webhooks": "https://www.sentrydock.com/help/alerts/webhooks"
  },
  "authentication": {
    "required": true,
    "schemes": [
      "oauth2",
      "bearer"
    ]
  },
  "tools": [
    {
      "name": "news.search",
      "description": "Search SentryDock's indexed news by meaning. Use for questions like 'news in Peru'. Returns items already in the index, not a live crawl of the whole web.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Plain-language query, e.g. news in Peru"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "hours_ago": {
            "type": "integer",
            "minimum": 1,
            "maximum": 720
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "type": "string",
            "description": "Optional language prefix such as es or en"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "news.latest",
      "description": "Newest published items in the SentryDock news index.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "news.get",
      "description": "One indexed article by id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Article id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "news.mine",
      "description": "This account's recent monitor hits (task results).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.list",
      "description": "List this account's news monitors.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.get",
      "description": "Get one monitor and its sources.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.create",
      "description": "Create an authorized recurring watch from the user’s subject, reason to care, trigger conditions and sources. Default schedule is hourly. Empty sources lets SentryDock find them. Use delivery.connect for webhook alerts; confirm consequential changes unless already authorized.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "What to watch"
          },
          "title": {
            "type": "string",
            "description": "Optional short title"
          },
          "interval_minutes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10080
          },
          "discover_sources": {
            "type": "boolean"
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "url"
              ]
            }
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.update",
      "description": "Update a monitor's title, prompt, interval, or active flag.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          },
          "title": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "interval_minutes": {
            "type": "integer"
          },
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.pause",
      "description": "Pause a monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.resume",
      "description": "Resume a paused monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.delete",
      "description": "Delete a monitor. Confirm with the human first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "sources.list",
      "description": "List sources on a monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "sources.add",
      "description": "Add a source URL to a monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          },
          "url": {
            "type": "string",
            "description": "Source URL"
          }
        },
        "required": [
          "id",
          "url"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "sources.remove",
      "description": "Remove a source URL from a monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          },
          "url": {
            "type": "string",
            "description": "Source URL"
          }
        },
        "required": [
          "id",
          "url"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "sources.discover",
      "description": "Suggest sources for a topic. Does not attach them until sources.add or monitors.create.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "description": "Topic to find sources for"
          }
        },
        "required": [
          "prompt"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "alerts.list",
      "description": "Read recent monitor results or recover missed webhook alerts using since. For ongoing push delivery, connect a webhook with delivery.connect.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "monitor_id": {
            "type": "string"
          },
          "since": {
            "type": "string",
            "description": "ISO timestamp"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "alerts.filter.get",
      "description": "Read the semantic extra alert filter.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "alerts.filter.set",
      "description": "Set the semantic extra alert filter.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "query": {
            "type": "string"
          },
          "threshold": {
            "type": "number"
          },
          "fail_open": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "delivery.get",
      "description": "Read delivery settings and current webhook_deliveries receipts with status, attempts and errors. Secrets are redacted. A completed run does not prove webhook delivery.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "delivery.set",
      "description": "Toggle email, SMS, browser, or existing connected channels. Confirm with the human first. Cannot create new webhook URLs.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "boolean"
          },
          "browser": {
            "type": "boolean"
          },
          "sms": {
            "type": "boolean"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "enabled": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "enabled"
              ]
            }
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "briefings.get",
      "description": "Read morning/evening briefing preferences and recent deliveries.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "briefings.set",
      "description": "Turn morning or evening briefings on or off.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "morning_enabled": {
            "type": "boolean"
          },
          "evening_enabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "usage.get",
      "description": "Plan name, realtime monitor slots used/limit.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "account.overview",
      "description": "Start here. One snapshot of the signed-in account: profile, plan, delivery, briefings, monitors, and latest alerts.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "account.get",
      "description": "Read profile name, timezone, time format, role, and focus areas.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "account.update",
      "description": "Update profile name, timezone, time format, role, or focus areas. Confirm with the human first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "timezone": {
            "type": "string"
          },
          "time_format": {
            "type": "string",
            "enum": [
              "12h",
              "24h"
            ]
          },
          "role": {
            "type": "string"
          },
          "focus_areas": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "focus_hours.get",
      "description": "Read weekly focus hours and timezone.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "focus_hours.set",
      "description": "Set weekly focus hours and/or timezone.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "timezone": {
            "type": "string"
          },
          "schedule": {
            "type": "object"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.run",
      "description": "Run a monitor now (same as Run now in the app). Confirm with the human first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.pause_all",
      "description": "Pause every news monitor this user owns. Confirm first.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.resume_all",
      "description": "Resume every news monitor this user owns. Confirm first.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.results",
      "description": "Recent hits for one monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          },
          "since": {
            "type": "string"
          },
          "limit": {
            "type": "integer"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "monitors.runs",
      "description": "Recent run history for one monitor.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Monitor id"
          },
          "limit": {
            "type": "integer"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "briefings.read",
      "description": "Read one sent briefing. Set include_html true only if the human asked for the full email.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Briefing delivery id"
          },
          "include_html": {
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "delivery.connect",
      "description": "Connect a standing watch to an authorized public HTTPS webhook, or connect Slack, Teams or Discord. For platform webhook, optional monitor_id selects one owned recurring monitor; omit it for all owned monitors including future ones. Team permission is required. Save the once-returned signing_secret securely. The receiver’s host must accept callbacks; OAuth alone does not wake a chat. Temporary failures retry; read delivery.get for status.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "enum": [
              "slack",
              "teams",
              "discord",
              "webhook"
            ]
          },
          "webhook_url": {
            "type": "string"
          },
          "monitor_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "platform",
          "webhook_url"
        ],
        "additionalProperties": false
      }
    }
  ]
}
