
cnych/mcp-sse-demo
Developer toolsこのページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。 原文を見る
cnych/mcp-sse-demoは、https://github.com/cnych/mcp-sse-demo.からインポートされたMCPサーバー候補です。
概要
cnych/mcp-sse-demoは、https://github.com/cnych/mcp-sse-demo.からインポートされたMCPサーバー候補です。
概要(AI 翻訳)
MCP 支持兩種通信传输方法:STDIO(标准输入/输出)或 SSE(服务器推送事件),两者都使用 JSON-RPC 2.0 进行消息格式化。STDIO 用于本地集成,而 SSE 用于基于网络的通信。
例えば、私たち想直接在命令行中使用 MCP 服务,那么我们可以使用 STDIO 传输方法,如果私たち要在 Web 页面中使用 MCP 服务,那么我们可以使用 SSE 传输方法。
接下来我们将为大家开发一个基于 MCP 的智能商城服务助手,使用 SSE 类型的 MCP 服务,具备以下核心功能:
- 实时访问产品信息和库存水平,支持定制订单。
- 根据客户偏好和可用库存推荐产品。
- 使用 MCP 工具服务器与微服务进行实时交互。
- 在回答产品询问时检查实时库存水平。
- 使用产品 ID 和数量促进产品购买。
- 实时更新库存水平。
- 通过自然语言查询提供订单交易的临时分析。
ここ、私たちはAnthropic Claude 3.5 Sonnet 模型として MCP 服务的 AI 助手として使用し、当然也可以选择他の支持工具调用的模型。
まず、需要一个产品微服务,用于暴露一个产品列表的 API 接口。然后再提供一个订单微服务,用于暴露一个订单创建、库存信息等 API 接口。
接下来的核心就是核心的 MCP SSE 服务器,用于向 LLM 暴露产品微服务和订单微服务数据,作为使用 SSE 协议的工具。
最後就是使用 MCP 客户端,通过 SSE 协议连接到 MCP SSE 服务器,并使用 LLM 进行交互。
微服务
次に私たち開始开发产品微服务和订单微服务,并暴露 API 接口。
首先定义产品、库存和订单的类型。
その後、私たちは用 Express 来暴露产品微服务和订单微服务,并提供 API 接口。由于是模拟数据,所以我们这里用更简单的内存数据来模拟,直接把数据通过下面的这些函数暴露出去。(生产环境中,还是需要使用微服务加数据库的方式来实现)
その後、私たちは MCP 的工具来将これらの API 接口暴露出去,如下所示:
这里我们一共定义了 4 个工具,分别是:
getProducts:取得所有製品信息getInventory:获取所有产品的库存信息getOrders:获取所有订单信息purchase:購買商品
もし是 Stdio タイプの MCP 服务,那么私たち就可以直接在命令行中使用これらの工具了,但是我们現在需要使用 SSE タイプの MCP サービス,所以我們還需要一个 MCP SSE 服务器来暴露これらの工具。
MCP SSE 服务器
次に、私たち開始开发 MCP SSE 服务器,用于暴露产品微服务和订单微服务数据,作为使用 SSE 协议的工具。
このページは AI により自動翻訳されています。技術的な詳細は原文をご確認ください。
README
以下は原文 README の抜粋です。原文を見る。
开发 SSE 类型的 MCP 服务
MCP 支持两种通信传输方法:STDIO(标准输入/输出)或 SSE(服务器推送事件),两者都使用 JSON-RPC 2.0 进行消息格式化。STDIO 用于本地集成,而 SSE 用于基于网络的通信。
比如我们想直接在命令行中使用 MCP 服务,那么我们可以使用 STDIO 传输方法,如果我们要在 Web 页面中使用 MCP 服务,那么我们可以使用 SSE 传输方法。
接下来我们将为大家开发一个基于 MCP 的智能商城服务助手,使用 SSE 类型的 MCP 服务,具备以下核心功能:
- 实时访问产品信息和库存水平,支持定制订单。
- 根据客户偏好和可用库存推荐产品。
- 使用 MCP 工具服务器与微服务进行实时交互。
- 在回答产品询问时检查实时库存水平。
- 使用产品 ID 和数量促进产品购买。
- 实时更新库存水平。
- 通过自然语言查询提供订单交易的临时分析。

这里我们使用 Anthropic Claude 3.5 Sonnet 模型作为 MCP 服务的 AI 助手,当然也可以选择其他支持工具调用的模型。
首先需要一个产品微服务,用于暴露一个产品列表的 API 接口。然后再提供一个订单微服务,用于暴露一个订单创建、库存信息等 API 接口。
接下来的核心就是核心的 MCP SSE 服务器,用于向 LLM 暴露产品微服务和订单微服务数据,作为使用 SSE 协议的工具。
最后就是使用 MCP 客户端,通过 SSE 协议连接到 MCP SSE 服务器,并使用 LLM 进行交互。
微服务
接下来我们开始开发产品微服务和订单微服务,并暴露 API 接口。
首先定义产品、库存和订单的类型。
// types/index.ts
export interface Product {
id: number;
name: string;
price: number;
description: string;
}
export interface Inventory {
productId: number;
quantity: number;
product?: Product;
}
export interface Order {
id: number;
customerName: string;
items: Array;
totalAmount: number;
orderDate: string;
}
然后我们可以用 Express 来暴露产品微服务和订单微服务,并提供 API 接口。由于是模拟数据,所以我们这里用更简单的内存数据来模拟,直接把数据通过下面的这些函数暴露出去。(生产环境中,还是需要使用微服务加数据库的方式来实现)
// services/product-service.ts
import { Product, Inventory, Order } from "../types/index.js";
// 模拟数据存储
let products: Product[] = [
{
id: 1,
name: "智能手表Galaxy",
price: 1299,
description: "健康监测,运动追踪,支持多种应用",
},
{
id: 2,
name: "无线蓝牙耳机Pro",
price: 899,
description: "主动降噪,30小时续航,IPX7防水",
},
{
id: 3,
name: "便携式移动电源",
price: 299,
description: "20000mAh大容量,支持快充,轻薄设计",
},
{
id: 4,
name: "华为MateBook X Pro",
price: 1599,
description: "14.2英寸全面屏,3:2比例,100% sRGB色域",
},
];
// 模拟库存数据
let inventory: Inventory[] = [
{ productId: 1, quantity: 100 },
{ productId: 2, quantity: 50 },
{ productId: 3, quantity: 200 },
{ productId: 4, quantity: 150 },
];
let orders: Order[] = [];
export async function getProducts(): Promise {
return products;
}
export async function getInventory(): Promise {
return inventory.map((item) => {
const product = products.find((p) => p.id === item.productId);
return {
...item,
product,
};
});
}
export async function getOrders(): Promise {
return [...orders].sort(
(a, b) => new Date(b.orderDate).getTime() - new Date(a.orderDate).getTime()
);
}
export async function createPurchase(
customerName: string,
items: { productId: number; quantity: number }[]
): Promise {
if (!customerName || !items || items.length === 0) {
throw new Error("请求无效:缺少客户名称或商品");
}
let totalAmount = 0;
インストール
npx -y @modelcontextprotocol/server-filesystem /tmp設定
{
"mcpServers": {
"products-sse": {
"url": "http://localhost:8083/sse"
}
}
}