Interconnexion MCP (WebSearch) avec /v1/responses
Cette page explique comment se connecter au MCP WebSearch via la route OpenAI-compatible /v1/responses.
Une fois connecté, le modèle peut interroger le Web et utiliser ces résultats pour enrichir automatiquement ses réponses.
Endpoint
/v1/responsesURL complète (Gateway Clovis)
POST https://llm-gateway.clovis-ai.fr/v1/responses
Authorization: Bearer <CLOVIS_API_KEY>
Content-Type: application/json
Objectif
L’intégration MCP permet au modèle de :
Déclencher automatiquement un outil externe (ex: WebSearch)
Récupérer des informations à jour depuis Internet
Synthétiser ces informations dans une réponse structurée
Concrètement :
L’utilisateur pose une question → le modèle déclenche un tool call → la gateway exécute le MCP WebSearch → le modèle répond avec les résultats.
Pré-requis
-
Une clé API Clovis valide (Bearer token)
-
Accès réseau au gateway Clovis :
https://llm-gateway.clovis-ai.fr -
Accès au endpoint MCP exposé par Clovis (si activé) :
https://llm-gateway.clovis-ai.fr/api/v1/mcp
Principe de fonctionnement MCP
1) Déclarer un serveur MCP dans la requête
La gateway Clovis permet de déclarer un serveur MCP via un champ provider-specific dans tools.
Exemple : déclaration du serveur WebSearch
{
"type": "mcp",
"server_label": "web_search_preview",
"server_description": "The websearch mcp",
"server_url": "https://llm-gateway.clovis-ai.fr/api/v1/mcp",
"require_approval": "never"
}
Cette déclaration signifie :
web_search_previewest un serveur MCP disponible durant la requête- les appels MCP sont routés via
server_url - aucun contrôle manuel n’est requis (
require_approval: "never")
Champs MCP (détails techniques)
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
type | string | ✔️ | Doit être "mcp" pour activer la connexion MCP |
server_label | string | ✔️ | Nom logique du serveur MCP (alias stable) |
server_description | string | Description fonctionnelle du serveur | |
server_url | string | ✔️ | URL du broker MCP Clovis |
require_approval | string | Politique d’exécution (never = automatique) |
Exemple complet — /v1/responses avec MCP WebSearch
Requête
{
"model": "ClovisLLM",
"input": [
{
"role": "system",
"content": [
{
"type": "input_text",
"text": "Tu es un assistant utile. Si une question nécessite des infos à jour, utilise le websearch."
}
]
},
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Peux-tu me donner les dernières informations sur n8n et les AI Agents ?"
}
]
}
],
"tools": [
{
"type": "mcp",
"server_label": "web_search_preview",
"server_description": "The websearch mcp",
"server_url": "https://llm-gateway.clovis-ai.fr/api/v1/mcp",
"require_approval": "never"
}
],
"temperature": 0.3,
"max_output_tokens": 1200
}
Réponse API
Une fois le résultat MCP récupéré, le modèle retourne une réponse finale de type message :
{
"id": "resp_xxx",
"object": "response",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Voici les dernières informations concernant n8n et les AI Agents : ... (synthèse basée sur la recherche web)"
}
]
}
],
"usage": {
"input_tokens": 350,
"output_tokens": 420,
"total_tokens": 770
}
}
Exemples d’utilisation
- python
- Javascript
from openai import OpenAI
# Configuration
CLOVIS_API_KEY = "sk-rezr"
CLOVIS_BASE_URL = "https://llm-gateway.clovis-ai.fr/v1"
CLOVIS_MODEL_NAME = "ClovisLLM"
# Initialize client
client = OpenAI(api_key=CLOVIS_API_KEY, base_url=CLOVIS_BASE_URL)
# Test /responses route
answer = client.responses.create(
model=CLOVIS_MODEL_NAME,
input="What are the news of the day?",
tools=[
{
"type": "mcp",
"server_label": "web_search_preview",
"server_description": "The websearch mcp",
"server_url": "https://llm-gateway.clovis-ai.fr/api/v1/mcp",
"require_approval": "never",
}
]
)
print(answer.output_text)
require('dotenv').config();
const axios = require('axios');
async function testResponses() {
try {
const payload = {
model: "ClovisLLM",
tools: [
{
type: "mcp",
server_label: "web_search_preview",
server_url: "https://llm-gateway.clovis-ai.fr/api/v1/mcp",
require_approval: "never",
}
],
input: 'Qui est le premier ministre en france?',
};
const res = await axios.post('https://llm-gateway.clovis-ai.fr/v1/responses', payload, {
headers: {
Authorization: 'Bearer sh-xxxxxxx',
'Content-Type': 'application/json',
},
});
return true;
} catch (err) {
console.error("status:", err.response?.status);
console.error("data:", JSON.stringify(err.response?.data, null, 2));
console.error("headers:", err.response?.headers);
return false;
}
}