MCP (Model Context Protocol) permet aux modèles d'IA d'appeler des outils externes via une interface standardisée. Le serveur Scavio MCP à l'adresse mcp.scavio.dev/mcp expose la recherche web, les analyses TikTok et les données YouTube en tant qu'outils MCP que tout client compatible peut appeler. Ce tutoriel connecte le serveur Scavio MCP aux LLM locaux fonctionnant sur Ollama ou llama.cpp, offrant à vos modèles locaux les mêmes capacités de recherche que les agents hébergés dans le cloud. La configuration prend moins de 5 minutes et chaque appel d'outil coûte $0.005.
Prérequis
- Ollama installé et fonctionnant localement
- Python 3.9+ installé
- Une clé API Scavio depuis scavio.dev
- Compréhension de base du protocole d'outil MCP
Parcours
Étape 1: Créer le fichier de configuration MCP
Écrire un fichier .mcp.json qui pointe vers le serveur Scavio MCP. Ce fichier indique aux clients compatibles MCP où trouver les outils de recherche.
import json
mcp_config = {
'mcpServers': {
'scavio': {
'url': 'https://mcp.scavio.dev/mcp',
'headers': {
'Authorization': 'Bearer ${SCAVIO_API_KEY}'
}
}
}
}
with open('.mcp.json', 'w') as f:
json.dump(mcp_config, f, indent=2)
print('MCP config written to .mcp.json')
print('Available tools: web_search, tiktok_search, youtube_search')Étape 2: Tester la connexion MCP avec un appel direct
Avant de connecter à Ollama, testez que le serveur MCP répond correctement en effectuant une requête HTTP directe à l'outil de recherche.
import os, requests
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
# Direct test of the search endpoint
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': 'test search query', 'country_code': 'us', 'num_results': 3})
data = resp.json()
print(f'Status: {resp.status_code}')
print(f'Results: {len(data.get("organic_results", []))}')
for r in data.get('organic_results', [])[:3]:
print(f' {r["title"]}')Étape 3: Connecter les outils MCP à Ollama
Créer un wrapper d'outil Ollama qui traduit les appels d'outils MCP en requêtes Scavio API. Cela comble le fossé entre le format d'outil d'Ollama et MCP.
import ollama
def handle_mcp_tool(tool_name: str, args: dict) -> str:
"""Route MCP tool calls to the Scavio API."""
if tool_name == 'web_search':
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': args.get('query', ''), 'country_code': 'us', 'num_results': 5})
results = resp.json().get('organic_results', [])
return '\n'.join(f'{r["title"]}: {r.get("snippet", "")}' for r in results)
elif tool_name == 'tiktok_search':
resp = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos',
headers={'Authorization': f'Bearer {SCAVIO_KEY}', 'Content-Type': 'application/json'},
json={'keyword': args.get('query', ''), 'count': 5, 'cursor': 0})
videos = resp.json().get('data', {}).get('videos', [])
return '\n'.join(f'{v.get("desc", "")[:80]} ({v.get("stats", {}).get("playCount", 0)} plays)' for v in videos)
return 'Unknown tool'
tools = [
{'type': 'function', 'function': {'name': 'web_search', 'description': 'Search the web for current information',
'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}}},
{'type': 'function', 'function': {'name': 'tiktok_search', 'description': 'Search TikTok videos',
'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}}},
]
response = ollama.chat(model='llama3.1', messages=[{'role': 'user', 'content': 'What is trending on TikTok right now?'}], tools=tools)
if response.message.tool_calls:
for tc in response.message.tool_calls:
result = handle_mcp_tool(tc.function.name, tc.function.arguments)
print(f'Tool: {tc.function.name}')
print(result[:300])Exemple Python
import os, requests, json
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
# Create MCP config
config = {'mcpServers': {'scavio': {
'url': 'https://mcp.scavio.dev/mcp',
'headers': {'Authorization': f'Bearer {SCAVIO_KEY}'}}}}
with open('.mcp.json', 'w') as f:
json.dump(config, f, indent=2)
# Test search via MCP
def mcp_search(query):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': 5})
return resp.json().get('organic_results', [])
results = mcp_search('latest AI news')
print(f'MCP search returned {len(results)} results')
for r in results[:3]:
print(f' {r["title"]}')Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
const fs = require('fs');
// Create MCP config
const config = { mcpServers: { scavio: {
url: 'https://mcp.scavio.dev/mcp',
headers: { Authorization: `Bearer ${SCAVIO_KEY}` }
}}};
fs.writeFileSync('.mcp.json', JSON.stringify(config, null, 2));
// Test search
async function mcpSearch(query) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query, country_code: 'us', num_results: 5 })
});
const data = await resp.json();
return data.organic_results || [];
}
mcpSearch('latest AI news').then(r => {
console.log(`MCP search: ${r.length} results`);
r.slice(0, 3).forEach(x => console.log(` ${x.title}`));
});Sortie attendue
MCP config written to .mcp.json
Available tools: web_search, tiktok_search, youtube_search
Status: 200
Results: 3
Latest AI News and Developments 2026
Top AI Frameworks Released This Year
AI Industry Update: May 2026
Tool: tiktok_search
Viral dance challenge takes over TikTok (2,345,678 plays)
New cooking hack everyone is trying (1,892,345 plays)