Aggiungere la ricerca web a Claude Code, Cursor e Codex con un solo server MCP
Un unico server MCP remoto dà a un agente di coding 15 tool: ricerca web, scraping di pagine in markdown, mappe, Amazon, trascrizioni YouTube. Configurazione per tre client, provata.

Un agente di coding che non può leggere il web tira a indovinare le versioni delle librerie e si inventa i flag delle API. La soluzione non è un tool su misura per ogni progetto: è un solo server MCP remoto, aggiunto una volta per client, che l’agente può chiamare per cercare e per leggere pagine.
FastAF ne fa girare uno su https://api.fastaf.co/mcp (Streamable HTTP, stateless, spec 2026-07-28), autenticato con la stessa chiave Bearer dell’API REST. Qui sotto trovi la configurazione per tre client, il protocollo grezzo e quanto costa una sessione. Tutte le chiamate sono state fatte il 19 ottobre 2026.
Cosa riceve l’agente dal server?
tools/list restituisce 15 tool: scrape_page, search_web, search_places, search_amazon, search_news, search_shopping, get_trends, search_scholar, search_jobs, ask_google_ai, search_walmart, search_x, search_youtube, youtube_transcript, get_linkedin_profile. Ognuno è marcato readOnlyHint: true e ha uno schema di input rigoroso con una descrizione su ogni parametro, così il modello sa cosa può passare.
I costi sono quelli del REST: search_web costa 5 crediti, scrape_page 1 (5 con render_js: true), search_amazon e youtube_transcript 1, get_linkedin_profile 60. La lista completa è nelle pagine delle API e nella documentazione MCP.
Prima di tutto metti la chiave in una variabile d’ambiente, così non finisce mai in un file di configurazione che potresti committare:
export FASTAF_API_KEY="..." # in ~/.zshrc o ~/.bashrc
Come lo aggiungi a Claude Code?
Secondo la documentazione MCP di Claude Code (code.claude.com/docs/en/mcp, verificata il 19 ottobre 2026), i server remoti usano --transport http e un header:
claude mcp add --transport http fastaf https://api.fastaf.co/mcp \
--header "Authorization: Bearer $FASTAF_API_KEY"
È la tua shell a espandere la variabile, quindi la chiave finisce salvata in ~/.claude.json. Per condividere il server con un team usa un .mcp.json di progetto: Claude Code espande ${VAR} dentro headers, quindi il file non contiene nessun segreto.
{
"mcpServers": {
"fastaf": {
"type": "http",
"url": "https://api.fastaf.co/mcp",
"headers": { "Authorization": "Bearer ${FASTAF_API_KEY}" }
}
}
}
claude mcp list mostra se si è connesso. Abbiamo usato esattamente questo file con Claude Code 2.1.197 in modalità headless; il modello ha ricevuto il JSON del tool (text, truncated, total_chars, credits_used, credits_remaining).
Come lo aggiungi a Cursor?
La documentazione di Cursor (cursor.com/docs/context/mcp, verificata il 19 ottobre 2026) legge ~/.cursor/mcp.json a livello globale o .cursor/mcp.json per progetto, e risolve ${env:NAME} in url e headers:
{
"mcpServers": {
"fastaf": {
"url": "https://api.fastaf.co/mcp",
"headers": { "Authorization": "Bearer ${env:FASTAF_API_KEY}" }
}
}
}
Per questo articolo non abbiamo provato Cursor: la configurazione segue la sua documentazione.
Come lo aggiungi a Codex CLI?
La documentazione MCP di Codex (developers.openai.com/codex/mcp, verificata il 19 ottobre 2026) usa bearer_token_env_var, che contiene il nome della variabile e non il token. In ~/.codex/config.toml:
[mcp_servers.fastaf]
url = "https://api.fastaf.co/mcp"
bearer_token_env_var = "FASTAF_API_KEY"
Oppure codex mcp add fastaf --url https://api.fastaf.co/mcp --bearer-token-env-var FASTAF_API_KEY (flag presente in codex-cli 0.159.2). Lo vedi con codex mcp list o con /mcp nella TUI. Un’esecuzione di codex exec con questa configurazione ha chiamato search_web e ha restituito tre risultati per 5 crediti.
Com’è fatta una chiamata MCP grezza?
La spec 2026-07-28 è stateless: non c’è handshake, e initialize restituisce -32601 Method not found. Ogni richiesta porta la versione in un header e in _meta, più un header Mcp-Method (senza, il server risponde -32020, header e body non coincidono):
curl -s https://api.fastaf.co/mcp \
-H "Authorization: Bearer $FASTAF_API_KEY" \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/call" -H "Mcp-Name: search_web" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
"name":"search_web","arguments":{"query":"python 3.14 free-threaded","results":3},
"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28",
"io.modelcontextprotocol/clientCapabilities":{}}}}'
Output reale, accorciato:
{"results":[
{"title":"Python support for free threading ...",
"url":"https://docs.python.org/3/howto/free-threading-python.html","position":1},
{"title":"Python Free-Threading Guide","url":"https://py-free-threading.github.io/","position":3}],
"credits_used":5,"credits_remaining":937}
La stessa chiamata con scrape_page su quell’URL e max_chars: 4000 ha restituito "truncated":true,"total_chars":20229,"credits_used":1.
Perché markdown con un tetto e non HTML grezzo?
Il vero budget è il contesto. La pagina “What’s new” di Python 3.14 sono 554.786 byte di HTML scaricati con curl. scrape_page l’ha trasformata in 266.828 caratteri di markdown e ha restituito i primi 12.000 (il max_chars predefinito, regolabile da 1.000 a 30.000), in 1,3 secondi per 1 credito. La guida al free-threading, più piccola, è passata da 41.838 byte di HTML a 20.229 caratteri.
A circa quattro caratteri per token, 12.000 caratteri sono più o meno 3.000 token. La documentazione di Claude Code dice che avvisa sopra i 10.000 token di output di un tool e che per default taglia a 25.000, quindi l’HTML grezzo verrebbe troncato o salvato su file prima che il modello veda qualcosa di utile. truncated e total_chars dicono all’agente che c’è dell’altro, così può richiedere la pagina con un tetto più alto.
Anche i risultati di ricerca sono compatti allo stesso modo: titolo, url, snippet e posizione, nient’altro.
Quanto costa una sessione di coding?
Una sessione di ricerca intensa con 10 ricerche e 10 letture di pagina costa 10 x 5 + 10 x 1 = 60 crediti. I 500 crediti gratuiti ne coprono otto; il pacchetto Starter da $10 (20.000 crediti) ne copre 333, circa 3 centesimi l’una. Vedi i prezzi.
Il tetto rigido è il saldo dell’account. Ogni risultato riporta credits_remaining, e a zero i tool smettono di addebitare e restituiscono un errore. Usa una chiave per macchina, così se perdi un portatile puoi revocare solo la sua chiave, ma ricorda che il saldo è condiviso da tutte le chiavi dell’account: non esistono budget per chiave. L’articolo sul tetto di spesa tratta i limiti per singola esecuzione.
Cosa va storto e come si risolve?
- HTTP 401,
-32001 Authentication required: manca l’header, oppure la variabile è vuota nell’ambiente del client. Le app con interfaccia grafica spesso non leggono il profilo della tua shell. - Crediti esauriti (402 sul REST): il tool restituisce
INSUFFICIENT_CREDITSconcredits_used: 0. Ricarica; non ti è stato addebitato nulla. - Troppe chiamate insieme (429 sul REST): i risultati dei tool tornano
RATE_LIMITEDquando l’agente lancia più chiamate in parallelo della concorrenza del tuo pacchetto (1 su Free, 5 su Starter). La nostra esecuzione con Codex l’ha preso due volte prima di riuscire. Una raffica sull’endpoint stesso restituisce HTTP 429 conRetry-After: 10.
La versione breve
Esporta FASTAF_API_KEY, aggiungi https://api.fastaf.co/mcp con un header Bearer in Claude Code, Cursor o Codex, e l’agente ottiene la ricerca, la lettura delle pagine come markdown con un tetto, e altri 13 tool, con il saldo come soffitto. Prendi una chiave con 500 crediti gratis.