Crawl4AI MCP Server

#!/usr/bin/env python import asyncio import logging from src.search import DuckDuckGoSearch, GoogleSearch # 配置日志 logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) async def test_duckduckgo(): logger.info("Testing DuckDuckGo search...") search = DuckDuckGoSearch() try: results = await search.search("Python programming", 5) logger.info(f"Got {len(results)} results from DuckDuckGo") for result in results: logger.info(f"Title: {result.title}") logger.info(f"Link: {result.link}") logger.info(f"Snippet: {result.snippet}") logger.info("---") except Exception as e: logger.error(f"DuckDuckGo search failed: {str(e)}", exc_info=True) async def test_google(): logger.info("Testing Google search...") import json import os config_path = os.path.join(os.path.dirname(__file__), 'config.json') if not os.path.exists(config_path): logger.error("config.json not found") return with open(config_path) as f: config = json.load(f) if 'google' not in config: logger.error("Google configuration not found in config.json") return search = GoogleSearch( api_key=config['google']['api_key'], cse_id=config['google']['cse_id'] ) try: results = await search.search("Python programming", 5) logger.info(f"Got {len(results)} results from Google") for result in results: logger.info(f"Title: {result.title}") logger.info(f"Link: {result.link}") logger.info(f"Snippet: {result.snippet}") logger.info("---") except Exception as e: logger.error(f"Google search failed: {str(e)}", exc_info=True) async def main(): await test_duckduckgo() logger.info("\n") await test_google() if __name__ == "__main__": asyncio.run(main())