
netlops/sosearch
Developer toolsこのページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。 原文を見る
🔎 1つのクエリ。3つの検索エンジン。HTTP APIまたはMCPを使ったAIエージェントのセルフホスト型ウェブ検索。DuckDuckGo、Brave、Yahooを集約。Rustで構築。APIキーは不要。
概要
高速な疑似ウェブ検索エンジンAPIが組み込まれており、AIエージェント用のAPIとしても機能します。このプロジェクトは、SerpAPIやTavilyのような人気APIを公式で高価なAPIキーを必要とせず、人気エンジンへのリクエストを直接多重化し、結果を同時にスクレイピングすることでエミュレートしています。 - : tokioによって非同期I/Oを駆動。- : rquestをTLS模倣(例:TLS/HTTP2層でChrome 124ブラウザのフットプリントをシミュレート)を活用し、標準HTTPクライアント(Rust版curl_cffi)に比べてブロックを最小限に抑えます。- : DuckDuckGo、Yahoo、Brave HTMLの結果を標準化されたSearchResult JSON配列に正規化します。 *(一次標準検索)*(Bing提供)*(独立索引) このプロジェクトには、両者および.agents/の規則に従う他のツールに対する組み込みのAIエージェントサポートが含まれています。 SoSearchをAIエージェント(Claude、Gemini、Cursorなど)用のMCPサーバーとして運用する: これにより、AIエージェントがウェブ検索に呼び出せるweb_searchツールが公開されます。
概要(AI 翻訳)
Rustで書かれた超高速の疑似ウェブ検索エンジンAPIは、AIエージェントのMCPサーバーとしても機能します。 このプロジェクトは、公式で高価なAPIキーを必要とせず、人気エンジンへのリクエストを直接多重化し結果をスクレイピングすることで、SerpAPIやTavilyのような人気APIをエミュレートします。
哲学
- パフォーマンス:非同期I/O用に
tokioで駆動。 - ボットバイパス:TLS模倣(例:TLS/HTTP2層でChrome 124ブラウザのフットプリントをシミュレート)と組み合わせた[[T1]を活用し、標準的なHTTPクライアント(Rust版
curl_cffi)と比べてブロッキングを最小限に抑えます。 - Standardized:
DuckDuckGo、Yahoo、BraveのHTML結果を標準化されたSearchResultのJSON配列に正規化します。
コアスタック
- アクサム
- 東京
- RQUEST
- スクレーパー
🔍 サポート検索エンジン
- DuckDuckGo(一次標準検索)
- Yahoo(Bing提供)
- 勇敢な探求(インディペンデント索引)
📁 プロジェクト構成
🤖 エージェントスキル&MCPサポート
このプロジェクトには、Gemini CLIおよび.agents/の規則に従う他のツールの両方に対する組み込みのAIエージェントサポートが含まれています。
利用可能なスキル
| スキル | 説明 |
|---|
このページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。
README
以下は原文 README の抜粋です。原文を見る。
SoSearch API
A lightning-fast pseudo Web Search Engine API written in Rust — also works as an MCP server for AI agents. This project emulates popular APIs like SerpAPI or Tavily without needing official and expensive API keys, by multiplexing requests to popular engines directly and scraping the results concurrently.
Philosophy
- Performance: Powered by
tokiofor async concurrent I/O. - Bot Bypass: Leverages
rquestwith TLS impersonation (e.g., simulating a Chrome 124 browser footprint at the TLS/HTTP2 layer) to minimize blocking vs standard HTTP clients (the Rust equivalent ofcurl_cffi). - Standardized: Normalizes
DuckDuckGo,Yahoo, andBraveHTML results into a standardizedSearchResultJSON array.
Core Stack
🔍 Supported Search Engines
- DuckDuckGo (Primary standard search)
- Yahoo (Powered by Bing)
- Brave Search (Independent index)
📁 Project Structure
src/
├── main.rs # Entry point: HTTP server or MCP mode (--mcp)
├── search.rs # Shared concurrent search logic
├── mcp.rs # MCP stdio server (JSON-RPC 2.0)
├── models.rs # SearchResultItem, SearchResponse structs
└── engines/
├── mod.rs # SearchEngine enum + trait dispatch
├── duckduckgo.rs # DuckDuckGo scraper
├── yahoo.rs # Yahoo scraper (Bing-powered)
└── brave.rs # Brave Search scraper
examples/
├── fetch_html.rs # Download raw HTML for offline debugging
└── test_parser.rs # Offline CSS selector iteration
.gemini/ # Gemini CLI agent config
├── GEMINI.md # Project-level system prompt
├── settings.json # MCP server configuration
└── skills/ # Project-level agent skills
├── sosearch-engine-dev/ # Scraper development workflow
└── sosearch-api-ops/ # API operations & deployment
.agents/ # Generic agent config (compatible with multiple AI tools)
└── skills/ # Same skills, alternative discovery path
├── sosearch-engine-dev/
└── sosearch-api-ops/
🤖 Agent Skills & MCP Support
This project includes built-in AI agent support for both Gemini CLI and other tools that follow the .agents/ convention.
Available Skills
| Skill | Description |
|---|---|
sosearch-engine-dev |
Full workflow for adding/debugging search engine scrapers: fetch HTML → test selectors offline → decode URLs → integrate |
sosearch-api-ops |
Operations guide: build, run, test, deploy (local + Docker), troubleshoot |
MCP Servers
Configured in .gemini/settings.json:
| Server | Package | Purpose |
|---|---|---|
filesystem |
@modelcontextprotocol/server-filesystem |
Scoped file access to project directory |
Usage with Gemini CLI
インストール
This server does not publish a one-line install command.
Open the repository installation guide MCP 初心者?mcpskill.org のガイドから始めましょう →設定
{
"mcpServers": {
"sosearch": {
"command": "/path/to/SoSearch",
"args": ["--mcp"]
}
}
}