El Model Context Protocol (MCP) permite a los asistentes de IA como Claude invocar herramientas externas a través de una interfaz estandarizada. Si bien Scavio proporciona un servidor MCP oficial, es posible que desee agregar la búsqueda web como una herramienta entre muchas en su propio servidor MCP personalizado. Este tutorial muestra cómo crear una herramienta de servidor MCP que incluya la API de Scavio, registrarla en la lista de herramientas de su servidor y manejar solicitudes de búsqueda entrantes desde cualquier cliente MCP.
Requisitos previos
- Node.js 18 o superior
- npm instala @modelcontextprotocol/sdk
- Una clave API de Scavio
- Conocimientos básicos de TypeScript
Guia paso a paso
Paso 1: Inicializar el servidor MCP
Cree un nuevo servidor MCP utilizando el SDK oficial. Este servidor expondrá sus herramientas personalizadas a cualquier cliente MCP.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "my-tools",
version: "1.0.0",
});Paso 2: Registre la herramienta de búsqueda web
Defina una herramienta web_search que acepte una consulta y un parámetro de plataforma opcional. El controlador llama a la API de Scavio y devuelve resultados formateados.
const SCAVIO_KEY = process.env.SCAVIO_API_KEY!;
server.tool(
"web_search",
"Search the web for current information. Returns top results with titles, snippets, and URLs.",
{
query: z.string().describe("The search query"),
platform: z.enum(["google", "youtube", "amazon", "walmart", "reddit"]).default("google").describe("Search platform"),
},
async ({ query, platform }) => {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": SCAVIO_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform, query, country_code: "us" }),
});
const data = await res.json();
const results = data.organic_results || data.products || data.videos || [];
const text = results.slice(0, 5).map((r: any, i: number) =>
`[${i + 1}] ${r.title || r.name}\n${r.snippet || r.description || ""}\n${r.link || r.url || ""}`
).join("\n\n");
return { content: [{ type: "text", text }] };
}
);Paso 3: Iniciar el servidor
Conecte el servidor al transporte stdio para que los clientes MCP puedan comunicarse con él.
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
main();Paso 4: Configurar en Claude Desktop
Apunte Claude Desktop a su servidor binario MCP personalizado para que pueda usar la herramienta web_search.
{
"mcpServers": {
"my-tools": {
"command": "npx",
"args": ["tsx", "server.ts"],
"env": {
"SCAVIO_API_KEY": "your_scavio_api_key"
}
}
}
}Ejemplo en Python
# Python MCP server with Scavio web search tool
import os
import json
import sys
import requests
SCAVIO_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
def handle_search(query: str, platform: str = "google") -> str:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": SCAVIO_KEY},
json={"platform": platform, "query": query, "country_code": "us"}
)
r.raise_for_status()
data = r.json()
results = data.get("organic_results", data.get("products", []))[:5]
return "\n\n".join(
f"[{i+1}] {r.get('title', '')}\n{r.get('snippet', '')}\n{r.get('link', '')}"
for i, r in enumerate(results)
)
# This is a simplified example. Use the mcp Python SDK for production.
if __name__ == "__main__":
result = handle_search("latest AI news 2026")
print(result)Ejemplo en JavaScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "my-tools", version: "1.0.0" });
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
server.tool(
"web_search",
"Search the web for current information",
{ query: z.string(), platform: z.enum(["google", "youtube", "amazon", "walmart", "reddit"]).default("google") },
async ({ query, platform }) => {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": SCAVIO_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform, query, country_code: "us" }),
});
const data = await res.json();
const results = (data.organic_results || data.products || []).slice(0, 5);
const text = results.map((r, i) => `[${i+1}] ${r.title}\n${r.snippet || ""}\n${r.link || ""}`).join("\n\n");
return { content: [{ type: "text", text }] };
}
);
const transport = new StdioServerTransport();
await server.connect(transport);Salida esperada
MCP server started on stdio
Tool: web_search
Input: {"query": "latest AI news", "platform": "google"}
[1] OpenAI Launches New Agent Platform
OpenAI announced a comprehensive agent building platform...
https://example.com/openai-agents
[2] Anthropic Claude 4 Release Details
Anthropic released Claude 4 with expanded context...
https://example.com/claude-4