MCP DuckDuckGo Search Plugin

  • mcp_duckduckgo
""" DuckDuckGo search plugin for Model Context Protocol. This module implements a web search function using the DuckDuckGo API. """ import logging import importlib from typing import Any # Configure logging logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", ) logger = logging.getLogger("mcp_duckduckgo") def initialize_mcp() -> Any: """Initialize MCP server and register components.""" # Import server to initialize MCP server_module = importlib.import_module(".server", package="mcp_duckduckgo") mcp = server_module.mcp # Import all MCP components to register them importlib.import_module(".tools", package="mcp_duckduckgo") importlib.import_module(".resources", package="mcp_duckduckgo") importlib.import_module(".prompts", package="mcp_duckduckgo") return mcp def main(): """Run the MCP server.""" try: # Initialize MCP mcp = initialize_mcp() logger.info("Starting DuckDuckGo Search MCP server on port 3000") logger.info("Available endpoints:") logger.info("- Tool: duckduckgo_web_search") logger.info("- Tool: duckduckgo_get_details") logger.info("- Tool: duckduckgo_related_searches") logger.info("- Resource: docs://search") logger.info("- Resource: search://{query}") logger.info("- Prompt: search_assistant") # Run the MCP server mcp.run() except KeyboardInterrupt: logger.info("Server shutdown requested by user") except Exception as e: logger.error(f"Error starting server: {e}", exc_info=True) raise if __name__ == "__main__": main()