# MCP server tìm kiếm Google cho Claude Desktop, Cursor và các MCP client khác

> Thêm tìm kiếm Google vào Claude Desktop, Claude Code, Cursor và các MCP client khác: một MCP server Python 40 dòng trên SerpCrypto SERP API, không cần KYC.

- URL: https://serpcrypto.com/vi/docs/mcp/
- Cập nhật lần cuối: 2026-10-22
- Đơn vị phát hành: SerpCrypto (https://serpcrypto.com)

Cấp cho bất kỳ MCP client nào một công cụ `google_search` trả về kết quả Google trực tiếp. Server là một tệp Python bạn tự chạy; nó gọi API SerpCrypto và trả về văn bản ngắn gọn mà model có thể đọc.

**Trả lời nhanh — Làm cách nào để thêm tìm kiếm Google vào Claude Desktop hoặc Cursor bằng MCP server?**

Lưu server Python 40 dòng bên dưới, cài `mcp[cli]` và `httpx`, rồi đăng ký nó trong phần cài đặt MCP của client với **khóa API** SerpCrypto của bạn trong `env`. Sau đó client nhận được một công cụ `google_search` trả về kết quả Google trực tiếp. Mỗi lần gọi công cụ là một lần tìm kiếm với 1 credit, từ 0,30 US$/1K lượt tìm kiếm; credit được thanh toán bằng crypto, không cần KYC.

## Tổng quan về MCP server

| Thuộc tính | Giá trị |
| --- | --- |
| Ngôn ngữ | Python 3.10+ với SDK `mcp` chính thức (FastMCP) và `httpx` |
| Transport | stdio: client khởi chạy script và giao tiếp với nó |
| Công cụ | `google_search(query, gl, hl, num_results)` |
| Đầu ra | Văn bản AI Overview khi được hiển thị, sau đó là tiêu đề, liên kết và snippet cho mỗi kết quả |
| Khóa | Biến môi trường `SERPCRYPTO_API_KEY`, đặt trong cấu hình của client |
| Chi phí | 1 credit mỗi lần gọi công cụ thành công; lỗi miễn phí |

## Server làm gì?

Nó cung cấp một công cụ, `google_search`, qua Model Context Protocol. Khi model gọi nó, server gửi một yêu cầu đến `https://serpcrypto.com/api/v1/search`, rồi chuyển JSON thành văn bản thuần ngắn gọn: AI Overview nếu Google có hiển thị, và các kết quả hàng đầu với tiêu đề, liên kết và snippet.

Văn bản ngắn rất quan trọng. Một trang kết quả đầy đủ dạng JSON thì dài, và mỗi ký tự gửi lại cho model đều dùng context. Server giữ tối đa mười kết quả và cắt phần overview tại 800 ký tự; hãy thay đổi các giới hạn đó trong mã nếu client của bạn có chỗ cho nhiều hơn.

Đây là mã sao chép-dán, không phải một package đã phát hành: không có package MCP SerpCrypto chính thức để cài. Bạn sở hữu tệp và có thể thêm công cụ, ví dụ một công cụ cho `engine=google_news`.

*serpcrypto_mcp.py*

```python
"""serpcrypto_mcp.py: an MCP server that gives AI clients a Google search tool.

Install once:  pip install "mcp[cli]" httpx
Run by your MCP client over stdio; the API key comes from the environment.
"""
import os

import httpx
from mcp.server.fastmcp import FastMCP

API_URL = "https://serpcrypto.com/api/v1/search"
mcp = FastMCP("serpcrypto-search")


@mcp.tool()
async def google_search(query: str, gl: str = "us", hl: str = "en", num_results: int = 5) -> str:
    """Search Google and return the top results (title, link, snippet) and the AI Overview text if any.

    gl is a two-letter country code (us, gb, de...), hl a language code (en, de, pt-BR...).
    Each call uses one SerpCrypto search credit.
    """
    headers = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
    params = {"q": query, "gl": gl, "hl": hl}
    async with httpx.AsyncClient(timeout=90) as client:
        r = await client.get(API_URL, params=params, headers=headers)
    if r.status_code != 200:
        return f"Search failed with HTTP {r.status_code}: {r.text[:300]}"
    data = r.json()
    lines = []
    overview = data.get("ai_overview") or {}
    if overview.get("text"):
        lines.append("AI Overview: " + overview["text"][:800])
    for item in data.get("organic_results", [])[: max(1, min(num_results, 10))]:
        lines.append(f"{item['position']}. {item['title']}\n{item['link']}\n{item.get('snippet', '')}")
    return "\n\n".join(lines) or "No results."


if __name__ == "__main__":
    mcp.run()  # stdio transport
```

## Tại sao công cụ tên là google_search mà không phải web_search?

Một số client đã có sẵn công cụ tên `web_search` dùng nhà cung cấp riêng của họ. Một tên khác biệt giúp tránh xung đột và cho model biết nó nhận được gì: kết quả Google theo quốc gia và ngôn ngữ mà nó chọn. Docstring chính là mô tả mà model đọc, nên nó nêu các tham số và chi phí của một lần gọi.

## Làm cách nào để thêm nó vào Claude Desktop?

Mở tệp cấu hình, `claude_desktop_config.json`: trên macOS nó nằm trong `~/Library/Application Support/Claude/`, trên Windows trong `%APPDATA%\Claude\`. Thêm server dưới `mcpServers`, với đường dẫn tuyệt đối đến script và khóa của bạn trong `env`, rồi khởi động lại Claude Desktop.

Nếu `python` không có trên đường dẫn mà Claude Desktop nhìn thấy, hãy dùng đường dẫn đầy đủ đến trình thông dịch, ví dụ cái nằm trong virtual environment của bạn.

*claude_desktop_config.json*

```json
{
  "mcpServers": {
    "serpcrypto-search": {
      "command": "python",
      "args": ["/absolute/path/to/serpcrypto_mcp.py"],
      "env": {
        "SERPCRYPTO_API_KEY": "paste-your-key-here"
      }
    }
  }
}
```

## Làm cách nào để thêm nó vào Claude Code và Cursor?

Trong Claude Code, đăng ký nó từ terminal bằng `claude mcp add`; `-e` đặt biến môi trường và mọi thứ sau `--` là lệnh cần chạy. Trong Cursor, đặt khối `mcpServers` tương tự như trên vào `~/.cursor/mcp.json` cho mọi dự án, hoặc vào `.cursor/mcp.json` trong một dự án.

Các MCP client khác khởi động server stdio cũng cần đúng ba thứ: một lệnh, các tham số của nó và biến môi trường. [Trang OpenClaw](https://serpcrypto.com/vi/docs/openclaw/) hiển thị các lệnh cho OpenClaw.

*Claude Code*

```bash
claude mcp add serpcrypto-search \
  -e SERPCRYPTO_API_KEY=paste-your-key-here \
  -- python /absolute/path/to/serpcrypto_mcp.py
```

## Làm sao để giữ khóa API an toàn?

Hãy giữ nó trong khối `env` của cấu hình client hoặc trong shell profile của bạn, không bao giờ để trong `serpcrypto_mcp.py`. Như vậy script có thể được chia sẻ hoặc commit mà không kèm khóa. Nếu khóa bị lộ, hãy thu hồi trong dashboard và tạo khóa mới: Khóa API bạn có thể tạo và thu hồi bất cứ lúc nào từ dashboard.

Hãy cấp cho MCP server một khóa riêng. Khi đó mức dùng theo từng khóa sẽ cho biết trợ lý thực hiện bao nhiêu lượt tìm kiếm, tách biệt với các script của bạn.

## Trợ lý sẽ dùng bao nhiêu credit?

Một credit cho mỗi lượt gọi công cụ thành công. Một cuộc trò chuyện mà model tìm kiếm ba lần tốn ba credit. Với gói 25.000 tìm kiếm ở mức 18,75 US$, đó là hàng nghìn câu hỏi có trợ lý hỗ trợ, và Credit tìm kiếm trả trước không bao giờ hết hạn: các lượt tìm kiếm chưa dùng vẫn nằm trong tài khoản của bạn cho đến khi bạn dùng.

Để giới hạn mức dùng, hãy giảm `num_results` (không đổi giá, nhưng làm câu trả lời ngắn hơn) và dặn model trong hướng dẫn chỉ tìm kiếm khi cần thông tin mới.

## Câu hỏi về MCP

### Server có hoạt động với các MCP client từ xa không?

Phiên bản này dùng stdio, nên client phải chạy nó trên cùng một máy. FastMCP cũng có thể phục vụ qua HTTP; nếu bạn mở nó ra mạng, hãy đặt lớp xác thực phía trước, vì bất kỳ ai truy cập được đều tiêu credit của bạn.

### Công cụ có thể tìm kiếm trên Bing hoặc Google News thay thế không?

Có. Thêm tham số `engine` hoặc một công cụ thứ hai gửi `engine=bing` hoặc `engine=google_news` trong `params`. Mọi engine đều tốn cùng 1 credit mỗi lượt tìm kiếm.

### Tại sao client báo công cụ bị lỗi?

Hãy chạy script thủ công bằng cùng Python để xem lỗi. Nguyên nhân thường gặp là thiếu gói `mcp` hoặc `httpx`, sai đường dẫn trong config, hoặc `SERPCRYPTO_API_KEY` trống khiến API trả về `401`.

### Tôi có cần thẻ tín dụng hay KYC để lấy khóa API không?

Không. SerpCrypto bán credit trả trước thanh toán bằng BTC, USDT, USDC, ETH, SOL, LTC, không cần ID, không selfie, không giấy tờ. Đăng nhập bằng số tài khoản; email là tùy chọn.

---

SerpCrypto: SerpCrypto là SERP API cho lập trình viên và AI agent, trả về kết quả Google và Bing dưới dạng JSON, thanh toán bằng crypto mà không cần tải lên giấy tờ tùy thân. Credit tìm kiếm trả trước từ 0,30 US$/1K lượt tìm kiếm không bao giờ hết hạn. Không cần KYC — không ID, không selfie, không giấy tờ. Thanh toán bằng crypto.
