Skip to main content
Glama
main.py2.75 kB
from mcp.server.fastmcp import FastMCP import requests from bs4 import BeautifulSoup import logging from typing import List, Dict import urllib.parse # для экранирования поискового запроса и парсинга URL import msp_search import msp_date_time # ---------- Настройка логгера ---------- logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) log = logging.getLogger(__name__) # --- Add file handler for logs after basicConfig file_handler = logging.FileHandler('msp_server.log') file_handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')) log.addHandler(file_handler) # ---------- Сам сервис ---------- mcp = FastMCP("URL Text Fetcher") @mcp.tool() def fetch_url_text(url: str) -> str: """Download the text from a URL.""" log.info(f"fetch_url_text() started for {url}") try: resp = requests.get(url, timeout=10) resp.raise_for_status() except Exception as exc: log.exception(f"HTTP error while fetching {url}: {exc}") raise soup = BeautifulSoup(resp.text, "html.parser") text = soup.get_text(separator="\n", strip=True) log.info(f"fetch_url_text() finished for {url} (size={len(text)} chars)") return text @mcp.tool() def fetch_page_links(url: str) -> List[str]: """Return a list of all URLs found on the given page.""" log.info(f"fetch_page_links() started for {url}") try: resp = requests.get(url, timeout=10) resp.raise_for_status() except Exception as exc: log.exception(f"HTTP error while fetching {url}: {exc}") raise soup = BeautifulSoup(resp.text, "html.parser") links = [str(a["href"]) for a in soup.find_all("a", href=True)] log.info( f"fetch_page_links() finished for {url} (found {len(links)} links)" ) return links #TODO # @mcp.tool() # def search_google(query: str, num: int = 5) -> List[Dict[str, str]]: # driver = msp_search.get_driver() # return msp_search.search_google(driver, query, num) @mcp.tool() def search_duckduckgo(query: str, num: int = 5) -> List[Dict[str, str]]: driver = msp_search.get_driver() return msp_search.search_duckduckgo(driver, query, num) @mcp.tool() def search_yandex(query: str, num: int = 5) -> List[Dict[str, str]]: driver = msp_search.get_driver() return msp_search.search_yandex(driver, query, num) @mcp.tool() def get_current_time_and_region() -> dict: """ Return the current local date/time and a region string. """ return msp_date_time.get_current_time_and_region() def main(): mcp.run() if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NeoXider/web-search-neo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server