search.py•2.35 kB
"""
Example search tool implementation.
"""
from typing import Any, Dict, List
import mcp.types as types
# Mock data for demonstration
MOCK_DATA = [
{"id": 1, "title": "Python Programming", "description": "Learn Python basics"},
{"id": 2, "title": "MCP Protocol", "description": "Model Context Protocol guide"},
{"id": 3, "title": "Async Programming", "description": "Asynchronous programming in Python"},
{"id": 4, "title": "Web Development", "description": "Building web applications"},
{"id": 5, "title": "Data Science", "description": "Data analysis with Python"},
]
async def search_handler(arguments: Dict[str, Any]) -> str:
"""
Example search tool that searches through mock data.
Args:
arguments: Tool arguments containing:
- query: Search query string
- limit: Maximum number of results (optional, default: 10)
Returns:
String containing formatted search results
"""
query = arguments.get("query", "").lower()
limit = min(int(arguments.get("limit", 10)), 100)
if not query:
return "Error: Query cannot be empty"
# Simple search implementation
results: List[Dict[str, Any]] = []
for item in MOCK_DATA:
if query in item["title"].lower() or query in item["description"].lower():
results.append(item)
# Apply limit
results = results[:limit]
# Format results
if not results:
return f"No results found for query: '{query}'"
output = f"Found {len(results)} result(s) for query: '{query}'\n\n"
for item in results:
output += f"[{item['id']}] {item['title']}\n"
output += f" {item['description']}\n\n"
return output
# Tool schema definition
SEARCH_SCHEMA = types.Tool(
name="example_search",
description="Searches through a dataset and returns matching results",
inputSchema={
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query string",
},
"limit": {
"type": "number",
"description": "Maximum number of results to return (default: 10, max: 100)",
"minimum": 1,
"maximum": 100,
},
},
"required": ["query"],
},
)