# Serwer MCP wyszukiwania webowego dla Claude Code, Claude Desktop, Cursor i innych klientów MCP

> Serwer MCP wyszukiwania webowego dla Claude Code i Cursor: krótki Python z search_web i read_urls, rejestrowany jednym poleceniem.

- URL: https://llmwebsearch.com/pl/docs/mcp/
- Ostatnia aktualizacja: 2026-10-22
- Wydawca: LLMWebSearch (https://llmwebsearch.com)

Daj dowolnemu klientowi MCP dwa narzędzia: `search_web`, które zwraca uszeregowane źródła z już odczytanymi najlepszymi stronami, oraz `read_urls`, które odczytuje linki, które model już ma. Serwer to jeden plik Python uruchamiany na Twojej maszynie, z Twoim kluczem w jego środowisku.

**Szybka odpowiedź — Jak dodać serwer MCP wyszukiwania webowego do Claude Code lub Claude Desktop?**

Zapisz krótki serwer Python z tej strony, który udostępnia narzędzia `search_web` i `read_urls` wywołujące **LLMWebSearch**, następnie zarejestruj go przez `claude mcp add` lub w `claude_desktop_config.json`, z Twoim kluczem w `env`. Model może wtedy przeszukiwać żywy web i odczytywać najlepsze strony jako Markdown. Wyszukiwanie kosztuje 1 kredyt, od 1,20 USD/1K wyszukiwań zgodnie ze stanem na październik 2026. Bez KYC; płatność kryptowalutą.

## Serwer MCP w skrócie

| Atrybut | Wartość |
| --- | --- |
| Język | Python 3.10+, z pakietami `mcp` i `httpx` |
| Transport | stdio: klient uruchamia serwer jako proces lokalny |
| Narzędzie 1 | `search_web(query, max_results=5, read=3)` → numerowane źródła z URL-ami i tekstem strony |
| Narzędzie 2 | `read_urls(urls)` → główna treść od 1 do 20 znanych stron |
| Nazwy | Nie `web_search` ani `web_fetch`: Claude Code i OpenClaw mają już narzędzia o tych nazwach |
| Klucz | Odczyt z `LLMWEBSEARCH_API_KEY` w środowisku serwera |
| Rozliczanie | Jeden kredyt opłaca jedno wyszukiwanie: do 20 wyników z rankingiem, przy czym strony z pierwszych 3 są odczytywane i zwracane jako Markdown. Odczyt od 4 do 10 stron to 2 kredyty. Wywołanie zakończone błędem nic nie kosztuje. Odczyt stron, których adresy URL już masz, kosztuje 1 kredyt za każdą rozpoczętą grupę 3 stron zwróconych z treścią, do 20 adresów URL na wywołanie; adresy URL odrzucone lub nieudane nie są liczone |

## Dlaczego narzędzia nazywają się search_web i read_urls?

Ponieważ dwa narzędzia o tej samej nazwie mylą klienta i model. Claude Code i OpenClaw mają wbudowane narzędzia o nazwach `web_search` i `web_fetch`. Odmienne nazwy z jasnymi opisami pozwalają modelowi świadomie wybrać nasze narzędzia, a Tobie odróżnić wywołania w logach.

Oba narzędzia zwracają tekst, nie surowy JSON. Każde źródło zaczyna się od numeru, tytułu i URL-a, więc model może zacytować `[1]` lub `[2]`, a czytelnik może sprawdzić stronę.

*llmwebsearch_mcp.py*

```python
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()

```

## Jak zainstalować i przetestować serwer?

Utwórz środowisko wirtualne, zainstaluj `mcp` i `httpx` i zapisz plik powyżej. `mcp` to oficjalny SDK Python dla Model Context Protocol; jego klasa `FastMCP` zamienia typowane funkcje Python w narzędzia i używa każdego docstringa jako opisu narzędzia.

Uruchom plik raz z terminala z ustawionym kluczem. Potem czeka cicho na klienta na standardowym wejściu, co oznacza, że działa; zatrzymaj go przez Ctrl+C. Błędy z API są zgłaszane jako błędy narzędzia z ich kodem, więc model widzi `rate_limited` lub `insufficient_credits` prostymi słowami.

*Instalacja i jednorazowe uruchomienie*

```bash
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
LLMWEBSEARCH_API_KEY="your-key" python llmwebsearch_mcp.py
```

## Jak dodać go do Claude Code?

Użyj `claude mcp add`. Dokumentacja Claude Code podaje formę `claude mcp add [options] <name> -- <command> [args...]`: najpierw jego własne opcje, potem podwójny myślnik, a następnie polecenie uruchamiające serwer. Zmienne środowiskowe trafiają do `--env KEY=value`, a przynajmniej jedna inna opcja, taka jak `--transport stdio`, musi znajdować się między `--env` a nazwą serwera.

Dodaj `--scope user`, aby serwer był dostępny we wszystkich Twoich projektach; domyślny zakres, `local`, obejmuje tylko bieżący projekt. Używaj ścieżek bezwzględnych do Python z Twojego środowiska wirtualnego i do pliku serwera.

*Zarejestruj serwer w Claude Code*

```bash
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
```

## Jak dodać go do Claude Desktop i innych klientów?

Claude Desktop odczytuje serwery z `claude_desktop_config.json`, w sekcji `mcpServers`. Nadaj serwerowi nazwę, podaj polecenie, jego argumenty oraz obiekt `env` zawierający klucz, a następnie uruchom aplikację ponownie; `search_web` i `read_urls` pojawią się na liście narzędzi.

Inne klienty MCP, takie jak Cursor, proszą o te same trzy rzeczy we własnych ustawieniach MCP: polecenie, jego argumenty i zmienne środowiskowe. Klucz nigdy nie pojawia się w argumencie narzędzia ani w rozmowie.

*claude_desktop_config.json*

```json
{
  "mcpServers": {
    "llmwebsearch": {
      "command": "/home/you/llmwebsearch/.venv/bin/python",
      "args": ["/home/you/llmwebsearch/llmwebsearch_mcp.py"],
      "env": { "LLMWEBSEARCH_API_KEY": "your-key" }
    }
  }
}
```

## Jak utrzymać wyszukiwania tanie i krótkie?

Powiedz modelowi, jak ma wyszukiwać, w swoich instrukcjach: jedno lub dwa wyszukiwania na pytanie, a potem czytaj więcej tylko wtedy, gdy źródła się różnią. Serwer już ogranicza każdą stronę do 5 000 znaków w `search_web` i 12 000 w `read_urls`; obniż te liczby dla małych modeli.

Każde wywołanie `search_web` z `read` do 3 to jeden kredyt. Asystent, który wykonuje 40 wyszukiwań dziennie, zużywa około 1 200 kredytów miesięcznie, więc 5 000 wyszukiwań (9,25 USD) wystarcza na około cztery miesiące. Kredyty na wyszukiwanie nie mają daty ważności: to, czego nie wykorzystasz w tym miesiącu, będzie tam jeszcze w przyszłym roku.

## Co widzi model, gdy strona nie może zostać odczytana?

Źródło nadal się pojawia, z numerem, tytułem i URL, a po nim powód w nawiasach i fragment z wyszukiwania. Nasz czytnik respektuje robots.txt: przedstawia się jako LLMWebSearch, przestrzega reguł, które witryna zapisuje dla niego lub dla wszystkich robotów, i pomija treść każdej strony, której nie wolno mu czytać. Gdy witryna odrzuca nasz czytnik, wynik wraca bez treści i ze statusem witryny: nigdy nie rozwiązujemy CAPTCHA, nie logujemy się na konta ani nie obchodzimy blokady czy paywalla. Model może wtedy oprzeć się na innych źródłach lub powiedzieć, że jedna strona była niedostępna.

## Serwer MCP: najczęstsze pytania

### Czy istnieje oficjalny pakiet MCP LLMWebSearch lub hostowany endpoint?

Nie. Plik z tej strony to cała integracja: około 50 linii, które możesz przeczytać i zmienić. Działa na Twojej maszynie, a Twój klucz trafia wyłącznie do naszego API.

### Czy powinienem wyłączyć wbudowane wyszukiwanie w sieci w Claude Code?

Nie ma potrzeby. Oba mogą działać równocześnie; opisy mówią modelowi, co robi każde z nich. Zostaw nasze, gdy chcesz tekst strony w wynikach, stałą cenę za wyszukiwanie lub jedno miejsce na logi wyszukiwań.

### Czy mogę używać go z OpenClaw?

Tak, jako serwer MCP zarejestrowany przez `openclaw mcp add`. [Strona OpenClaw](https://llmwebsearch.com/pl/docs/openclaw/) podaje polecenie i wyjaśnia, jak współistnieje z wbudowanymi dostawcami wyszukiwania OpenClaw.

### Czy serwer przechowuje moje wyszukiwania?

Nie. Nie przechowuje niczego między wywołaniami. Po naszej stronie Nie trenujemy żadnego modelu na Twoich zapytaniach ani na tym, co zwraca API, i nie dodajemy własnej reguły przeciwko przechowywaniu wyników; nadal obowiązują prawa witryn, których strony czytasz.

## Źródła

1. [Połącz Claude Code z narzędziami przez MCP](https://code.claude.com/docs/en/mcp) — Claude Code docs (read 2026-10-22)

---

LLMWebSearch: LLMWebSearch to web search API dla agentów AI, który zwraca uszeregowane wyniki wraz z treścią najlepszych stron w formacie Markdown, z płatnością kryptowalutą i bez przesyłania dokumentu tożsamości. Kredyty przedpłacone od 1,20 USD/1K wyszukiwań nigdy nie wygasają. Bez KYC — bez dokumentu, bez selfie, bez zaświadczeń. Płatność kryptowalutą.
