คำตอบสั้น
ฉันจะเพิ่ม web search MCP server ให้ Claude Code หรือ Claude Desktop ได้อย่างไร?
บันทึกเซิร์ฟเวอร์ Python สั้นๆ ในหน้านี้ ซึ่งเปิดให้ใช้ tool search_web และ read_urls ที่เรียก LLMWebSearch แล้วลงทะเบียนด้วย claude mcp add หรือใน claude_desktop_config.json โดยมี key ของคุณใน env จากนั้นโมเดลจะค้นเว็บสดและอ่านหน้าเว็บยอดนิยมเป็น Markdown ได้ การค้นหาหนึ่งครั้งใช้ 1 เครดิต เริ่มต้นที่ US$1.20/1K การค้นหา ณ ตุลาคม 2026 ไม่ต้อง KYC จ่ายด้วยคริปโต
MCP server โดยสรุป
| ภาษา | Python 3.10+ พร้อมแพ็กเกจ mcp และ httpx |
|---|---|
| Transport | stdio: client เริ่มเซิร์ฟเวอร์เป็นโปรเซสภายในเครื่อง |
| Tool 1 | search_web(query, max_results=5, read=3) → แหล่งข้อมูลแบบมีหมายเลขพร้อม URL และข้อความจากหน้าเว็บ |
| Tool 2 | read_urls(urls) → เนื้อหาหลักของหน้าเว็บที่รู้อยู่แล้ว 1 ถึง 20 หน้า |
| ชื่อ | ไม่ใช่ web_search หรือ web_fetch: Claude Code และ OpenClaw มี tool ชื่อเหล่านี้อยู่แล้ว |
| Key | อ่านจาก LLMWEBSEARCH_API_KEY ใน environment ของเซิร์ฟเวอร์ |
| การเรียกเก็บเงิน | หนึ่งเครดิตจ่ายสำหรับการค้นหาหนึ่งครั้ง: ผลลัพธ์แบบจัดอันดับสูงสุด 20 รายการ โดยอ่านหน้าเว็บของ 3 รายการแรกและส่งกลับเป็น Markdown การอ่าน 4 ถึง 10 หน้าใช้ 2 เครดิต การเรียกที่จบลงด้วยข้อผิดพลาดไม่มีค่าใช้จ่าย. การอ่านหน้าเว็บที่คุณมี URL อยู่แล้วใช้ 1 เครดิตต่อกลุ่ม 3 หน้าที่เริ่มอ่านและส่งกลับพร้อมเนื้อหา สูงสุด 20 URL ต่อการเรียก; URL ที่ถูกปฏิเสธหรือล้มเหลวไม่ถูกนับ |
ทำไม tool ถึงชื่อ search_web และ read_urls?
เพราะ tool สองตัวที่ชื่อซ้ำกันจะทำให้ client และโมเดลสับสน Claude Code และ OpenClaw ต่างมี tool ในตัวชื่อ web_search และ web_fetch ชื่อที่แตกต่างกันพร้อมคำอธิบายที่ชัดเจน ทำให้โมเดลเลือกของเราได้อย่างตั้งใจ และให้คุณแยกแยะการเรียกใน log ได้
ทั้งสอง tool คืนข้อความ ไม่ใช่ JSON ดิบ แหล่งข้อมูลแต่ละแหล่งเริ่มด้วยหมายเลข ชื่อเรื่อง และ URL เพื่อให้โมเดลอ้างอิง [1] หรือ [2] ได้ และผู้อ่านตรวจสอบหน้าเว็บได้
import os
import httpx
from mcp.server.fastmcp import FastMCP
BASE = "https://llmwebsearch.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
mcp = FastMCP("llmwebsearch")
def _call(path: str, body: dict) -> dict:
resp = httpx.post(BASE + path, json=body, headers=HEADERS, timeout=90)
data = resp.json()
if resp.status_code != 200:
err = data.get("error", {})
raise RuntimeError(err.get("code", str(resp.status_code)) + ": " + err.get("message", ""))
return data
def _page(n: int, item: dict) -> str:
head = f"[{n}] {item.get('title') or item['url']}\n{item['url']}\n"
if item.get("content_status") == "ok":
return head + item["content"]
return head + "(not read: " + item.get("content_status", "unknown") + ") " + item.get("snippet", "")
@mcp.tool()
def search_web(query: str, max_results: int = 5, read: int = 3) -> str:
"""Search the live web and return numbered sources; the first `read` pages include their text.
Use it for current facts, documentation and news. Cite sources by their number.
"""
body = {"q": query, "max_results": max(1, min(max_results, 20)), "read": max(0, min(read, 10)), "max_chars": 5000}
data = _call("/search", body)
return "\n\n".join(_page(i, r) for i, r in enumerate(data["results"], start=1))
@mcp.tool()
def read_urls(urls: list[str]) -> str:
"""Read 1 to 20 public web pages whose URLs you already have and return their main text."""
data = _call("/extract", {"urls": urls[:20], "max_chars": 12000})
return "\n\n".join(_page(i, r) for i, r in enumerate(data["results"], start=1))
if __name__ == "__main__":
mcp.run()
ฉันจะติดตั้งและทดสอบเซิร์ฟเวอร์ได้อย่างไร?
สร้าง virtual environment ติดตั้ง mcp และ httpx แล้วบันทึกไฟล์ด้านบน mcp คือ Python SDK อย่างเป็นทางการของ Model Context Protocol คลาส FastMCP ของมันเปลี่ยนฟังก์ชัน Python ที่มี type เป็น tool และใช้ docstring ของแต่ละฟังก์ชันเป็นคำอธิบายของ tool
เริ่มไฟล์หนึ่งครั้งจาก terminal โดยตั้งค่า key ไว้ จากนั้นมันจะรอ client เงียบๆ บน standard input ซึ่งหมายความว่ามันทำงานได้ หยุดด้วย Ctrl+C ข้อผิดพลาดจาก API จะถูกโยนเป็น tool error พร้อม code เพื่อให้โมเดลเห็น rate_limited หรือ insufficient_credits เป็นคำธรรมดา
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
LLMWEBSEARCH_API_KEY="your-key" python llmwebsearch_mcp.pyฉันจะเพิ่มมันใน Claude Code ได้อย่างไร?
ใช้ claude mcp add เอกสารของ Claude Code ให้รูปแบบ claude mcp add [options] <name> -- <command> [args...]: option ของมันเองมาก่อน แล้วตามด้วย double dash แล้วตามด้วยคำสั่งที่เริ่มเซิร์ฟเวอร์ environment variable ใส่ใน --env KEY=value และต้องมี option อื่นอย่างน้อยหนึ่งตัว เช่น --transport stdio คั่นระหว่าง --env กับชื่อเซิร์ฟเวอร์
เพิ่ม --scope user เพื่อให้เซิร์ฟเวอร์ใช้ได้ในทุกโปรเจกต์ของคุณ scope default คือ local ครอบคลุมเฉพาะโปรเจกต์ปัจจุบัน ใช้ absolute path สำหรับ Python ของ virtual environment และสำหรับไฟล์เซิร์ฟเวอร์
claude mcp add --env LLMWEBSEARCH_API_KEY=your-key --transport stdio --scope user llmwebsearch \
-- /home/you/llmwebsearch/.venv/bin/python /home/you/llmwebsearch/llmwebsearch_mcp.pyฉันจะเพิ่มมันใน Claude Desktop และไคลเอนต์อื่นๆ ได้อย่างไร?
Claude Desktop อ่านเซิร์ฟเวอร์จาก claude_desktop_config.json ภายใต้ mcpServers ตั้งชื่อให้เซิร์ฟเวอร์ ระบุ command อาร์กิวเมนต์ และออบเจกต์ env ที่เก็บคีย์ไว้ จากนั้นรีสตาร์ทแอป search_web และ read_urls จะปรากฏในรายการเครื่องมือ
ไคลเอนต์ MCP อื่นๆ เช่น Cursor จะขอสามอย่างเดียวกันนี้ในการตั้งค่า MCP ของตัวเอง ได้แก่ command อาร์กิวเมนต์ และ environment variables โดยคีย์จะไม่ปรากฏในอาร์กิวเมนต์ของเครื่องมือหรือในบทสนทนาเลย
{
"mcpServers": {
"llmwebsearch": {
"command": "/home/you/llmwebsearch/.venv/bin/python",
"args": ["/home/you/llmwebsearch/llmwebsearch_mcp.py"],
"env": { "LLMWEBSEARCH_API_KEY": "your-key" }
}
}
}ฉันจะให้การค้นหาประหยัดและสั้นได้อย่างไร?
บอกโมเดลในคำสั่งของคุณว่าต้องค้นหาอย่างไร: หนึ่งหรือสองครั้งต่อคำถาม แล้วอ่านเพิ่มเฉพาะเมื่อแหล่งข้อมูลขัดแย้งกัน เซิร์ฟเวอร์จำกัดแต่ละหน้าไว้ที่ 5,000 ตัวอักษรใน search_web และ 12,000 ใน read_urls อยู่แล้ว ลดตัวเลขเหล่านั้นลงสำหรับโมเดลขนาดเล็ก
การเรียก search_web แต่ละครั้งที่ read ไม่เกิน 3 ใช้ 1 เครดิต ผู้ช่วยที่รันการค้นหา 40 ครั้งต่อวันจะใช้ประมาณ 1,200 เครดิตต่อเดือน ดังนั้น 5,000 การค้นหา (US$9.25) จะอยู่ได้ราวสี่เดือน เครดิตการค้นหาไม่มีวันหมดอายุ: สิ่งที่คุณไม่ได้ใช้ในเดือนนี้ยังอยู่ให้ใช้ในปีหน้า
โมเดลเห็นอะไรเมื่อไม่สามารถอ่านหน้าเว็บได้?
แหล่งข้อมูลยังคงปรากฏ พร้อมหมายเลข ชื่อเรื่อง และ URL ตามด้วยเหตุผลในวงเล็บและ snippet จากผลการค้นหา ตัวอ่านของเราเคารพ robots.txt: แนะนำตัวว่าเป็น LLMWebSearch ทำตามกฎที่เว็บไซต์เขียนไว้สำหรับมันหรือสำหรับ robots ทั้งหมด และละเว้นเนื้อหาของหน้าใดก็ตามที่มันไม่ได้รับอนุญาตให้อ่าน เมื่อเว็บไซต์ปิดกั้นตัวอ่านของเรา ผลลัพธ์จะกลับมาโดยไม่มีเนื้อหาและมีสถานะของเว็บไซต์: เราไม่แก้ CAPTCHA ไม่ลงชื่อเข้าใช้บัญชี และไม่หลบเลี่ยงการบล็อกหรือ paywall จากนั้นโมเดลสามารถพึ่งพาแหล่งข้อมูลอื่นหรือบอกว่าหน้าหนึ่งไม่พร้อมใช้งาน
MCP server: คำถามที่พบบ่อย
มีแพ็กเกจ LLMWebSearch MCP อย่างเป็นทางการหรือ hosted endpoint หรือไม่?
ไม่มี ไฟล์ในหน้านี้คือการผสานรวม: ประมาณ 50 บรรทัดที่คุณอ่านและแก้ไขได้ มันทำงานบนเครื่องของคุณ และคีย์ของคุณส่งไปยัง API ของเราเท่านั้น
ฉันควรปิด web search ในตัวของ Claude Code หรือไม่?
ไม่จำเป็น ทั้งสองอย่างอยู่ด้วยกันได้ คำอธิบายบอกโมเดลว่าแต่ละตัวทำอะไร เก็บของเราไว้เมื่อคุณต้องการข้อความหน้าเว็บในผลลัพธ์ ราคาคงที่ต่อการค้นหา หรือที่เดียวสำหรับ log การค้นหาของคุณ
ฉันใช้มันกับ OpenClaw ได้ไหม?
ได้ ในฐานะ MCP server ที่ลงทะเบียนด้วย openclaw mcp add หน้า OpenClaw ให้ command และอธิบายว่ามันวางอยู่ข้างผู้ให้บริการค้นหาในตัวของ OpenClaw อย่างไร
เซิร์ฟเวอร์เก็บการค้นหาของฉันไว้หรือไม่?
ไม่ มันไม่เก็บอะไรเลยระหว่างการเรียก แต่ฝั่งเรา เราไม่ฝึกโมเดลใดๆ ด้วยคำค้นหาของคุณหรือข้อมูลที่ API ส่งกลับ และเราไม่เพิ่มกฎของเราเองต่อต้านการจัดเก็บผลลัพธ์; สิทธิ์ของเว็บไซต์ที่คุณอ่านหน้ายังคงมีผล
แหล่งที่มา (1)
- เชื่อมต่อ Claude Code กับเครื่องมือผ่าน MCP — Claude Code docs (read 2026-10-22)