web-search-mcp
by Backerss
README.md
# Free Web Search MCP 🔍
MCP server สำหรับ **ค้นหาเว็บ + อ่านเนื้อหาหน้าเว็บ แบบฟรี 100%**
ไม่ต้องสมัคร ไม่ต้องมี API key ของ Google/Bing — ใช้ **SearXNG** (meta-search ที่รันเองบน Docker)
ให้ OpenWebUI หรือ CLI ที่ไม่มี search engine สามารถ "เสิร์ชอินเทอร์เน็ต" ได้
## เครื่องมือ (tools) ที่ให้
| Tool | หน้าที่ |
|------|---------|
| `web_search(query, num_results, language)` | ค้นหาเว็บ คืนชื่อเรื่อง + ลิงก์ + สรุปย่อ |
| `fetch_url(url, max_chars)` | ดึงเนื้อหาหลักของหน้าเว็บ แปลงเป็นข้อความสะอาด |
| `image_search(query, num_results, language)` | ค้นรูปภาพ คืน markdown ฝังรูป + ลิงก์แหล่งที่มา |
| `deep_research(query, num_sources, max_chars_per_source, include_images, language)` | **วิจัยเชิงลึก**: ค้นหลายแหล่งพร้อมกัน ดึงเนื้อหาเต็ม รวมเป็นเอกสารเดียวพร้อมเลขอ้างอิง [1][2]… + รูปภาพ + รายการแหล่งอ้างอิง |
> **Deep Research ทำงานยังไง?** ตัว MCP รวบรวม "หลักฐาน" จากหลายแหล่ง (ฟรี ไม่ต้องมี LLM/API key) แล้วส่งเนื้อหา+อ้างอิง+รูปกลับไป ให้ LLM ใน OpenWebUI เป็นคนเรียบเรียงสรุปโดยอ้างอิงเลข [n] — ได้ผลแนวเดียวกับ Deep Research โดยไม่เสียเงิน
## สถาปัตยกรรม
```
OpenWebUI ──HTTP/OpenAPI──> mcpo ──MCP stdio──> server.py ──HTTP──> SearXNG ──> อินเทอร์เน็ต
CLI (Claude Code/Cline) ───────────MCP stdio──> server.py ──┘
```
---
## วิธีติดตั้ง (Docker — แนะนำ)
```bash
cd "Code VSTH/web-search-mcp"
# 1) ตั้ง secret_key ของ SearXNG ให้เป็นค่าสุ่ม
# แก้ไฟล์ searxng/settings.yml บรรทัด secret_key
# 2) (ทางเลือก) ตั้ง API key ให้ mcpo
cp .env.example .env # แล้วใส่ MCPO_API_KEY ถ้าต้องการ
# 3) สั่งรันทั้งระบบ
docker compose up -d --build
```
ตรวจสอบ:
- SearXNG : http://localhost:8080 (ลองค้นหาดูได้)
- OpenAPI docs : http://localhost:8000/docs (จะเห็น web_search / fetch_url)
- ทดสอบ JSON API ของ SearXNG :
```bash
curl "http://localhost:8080/search?q=test&format=json"
```
---
## ต่อกับ OpenWebUI
1. เปิด OpenWebUI → **Settings → Tools** (หรือ Admin → Settings → Tools / Functions → External Tools)
2. **Add Tool Server** ใส่ URL:
```
http://localhost:8000
```
> ถ้า OpenWebUI รันใน Docker คนละ network ให้ใช้ `http://host.docker.internal:8000`
> หรือเอา service `mcp` ไปอยู่ network เดียวกับ OpenWebUI แล้วใช้ชื่อ service
3. ถ้าตั้ง `MCPO_API_KEY` ไว้ ให้ใส่ key นั้นในช่อง API key
4. บันทึก แล้วเปิดใช้งานในแชท — โมเดลจะเรียก `web_search` / `fetch_url` ได้เอง
---
## ต่อกับ CLI ที่พูด MCP (Claude Code / Cline ฯลฯ)
รันแบบ stdio โดยตรง (ไม่ต้องใช้ mcpo). ติดตั้ง deps ในเครื่องก่อน:
```bash
pip install -r mcp/requirements.txt
```
ตัวอย่าง config (เช่น `claude_desktop_config.json` หรือ MCP config ของ CLI):
```json
{
"mcpServers": {
"web-search": {
"command": "python",
"args": ["C:\\Users\\LAPTOP-BACKER\\Code VSTH\\web-search-mcp\\mcp\\server.py"],
"env": { "SEARXNG_URL": "http://localhost:8080" }
}
}
}
```
> ต้องให้ container `searxng` รันอยู่ (`docker compose up -d searxng`) เพื่อให้ `SEARXNG_URL` ใช้งานได้
เพิ่มใน Claude Code ได้ด้วย:
```bash
claude mcp add web-search -e SEARXNG_URL=http://localhost:8080 -- python "C:/Users/LAPTOP-BACKER/Code VSTH/web-search-mcp/mcp/server.py"
```
---
## ปรับแต่ง (env)
| ตัวแปร | ค่าเริ่มต้น | ความหมาย |
|--------|-----------|----------|
| `SEARXNG_URL` | `http://searxng:8080` | ที่อยู่ SearXNG |
| `HTTP_TIMEOUT` | `20` | timeout (วินาที) |
| `MAX_RESULTS_CAP` | `20` | เพดานจำนวนผลลัพธ์ |
| `RESEARCH_CONCURRENCY` | `5` | จำนวนหน้าที่ deep_research ดึงพร้อมกัน |
| `MCPO_API_KEY` | (ว่าง) | API key ของ OpenAPI endpoint |
## หมายเหตุ
- ทุกอย่างฟรี ไม่มีค่าใช้จ่าย แต่ SearXNG ดึงจาก engine สาธารณะ — ถ้ายิงถี่มากบาง engine อาจ rate-limit (แก้ได้โดยเปิด/ปิด engine ใน `searxng/settings.yml`)
- เปลี่ยน `secret_key` ใน `searxng/settings.yml` ก่อนใช้งานจริงเสมอ
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues