MCP协议的Calling Convention

MCP协议的实现需要三个部分: Server和Client,以及Host

我们这里介绍MCP Server的原理, Host可以是任何支持MCP协议的应用程序(一般包含Client服务)。

例如:Cline、Cursor等 参考这篇文章MCP到底是什么,原理是啥?

MCP的三个基础能力

  • Resources:提供资源访问,如文件读取或 API 响应内容
  • Tools:提供工具函数功能,或者第三方服务的调用
  • Prompts:提供预定义的提示词模板,用于完成特定任务

工作流程

flowchart LR
Client[客户端应用] <--> Protocol{MCP 协议}
Protocol <--> Server[MCP 服务器]
Server --> Resources[资源访问]
Server --> Tools[工具功能]
Server --> Prompts[提示词模板]
Resources --> Files[(文件系统)]
Resources --> APIs[(外部 API)]
Tools --> Functions[函数执行]
Tools --> Services[第三方服务]
Prompts --> Templates[(任务模板)]

MCP Server 接收数据

  • 开发参考快速上手 | MCP SDK
  • 请求格式:MCP Server 采用 JSON-RPC 2.0 协议接收数据。
  • 通信方式:支持通过 stdio(标准输入输出)和 sse(Server-Sent Events)进行通信。

调试工具

官方提供了一个调试工具,方便开发者测试和调试 MCP Server:

npx @modelcontextprotocol/inspector node .\server.js

请求示例

客户端向 MCP Server 发送请求的格式如下:

{
"jsonrpc": "2.0",
"id": 1,
"method": "resources/list",
"params": {}
}
  • jsonrpc: 协议版本,固定为 "2.0"
  • id: 请求唯一标识符
  • method: 调用的方法名
  • params: 方法参数(对象或数组)

命令行调用示例

可以通过命令行直接向 MCP Server 发送请求:

$ echo '{"jsonrpc":"2.0","id":1,"method":"resources/list","params":{}}' | node path\to\mcp_server\index.js

> {"jsonrpc":"2.0","id":1,"result":{"resources":[{"uri":"useful://system-info","name":"系统信息","description":"提供系统相关的基本信息"},{"uri":"useful://date-time","name":"日期和时间","description":"提供当前的日期和时间信息"}]}}

响应示例

MCP Server 返回的响应格式如下:

{
"jsonrpc": "2.0",
"id": 1,
"result": {
"resources": [
{
"uri": "useful://system-info",
"name": "系统信息",
"description": "提供系统相关的基本信息"
},
{
"uri": "useful://date-time",
"name": "日期和时间",
"description": "提供当前的日期和时间信息"
}
]
}
}
  • result: 方法调用的返回结果
  • resources: 资源列表,每个资源包含 urinamedescription

错误响应示例

当请求出错时,MCP Server 会返回如下格式的错误信息:

{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32601,
"message": "Method not found"
}
}
  • error.code: 错误码,遵循 JSON-RPC 规范
  • error.message: 错误描述

常见方法

方法名 说明 参数 返回值说明
resources/list 获取资源列表 - 资源数组
resources/read 获取指定资源详情 uri 资源对象
tools/list 获取可用工具列表 - 工具数组
tools/call 调用指定工具方法 name, arguments 方法调用结果
prompts/list 获取可用提示词模板 - 提示词模板数组
prompts/get 获取指定提示词模板 name 提示词模板对象

推荐阅读

手把手调试MCP Server,RTFM!的更多相关文章

  1. 使用WinDbg调试SQL Server查询

    上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...

  2. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  3. Eclipse调试cas server 3.5.2.1

    由于在配置CAS+LDAP总是报错,决定Eclipse调试cas server,跟踪问题出在哪里? ================================================== ...

  4. 如何设断点????-----使用WinDbg调试SQL Server查询

    http://www.cnblogs.com/woodytu/p/4665427.html http://www.sqlservercentral.com/blogs/aschenbrenner/20 ...

  5. VS调试SQL Server存储过程

    1.打开VS,视图-->SQL Server对象资源管理器.(我用的是VS2012) 2.添加链接,连接到数据库. 3.选择要调试的存储过程,右键,选择调试过程或者执行过程. 4.填写存储过程所 ...

  6. Visual Studio 2017 调试 windows server 2016 Docker Container

    网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的.用知道windows server 2016已经原生支持Docker了,其windows Con ...

  7. 调试SQL Server的存储过程及用户定义函数

    分类: 数据库管理 2005-06-03 13:57 9837人阅读 评论(5) 收藏 举报 sql server存储vb.net服务器sql语言 1.在查询分析器中调试 查询分析器中调试的步骤如下: ...

  8. IDEA远程调试Ambari Server

    1.配置端口 Ambari Server默认配置了服务端的debug参数,端口为5005.如果要修改端口,可以在/usr/sbin/ambari_server_main.py文件中对应地方修改,直接改 ...

  9. 调试X Server

    发现错误 运行X之后出现了错误: Program received signal SIGSEGV, Segmentation fault. 0x00007fbc3336fb63 in ?? () fr ...

  10. VS 调试Window Server方法

    在需要调试的地方加 Debugger.Launch();然后在本机安装服务并启动即可进入

随机推荐

  1. 前端开发系列077-Node篇之package

    本文输出Node中和包有关的基本内容. 一.Node中的模块和包 模块 在Node中,以模块为单位来划分所有的功能. 从某种角度来说,Node应用都由大量模块组成,每个模块都是一个JavaScript ...

  2. ABC396(VP)

    本来明天有活动,晚上 VP 了一场 abc 找找手感,结果活动取消了(. 额,算了一下,大概是 rk.730 左右,打了就是上分局. A - Triple Four 按照题目模拟即可. 点击查看代码 ...

  3. ETL数据集成丨为什么没有做好ETL的BI工具最终都会失败?

    随着数字化转型,企业越来越重视数据的价值和利用.商业智能(Business Intelligence,BI)作为一种数据分析和决策支持的重要工具,被广泛应用于各行各业.然而,对于BI项目的成功实施,E ...

  4. Docker部署RestCloud ETL社区

    镜像说明 nriet/restcloud:latest version:1.3.0 os:slim-buster tomcat:基于官方镜像 tomcat:8.5.78-jdk8-openjdk-sl ...

  5. SciTech-Mathmatics-Analysis: Bouncing Function(震荡函数, 导数±震荡):L'Hospital + 点导数 + 导数 + 连续 + 极限 + 领域 +

    SciTech-Mathmatics-Analysis: 考研易错概念: 一点的导数大于0, 能不能推出函数在某邻域单调递增? ✘ 无穷小的倒数,一定为无穷大? ✘ \(\large L'Hospit ...

  6. ICEE-Power-SCR-OptoisolaterDriver-MOC Series-MOC3081/2/3: 6-Pin DIP Zero-Cross TriacDriver Optocoupler (800 V Peak)

    English Words: Thyristor: 可控硅 SCR: 单向可控硅 SCRs are unidirectional (one-way) current devices, making t ...

  7. js入门基础语法

    js入门基础语法 什么是javaScript 概述 javaScript是世界上最流行的一门脚本语言 javaScript是一门很随意的语言 有句话叫做如果可以重新来过我就只愿意学javaScript ...

  8. 04hanzi.py(汉字搜索)

    # name: 04hanzi.py # date: 20240609 # programmer: arithmus # memo: find hanzi string import re def i ...

  9. SQL Server 事件探查器安装

    平时调试SQL,使用事件探查器习惯了,但是现在用了一台机器没有安装事件探查器,而且尝试过再次安装,添加新功能,但是没有事件探查器选项,最近调试实在受不了看代码逻辑调试了,所以上网搜了一下,发现有解决方 ...

  10. javascript 执行机制(同步、异步、微任务、宏任务)

    一.关于javascriptJS是一门单线程语言,这意味着所有的任务都需要排队,前一个任务结束才会执行后一个任务如果前一个任务耗时很长,后一个任务就不得不一直等着.这样所导致的问题是: 如果 JS 执 ...