Skip to content
MCP

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.

ClientWhere the config goes
Cursor.cursor/mcp.json (or ~/.cursor/mcp.json)
Claude Codeplugin / claude mcp add
Codex CLI~/.codex/config.toml
VS Code.vscode/mcp.json
Windsurf~/.codeium/windsurf/mcp_config.json
OpenCodeopencode.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

StageToolsUse for
Discoverlist_verticals, searchPick a vertical; find named entities
Retrieveget_entity, get_details, search_webStructured fields or crawl passages (read coverage)
Actextract_url, get_camera_visibility, disruption / Watch toolsPull 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 Accept header is mandatory. application/json alone gets a 406. Send both types.
  • Responses come back as SSE (event: message / data: {…}). Parse the data: line as JSON, not the raw body.
  • Call tools/call directly. initialize is 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.