文章目录
前言
什么是模型上下文协议(MCP)?
MCP(模型上下文协议)是一种用于将人工智能应用程序连接到外部系统的开源标准。
借助MCP,像Claude或ChatGPT这样的AI应用程序可以连接到数据源(如本地文件、数据库)、工具(如搜索引擎、计算器)和工作流程(如专门的提示)------从而使它们能够访问关键信息并执行任务。
将MCP视为人工智能应用的USB-C端口。正如USB-C为电子设备连接提供了标准化方式,MCP也为人工智能应用与外部系统的连接提供了标准化方式。

一、使用MCP
之前的Claude Code使用(智谱)的时候,我们安装了智谱提供的4种MCP服务,这里我们就来使用它。
1.命令行
bash
# mcp服务列表
claude mcp list
# 获取服务详情
claude mcp get github
# 删除服务
claude mcp remove github
使用VSCode命令行执行即可,可以看到智谱的4种MCP服务都有了
2.mcp使用
mcp命令执行用插件更方便一些,看个人习惯
2.1 mcp
bash
/mcp

这里我们使用web-reader,具体介绍请参考官方网站
2.2 Web-reader

2.2.1 View tools(介绍)


2.2.2 Reconnect(使用)
Web-reader主要作用是抓取网页,这里以
https://www.baidu.com/为例直接输入百度网址,程序会自动转换成适合工具的参数,回车即可
二、搭建MCP服务
这里我们使用Go开发一个自己的MCP服务
1.main.go
go
package main
import (
"context"
"errors"
"fmt"
"os"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
)
func main() {
s := server.NewMCPServer(
"MCP Server",
"1.0.0",
)
// 添加工具
{
calculatorTool := mcp.NewTool("calculate",
mcp.WithDescription("执行基本的算术运算"),
mcp.WithString("operation",
mcp.Required(),
mcp.Description("要执行的算术运算类型"),
mcp.Enum("add", "subtract", "multiply", "divide"), // 保持英文
),
mcp.WithNumber("x",
mcp.Required(),
mcp.Description("第一个数字"),
),
mcp.WithNumber("y",
mcp.Required(),
mcp.Description("第二个数字"),
),
)
s.AddTool(calculatorTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
args, ok := request.Params.Arguments.(map[string]interface{})
if !ok {
return nil, errors.New("invalid arguments type")
}
op, ok := args["operation"].(string)
if !ok {
return nil, errors.New("operation must be a string")
}
xFloat, ok := args["x"].(float64)
if !ok {
return nil, errors.New("x must be a number")
}
yFloat, ok := args["y"].(float64)
if !ok {
return nil, errors.New("y must be a number")
}
var result float64
switch op {
case "add":
result = xFloat + yFloat
case "subtract":
result = xFloat - yFloat
case "multiply":
result = xFloat * yFloat
case "divide":
if yFloat == 0 {
return nil, errors.New("不允许除以零")
}
result = xFloat / yFloat
}
fmt.Printf("计算结果: %f\n", result)
return mcp.FormatNumberResult(result), nil
})
}
// 添加资源
{
// 静态资源示例 - 暴露一个 README 文件
resource := mcp.NewResource(
"docs://readme",
"项目说明文档",
mcp.WithResourceDescription("项目的 README 文件"),
mcp.WithMIMEType("text/markdown"),
)
// 添加资源及其处理函数
s.AddResource(resource, func(ctx context.Context, request mcp.ReadResourceRequest) ([]mcp.ResourceContents, error) {
content, err := os.ReadFile("README.md")
if err != nil {
return nil, err
}
return []mcp.ResourceContents{
mcp.TextResourceContents{
URI: "docs://readme",
MIMEType: "text/markdown",
Text: string(content),
},
}, nil
})
}
// 添加提示词
{
// 简单问候提示
s.AddPrompt(mcp.NewPrompt("greeting",
mcp.WithPromptDescription("一个友好的问候提示"),
mcp.WithArgument("name",
mcp.ArgumentDescription("要问候的人的名字"),
),
), func(ctx context.Context, request mcp.GetPromptRequest) (*mcp.GetPromptResult, error) {
name := request.Params.Arguments["name"]
if name == "" {
name = "朋友"
}
return mcp.NewGetPromptResult(
"友好的问候",
[]mcp.PromptMessage{
mcp.NewPromptMessage(
mcp.RoleAssistant,
mcp.NewTextContent(fmt.Sprintf("你好,%s!今天有什么可以帮您的吗?", name)),
),
},
), nil
})
}
// 创建基于 HTTP 的服务器实例
fmt.Printf("Mcp server started on http://localhost:8080\n")
httpServer := server.NewStreamableHTTPServer(s)
// 启动服务器,监听指定端口(如 :8080)
err := httpServer.Start(":8080")
if err != nil {
panic(err)
}
}
2.添加MCP服务
bash
claude mcp add --transport http mcp-server http://localhost:8080/mcp --header "X-API-Key: API-Key"

3.启动MCP服务

4.访问MCP服务
4.1 mcp
我们自己的MCP服务已经加载出来了
4.2 mcp-server

4.2.1 View tools(介绍)
这是一个计算器工具,一共3个参数,第一个是算术运算符,第二个是数值x,第三个是数值y

4.2.2 Reconnect(使用)

MCP流程:连接mcp-server》输入参数》思考》调用工具》计算
到这里我们的MCP服务就搭建成功了。
三、扩展
1.MCP服务核心功能
MCP通过三个构建模块提供功能:
| 特性 | 解释 | 示例 | 谁控制它 |
|---|---|---|---|
| Tools | 你的大型语言模型(LLM)可以主动调用的函数,并根据用户请求决定何时使用它们。这些工具可以写入数据库、调用外部应用程序编程接口(API)、修改文件或触发其他逻辑。 | 搜索航班--发送消息--创建日历事件 | Model |
| Resources | 被动数据源,提供对上下文信息的只读访问,如文件内容、数据库模式或API文档。 | 检索文档--访问知识库--查看日历 | Application |
| Prompts | 预先构建的指令模板,指示模型使用特定的工具和资源进行工作。 | 计划一次度假--总结我的会议内容--起草一封电子邮件 | User |
这几个知识点是必须要知道的
2.MCP服务
更多MCP服务请参考Github
总结
回到顶部
官方网站
官方文档
Claude Code使用MCP
其实呢,MCP是个服务端和客户端架构,我们只用到了服务端,使用Claude Code来代替客户端了,官方案例里面有很多客户端介绍,有需要的小伙伴可以自己了解下。


