MCP 是什么?我用 5 分钟部署了第一个酒店 MCP 服务器,踩坑全记录
·
MCP 是什么?我用 5 分钟部署了第一个酒店 MCP 服务器,踩坑全记录最近半年,「MCP」这个词在 AI 圈子里出现的频率高得离谱。打开技术社区,到处都在聊 MCP;刷推特,大佬们动不动就"给 Claude 接个 MCP";就连我们产品经理都开始问我:"MCP 是什么?我们产品要不要支持?“问题是——搜了一圈,中文互联网上关于 MCP 的科普文章要么太学术(读完更迷糊了),要么太碎片(只讲概念不讲怎么上手)。今天这篇文章,我打算用大白话把 MCP 讲清楚,然后手把手带你部署一个真正能用的酒店 MCP 服务器。不是 Hello World,是部署完就能接入 Claude、Cursor、任何支持 MCP 协议的 AI 客户端的那种。—## 一、MCP 到底是什么?### 1.1 一句话解释MCP(Model Context Protocol,模型上下文协议)是一个让 AI 模型调用外部工具和数据源的标准协议。你可以把它理解成 AI 世界的"USB 接口"——就像 USB 让各种设备都能连电脑一样,MCP 让 AI 能调用各种外部服务:查数据库、调 API、读文件、搜网页……### 1.2 为什么需要 MCP?在 MCP 出现之前,每个 AI 应用要接入外部数据,都得自己写一套对接逻辑:AI 应用 A → 自己写的代码 → 酒店 APIAI 应用 B → 自己写的代码 → 酒店 APIAI 应用 C → 自己写的代码 → 酒店 API三个应用,三套对接代码。如果酒店 API 改了接口,三个应用都得改。这就是典型的 N×M 问题。MCP 的做法是定义一个标准协议:AI 应用 A ─┐AI 应用 B ──┼── MCP 协议 ──→ MCP Server(酒店)AI 应用 C ─┘AI 应用只需要实现一次 MCP Client,就能调用任何 MCP Server。反过来,MCP Server 只要符合协议规范,就能被任何 MCP Client 调用。N+M 取代了 N×M。这就是 MCP 的核心价值。### 1.3 MCP 的架构一个完整的 MCP 系统有三个角色:| 角色 | 说明 | 类比 ||------|------|------|| MCP Host | 运行 AI 的应用(Claude Desktop、Cursor、你的 Agent) | 你的电脑 || MCP Client | Host 里负责和 Server 通信的模块 | USB 控制器 || MCP Server | 提供具体能力的服务端(酒店查询、数据库访问等) | U 盘、键盘、鼠标 |MCP Client 和 Server 之间通过 JSON-RPC 2.0 通信,支持两种传输方式:- stdio:本地进程通信(适合本地工具)- SSE(Server-Sent Events):HTTP 远程通信(适合云端服务)### 1.4 MCP 能做什么?理论上,MCP 能把任何 API 能力暴露给 AI。实际中,目前最火的几个方向:- 数据查询:查数据库、查搜索引擎、查酒店价格- 代码操作:读写文件、执行命令、操作 Git- 业务集成:发消息、创建任务、调用 SaaS API- 知识检索:搜索文档、查询知识库、RAG 增强我们今天要做的是第一种——用 MCP 暴露酒店查询能力,让 AI 能实时查酒店。—## 二、酒店 MCP:给 AI 接上酒店预订能力### 2.1 为什么是酒店?酒店数据是旅行场景里最核心也最难搞的数据:- 数据量大:全国十几万家酒店,每家几十个房型,价格每天变- 实时性要求高:库存和价格必须实时,不能缓存- 对接复杂:传统 OTA 接口要么要商务合同,要么反爬严格以前你要给 AI 接酒店数据,至少得:签 OTA 分销合同 → 对接 API → 处理鉴权 → 做数据映射 → 搞定库存同步。没两周下不来。现在有一些现成的酒店 MCP 服务,这个过程被压缩到了几分钟。### 2.2 酒店 MCP 能做什么?一个合格的酒店 MCP Server 通常暴露这几个工具:| 工具名 | 功能 | 使用场景 ||--------|------|----------|| search_hotels | 搜索酒店 | 按城市、位置、星级、价格范围搜索 || get_hotel_detail | 酒店详情 | 查看设施、图片、描述 || get_room_list | 房型列表 | 查询实时价格和库存 || create_booking | 创建预订 | 直接下单(需权限) |有了这些工具,AI 就能:1. 理解用户的自然语言需求(“帮我找上海外滩附近的五星级酒店”)2. 自动调用搜索工具,筛选符合条件的酒店3. 获取详细信息,对比价格和评分4. 给出推荐,甚至直接帮用户预订### 2.3 和其他方案的对比| 方案 | 费用 | 接入时间 | 数据覆盖 | MCP 支持 ||------|------|----------|----------|----------|| 现成酒店 MCP 服务 | 免费/低成本 | 几分钟 | 十万+ | ✅ 原生 || 传统 OTA API | 需商务合同 | 2-4 周 | 全 | ❌ 需自建 || 自建爬虫 | 服务器成本 | 1-2 月 | 取决于爬虫 | ❌ 需自建 || 开源 MCP 项目 | 免费 | 需自部署 | 需自接数据源 | ✅ |结论很明显:如果你要快速给 AI 接酒店能力,用现成的 MCP 服务是最省事的方案。—## 三、实操:5 分钟部署你的酒店 MCP 服务器好,到动手环节了。这里要澄清一个概念:"部署 MCP 服务器"听起来很唬人,但用现成的云端 MCP 服务的话,你其实不需要真的部署任何东西。 服务端已经跑在云端了,你只需要在 Client 端配置好连接就行。这就像你不需要"部署"一个网页一样——你只需要一个浏览器。### 3.1 第一步:申请 API Key(1 分钟)大部分 MCP 服务都需要一个 API Key 来标识身份。申请流程通常很简单:1. 打开服务商官网2. 填写基本信息(姓名、邮箱、公司/个人)3. 提交后自动审核,秒级通过4. 拿到你的 API Key> 💡 很多 MCP 服务是免费的,没有调用量限制。不是试用,是真的免费。### 3.2 第二步:在 Claude Desktop 中配置(2 分钟)Claude Desktop 是目前最流行的 MCP Client。配置方法:macOS: 编辑 ~/Library/Application Support/Claude/claude_desktop_config.jsonWindows: 编辑 %APPDATA%\Claude\claude_desktop_config.json添加以下内容(以酒店 MCP 为例):json{ "mcpServers": { "hotel-mcp": { "command": "npx", "args": [ "-y", "mcp-remote", "你的MCP服务端地址(带apiKey参数)" ] } }}保存后重启 Claude Desktop,你就能在对话中看到酒店 MCP 的工具了。### 3.3 第三步:在 Cursor 中配置(2 分钟)Cursor 也原生支持 MCP。配置方法:1. 打开 Cursor Settings → Features → MCP2. 点击 "+ Add new MCP server"3. 选择 “SSE” 类型4. 填入你的 MCP 服务端地址(带 apiKey 参数)5. 保存或者直接在项目根目录创建 .cursor/mcp.json:json{ "mcpServers": { "hotel-mcp": { "url": "你的MCP服务端地址(带apiKey参数)" } }}### 3.4 第四步:验证(30 秒)配置完成后,在你的 AI 客户端里直接问:> "帮我查一下上海外滩附近的五星级酒店"如果 AI 调用了 search_hotels 工具并返回了真实酒店数据——恭喜,你的第一个酒店 MCP 已经跑起来了。### 3.5 进阶:用 Claude CLI 配置如果你是命令行玩家,用 Claude CLI 更方便:bash# 安装 Claude CLInpm install -g @anthropic-ai/claude-code# 添加 MCP Server(替换为你的实际地址)claude mcp add hotel-mcp --transport sse "你的MCP服务端地址"# 验证claude mcp list—## 四、自己搭建 MCP Server?也教你虽然用现成服务就够了,但如果你是开发者,想自己搭一个 MCP Server(比如接自己的数据源),这里也给你一个最小可运行示例。### 4.1 用 Python 搭建一个最简 MCP Serverpython# server.pyfrom mcp.server import Serverfrom mcp.server.sse import SseServerTransportfrom mcp.types import Tool, TextContentfrom starlette.applications import Starlettefrom starlette.routing import Routeimport uvicornimport jsonserver = Server("my-hotel-mcp")sse_transport = SseServerTransport("/messages")# 定义工具@server.list_tools()async def list_tools(): return [ Tool( name="search_hotels", description="搜索酒店", inputSchema={ "type": "object", "properties": { "city": {"type": "string", "description": "城市名"}, "checkin": {"type": "string", "description": "入住日期"}, "checkout": {"type": "string", "description": "退房日期"}, }, "required": ["city"] } ) ]@server.call_tool()async def call_tool(name: str, arguments: dict): if name == "search_hotels": city = arguments.get("city", "未知城市") # 这里替换成你自己的数据源 results = [ {"name": f"{city}豪华酒店", "price": 688, "rating": 4.8}, {"name": f"{city}商务酒店", "price": 388, "rating": 4.5}, {"name": f"{city}精品民宿", "price": 258, "rating": 4.7}, ] return [TextContent(type="text", text=json.dumps(results, ensure_ascii=False))]# Starlette 应用async def handle_sse(request): async with sse_transport.connect_sse( request.scope, request.receive, request._send ) as streams: await server.run( streams[0], streams[1], server.create_initialization_options() )app = Starlette(routes=[ Route("/sse", endpoint=handle_sse), Route("/messages", endpoint=sse_transport.handle_post_message, methods=["POST"]),])if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)### 4.2 运行bashpip install mcp starlette uvicornpython server.py你的 MCP Server 就跑在 本地MCP服务端点 了。### 4.3 但是……自己搭意味着:- 你得自己搞酒店数据源(签分销合同 or 爬数据)- 你得自己处理实时库存同步- 你得自己维护服务稳定性- 你得自己做鉴权和限流如果你的核心需求是"让 AI 能查酒店",直接用现成的 MCP 服务是性价比最高的选择。 自己搭更适合你有独特数据源或特殊定制需求的场景。—## 五、踩坑记录部署过程中我遇到的一些问题,提前帮你排掉:### 坑 1:Claude Desktop 配置后没反应原因:JSON 格式错误(多了逗号或少了括号)。解决:用 JSON 校验工具验证一下你的 JSON。另外注意 macOS 的路径里有空格的话要转义。### 坑 2:npx mcp-remote 报错原因:Node.js 版本太低(< 18)或者网络问题导致 npx 下载失败。解决:bash# 确认 Node 版本node -v # 需要 >= 18# 如果 npx 下载慢,可以先全局安装npm install -g mcp-remote### 坑 3:SSE 连接超时原因:公司网络有代理或者防火墙拦截了 SSE 长连接。解决:换个网络试试,或者用 stdio 模式(本地 npx 方式)代替 SSE。### 坑 4:工具调用了但返回空数据原因:API Key 没配对,或者查询条件太严格(比如一个小城市没有五星级酒店)。解决:先查一个大城市(上海、北京),确认数据通了再调参数。—## 六、MCP 生态一览为了帮你更好地理解 MCP 在生态中的位置,这里列一些相关的资源:| 资源 | 说明 ||------|------|| MCP 官方协议 | 协议规范,modelcontextprotocol.io || MCP SDK(Python) | 官方 Python SDK,GitHub 可查 || MCP SDK(TypeScript) | 官方 TS SDK,GitHub 可查 || 魔搭 MCP 社区 | 国内 MCP Server 集合 || Claude Desktop | 最流行的 MCP Client || Cursor | 支持 MCP 的 AI 编辑器 |—## 七、总结回到开头的问题:MCP 是什么?- 技术层面:一个让 AI 调用外部工具的标准协议,JSON-RPC 通信- 价值层面:把 AI 从"只会聊天"变成"能干活”,N+M 取代 N×M- 实践层面:给你的 AI 接一个 MCP Server,它就能查数据、调 API、操作系统酒店 MCP 则是 MCP 在旅行场景的具体落地——让 AI 能实时查酒店、比价格、做推荐。如果你正在做 AI Agent、AI 旅行应用、或者只是想玩玩 MCP,这是一个很好的起点。有问题欢迎交流,祝大家的 MCP 都能一次跑通 🚀—> 作者是一个折腾 MCP 大半年的开发者,目前给自己的 AI Agent 接了酒店查询、比价、推荐等功能。如果你也在做类似的尝试,欢迎交流。
更多推荐



所有评论(0)