SeaWeb
Read-only web search for AI agents; does not book, reserve or take payment. Stores your preferences.
Connect it
Settings → Connectors → Add custom connector
URL: https://api.seaweb.tech/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://api.seaweb.tech/mcp{
"mcpServers": {
"seaweb": {
"url": "https://api.seaweb.tech/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}claude mcp add --transport http seaweb https://api.seaweb.tech/mcp --header "Authorization: <value>"{
"servers": {
"seaweb": {
"type": "http",
"url": "https://api.seaweb.tech/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}43 tools, verified live
compare_searchread-onlyA/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 verdict via vote_comparison(winner=..., judged_by="agent", query=..., track_b=..
vote_comparisonRecord 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_restaurantsread-onlySearch 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 also tries to extract them from intent on its own, but explicit params are mor
search_salonsread-onlySearch 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: neighborhood filter (e.g. "Mission District", "SoMa", "The Castro"); empty (d
filter_restaurantsread-onlyStructured /grep filter on registry or subset of prior search hits.
filter_salonsread-onlyStructured /grep filter over salons (registry or a subset of prior search_salons hits via salon_ids). Salon-only vertical.
list_sourcesread-onlyList indexed publishers with entity counts and coverage.
get_disruptionsread-onlyDisruption 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, which is UNITED STATES ONLY, and the advisory feed is travel.state.gov, which
get_camera_visibilityread-onlyLandmark 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, operational_action Proceed|Delay|Reroute), a 24h `history` timeline, and `hourly` cle
get_spot_conditionsread-onlyTrip-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-cancellation bands, freeze flag), wind (nearest NDBC buoy or forecast â the Big Su
search_webread-onlyFull-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 the source page `url` and `title` attached -- nothing synthesized, nothing recalle
researchBlocking-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_statusread-onlyPoll 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. Requires SEAWEB_LIVE=1 and an authenticated caller. Rate limited under "r
build_datasetBuild 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_statusread-onlyCheck 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_jobcan modifyCancel a queued or running STORM or Dataset agent job. Authenticated, owner-scoped, idempotent.
extract_urlread-onlyOne 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 `markdown` key (title heading + paragraphs + source line) and drops `text`/`passage
get_restaurantread-onlyReturn full schema.org Restaurant page (E2-A /get slice). restaurant_id and entity_id are aliases; pass either.
get_menuread-onlyReturn structured menu for a restaurant (schema.org Menu shape). restaurant_id and entity_id are aliases; pass either.
submit_feedbackRate 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 makes your future searches better.
rememberSave 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 other credentials here: profile memory is for preferences and outcomes, not login st
recallread-onlyRead 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_outcomeRecord 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_skillread-onlyCompact 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_salonread-onlyReturn the full schema.org page for a salon (profile + meta). salon_id and entity_id are aliases; pass either.
get_servicesread-onlyReturn 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_hoursread-onlyReturn opening hours for a restaurant. restaurant_id and entity_id are aliases; pass either.
teamwork_previewread-onlyDecomposes 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 retired 2026-08-04). Any booking attempts are immediately refused with a booking_ret
searchread-onlySearch 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 (restaurants: cuisine, price_max 1-4, dietary list, party_size,
get_entityread-onlyFull schema.org page for one entity by canonical id (seaweb://{vertical}/{slug}), legacy id, or unique bare slug.
get_detailsread-onlyDetail slice (menu / service list) for one entity, the vertical-agnostic counterpart of get_menu/get_services.
list_verticalsread-onlyList configured verticals with entity counts and searchability.
search_destination_sentimentread-onlyTravel 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, a 5-bin polarity histogram, language/source-tier breakdo
register_standing_queryTravel 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 on future disruptions, not historical sentiment. geo_ids e
list_standing_queriesread-onlyTravel 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 here lists the queries you registered without one, not all
delete_standing_querycan modifyTravel 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 label. Idempotent: an unknown, already-deleted, or not-yours
list_disruption_eventsread-onlyTravel 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 summary anywhere. Filters: since (ISO-8601 vs emitted_at â
get_disruption_eventread-onlyTravel 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_webhookTravel 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=<hex>; verify by recomputing over the raw body). The secret is stored for signing and NEVER echoed back. Use instead of polling when you want push deli
list_disruption_webhooksread-onlyTravel 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 namespaces, not filters. Needs an authenticated key.
delete_disruption_webhookcan modifyTravel 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}. Needs an authenticated key. Registration was gated and li
resolve_georead-onlyTravel 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 containment hierarchy for disambiguating homonyms. An empty candida
travel_healthread-onlyDependency 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).
Alternatives in Finance & Payments
Compare →ATAgent402.Tools: pay-per-call web toolsB
Agentic Finance: 500+ agent tools, multi-chain USDC over x402 or MPP, or free via proof-of-work
SMSecedgar MCP ServerB
Query SEC EDGAR filings, XBRL financials, and company data via MCP. STDIO or Streamable HTTP.
STStock Trends Market IntelligenceB
Equity trend, relative-strength, expected-return, market-context, and research resources for agents.
SmartAccounts MCP by usefulapiB
Read SmartAccounts clients, vendors, invoices, payments, ledger, accounts; create and book records.
Oblio MCP by usefulapiB
Read Oblio clients, products and documents; create proformas, issue, collect and cancel invoices.
Számlázz.hu MCP by usefulapiB
Read Számlázz.hu invoices, PDFs, receipts, taxpayers; issue, reverse and pay invoices and receipts.