SeaWeb MCP
One endpoint, every MCP-capable agent. No SDK — but each client wants its own config shape, so copy yours.
The config, per client
The endpoint is the same everywhere — https://api.seaweb.tech/mcp, key in an
Authorization: Bearer header. The config block is not: VS Code, Windsurf and
OpenCode each read a different key, and a block copied from the wrong client loads without an error
and then never calls anything. Copy the one for your client. Same blocks with walkthroughs:
Connect.
| Client | Where the config goes |
|---|---|
| Cursor | .cursor/mcp.json (or ~/.cursor/mcp.json) |
| Claude Code | plugin / claude mcp add |
| Codex CLI | ~/.codex/config.toml |
| VS Code | .vscode/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| OpenCode | opencode.json |
Cursor — .cursor/mcp.json
Manual remote MCP only, not a Marketplace listing.
{
"mcpServers": {
"SeaWeb": {
"url": "https://api.seaweb.tech/mcp",
"headers": { "Authorization": "Bearer sw_your-key-here" }
}
}
}
Claude Code
Plugin (key stays in your shell env, updates tracked), or a plain MCP server:
export SEAWEB_API_KEY=sw_your-key-here
claude plugin marketplace add aritroBh/seaweb-plugin
claude plugin install seaweb@seaweb
claude mcp add --transport http seaweb https://api.seaweb.tech/mcp \
--header "Authorization: Bearer sw_your-key-here"
Codex CLI — ~/.codex/config.toml
The key stays out of the file; Codex reads it from an env var.
[mcp_servers.seaweb]
url = "https://api.seaweb.tech/mcp"
bearer_token_env_var = "SEAWEB_API_KEY"
export SEAWEB_API_KEY=sw_your-key-here
VS Code — .vscode/mcp.json
Top-level servers, not mcpServers, and type
is required. The inputs block makes VS Code prompt for the key once and store it itself,
so it never lands in the repo.
{
"servers": {
"SeaWeb": {
"type": "http",
"url": "https://api.seaweb.tech/mcp",
"headers": { "Authorization": "Bearer ${input:seaweb-key}" }
}
},
"inputs": [
{
"type": "promptString",
"id": "seaweb-key",
"description": "SeaWeb API key (sw_…)",
"password": true
}
]
}
Windsurf — ~/.codeium/windsurf/mcp_config.json
Windsurf reads serverUrl, not url. A block with url is
accepted and then silently never reaches the server.
{
"mcpServers": {
"SeaWeb": {
"serverUrl": "https://api.seaweb.tech/mcp",
"headers": { "Authorization": "Bearer ${env:SEAWEB_API_KEY}" }
}
}
}
OpenCode — opencode.json
Project root or ~/.config/opencode/. Top-level mcp,
"type": "remote", and interpolation is {env:VAR} with
no $. Set "oauth": false: OpenCode tries OAuth discovery
on remote servers before headers unless you turn it off.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"seaweb": {
"type": "remote",
"url": "https://api.seaweb.tech/mcp",
"enabled": true,
"oauth": false,
"headers": { "Authorization": "Bearer {env:SEAWEB_API_KEY}" }
}
}
}
Try without a key
Point Claude / ChatGPT custom connectors at:
https://api.seaweb.tech/mcp
Leave auth empty. The anonymous tier serves read-only tools
(search, search_web, get_entity, get_details,
disruption reads, index extract_url) at 20 calls / 60 seconds per client IP.
Writes (remember, …) need a Bearer key. The old
/mcp/k/<key> URL form is retired: keys belong in headers.
Flat meter, not opaque credits: the anonymous tier (SEAWEB_ANON, a server-side
setting) is IP-bucketed; keyed callers get per-tool limits
(e.g. search 30/min, extract_url 10/min).
These apps take a connector URL only, with no Authorization header field. Claude Desktop uses the same flow as claude.ai (do not use claude_desktop_config.json for remote URL). URL-carried keys were retired 2026-07-30 (HTTP 400 / JSON-RPC -32001).
Tool taxonomy: discover → retrieve → act
| Stage | Tools | Use for |
|---|---|---|
| Discover | list_verticals, search | Pick a vertical; find named entities |
| Retrieve | get_entity, get_details, search_web | Structured fields or crawl passages (read coverage) |
| Act | extract_url, get_camera_visibility, disruption / Watch tools | Pull a cited page; landmark webcam visibility; alert on travel disruptions |
Entity-first recipe for agents: paste Search for your coding agent. There is no public scrape / map / batch crawl API.
Raw HTTP (no MCP client)
The gateway is plain HTTP JSON-RPC. Stateless per request, no handshake, no session:
KEY="sw_..."
curl -s --max-time 20 https://api.seaweb.tech/mcp \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
- The
Acceptheader is mandatory.application/jsonalone gets a406. Send both types. - Responses come back as SSE (
event: message/data: {…}). Parse thedata:line as JSON, not the raw body. - Call
tools/calldirectly.initializeis optional and buys a raw client nothing.
Where SeaWeb is listed
Official MCP registry: tech.seaweb/seaweb. Also on Glama. Claude Code plugin: github.com/aritroBh/seaweb-plugin.