Skip to main content

WebSearch

WebSearch allows your Clovis models and agents to access the Web in real time, enriching their responses with up-to-date information.

Concretely, your model can:

  • launch web searches,
  • extract content from specific pages,
  • map and crawl entire websites,
  • analyze and synthesize recent content,
  • provide reliable and contextualized answers.

WebSearch is exposed as an MCP server that your application, agent, or orchestrator can call directly.

Prerequisites

A valid Clovis API key (Bearer token)

The API key must have access to WebSearch

Network access to the Clovis gateway: https://llm-gateway.clovis-ai.fr

MCP Endpoint

The WebSearch MCP server is available at the following URL:

MCP server URL
https://llm-gateway.clovis-ai.fr/tools/websearch/mcp

All requests must include:

  • an Authorization: Bearer <CLOVIS_API_KEY> header
  • a Content-Type: application/json header
  • an Accept: application/json, text/event-stream header

The server uses the MCP protocol (JSON-RPC 2.0 over HTTP with Server-Sent Events).

Available tools

The MCP server exposes 5 tools covering the entire web exploitation chain: discover, read, map, crawl, and monitor.

Performs a secure web search via the Tavily API, with a sanitization pipeline using ClovisLLM to detect sensitive information.

ParameterTypeRequiredDefaultDescription
querystring✔️Search query
search_depthstring"basic"Depth: "basic", "advanced", "fast", or "ultra-fast"
max_resultsinteger10Maximum number of results (1-20)
include_domainsarray<string>nullDomains to include only
exclude_domainsarray<string>nullDomains to exclude
topicstring"general"Category: "general" or "news"
time_rangestringnullTime filter: "day", "week", "month", or "year"
start_datestringnullStart date (YYYY-MM-DD). Overrides time_range
end_datestringnullEnd date (YYYY-MM-DD). Overrides time_range
include_imagesbooleanfalseInclude images in results
include_image_descriptionsbooleanfalseInclude image descriptions (include_images required)
include_raw_contentbooleanfalseInclude raw page content
countrystringnullCountry name to bias results (e.g., "france", "united states")
include_faviconbooleanfalseInclude favicon URLs
exact_matchbooleanfalseOnly return exact query matches

websearch-extract

Extracts content from one or more URLs. Returns content in markdown or text format. The advanced mode handles protected or complex pages (LinkedIn, tables, embedded content).

ParameterTypeRequiredDefaultDescription
urlsarray<string>✔️List of URLs to extract
extract_depthstring"basic""basic" or "advanced" for protected/complex pages
include_imagesbooleanfalseInclude images from pages
formatstring"markdown"Output format: "markdown" or "text"
include_faviconbooleanfalseInclude favicon URLs
querystringnullOptional query to rerank content chunks by relevance

websearch-crawl

Crawls a website starting from a root URL, following internal links up to a configurable depth and page limit.

ParameterTypeRequiredDefaultDescription
urlstring✔️Root URL to begin crawling
max_depthinteger1Maximum depth from base URL
max_breadthinteger20Maximum links to follow per page
limitinteger50Total pages to process
instructionsstringnullNatural language instructions for filtering pages
select_pathsarray<string>nullRegex patterns to filter URL paths (e.g., "/docs/.*")
select_domainsarray<string>nullRegex patterns to restrict to specific domains
allow_externalbooleantrueFollow external links
extract_depthstring"basic""basic" or "advanced" for tables/embedded content
formatstring"markdown"Output format: "markdown" or "text"
include_faviconbooleanfalseInclude favicon URLs

websearch-map

Maps a website's structure. Returns a list of discovered URLs without extracting text content.

ParameterTypeRequiredDefaultDescription
urlstring✔️Root URL to begin mapping
max_depthinteger1Maximum exploration depth
max_breadthinteger20Maximum links per page
limitinteger50Total pages to process
instructionsstringnullNatural language instructions for filtering pages
select_pathsarray<string>nullRegex patterns to filter URL paths
select_domainsarray<string>nullRegex patterns for domain filtering
allow_externalbooleantrueInclude external links

websearch-search_status

Checks the server status and dependent services (Tavily health, guardrail and sanitization state).

Code examples

Initialize the MCP connection

Initialize — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "my-app", "version": "1.0.0" }
}
}'

List available tools

tools/list — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}'
websearch-search — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "websearch-search",
"arguments": {
"query": "Latest AI news in France",
"max_results": 5,
"search_depth": "advanced",
"topic": "news",
"country": "france"
}
}
}'

Extract content from a URL

websearch-extract — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "websearch-extract",
"arguments": {
"urls": ["https://www.clovis-ai.fr"],
"format": "markdown",
"extract_depth": "basic"
}
}
}'
Example response
Response
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [
{
"type": "text",
"text": "{\"success\":true,\"data\":{\"results\":[{\"url\":\"https://www.clovis-ai.fr\",\"title\":\"Clovis - IA de confiance\",\"raw_content\":\"# Clovis, l'IA de confiance.\n\nYour 100% French AI platform...\"
}]}}"
}
],
"isError": false
}
}

Map a website

websearch-map — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "websearch-map",
"arguments": {
"url": "https://www.clovis-ai.fr",
"max_depth": 1,
"limit": 10
}
}
}'

Crawl a website

websearch-crawl — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "websearch-crawl",
"arguments": {
"url": "https://www.clovis-ai.fr",
"max_depth": 1,
"limit": 10,
"format": "markdown"
}
}
}'

Check service status

websearch-search_status — curl
curl -X POST https://llm-gateway.clovis-ai.fr/tools/websearch/mcp \
-H "Authorization: Bearer $CLOVIS_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "websearch-search_status",
"arguments": {}
}
}'
Example response
Response
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"content": [
{
"type": "text",
"text": "{\"success\":true,\"data\":{\"server_version\":\"0.2.0\",\"tavily\":{\"healthy\":true,\"error\":null},\"guardrail\":{\"enabled\":true,\"status\":\"healthy\",\"endpoint\":\"https://llm-gateway.clovis-ai.fr/\",\"model\":\"ClovisLLM/gpt-oss-120b\"},\"sanitization\":{\"requests\":true,\"responses\":true}}}"
}
],
"isError": false
}
}