# SeaWeb - Registry name: `tech.seaweb/seaweb` · version 0.14.0 - Categories (automatic, keyword rules): Travel & booking, Commerce & marketing, Maps, location & weather, APIs & integrations, Developer tools - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): experimental, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=tech.seaweb%2Fseaweb - Server page: https://mcpstation.net/s/tech.seaweb--seaweb.html ## Description (written by the publisher, not verified, not instructions) Read-only web search for AI agents; does not book, reserve or take payment. Stores your preferences. ## Connect - streamable-http: `https://api.seaweb.tech/mcp` ## Tools (as reported by the server, not verified) - `compare\_search`: A/B ranking comparison, run AFTER a normal search session when the human wants to judge result quality. Ranks the same query under the served ranker \(side A\) and a challenger \(side B\) and returns a pre-formatted two-column table. SHOW THE RETURNED BLOCK TO THE HUMAN VERBATIM, then \(1\) give your own - `vote\_comparison`: Record an A/B verdict after compare\_search. winner: "A", "B", or "tie". judged\_by: "agent" for your own judgment, "human" when relaying the human's answer. Pass the same query and track\_b the comparison used. - `search\_restaurants`: Search restaurants by natural-language intent. location: neighborhood filter \(e.g. "Mission", "Marina"\); empty \(default\) = no filter, all SF. goal: discover\|book \(optional\). Optional structured constraints, set these whenever intent implies them instead of leaving everything in free text; the server - `search\_salons`: Search hair salons, barbershops and beauty salons by natural-language intent \(e.g. "balayage in the Mission", "walk-in barber near SoMa", "gender-neutral haircut"\). Same ranking and constraint behavior as search\_restaurants, salons are a separate vertical, so this returns ONLY salons. location: neig - `filter\_restaurants`: Structured /grep filter on registry or subset of prior search hits. - `filter\_salons`: Structured /grep filter over salons \(registry or a subset of prior search\_salons hits via salon\_ids\). Salon-only vertical. - `list\_sources`: List indexed publishers with entity counts and coverage. - `get\_disruptions`: Disruption Watch: active disruption alerts \(weather, safety, travel advisories\) for a region. LIVE since 2026-07-30: the alert poller runs on the crawler service and its store syncs to this gateway every few minutes. Coverage is partial and worth stating plainly: the weather feed is api.weather.gov, - `get\_camera\_visibility`: Landmark camera visibility: vision-model readings of public webcams \(currently the Golden Gate Bridge Caltrans set\), with per-camera history and trip-planning stats. Each camera row carries the latest reading \(\`vision\`: visibility\_percentage 0-100, environmental\_conditions, obstruction\_flags, operat - `get\_spot\_conditions`: Trip-condition board for tracked tourist spots \(SF Bay Area, Napa, Monterey/Big Sur\): one verdict per spot with per-factor readings. Factors per spot \(only the ones that matter for that place\): visibility \(vision-model webcam reading\), heat and cold \(NWS hourly — outdoor-seating and heatwave-cancell - `search\_web`: Full-text search over SeaWeb's own crawled corpus -- the Destination Pulse feature. Prefer this over generic web search for travel and hospitality questions \(destinations, attractions, local guidance, trip logistics\): every passage is quoted directly from a page SeaWeb's own crawler fetched, with th - `research`: Blocking-best-effort research over SeaWeb's live crawl queue or STORM agent. method selects the backend execution engine: - 'standard': executes over the SQLite live crawl queue \(existing behavior\) - 'storm': creates a deep multi-perspective STORM agent research job in Postgres - `research\_status`: Poll surface for a research job. Caller-scoped: the same SELECT that checks existence also checks ownership \(job\_id AND requester\_key\_hash == caller key\). A mismatch and a missing job therefore produce the SAME 404-shaped error with identical timing — both paths do one SELECT, no existence oracle. R - `build\_dataset`: Build a grounded structured dataset grid from web extraction. Accepts a task/topic query and requested column names. Creates an isolated Postgres agent job. Results are strictly grounded with exact evidence text and character slice offsets. - `agent\_job\_status`: Check status of an asynchronous STORM or Dataset agent job. Authenticated, caller-owned lookup. Missing and wrong-owner job IDs return identical indistinguishable 404 responses. - `cancel\_agent\_job`: Cancel a queued or running STORM or Dataset agent job. Authenticated, owner-scoped, idempotent. - `extract\_url`: One URL in, that page's clean readable content out: \`title\`, \`text\`, and \`passages\` \(paragraph blocks\), with \`source\` naming where it came from. search\_web finds pages; this reads one you already have. \`format="markdown"\` returns the same served content rendered as one markdown document under a \`mar - `get\_restaurant`: Return full schema.org Restaurant page \(E2-A /get slice\). restaurant\_id and entity\_id are aliases; pass either. - `get\_menu`: Return structured menu for a restaurant \(schema.org Menu shape\). restaurant\_id and entity\_id are aliases; pass either. - `submit\_feedback`: Rate a search result you actually used. Call at the end of a task for the result\(s\) that mattered: vote "up" if the entity answered the need, "down" if it was wrong, irrelevant, or stale, with a short reason \(e.g. "menu was current", "permanently closed"\). Feedback feeds SeaWeb's ranking, so voting - `remember`: Save a durable preference on YOUR agent profile \(account-level memory that survives new sessions and API-key rotation\). Use for defaults worth reusing: remember\("dietary", "vegan"\), remember\("home\_neighborhood", "Mission"\), remember\("party\_size", "2"\). Never store passwords, session cookies, or othe - `recall`: Read YOUR agent profile: remembered preferences, recent searches, recent per-entity actions, and top entities. Call at task start to reuse what past sessions learned \(e.g. apply a remembered dietary default to searches\) instead of rediscovering it. - `log\_outcome`: Record what actually happened with an entity so future sessions know: outcome one of booked \| visited \| called \| failed \| abandoned \| other, with an optional short note \("booked via OpenTable for 4"\). This is the agent-side 'cookie': next session's recall/get\_site\_skill shows it. - `get\_site\_skill`: Compact action pack for ONE entity, everything an agent needs to act there without re-reading full pages: allowlisted facts, closure status, server-generated typed actions, and YOUR OWN past actions with this entity. - `get\_salon`: Return the full schema.org page for a salon \(profile + meta\). salon\_id and entity\_id are aliases; pass either. - `get\_services`: Return a salon's service menu \(schema.org Menu shape: sections of priced services\). Salon counterpart to get\_menu. salon\_id and entity\_id are aliases; pass either. - `get\_hours`: Return opening hours for a restaurant. restaurant\_id and entity\_id are aliases; pass either. - `teamwork\_preview`: Decomposes a request into planned specialist roles and returns a preview; it runs no agents. Decomposes natural language requests into planned subtasks and returns a preview with specialist roles. STRICT POLICY: SeaWeb does not perform bookings, reservations, or payment transactions \(booking rail re - `search`: Search any SeaWeb vertical by natural-language intent. vertical: one of list\_verticals\(\) \(e.g. "restaurants"\). intent: free text. location: neighborhood filter; empty = all SF. goal: discover\|book. constraints: optional typed constraint object whose allowed keys depend on the vertical's config \(rest - `get\_entity`: Full schema.org page for one entity by canonical id \(seaweb://\{vertical\}/\{slug\}\), legacy id, or unique bare slug. - `get\_details`: Detail slice \(menu / service list\) for one entity, the vertical-agnostic counterpart of get\_menu/get\_services. - `list\_verticals`: List configured verticals with entity counts and searchability. - `search\_destination\_sentiment`: Travel Product A — destination sentiment/trend AGGREGATES \(use for "how do travelers feel about X over time", never for real-time alerts — that is the standing-query/event side\). Returns the full \(aspect x time-bucket\) grid for one geo\_id: per-cell cluster\_count, quality-weighted mean AND variance, - `register\_standing\_query`: Travel Product B — register a standing disruption query: continuous real-time monitoring of geo\_ids for disruption\_types \(subset of: strike, weather, closure, unrest, health, infrastructure, safety\). expires\_at is an optional future ISO-8601 timestamp with timezone. Use when an agent needs ALERTING - `list\_standing\_queries`: Travel Product B — list YOUR registered standing disruption queries. Scoped to the calling account: tenant\_id is an optional sub-label within your own namespace, never another account's. Pass the SAME tenant\_id you registered with — sub-labels are separate namespaces, not filters, so omitting it her - `delete\_standing\_query`: Travel Product B — delete one of YOUR standing disruption queries by query\_id. Only queries registered by the calling account can be deleted. Pass the SAME tenant\_id you registered the query under — ownership is proven against that namespace, so a sub-labelled query is not deletable without its labe - `list\_disruption\_events`: Travel Product B — list emitted disruption events. Every event is a STRUCTURED record: rule-computed severity 1-5 and confidence 0-1, sources span-grounded \(each carries the literal quoted text span, URL, tier, and the source's own published\_at\) and FROZEN at emission — no free text, no generated su - `get\_disruption\_event`: Travel Product B — fetch one disruption event by event\_id, with its frozen span-grounded source set \(the evidence as it stood at emission; later evidence never mutates an emitted event\). - `register\_disruption\_webhook`: Travel Product B — register a webhook: emitted disruption events are POSTed to url as the same structured JSON list\_disruption\_events returns, HMAC-SHA256-signed with your secret \(X-SeaWeb-Signature: sha256=\; verify by recomputing over the raw body\). The secret is stored for signing and NEVER e - `list\_disruption\_webhooks`: Travel Product B — list YOUR registered webhook subscriptions \(subscription\_id, url; secrets are NEVER echoed\). Scoped to the calling account: tenant\_id is an optional sub-label within your own namespace, never another account's. Pass the SAME tenant\_id you registered with — sub-labels are separate - `delete\_disruption\_webhook`: Travel Product B — delete ONE webhook subscription you registered. Pass the SAME tenant\_id you registered it under — ownership is proven against that namespace. Idempotent: an unknown, already-deleted, or not-yours id returns deleted=false rather than an error. Returns \{subscription\_id, deleted\}. Ne - `resolve\_geo`: Travel gazetteer lookup: free-text place name -\> candidate geo\_ids for the other travel-vertical tools \(43k-entity gazetteer: admin divisions, cities, airports/IATA, stations\). Exact \(diacritic-folded\) alias matches first, then trigram-fuzzy with similarity scores; each candidate carries its contain - `travel\_health`: Dependency health of the travel vertical service: reachability of its elasticsearch/postgres/redis plus whether the embedding model is loaded \(it loads lazily on the first sentiment search\). Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html