【实战】手把手学习写一个MCP服务,获取热榜文章

admin 2025年5月9日16:20:46评论1 views字数 2421阅读8分4秒阅读模式

之前的文章讲了MCP是什么,以及怎么用。光会用不行,还得研究研究怎么去开发MCP服务。

开发准备

    【前情回顾】最近都在传的大模型MCP到底是个啥    

    关于MCP Server的开发,这里找到了官方文档

https://modelcontextprotocol.io/introduction
【实战】手把手学习写一个MCP服务,获取热榜文章

其架构如上图所示,比较直观,不再赘述。

我们这次写的是MCP服务,客户端就用之前文章中的Cherry Studio代替,就不单独开发客户端了。

从官方文档中我们可以看到,MCP是支持多个语言的

【实战】手把手学习写一个MCP服务,获取热榜文章

这里我选择python

UV工具

windows

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

linux

curl -LsSf https://astral.sh/uv/install.sh | sh
【实战】手把手学习写一个MCP服务,获取热榜文章

我这里是用的windows,然后将该路径配置到环境变量中

【实战】手把手学习写一个MCP服务,获取热榜文章

重启终端,就可以使用uv命令了

如果根据之前的文章,我们其实已经通过Cherry Studio上安装uv工具了,并且后续我们也是通过Cherry Studio进行本地 MCP Server 调用的,所以这一步不需要也行。

MCP Server

我大概看了一下文档中给的示例代码,是获取美国天气的,大概看了一下架构,总结出3个要点

  • 需要通过mcp库进行服务创建和启动
pip install mcp
  • MCP 全程需要通过 asyncio 进行异步调用
  • 尽可能的声明参数类型,返回类型,以及加上方法的注释,来让大模型明白怎么使用一个MCP服务的代码架构基本如下
from mcp.server.fastmcp import FastMCPmcp = FastMCP("server name")# 工具声明 需用异步@mcp.tool()async def tool_name(param: int) -> []:    """    注释描述    参数描述    返回描述    """    data = []    return data# 运行服务if __name__ == "__main__":    mcp.run()

示例开发

这里我不用官方给的示例,我写了一个用来获取掘金热榜文章的MCP服务,直接贴上代码,大家可以参考学习,写的比较简单

import httpxfrom mcp.server.fastmcp import FastMCPmcp = FastMCP("hot articles")JUEJIN_BASE_URL = "https://api.juejin.cn/content_api/v1/content/article_rank?category_id=1&type=hot"USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"ARTICLE_BASE_URL = "https://juejin.cn/post/"async def get_juejin_articles_rank():    headers = {        "User-Agent": USER_AGENT,    }    async with httpx.AsyncClient() as client:        try:            response = await client.get(JUEJIN_BASE_URL, headers=headers)            response.raise_for_status()            return response.json()["data"]        except Exception as e:            return Nonedef data_format(data):    article_list = []    for content in data:        article = {            "title": content["content"]["title"],            "url": ARTICLE_BASE_URL + content["content"]["content_id"],            "author": content["author"]["name"]        }        article_list.append(article)    return article_list@mcp.tool()async def mcp_tool_get_juejin_articles_rank(count: int):    """    获取掘金文章    :param count: 控制获取的文章数量    :return: 文章列表    """    data = await get_juejin_articles_rank()    if not data:       return []    data = data_format(data)    if count > len(data):        count = len(data)    return data[:count]if __name__ == "__main__":    mcp.run()
    可以看到,基本符合我上面所提到的MCP Server代码模板

MCP使用

接下来,我们继续在Cherry Studio中使用

【实战】手把手学习写一个MCP服务,获取热榜文章

先在MCP服务器里配置,因为这次是咱们自己本地开发的,所以通过绝对路径的方式进行服务执行就行,让Cherry Studio帮我们执行服务

uv run 绝对路径Pathmcp_server.py

然后我们回到对话框中

【实战】手把手学习写一个MCP服务,获取热榜文章

选择启动该MCP服务

然后进行对话

【实战】手把手学习写一个MCP服务,获取热榜文章

可以看到成功执行!

原文始发于微信公众号(飞羽技术工坊):【实战】手把手学习写一个MCP服务,获取热榜文章

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月9日16:20:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【实战】手把手学习写一个MCP服务,获取热榜文章http://cn-sec.com/archives/4044824.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息