带你从呼吸开始了解MCP

1、什么是agent

        大语言模型很强,但它的局限性很大,它只能是一颗很强的大脑,它既无法获取新的知识,也没有手脚做事。比如说我想知道github上有没有什么好玩的项目,有没有值得关注的开发者,它的训练的语料里没有这个开发者或者项目,就会找不到这些内容,为了解决这个问题,agent(智能体)就出现了。

        Agent其实就是将LLM和一些程序结合起来。LLM为了让自己获得更多的信息或者做一些工作,通过一些程序来让自己获得更多的信息或者完成工作,这些程序就叫做Tool。

         那么,现在再去问LLM在GitHub上有什么好玩的项目值得推荐,这个LLM就可以通过Tool去获得GitHub上的信息。它的工作流程就变成用户询问LLM,LLM在使用Tool去解决这个问题,然后返回相应的信息给LLM,最LLM将整理好的信息回答给用户。

         通过这个流程,LLM就可以拥有手和脚去完成我们想要它帮我们完成的问题了。

2、什么是MCP

        虽然,agent很强大,但是,Tool的构造成本很大,这样子就又引发了下面一个问题。假设,我有一个项目A通过Tool实现了查询GitHub好玩的项目,实现项目A的Tool使用的语言是Python,后来我想用项目B使用项目A的Tool,可是项目B使用的是Java,这个Tool就无法使用了,我就得用Java去再实现这个Tool,这样子重复造轮子很浪费时间。

        这时候就出现了MCP(Model Context Protocol)模型上下文协议,直接把Tool做成了一个单独的服务,这样子我们就可以像使用API一样去调用这个Tool服务。MCP架构是由Anthropic提出来的,它定义了模型要如何获取上下文Prompts(提示词)、Resources(资源)、Tools(函数),这里的Resource可以是数据库或者是别的文档,MCP的出现可以大大增加了Tool的复用性。

       

3、MCP的架构

        MCP既然是LLM调用工具去实现的,那么它的模型就像调用API一样,通过调用Client去完成Server。不过,MCP的工作流程和API的调用流程不一样,发送请求是通过MCP Protocol,这个MCP Protocol就是一串JSON格式的数据。

        MCP的工作流程,就是通过User发送Query,Client根据这个Query和MCP Server还有Tools去形成一个新的Prompt发送给LLM,LLM通过这个新Prompt调用MCP Client,MCP Client再去MCP Server里调用对应的Tool。

4、实现和使用MCP

        现在,我们来实现一个Server,这个Server的功能就是调用GitHub的API。使用uv建立一个新的项目。uv是一个管理python的工具,不使用也没有关系。

uv init github-mcp-server

# 进入项目
cd github-mcp-server

# 下载一些关键的依赖, PyGithub是一个库,mcp[cli]是我们要做的服务
uv add PyGithub "mcp[cli]"

# 并下载一些依赖
uv pip install PyGithub python-dotenv

# 并创建一个新文件.env,这个文件存放你GitHub的TOKEN
mkdir .env

        打开.env写入你GitHub里的TOKEN。这个要去GitHub申请,先找到setting,然后点击Developer Settings,在Personal access tokens里配置自己的GitHub API。

GITHUB_TOKEN=你的TONKEN

        我们打开main.py这个文件,修改里面的内容,并把这个文件的名字改成github_server.py,general_search函数一定要写详细你的docstring,这样子LLM才知道这个函数是干什么的。

from github import Github
from mcp.server.fastmcp import FastMCP
import os
from dotenv import load_dotenv

load_dotenv()

# Initialize GitHub client
g = Github(os.getenv('GITHUB_TOKEN'))

# Initialize FastMCP server
mcp = FastMCP('GitHub MCP Server')

@mcp.tool()
def general_search(keyword: str) -> dict:
    """
    Search GitHub repositories with the given keyword.

    Args:
        keyword: Search term to look for on GitHub

    Returns:
        Dictionary containing the search results from GitHub API.
    """
    result = g.search_repositories(query=keyword, sort="stars", order="desc")
    
    return {
        "total_count": result.totalCount,
        "items": [{"name": repo.name, "url": repo.html_url, "description": repo.description} for repo in result]
    }

if __name__ == '__main__':
    # Use local
    mcp.run(transport='stdio')

        定义好了MCP Server之后,找一个Client和它连接,这里我使用的是Vs code插件里的Client,需要配置好模型的API,这里就不赘述了。找到Client然后打开MCP Server点击Installed找到Configure MCP Servers,写好MCP Server。这里由于我使用的是uv,所以command里写的就是uv,如果你使用的不是uv,那么你就写python,args里不是使用uv的话就只写路径和文件名即可,这样子就配置好了MCP Server,就可以看见这里是绿色的小点。

{
  "mcpServers": {
    "github_server": {
      "command": "uv",
      "args": [
        "--directory",
        "D:/blog/github-mcp-server",
        "run",
        "github_server.py"
      ]
    }
  }
}

        这样,我们就可以直接使用自己写的MCP Server了。

最后,完整项目在这里。

参考资料

1、MCP,让 AI 再次伟大_哔哩哔哩_bilibili

2、Anthropic: Introducing the Model Context Protocol long detailed title

3、EP154: What is MCP? long detailed title

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值