【保姆级教程-从0开始开发MCP服务器】二、使用ClaudeCode连接第一个MCP服务器

前言

这个系列主要是介绍MCP是什么,如何连接MCP Server以及如何自己进行MCP Server开发。

这个系列将包含四篇文章,采取渐进式的学习方式来逐渐掌握MCP开发:

  • 先帮助大家理解MCP的核心概念和协议规范
  • 尝试在Claude Code中连接几个MCP Servers并感受其所带来的魅力(本文内容)
  • 手动去搭建一个本地的stdio Mcp Server
  • 如何创建企业级的MCP Server

上一篇文章中,主要介绍了MCP的来时路和深入浅出其概念。在本篇文章中,我们将连接多个不同类型的MCP Servers,体验一下LLMs究竟是如何通过MCP打破和其他软件的壁垒的,感受其强大的魔力!

在正式连接MCP服务器之前,还是要花点篇幅讲讲MCP Servers与MCP客户端之间的传输方式。这会帮助我们更好地理解下文中的多种连接方式。

MCP Servers传输方式有哪些?

下面三种服务器类型是MCP Servers在某一维度上的分类:

  • 本地stdio服务器
  • 远程SSE服务器(已废弃)
  • 远程HTTP服务器

这个维度指的就是其与客户端之间的传输方式,即指LLMs如何和相应的MCP服务器进行通信的。

不同的传输方式决定了服务器在使用和开发时很大的不同。接下来我们就依次来讲讲这三种服务器的不同。

本地stdio服务器

stdio是一个简称,全称是standard input/output,标准输入/输出。MCP客户端和服务端在本地进程间通过标准输入/输出通信。

txt 复制代码
┌─────────────┐    stdin/stdout    ┌─────────────┐
│   Client    │ ◄────────────────► │ MCP Server  │
│ (Claude)    │                    │   (stdio)   │
└─────────────┘                    └─────────────┘

客户端会启动服务器进程,通过JSON-RPC 2.0协议交换消息,服务器进程会随着会话启动和结束。

这样做的好处是显而易见的,stdio服务器的生命周期跟随会话,不会在会话结束后仍然占用资源,缺点则是它只能与本地的LLMs客户端建立连接,所以也叫做本地stdio服务器。

之所以要客户端启动stdio,是因为不这样做的话,二者就无法使用stdio进行通信了。

bash 复制代码
# stdio 通信的实现原理
父进程 (Client) ──fork/exec──► 子进程 (Server)
    │                               │
    └─── stdin/stdout 管道 ─────────┘

stdin/stdout 是父子进程之间的管道,只有启动进程的父进程才能访问子进程的 stdin/stdout。

在下文中,我们将以一个excel_mcp_server的例子来试一下在Claude Code中如何连接本地的stdio类型的服务器。

SSE服务器

SSE全称是Server-Sent Events,服务器推送事件,这是一种服务端实时主动向浏览器推送消息的技术。它有点像WebSocket技术,但不同的地方在于:

  • SSE是基于HTTP协议的,WebSocket是基于TCP协议的
  • SSE不是双全工的,只能服务器单向发送消息

那客户端是如何进行客户端到服务器的消息传输的呢?用的是HTTP协议的POST请求方式。

bash 复制代码
┌─────────────┐    GET /sse     ┌─────────────┐
│   Client    │ ──────────────► │   Server    │
│             │                 │             │
│             │ ◄──── SSE ────  │             │ (单向流)
│             │                 │             │
│             │ ── POST /mcp ──►│             │ (请求)
└─────────────┘                 └─────────────┘

但是❗️这个SSE的传输方式被后来的HTTP方式(严谨点讲应该叫做Streamable HTTP的传输方式)给替代了。从MCP规范版本2025-03-26开始,就更加推荐使用Streamable HTTP了。

这一改变来自一个3月24号的PR(前面我们说过MCP是开源的),经过一众开发者的Review后,遂即在26号正式推荐了------不得不感叹这速度!

所以在本系列中我们不会去动手连接和开发该类型的MCP Server了。

Streamable HTTP

在Streamable HTTP(流式HTTP)传输中,服务器作为独立进程运行,可以处理多个客户端连接。这种传输使用 HTTP POST 和 GET 请求。

如果你有Web开发经验,那么你对HTTP肯定不陌生,Streamable HTTP本质上就是基于传统的Web2.0的HTTP协议的,它们的主要区别就在于使用模式和返回处理上。

使用模式

传统的Web2.0 HTTP的API是遵循RESTful风格的。

bash 复制代码
# RESTful API - 多个端点,资源导向
GET    /api/users/123        # 获取用户
POST   /api/users            # 创建用户
PUT    /api/users/123        # 更新用户
DELETE /api/users/123        # 删除用户

# 每个端点有特定功能
POST   /api/calculate
POST   /api/upload-file
GET    /api/search?q=query

但是MCP下的Streamable HTTP是单一端点的:/mcp

bash 复制代码
# 单一端点 - RPC 导向
POST /mcp    # 所有操作都通过这一个端点
{
  "jsonrpc": "2.0",
  "method": "tools/call",      # 方法名在消息体内
  "params": {...},
  "id": 1
}

POST /mcp    # 同一个端点,不同方法
{
  "jsonrpc": "2.0",
  "method": "resources/read",   # 不同的方法
  "params": {...},
  "id": 2
}

流式处理

传统的HTTP都是无状态连接,客户端发起请求,服务端响应返回结果,然后就结束了。

而Streamable HTTP却以流式数据进行响应。流式传输的优势显而易见,相比于传统的响应方式,它不需要等待服务端完全准备好"答案"后再返回给客户端。而是能做到即时反馈,渐进式披露,符合人类的说话和阅读习惯。

从技术角度上看,流式处理对服务器的压力也小。传统的一次性返回,内存峰值较高,而流式传输内存使用也更平稳一点。

Claude Desktop中使用MCP

前面介绍了MCP Servers的传输方式,在后面去连接不同传输方式的Server时的命令是有稍微的差别的。我们接下来就会去连接多个不同类型的MCP Servers。

除了体会不同传输方式的连接的不同之外,更多的是想让首次接触MCP的朋友们去感受MCP真正的魅力所在------打破AI与常规软件间的壁垒。

在Claude Code中连接MCP Servers之前,我们先在Claude的桌面程序中小试牛刀一番。

Claude Code是Claude的命令行工具,正是它的出现进一步促进了AI编程工具的进化,继而逐渐取代了Cursor等AI编程工具。而Claude桌面程序就是类似于ChatGPT一样,只是一个问答式的AI产品。Claude桌面程序是免费下载使用的,其中部分MCP工具是可以免费连接使用的,但如果想用到更多的MCP工具则需要升级账号。而Claude Code则是必须付费才能使用的。

在Claude Desktop的Setting->Extensions->Browse extensions中有多个MCP了。它们分为两部分:

  • Desktop extensions
  • Web

其中Desktop的连接器指的就是连接你电脑上的本地软件的,比如文件系统、谷歌浏览器、苹果电脑下的短信和备忘录等。

而Web下的则是一些非本地软件,一些网站系统。比如Cloudflare、Figma、Notion、Vercel等。(需要升级账户

在这里面安装这些已经内置(指该Connector页面中包含的)的MCP Servers非常容易,本地的直接下载安装,远程的直接连接上就可以了。

下面我们就以Read and Write Apple Notes这个MCP插件来看看MCP究竟能给我们带来什么?我们的用例就是让Claude帮我分析总结一下我过往的旅游备忘录:

询问Claude,请帮我分析、总结一下我的Notes中旅游Folder下的内容:

Claude成功读取了Notes中的内容,并且给出了相应的分析结果。MCP确实打破了大模型与本地软件的壁垒了!

不过有同学可能会问,ChatGPT 的work with功能早就能实现了与本地软件的交互了。

MCP的魔力不光是连接本地软件与大模型,而是将所有与大模型连接的方式规范化,所以理论上通过MCP,大模型可以连接到任意的软件与系统之中。接下来我们就看看在Claude Code中以命令行的方式去连接各种各样的MCP(不仅限于上述Connectors页面中的那些了)!

除了桌面应用的 Settings > Extensions 界面来浏览和添加扩展外,也可以通过编辑claude_desktop_config.json配置文件来添加MCP服务器,但这个不是我们本文的重点。

使用Claude Code连接第一个MCP Server

Claude Code中连接MCP Server的基本命令语法

安装了Claude Code之后,就可以在终端中以命令行的方式进行MCP Server的安装连接了。

bash 复制代码
# 基本语法
claude mcp add <name> <command> [args...]

没错,就这么一行命令就可以了,非常的简单。下面我们将从各个案例中逐渐去学习具体的使用方法。

连接Notion

Notion官方自己构建了Notion产品(一个强大的笔记软件)相应的Notion MCP Server(在官网中简称为Notion MCP)。官方推荐使用Streamable HTTP的方式来连接Notion MCP。

接下来我们就以Claude Code为例,看如何连接这个Notion MCP。

bash 复制代码
claude mcp add --transport http notion https://mcp.notion.com/mcp

其中--transport http是规定了传输方式使用http,如果不加默认是stdio传输方式,这就是前文介绍不同传输方式时提到的不同传输方式的服务器在使用上的不同;notion是<name>的值,表示给你的mcp server起个名字,后面则是要连接的具体的Streamable HTTP的端点。

bash 复制代码
claude mcp add --transport http notion https://mcp.notion.com/mcp

Added HTTP MCP server notion with URL: https://mcp.notion.com/mcp to local config
File modified: /Users/yaodao/.claude.json [project: /Users/yaodao/open-project]

成功添加后,在~/.claude.json中则会自动添加上MCP的配置信息。使用claude mcp list命令可以查看已添加的mcp servers的状态。实际上,Claude就是使用配置文件的方式来管理这些MCP Server的,后面我们会提到如何使用配置文件的方式来添加MCP Server,在此先按下不表。

接下来我们进入Claude Code中,与之对话,看它是否能够与Notion交互。(首次添加会进入Notion鉴权的步骤,按照提示完成鉴权即可)

bash 复制代码
claude

这次我们的案例是让Notion帮我展示出我本周要做的事情,并把写MCP Server 第二篇的内容这一事项的状态由进行中变为已完成。

下面是Claude Code的处理过程(省略了一些接口调用,只保留了文字信息):

bash 复制代码
> 帮我查看Notion中OKR的本周完成情况,并把写MCP Server第二篇内容的这一项任务标记为已完成

⏺ 我来帮您查看Notion中OKR的本周完成情况,并标记相关任务为已完成。

⏺ notion - Search Notion and connected sources (MCP)(query: "OKR 本周", query_type: "internal")
  ⎿  {                                                                                                                                         
       "results": [
         {
     ... +216 lines (ctrl+o to expand)

⏺ 让我获取本周(Week No. 39)的详细内容:

⏺ 现在让我查看本周要务的详细内容:

⏺ 现在让我查看这个数据源中的具体任务内容:

⏺ 找到了任务!现在让我获取这个任务的详细信息并将其标记为已完成:

⏺ 现在我将把"写MCP Server第二篇的内容"这个任务标记为已完成:

⏺ 任务已成功标记为完成!现在让我查看本周其他任务的完成情况:

⏺ 本周OKR完成情况汇总(Week No. 39)

  已完成的任务(Done):
  - ✅ 写MCP Server第二篇的内容(学习类,不紧急但重要)
  - ✅ 写IDP工作复盘和工作思路工作(工作类,不紧急但重要)
  - ✅ xxxx

  进行中的任务(In progress):
  - 🔄 xxx(工作类,紧急但不重要)

  未开始的任务(Not started):
  - ⏸ 周五报销 打印发票(工作类,紧急且重要)
  - ⏸ 查询一下研修(生活类,不紧急也不重要)

  本周完成率约为 62.5%(8个任务中完成5个),主要集中在工作类任务的完成上。"写MCP Server第二篇内容"的任务已成功标记为完成。

查看Notion后,该事项也确实标记为了Done(已完成)状态了。至此就是一个完整的MCP Server添加和使用的过程了。

这个Notion MCP Server的连接是通过Streamable HTTP方式连接的,下文中会继续展示在使用stdio服务器的方式。

从社区中去寻找你需要的MCP Servers吧!

在我的一篇翻译文章"2025年MCP最全指南🍃"中谈到了MCP的发展离不开源社区的贡献者,它们为各种软件创建了MCP Servers------LLMs与外部系统的桥梁。目前社区中已经有了超级多的MCP Servers了。

你可以在Browse All MCP Servers中去查找你所需的"桥梁"。最近在Blue Sky社交媒体上看到这样一张图,简直笑发财了:

这张图形象地展示出,现在MCP Servers的数量"多如牛毛",使用者却"凤毛麟角"。我觉得这个不是因为MCP Servers的用处不大,而是AI工具的普及度本身就没有很高,除了开发者外,其他行业的人也很少会接触到MCP,至少目前中国大陆应该是这样的。现在大部分的非开发者可能还停留在ChatGPT和DeepSeek的阶段。即使是开发者,部分也还只停留在Cursor的阶段。

废话不多说,接下来,我们就从社区中随便找一个支持本地stdio的MCP Server来连接一下------Excel MCP Server

stdio方式的Excel MCP Server

这是一个帮助连接Excel文件的MCP服务器

如果没有这个MCP Server,分析Excel是痛苦的,因为大模型不能直接读取xlsx的文件内容,必须要转成csv,但是csv又不支持多sheet,🤣 谁用谁知道。

我们进入excel-mcp-server的git仓库查看其使用说明。这个开源工具支持以上三种传输方式,但我们本次只使用本地的方式。

这是其Reamde文件给出的本地stdio方式的配置文件:

json 复制代码
{
   "mcpServers": {
      "excel": {
         "command": "uvx",
         "args": ["excel-mcp-server", "stdio"]
      }
   }
}

这个配置文件我们会在很多开源软件中都看到,但这不是MCP中定义好的配置方式。但由于 Claude Desktop 是最早和最完整的 MCP 客户端实现,其配置格式成为了业界的事实标准 。其他开发者自然而然地以它为参考。比如在gemini-cli的扩展中也是遵循这个json文件的格式的。

所以后面如果我们要开发一个开源的MCP Server,我们也需要提供这么一份配置文件供大家理解。

我们可以去修改~/.claude.json文件去配置MCP Servers,但这显然不如claude mcp add xxx来得方便。要把上面的配置文件翻译成命令行语句实在太简单了:

bash 复制代码
claude mcp add excel -- uvx excel-mcp-server stdio

claude mcp add 保持不变,excel还是那个server名称,你随意起名,command指要执行某个命令,args则是参数。

--(双破折号)将 Claude 自己的 CLI 标志与传递给 MCP 服务器的命令和参数分开。-- 之前的所有内容都是 Claude 的选项(如 --env--scope),-- 之后的所有内容都是运行 MCP 服务器的实际命令。

因为该项目使用的是python语言开发的,为了使用者方便使用,采用uvx工具来一键启动Python MCP 服务器(无需下载源码)。后面还会见到Node.js对应的npx工具。

我们将在下一篇中自己动手开发一个stdio的MCP Server,将其发布到NPM中之后,就可以直接使用无需源码的npx安装方式了。

执行上面命令后,进入claude code,让大模型帮助分析我们某个文件夹下的Excel数据。

我们接下来就让Excel MCP Server来获取Excel文件的信息喂给大模型,大模型只负责分析、总结和输出。

询问claude,分析/Users/yaodao/Downloads/maxine路径下的3个xlsx文件(来自做电商运营的媳妇给出的一些电商相关的多达十多个个sheet的excel报表),总结直播间销售额变化趋势以及寻找推广ROI为什么变低的原因。

到这里是不是MCP的魅力就逐渐凸显出来了,我们终于跨越了那条阻拦大模型和其他软件间的那条鸿沟了。

MCP安装范围的额外说明

MCP 服务器可以在三个不同的范围级别进行配置,每个级别都有不同的目的来管理服务器可访问性和共享。这不是Claude所独有的,而是MCP生态系统中的通用模式。

三个不同的范围分别是:

  • 本地范围(默认范围):个人服务器、实验性配置或特定于一个项目的敏感凭据(不要将配置文件上传到git上)
  • 项目范围:团队共享服务器、项目特定工具或协作所需的服务(可以在git中上传配置到仓库中供多人使用)
  • 用户范围:多个项目中需要的个人实用程序、开发工具或经常使用的服务

在claude code的命令行中使用 --scope 标志指定配置存储的位置:

  • local(默认):仅在当前项目中对您可用(在较旧版本中称为 project
  • project:通过 .mcp.json 文件与项目中的每个人共享
  • user:在所有项目中对您可用(在较旧版本中称为 global

比如刚刚的Excel MCP Server添加,我们可以使用下面的命令:

bash 复制代码
claude mcp add excel --scope project -- uvx excel-mcp-server stdio

# 输出内容
Added stdio MCP server excel with command: uvx excel-mcp-server stdio to project config
File modified: /Users/yaodao/open-project/.mcp.json

会发现在该目录下额外创建了一个.mcp.json的配置文件,与之前的配置文件不同了。

关于Claude Code中对MCP的使用到这里基本的就结束了,在Claude Docs-MCP章节中中还有更多关于这些使用的说明,可以作为一个速查手册去阅读使用。

总结

本文作为MCP系列的第二篇,重点介绍了如何在Claude Code中连接和使用MCP服务器。连接几个MCP服务器,主要是为了让大家感受MCP给我们生活和工作带来的巨大改变。

  • MCP打破了AI与软件间的壁垒:无论是本地的Apple Notes、Excel文件,还是云端的Notion服务,都可以通过MCP与大模型无缝交互
  • 社区生态正在快速发展:虽然目前MCP服务器数量"多如牛毛"而使用者"凤毛麟角",但这正说明了其巨大的潜力

在掌握了如何连接和使用MCP服务器后,下一篇文章将带领大家亲手搭建一个本地的stdio MCP Server,从而更深入地理解MCP的工作原理和开发模式。通过实践,我们将真正掌握如何为自己的需求创建定制化的MCP服务器。

最不重要的一点:如果有对claude code感兴趣,但又暂时没有渠道获取账号的同学可以私信、评论或者在我的博客上联系我嗷~

相关推荐
支付宝体验科技5 小时前
支付宝体验技术部开源智能编程助手 Neovate Code
ai编程
知了一笑1 天前
从视觉、文案到交互:三步彻底去除产品AI味
ai编程·网站·manus
用户4099322502123 天前
PostgreSQL 17安装总翻车?Windows/macOS/Linux避坑指南帮你搞定?
后端·ai编程·trae
月小水长3 天前
Agent 接入云上 MCP Server,驱动产品评论反馈智能化总结,并自动推送公司微信群
llm·mcp
花酒锄作田3 天前
MCP07-logging和progress等功能说明
后端·llm·mcp
风生水气3 天前
关于AI Coding的一些踩坑经验
ai编程·cursor·vibecoding
飞哥数智坊4 天前
从能用到好看:CodeBuddy+uniapp小程序生成实录(续篇)
人工智能·ai编程
花酒锄作田4 天前
[MCP][07]logging和progress等功能说明
llm·mcp
扑克中的黑桃A4 天前
当 “MCP” 成为热词:两个同名协议的硬核科普与代码解析
mcp