Overview
Connect AI coding agents to live web data through MCP (Model Context Protocol) search servers. The agent calls a structured search tool instead of fetching raw HTML, getting parsed results with titles, snippets, and URLs. This provides web grounding while reducing prompt injection risk from raw page content.
Trigger
Automatic on agent search tool calls
Schedule
Automatic on agent search calls
Workflow Steps
Configure MCP server
Add the SERP MCP server to your agent config (.mcp.json for Claude Code, MCP settings for Cursor). Provide your API key in the Authorization header.
Agent calls search tool
When the agent needs web data, it calls the MCP search tool with a query. The MCP server routes the request to the SERP API.
Parse structured results
The MCP server returns parsed JSON: titles, snippets, URLs, PAA questions, and AI Overview data. No raw HTML enters the agent context.
Agent uses grounded data
The agent incorporates verified, current data into its response. Pricing, versions, and feature claims come from live search results, not training data.
Token-efficient context
Structured results use 600-800 tokens vs 4,000-8,000 for raw HTML. The agent context stays efficient while still having web access.
Python Implementation
# .mcp.json configuration for Claude Code
# {
# "mcpServers": {
# "scavio": {
# "url": "https://mcp.scavio.dev/mcp",
# "headers": {
# "Authorization": "Bearer YOUR_API_KEY"
# }
# }
# }
# }
# For custom agents using MCP programmatically:
import requests, os
H = {"x-api-key": os.environ["SCAVIO_API_KEY"], "Content-Type": "application/json"}
def search_tool(query, platform="google"):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers=H, json={"query": query, "platform": platform,
"country_code": "us"}).json()
return {
"results": [{"title": r["title"], "snippet": r.get("snippet", ""),
"url": r["link"]} for r in resp.get("organic_results", [])[:5]],
"paa": [q["question"] for q in resp.get("people_also_ask", [])],
"related": [r["query"] for r in resp.get("related_searches", [])],
}
# Agent calls this tool when it needs web data
grounded = search_tool("next.js 15 release date")
print(f"Top result: {grounded['results'][0]['title']}")
print(f"Related: {grounded['related'][:3]}")JavaScript Implementation
// MCP config for Cursor: add to MCP settings
// Server URL: https://mcp.scavio.dev/mcp
// Auth: Bearer YOUR_API_KEY
// For custom agent integration:
const H = { "x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json" };
async function searchTool(query) {
const resp = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({ query, country_code: "us" })
}).then(r => r.json());
return {
results: (resp.organic_results || []).slice(0, 5).map(r => ({
title: r.title, snippet: r.snippet || "", url: r.link
})),
paa: (resp.people_also_ask || []).map(q => q.question),
};
}
searchTool("next.js 15 release date").then(r =>
console.log(`Top: ${r.results[0]?.title}, PAA: ${r.paa.length} questions`));Platforms Used
Web search with knowledge graph, PAA, and AI overviews
Community, posts & threaded comments from any subreddit
YouTube
Video search with transcripts and metadata