from mcp.server.fastmcp import FastMCP
import requests

# 创建 MCP 服务器
mcp = FastMCP("WebScraper")


# 添加一个工具：获取网页内容
@mcp.tool()
def fetch_webpage(url: str) -> str:
    """
    获取指定 URL 的网页内容（HTML）

    Args:
        url (str): 目标网页的 URL

    Returns:
        str: 网页的 HTML 内容

    Raises:
        requests.exceptions.RequestException: 如果请求失败（如网络错误、404 等）
    """
    try:
        response = requests.get(url, timeout=5)  # 设置超时时间为 5 秒
        response.raise_for_status()  # 如果 HTTP 状态码不是 200，抛出异常
        return response.text  # 返回网页内容（HTML）
    except requests.exceptions.RequestException as e:
        raise Exception(f"Failed to fetch webpage: {e}")


# 添加一个动态资源：获取网页标题（从 HTML 中提取）
@mcp.resource("webpage_title://{url}")
def get_webpage_title(url: str) -> str:
    """
    从网页中提取标题（<title> 标签内容）

    Args:
        url (str): 目标网页的 URL

    Returns:
        str: 网页标题（如 "Example Domain"）

    Raises:
        Exception: 如果无法解析标题或请求失败
    """
    try:
        html = fetch_webpage(url)  # 复用上面的工具获取网页内容
        # 简单解析 HTML 提取标题（实际项目中建议用 BeautifulSoup）
        start = html.find("<title>") + len("<title>")
        end = html.find("</title>", start)
        if start != -1 and end != -1:
            return html[start:end].strip()
        else:
            return "No title found"
    except Exception as e:
        raise Exception(f"Failed to get webpage title: {e}")

def main() -> None:
    mcp.run(transport="stdio")  # 通过标准输入/输出运行
