惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
博客园 - 司徒正美
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
罗磊的独立博客
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
J
Java Code Geeks
L
LangChain Blog
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
G
Google Developers Blog

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - MarcellM01/TinySearch: Shrink the web for your l...
MarcellM01 · 2026-05-16 · via Hacker News: Show HN

TinySearch

License Release Last commit MCP FastAPI

A tiny local-first web research engine for MCP agents.

TinySearch searches the web, reranks results, crawls the best pages, extracts the most relevant chunks, and returns a source-grounded prompt your LLM can answer from.

TinySearch terminal demo showing a source-grounded research prompt

No hosted dashboard. No account system. No analytics. No scraped-data cache.

Just search -> crawl -> rerank -> grounded prompt.

Why TinySearch?

  • Give local agents web research without wiring together a whole search stack.
  • Keep source URLs attached to the evidence your model sees.
  • Avoid dumping full webpages into context.
  • Use local ONNX embeddings or an OpenAI-compatible embedding API.
  • Run over MCP or a simple FastAPI endpoint.

TinySearch is built for local agents, prototypes, personal workflows, and small systems where source-grounded web research matters more than running a full search backend.

How it works

flowchart TB
    subgraph Row1["Search and choose pages"]
        direction LR
        A[User query] --> B[DuckDuckGo HTML search]
        B --> C[Filter HTTP results<br/>build title URL domain snippet docs]
        C --> D[Rank search docs<br/>dense + BM25 weighted RRF]
    end

    subgraph Row2["Crawl and build prompt"]
        direction LR
        E[Crawl kept URLs in parallel<br/>crawl4ai markdown] --> F[Truncate and chunk markdown]
        F --> G[Rank combined chunk pool<br/>dense + BM25 weighted RRF]
        G --> H[Dedupe chunks<br/>apply source quotas and fill]
        H --> I[Build source-grounded prompt]
    end

    Row1 --> Row2
Loading

TinySearch does not directly answer the question. It returns a structured prompt in the MCP tool's answer field, and your client model uses that prompt to produce the final cited response.

QUESTION
What happened in the latest NFL playoffs?

TODAY
2026-05-15

RESULTS
1. Title
   URL
   Relevant extracted text...

2. Title
   URL
   Relevant extracted text...

INSTRUCTIONS
Answer only from the results. Cite source URLs.

Quick start

git clone https://github.com/MarcellM01/TinySearch
cd TinySearch

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Run the MCP server:

python servers/mcp_server.py

Or run the HTTP API:

uvicorn servers.fastapi_server:app --reload

MCP setup

Add TinySearch to your MCP client config. Use absolute paths.

macOS / Linux:

{
  "mcpServers": {
    "tinysearch": {
      "command": "/absolute/path/to/TinySearch/.venv/bin/python",
      "args": [
        "/absolute/path/to/TinySearch/servers/mcp_server.py"
      ]
    }
  }
}

Windows:

{
  "mcpServers": {
    "tinysearch": {
      "command": "C:/absolute/path/to/TinySearch/.venv/Scripts/python.exe",
      "args": [
        "C:/absolute/path/to/TinySearch/servers/mcp_server.py"
      ]
    }
  }
}

The MCP server exposes one tool:

research(query)

Pass the user's question as-is. TinySearch searches, crawls, reranks, and returns the grounded prompt in answer.

Template config files live in mcp_templates/.

The repo also includes agentic_coding_templates/global-rules-recommended.md, a global-rules template for agentic coding tools such as Cline and Roo Code. These rules help coding agents call TinySearch only when web research is actually needed.

The server uses stdio by default, which is what Cursor and similar clients expect when they spawn python .../mcp_server.py. To run with sse or streamable-http, set MCP_TRANSPORT when starting the process. Do not put transport in configs/research_config.json.

Docker

Pull the default image:

docker pull marcellm01/tinysearch:latest

MCP over HTTP

Most MCP clients that connect to a running server use this mode.

Start TinySearch on port 8000:

docker run --rm \
  -p 8000:8000 \
  -e MCP_TRANSPORT=streamable-http \
  -e MCP_HOST=0.0.0.0 \
  marcellm01/tinysearch:latest

Then point any MCP client that supports streamable HTTP at:

http://localhost:8000/mcp

Example MCP client config:

{
  "mcpServers": {
    "tinysearch": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

With MCP_TRANSPORT=streamable-http, the image serves Streamable HTTP on /mcp and SSE on /mcp/sse. GET requests to /mcp without an mcp-session-id are treated as the legacy SSE stream. If a client still cannot connect, try MCP_TRANSPORT=sse alone or the stdio Docker setup below.

For repeated use, keep downloaded models in a Docker volume and mount your local config:

docker run --rm \
  -p 8000:8000 \
  -v tinysearch-models:/data/models \
  -v "$PWD/configs/research_config.json:/config/research_config.json:ro" \
  -e TINYSEARCH_CONFIG_PATH=/config/research_config.json \
  -e MCP_TRANSPORT=streamable-http \
  -e MCP_HOST=0.0.0.0 \
  marcellm01/tinysearch:latest

MCP over stdio

Use this mode for MCP clients that launch tools as local commands instead of connecting to a URL. Replace /absolute/path/to/TinySearch with this repo's absolute path:

{
  "mcpServers": {
    "tinysearch": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "tinysearch-models:/data/models",
        "-v",
        "/absolute/path/to/TinySearch/configs/research_config.json:/config/research_config.json:ro",
        "-e",
        "TINYSEARCH_CONFIG_PATH=/config/research_config.json",
        "-e",
        "TINYSEARCH_MODELS_DIR=/data/models",
        "marcellm01/tinysearch:latest"
      ]
    }
  }
}

Edit configs/research_config.json to choose embedding_model (fast, balanced, quality, or a custom Hugging Face ONNX repo id). The named Docker volume keeps downloaded model bundles between launches.

Optional HTTP server

Useful when you want HTTP instead of MCP:

uvicorn servers.fastapi_server:app --reload

Endpoints:

  • GET /health
  • GET /web_search?query=...
  • POST /site_crawl
  • POST /research

Configuration

Tune research defaults in configs/research_config.json. Set TINYSEARCH_CONFIG_PATH to load a different JSON config file, which is the recommended Docker override pattern.

The onnx embedding backend uses local ONNX bundles under models/. Starting the MCP server or FastAPI app downloads the configured embedding_model once from Hugging Face when embedding_backend is onnx.

Built-in local presets:

  • fast: onnx-models/all-MiniLM-L6-v2-onnx
  • balanced: BAAI/bge-small-en-v1.5
  • quality: BAAI/bge-base-en-v1.5

You can also set embedding_model to a custom Hugging Face ONNX repo id. Set TINYSEARCH_MODELS_DIR to move the model cache, or use TINYSEARCH_ONNX_MODEL_DIR when you need to point at one exact bundle directory.

Key settings:

  • Search: search_top_k, search_rrf_cutoff, search_dense_weight, search_max_results_to_keep
  • Chunks: chunk_rrf_cutoff, chunk_dense_weight, chunk_max_results_to_keep
  • Crawl: crawl_max_chunk_tokens, crawl_overlap_tokens, max_concurrent_crawls
  • Embeddings: embedding_backend, embedding_model, embedding_openai_env_file, max_concurrent_embedding_calls
  • Tokenizer: encoding_name
  • Dense input prefixes: dense_query_prefix, dense_document_prefix
  • Trace: trace_path

For embedding_backend openai_compatible, add a .env file at the project root, or set embedding_openai_env_file, with:

OPENAI_BASE_URL=
OPENAI_API_KEY=
OPENAI_EMBEDDING_MODEL=

OPENAI_BASE_URL is optional for api.openai.com. EMBEDDING_MODEL and MODEL_NAME are accepted as aliases for OPENAI_EMBEDDING_MODEL.

The research pipeline requires dense embeddings. It raises if search_dense_weight or chunk_dense_weight is set to 0.

When not to use TinySearch

TinySearch is not a replacement for a commercial search API or a persistent crawler. It is probably not the right tool if you need:

  • guaranteed search coverage
  • large-scale indexing
  • long-term page caching
  • enterprise observability
  • production SLA-backed web search

TinySearch vs...

Tool type What it gives you Tradeoff
Search API Search results Usually hosted / paid
Full crawler / index Persistent search backend More infrastructure
SearxNG Metasearch Still needs setup and a ranking layer
TinySearch MCP research prompt with ranked chunks Lightweight; not a full search engine

Entrypoints

  • pipelines.agentic_research.agentic_run: single-turn search, crawl, ranking, and prompt assembly
  • servers.mcp_server: MCP server for agent clients
  • servers.fastapi_server: optional HTTP API

Tests

Run the unittest suite:

python -m unittest discover tests

Privacy notes

TinySearch reads the pages it crawls and returns ranked excerpts to the calling client. It does not include credentials in the repo, and .env / trace output should stay local. If you enable openai_compatible embeddings, your embedding provider receives the text snippets sent for vectorization.

License

Source code in this repository is under the MIT License.

When embedding_backend is onnx, TinySearch may download the selected local ONNX embedding bundle at runtime from Hugging Face. Those weights are separate distributions under their model-card licenses; keep license and attribution notices if you ship or redistribute those files. Optional manual export for fast uses sentence-transformers/all-MiniLM-L6-v2 (Apache-2.0).

See NOTICE for Docker and third-party distribution notes.