大模型MCP极简入门:用 Python 打造你的第一个 MCP 工具

新手接触 MCP 时,常常会MCP提供的几种能力: resource(资源)、 prompt(提示词)、tools(工具)的概念绕晕。 简单来说:

  • resource 就像做饭用的食材;
  • prompt 则是对做法的规范要求;
  • tools 是做饭过程中需要用到的铲子、锅、手机(查询菜谱)

但在实际开发中,主流 AI IDE或者插件(像 Cursor、Cline)对resourceprompt 功能的支持比较有限,因为它们通常只能访问本地资源,通过 IDE 自带的能力完全可以替代,所以比较鸡肋。 所以咱们今天重点聊聊 MCP 里真正能打的 “实战武器”——tools(工具模块),通过两个具体案例带你快速上手。

一、极简入门:用 Python 打造你的第一个 MCP 工具

为什么选这个案例?

就像学编程要先写 Hello World,我们先用一个超简单的 come on 工具来理解 MCP 工具的核心逻辑。它的功能很单纯:接收一个名字,返回一句加油打气的话,比如输入 “小明”,就输出 “小明,加油!你一定能搞定的!”。

开发步骤

1. 准备环境

  • 安装 Python
    • windows 安装
    • mac 安装
    • linux 安装
  • 安装依赖包
pip install mcp

2. 编写代码

from mcp.server.fastmcp import FastMCP

# 创建一个MCP服务器
mcp = FastMCP("encouragement")

# 添加一个打气工具
@mcp.tool()
def come_on(name: str) -> str:
    """接收一个名字,返回一句加油打气的话"""
    return f"{name},加油!你一定能搞定的!"

if __name__ == "__main__":
    # 启动服务器
    mcp.run() 

我们使用 FastMCP 仅仅10 行左右代码就可以完成一个 MCP Server 编写。

3.客户端使用

找一个支持 MCP 的客户端比如 Cursor、Cline, 我这里以 Cursor 为例:

{
    "mcpServers": {
        "come_on": {
            "command": "python",
            "args": [
                "{文件路径}/come_on.py"
            ]
        }
    }
}

注意把 {文件路径} 替换为你本地代码所在路径。 看看使用效果:

img

二、企业级实战分享:打通飞书协作

对于一些需要认证授权的企业平台,我们可以利用MCP和平台提供的 openapi 将数据流打通。

搜索飞书项目需求

我们可以直接利用MCP工具全局搜索飞书需求(飞书提供了openapi),减少不同工具的切换、搜索、拷贝内容的时间,代码使用 go 编写。

核心代码如下:

func (t *FeishuProjectMCP) NewWorkItemListTool() mcp.Tool {
// 创建搜索工具
 tool := mcp.NewTool(
"search_feishu_story",
  mcp.WithDescription(
   "用于搜索飞书需求并返回结果。"+
    "如果只找到一个需求,将自动返回其详细信息;如果找到多个需求,将返回列表供选择,请和用户确认查看哪一个需求详情"+
    "注意:只有出现 '飞书'、'需求'、'story'、'feishu'、'lark' 等匹配度较高的关键字才会调用此工具",
  ),
  mcp.WithString("project_key",
   mcp.Description("项目key, 选填,不填则默认可访问的所有项目"),
  ),
  mcp.WithString("description",
   mcp.Required(),
   mcp.Description("需求描述关键词"),
  ),
 )

return tool
}

// handleWorkItemList 处理搜索需求工具
func (t *FeishuProjectMCP) HandleWorkItemList(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
 description, ok := request.Params.Arguments["description"].(string)
if !ok {
return mcp.NewToolResultError("description must be a string"), nil
 }
 projectKey, _ := request.Params.Arguments["project_key"].(string)

 result, err := t.Client.SearchRequirements(ctx, t.UserKey, projectKey, description)
if err != nil {
  slog.Error("Search error", "error", err)
return mcp.NewToolResultError(err.Error()), nil
 }

// 如果只找到一个需求,直接获取详情
iflen(result.Items) == 1 {
  item := result.Items[0]
  storyID, err := strconv.ParseInt(item.ID, 10, 64)
if err != nil {
   return mcp.NewToolResultError(fmt.Sprintf("转换需求ID失败: %v", err)), nil
  }
  detail, err := t.Client.GetRequirementDetail(ctx, item.ProjectKey, t.UserKey, storyID)
if err != nil {
   return mcp.NewToolResultError(fmt.Sprintf("获取需求详情失败: %v", err)), nil
  }

// 格式化详情输出
  formattedDetail := formatRequirementDetail(detail)
  response := mcp.NewToolResultText(fmt.Sprintf("找到一个匹配的需求,详情如下:\n\n%s", formattedDetail))
return response, nil
 }

// 如果找到多个需求,返回列表供选择
iflen(result.Items) > 1 {
// 格式化需求列表
  formattedList := formatRequirementList(result.Items)
return mcp.NewToolResultText(fmt.Sprintf(`找到 %d 个匹配的需求,请选择一个查看详情:

%s

要查看详情,请使用 get_feishu_story_detail 工具,并提供相应的 space_id 和 story_id。`, len(result.Items), formattedList)), nil
 }

// 没有找到需求
return mcp.NewToolResultText("未找到匹配的需求,请尝试使用其他关键词。"), nil
}

获取飞书文档

企业飞书文档大部分不是公开的,我们也需要使用 openapi 的方式获取。

核心代码如下:

func (t *FeishuDocMCP) NewGetFeishuDocTool() mcp.Tool {
return mcp.NewTool("get_feishu_doc",
  mcp.WithDescription("获取飞书文档内容"),
  mcp.WithString("url",
   mcp.Description("飞书文档链接"),
   mcp.Required(),
  ),
 )
}

func (t *FeishuDocMCP) HandleGetFeishuDoc(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
 slog.Info("handling get feishu doc")

// 获取文档链接参数
 url, ok := request.Params.Arguments["url"].(string)
if !ok || url == "" {
  slog.Error("invalid or missing url parameter")
return mcp.NewToolResultText("文档链接参数无效或缺失"), nil
 }

// 获取文档内容
 content, err := t.client.GetFeishuDocumentContent(url)
if err != nil {
  slog.Error("failed to get feishu document content",
   "error", err,
   "url", url)
return mcp.NewToolResultText(fmt.Sprintf("获取文档内容失败: %v", err)), nil
 }

 slog.Info("feishu document content retrieved successfully",
"url", url)

return mcp.NewToolResultText(content), nil
}

为什么要使用 SSE

为什么建议企业内使用 SSE 的方式维护 MCP 工具。

降低使用门栏:无需安装 npx、docker 之类的包管理工具,去除了环境依赖。

统一管控:所有 MCP 工具的输出都通过 SSE 服务中转,涉及到密钥等敏感信息可以统一在服务端管控。

快速迭代:当工具功能更新时,只需要升级 SSE 服务,员工端无需任何操作,就像手机 APP 后台自动更新。

三、系统打通的另一个思路:浏览器自动化

针对每个三方系统,我们需要开发对应工具去解决认证授权问题,接入openapi,比较麻烦。

还有一个通用的方案是:通过浏览器自动化访问,因为浏览器本身存储了我们的 cookie 等认证信息,我们可以复用。 目前开源比较好用的浏览器自动化 MCP 是 playwright你可以使用如下配置:

{
    "mcpServers": {
        "playwright": {
            "isActive": true,
            "command": "npx",
            "args": [
                "@playwright/mcp@latest"
            ],
            "name": "playwright"
        }
    }
}

缺点:流程长、效率低

优点:减少开发量

四、MCP 当前的问题

如果经常浏览 MCP 的工具网站,你会发现很少有一些涉及到复杂权限的工具,比如 飞书、飞书项目这类的,因为 MCP 协议目前还不太完善,在权限、SSE等相关方面仍然是有缺陷,没有统一的解决方案。

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

如果你真的想学习大模型,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

大模型全套学习资料领取

这里我整理了一份AI大模型入门到进阶全套学习包,包含学习路线+实战案例+视频+书籍PDF+面试题+DeepSeek部署包和技巧,需要的小伙伴文在下方免费领取哦,真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四、LLM面试题

在这里插入图片描述
在这里插入图片描述

五、AI产品经理面试题

在这里插入图片描述

六、deepseek部署包+技巧大全

在这里插入图片描述

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值