main.py•1.99 kB
from fastmcp import FastMCP
import wikipedia
from duckduckgo_search import DDGS
from basic_mcp.tools.web_tools import fetch_page
mcp = FastMCP(
"Wikipedia and DuckDuckGo Search",
dependencies=["wikipedia", "duckduckgo-search", "trafilatura"],
)
# Wikipedia tools
@mcp.tool()
def wiki_search(query: str):
"""Search Wikipedia for articles matching the query"""
return wikipedia.search(query)
@mcp.tool()
def wiki_summary(query: str):
"""Get a summary of a Wikipedia article"""
return wikipedia.summary(query)
@mcp.tool()
def wiki_page(query: str):
"""Get a full Wikipedia page"""
return wikipedia.page(query)
@mcp.tool()
def wiki_set_lang(lang: str):
"""Set Wikipedia language"""
wikipedia.set_lang(lang)
return f"Language set to {lang}"
# DuckDuckGo Search tools
@mcp.tool()
def ddg_text_search(query: str, max_results: int = 10):
"""Search DuckDuckGo for text results"""
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=max_results))
return results
@mcp.tool()
def ddg_news_search(query: str, max_results: int = 10):
"""Search DuckDuckGo for news articles"""
with DDGS() as ddgs:
results = list(ddgs.news(query, max_results=max_results))
return results
@mcp.tool()
def ddg_image_search(query: str, max_results: int = 10):
"""Search DuckDuckGo for images"""
with DDGS() as ddgs:
results = list(ddgs.images(query, max_results=max_results))
return results
@mcp.tool()
def ddg_video_search(query: str, max_results: int = 10):
"""Search DuckDuckGo for videos"""
with DDGS() as ddgs:
results = list(ddgs.videos(query, max_results=max_results))
return results
@mcp.tool()
def fetch_webpage(url: str, include_metadata: bool = False):
"""Fetch a clean text version of a webpage"""
return fetch_page(url, include_metadata)
def main():
mcp.run(transport="stdio", show_banner=False)
if __name__ == "__main__":
main()