SurfSense/surfsense_mcp
2026-07-13 16:29:39 -07:00
..
mcp_server feat: bumped version to 0.0.32 2026-07-13 16:29:39 -07:00
tests refactor(mcp): flatten to mcp_server package, drop src layout 2026-07-07 20:24:53 +02:00
.dockerignore feat(mcp): add Dockerfile for remote streamable-http deployment 2026-07-07 18:27:19 +02:00
.env.example refactor(mcp): rename SURFSENSE_PAT to SURFSENSE_API_KEY 2026-07-06 03:40:36 +02:00
.gitignore chore(mcp): scaffold surfsense-mcp package 2026-07-06 02:29:19 +02:00
Dockerfile refactor(mcp): flatten to mcp_server package, drop src layout 2026-07-07 20:24:53 +02:00
pyproject.toml refactor(mcp): flatten to mcp_server package, drop src layout 2026-07-07 20:24:53 +02:00
README.md chore: Enhance SurfSense MCP server documentation and toolset by adding TikTok scraping capabilities, including comments, user search, and trending features. Updated README and documentation to reflect the addition of 24 native tools. 2026-07-11 04:38:42 +05:30
uv.lock build(mcp): declare starlette and uvicorn dependencies 2026-07-07 18:27:19 +02:00

SurfSense MCP Server

A Model Context Protocol server that exposes SurfSense to MCP clients like Claude Code, Cursor, and Claude Desktop. It talks to a SurfSense backend purely over its REST API using a SurfSense API key — it imports no backend code.

Connect it two ways:

  • Hosted (recommended) — point your client at https://mcp.surfsense.com/mcp and pass your API key in a header. Nothing to install or keep running.
  • Self-host (stdio) — run the server yourself against any backend (cloud or your own). Best for self-hosters and clients without remote-server support.

Tools

Search-space selector

  • surfsense_list_workspaces — list the workspaces (search spaces) you can access
  • surfsense_select_workspace — pick the active workspace by name or id

Scrapers (all platforms)

  • surfsense_web_crawl, surfsense_google_search, surfsense_reddit_scrape, surfsense_youtube_scrape, surfsense_youtube_comments, surfsense_instagram_scrape, surfsense_instagram_details, surfsense_tiktok_scrape, surfsense_tiktok_comments, surfsense_tiktok_user_search, surfsense_tiktok_trending, surfsense_google_maps_scrape, surfsense_google_maps_reviews
  • surfsense_list_scraper_runs, surfsense_get_scraper_run — retrieve past results in full (useful when a large result was truncated inline)

Knowledge base

  • surfsense_search_knowledge_base — semantic + keyword search over stored content
  • surfsense_list_documents, surfsense_get_document
  • surfsense_add_document, surfsense_upload_file
  • surfsense_update_document, surfsense_delete_document

Workspace-scoped tools default to the active workspace; pass workspace (a name or id) to override for a single call. Ids never need to be typed by hand — the model carries them between calls.

Get an API key

  1. SurfSense → API Playground → API Keys: create a personal key (ss_pat_…). It is shown only once.
  2. Toggle API key access on for the workspace(s) you want to use.

Connect (hosted)

Point your client at the hosted server and send the key as a Bearer token. For clients that read an mcpServers map (Cursor, Claude Desktop, and others):

{
  "mcpServers": {
    "surfsense": {
      "url": "https://mcp.surfsense.com/mcp",
      "headers": { "Authorization": "Bearer ss_pat_your_key_here" }
    }
  }
}

Claude Code, from a terminal:

claude mcp add --transport http surfsense https://mcp.surfsense.com/mcp \
  --header "Authorization: Bearer ss_pat_your_key_here"

Most MCP clients accept this url + headers form; check your client's docs for its exact remote-server field.

Self-host (stdio)

Run the server yourself when you host your own backend or use a client without remote support. It uses uv:

cd surfsense_mcp
uv sync
uv run python -m mcp_server.selfcheck   # verify tools register correctly

Then add it to your client. Cursor (~/.cursor/mcp.json or a project .cursor/mcp.json):

{
  "mcpServers": {
    "surfsense": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/SurfSense/surfsense_mcp", "python", "-m", "mcp_server"],
      "env": {
        "SURFSENSE_BASE_URL": "http://localhost:8000",
        "SURFSENSE_API_KEY": "ss_pat_your_token_here"
      }
    }
  }
}

Claude Code:

claude mcp add surfsense \
  -e SURFSENSE_BASE_URL=http://localhost:8000 \
  -e SURFSENSE_API_KEY=ss_pat_your_token_here \
  -- uv run --directory /absolute/path/to/SurfSense/surfsense_mcp python -m mcp_server

Claude Desktop: add the same mcpServers block as Cursor to claude_desktop_config.json (Settings → Developer → Edit Config).

Configuration

See .env.example. For self-host, secrets are passed as environment variables by the client; never commit tokens.

Backend dependency

surfsense_search_knowledge_base calls POST /api/v1/documents/search-semantic, a thin endpoint that exposes the backend's existing hybrid retriever over REST. All other tools use pre-existing SurfSense endpoints.