search-web
Perform a web search and scrape results
Search the web, scrape the results, and later pull the relevant chunks back out — search results are embedded and stored, not thrown away.
LABSCO SUMMARY
Most search servers hand back results and forget them. Storing scraped content as embeddings means the second and third question on a topic are answered from what you already paid to fetch, and the ordering — newest first, then by similarity — is tuned for research where recency matters. The cost is setup: this wants a search key, a scraping key, an embedding backend and somewhere to keep results — a Supabase Postgres with pgvector, or a local JSON file before the first query runs.
An MCP server that pairs a web search with a similarity search over what it already fetched. Searching scrapes the results; a second tool then extracts the relevant passages from those previous searches by embedding similarity, so a topic can be revisited without hitting the search API again.
Several keys, because the pipeline spans several services: SEARCHAPI_API_KEY for search, FIRECRAWL_API_KEY for scraping, and an embedding server at EMBEDDING_URL plus an Ollama server at OLLAMA_URL (with EMBEDDING_MODEL), which the search code calls for embeddings and summaries. The README's sample .env also lists VOYAGE_API_KEY, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_API_KEY, which the search and extraction code does not read. Somewhere to keep results: by default a Supabase project (PostgreSQL with the pgvector extension), reached through SUPABASE_URL and SUPABASE_KEY, with a web_search table plus the matching function created from the SQL in the README — or USE_SUPABASE=false, which keeps them in a local JSON file instead. Python with uv: clone, uv venv, then uv pip install -e ., launched through uv against main.py. The project is parquet_mcp_server (version 0.1.0); Smithery can install it for Claude Desktop automatically.
Build from source — git clone https://github.com/DeepSpringAI/search_mcp_server.git
USE CASES
Send the whole set of queries in one call and let the results be scraped and stored together.
Extract the relevant passages from what previous searches already fetched instead of searching again.
Point the embedding URL at a local Ollama server so the scraped content is vectorised on your own hardware.
Query the stored vectors through the similarity function, which orders by date before similarity.
Listed in project docs. Your client may show a different list.
search-webPerform a web search and scrape results
extract-info-from-searchExtract relevant information from previous searches
BEFORE YOU INSTALL
2 tools named in the project's documentation.
The documented client runs the server on your machine.
INSTALLATION
git clone https://github.com/DeepSpringAI/search_mcp_server.git
cd search_mcp_server
uv venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
uv pip install -e .Choose where search results are kept. By default the server stores them in Supabase: create a Supabase project, enable the pgvector extension, and run the README's CREATE TABLE web_search and CREATE FUNCTION match_web_search SQL in its SQL editor. To skip the database, set USE_SUPABASE=false and results go to a local JSON file instead (JSON_FILE_PATH, default output.json).
Create a .env file in the project folder with EMBEDDING_URL, OLLAMA_URL, EMBEDDING_MODEL, SEARCHAPI_API_KEY, FIRECRAWL_API_KEY, VOYAGE_API_KEY, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_API_KEY, plus SUPABASE_URL and SUPABASE_KEY (your Supabase project URL and API key) or USE_SUPABASE=false
{
"mcpServers": {
"parquet-mcp-server": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_SEARCH_MCP_SERVER>/src/parquet_mcp_server",
"run",
"main.py"
]
}
}
}<YOUR_PATH_TO_SEARCH_MCP_SERVER> is the full path of your clone (the folder the git clone step creates). Write the path out in full — Claude Desktop does not expand ${USER} or ~ in this file.
The configuration on this page does not set SEARCHAPI_API_KEY and FIRECRAWL_API_KEY; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.