掘金 人工智能 前天 11:50
新闻搜索 MCP Server 开发秘籍:Python - SDK 携手 SerpApi,融入 Trae 不再难
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何通过SDK开发MCP(Message Communication Protocol)服务器,并结合SerpApi服务实现Google新闻的搜索功能。文章详细讲解了如何配置SerpApi的API Key,使用Python的httpx库发送POST请求获取新闻数据,并对返回的JSON数据进行解析和处理。最终,将搜索到的前5条新闻(包括标题、描述和链接)以JSON格式保存在本地,并返回给用户。此外,还展示了如何将该MCP服务器添加到TrAE平台,并提供了对话测试的示例,演示了如何查询特定主题(如“马斯克”)的近期热点新闻。

🚀 **开发环境与工具介绍**:文章指出,开发MCP服务器以实现Google新闻搜索功能需要借助SerpApi服务,这是一个专门用于获取Google搜索结果页(SERP)数据的API。开发者需要到SerpApi官网申请API Key,并将其配置在`.env`文件中。代码示例中使用了Python的`httpx`库来发送HTTP请求,以及`mcp.server.fastmcp.FastMCP`来构建MCP服务器,并利用`dotenv`库加载环境变量。

📰 **核心功能实现:Google新闻搜索**:通过`search_google_news`函数,该MCP服务器能够根据用户输入的关键词搜索Google新闻。函数首先检查`SERPER_API_KEY`是否已配置,然后构建请求URL、请求头(包含API Key和Content-Type)以及请求体(包含搜索关键词`q`),并使用`httpx.AsyncClient`发送POST请求。成功获取数据后,会解析返回的JSON,提取前5条新闻的标题、描述和链接。

💾 **数据存储与输出格式**:为了方便后续使用和追溯,搜索到的新闻数据(标题、描述、链接)会被格式化为一个包含这些信息的列表。随后,这些数据会以JSON格式保存在本地的`./google_news`目录下,并根据当前时间戳生成一个唯一的文件名(如`google_news_YYYYMMDD_HHMMSS.json`)。函数最终返回一个包含成功提示、提取的新闻内容以及文件保存路径的字符串。

🔧 **服务集成与测试**:文章展示了如何将开发好的MCP服务器集成到TrAE平台中,通过配置`mcpServers`的`command`和`args`来运行Python脚本。集成完成后,可以通过对话测试来验证其功能,例如输入“请分析一下马斯克近期的热点新闻”,服务器将返回与马斯克相关的新闻信息。

1. 通过 sdk 开发 mcp server

本例需要 SerpApi

SerpApi 是一个专门针对Google搜索结果页面(SERP)的API服务。通过这个API,我们可以获取到Google搜索的各种数据,包括但不限于搜索结果、位置、时间等信息。

需要去官网申请 API Key。SerpApi 官网:serper.dev/

import osimport jsonfrom datetime import datetimeimport httpxfrom mcp.server.fastmcp import FastMCPfrom dotenv import load_dotenv# 加载环境变量load_dotenv()# 初始化 MCP 服务器mcp = FastMCP("NewsServer")@mcp.tool()async def search_google_news(keyword: str) -> str:    """        使用 Serper API(Google Search 封装)根据关键词搜索新闻内容,返回前5条标题、描述和链接。        参数:            keyword (str): 关键词,如 "小米汽车"        返回:            str: JSON 字符串,包含新闻标题、描述、链接        """    # 从环境中获取 API 密钥并进行检查    api_key = os.getenv("SERPER_API_KEY")    if not api_key:        return "❌ 未配置 SERPER_API_KEY,请在 .env 文件中设置"    # 设置请求参数并发送请求    url = "https://google.serper.dev/news"    headers = {        "X-API-KEY": api_key,        "Content-Type": "application/json"    }    payload = {"q": keyword}    async with httpx.AsyncClient() as client:        response = await client.post(url, headers=headers, json=payload)        data = response.json()    # 检查数据,并按照格式提取新闻,返回前五条新闻    if "news" not in data:        return "❌ 未获取到搜索结果"    articles = [        {            "title": item.get("title"),            "desc": item.get("snippet"),            "url": item.get("link")        } for item in data["news"][:5]    ]    # 将新闻结果以带有时间戳命名后的 JSON 格式文件的形式保存在本地指定的路径    output_dir = "./google_news"    os.makedirs(output_dir, exist_ok=True)    filename = f"google_news_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"    file_path = os.path.join(output_dir, filename)    with open(file_path, "w", encoding="utf-8") as f:        json.dump(articles, f, ensure_ascii=False, indent=2)    return (        f"✅ 已获取与 [{keyword}] 相关的前5条 Google 新闻:\n"        f"{json.dumps(articles, ensure_ascii=False, indent=2)}\n"        f"📄 已保存到:{file_path}"    )if __name__ == "__main__":    mcp.run(transport='stdio')

2. 添加到 trae 中

{  "mcpServers": {    "my_news": {      "command": "uv",      "args": [        "--directory",        "D:/project/AI/MCP/mcpserver/python_simple",        "run",        "server.py"      ]    }  }}

添加成功后,添加到智能体

3. 对话测试

提示词:

请分析一下马斯克近期的热点新闻

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP服务器 SerpApi Google新闻 Python SDK AI Agent
相关文章