使用说明
Bytecraft MCP服务器文档
=====================================
概述
这是Bytecraft MCP服务器的文档,这是一个使用Express.js和模型上下文协议(MCP)SDK构建的Node.js应用程序。服务器提供了一组用于管理产品和订单的工具和API。
目录结构
backend:包含服务器端代码index.ts:应用程序的入口点prisma:包含Prisma型号supabase:包含Supabase客户端配置
README.md:此文档文件
索引.ts
这 index.ts 文件是应用程序的入口点。它设置Express.js服务器,配置MCP服务器,并定义API的路由。
服务器
const服务器=新的McpServer({名称:“Bytecraft mcp”,版本:“1.0.0”});
MCP服务器配置
MCP服务器配置了以下设置:
name:“Bytecraft mcp”version: "1.0.0"connection:使用可流式传输的Http请求作为传输
代码
const transports: Record<string, StreamableHTTPServerTransport> = {};
工具使用
server.registerTool(
"findProductByUse",
{
description:
"Fetch products designed for a specific use case or context, like 'outdoor seating', 'study area', or 'living room'. Use this when user prompts refer to how or where the product will be used.",
inputSchema: {
areaOfUse: z
.string()
.nonempty()
.describe("Usage context (e.g., 'outdoor', 'indoor')"),
},
},
async ({ areaOfUse }) => {
console.log("[Tool Called] findProductByUse with areaOfUse:", areaOfUse);
const products = await prisma.product.findMany({ where: { areaOfUse } });
return { content: [{ type: "text", text: JSON.stringify(products) }] };
}
);
app.post("/mcp", async (req: Request, res: Response) => {
const sessionId = req.headers["mcp-session-id"] as string | undefined;
let transport: StreamableHTTPServerTransport;
if (!sessionId && isInitializeRequest(req.body)) {
transport = new StreamableHTTPServerTransport({
sessionIdGenerator: () => randomUUID(),
onsessioninitialized: (sid) => {
transports[sid] = transport;
},
});
transport.onclose = () => {
if (transport.sessionId) delete transports[transport.sessionId];
};
await server.connect(transport);
} else if (sessionId && transports[sessionId]) {
transport = transports[sessionId];
} else {
res.status(400).json({
jsonrpc: "2.0",
error: { code: -32000, message: "Invalid session ID" },
id: null,
});
return;
}
await transport.handleRequest(req, res, req.body);
});
const transports: Record<string, StreamableHTTPServerTransport> = {};
路线
定义了以下路线:
/mcp:处理MCP请求/mcp/session:处理MCP会话请求/cart:处理购物车相关请求
Prisma模型
Prisma模型在 prisma 目录。这些模型用于与数据库交互。
产品型号
这 Product 模型表示数据库中的产品。它有以下字段:
id:产品的唯一标识符name:产品名称description:产品描述price:产品价格type:产品类型areaOfUse:产品的使用区域
订货模式
这 Order 模型表示数据库中的订单。它有以下字段:
id:订单的唯一标识符customerId:与订单关联的客户IDproductId:与订单关联的产品IDquantity:订购的产品数量total:订单总成本
棱镜
📃️ Prisma数据模型
此项目使用 PostgreSQL 使用Prisma作为ORM。以下是中定义的数据模型 schema.prisma.
🧑💼 用户
表示注册用户。
model User {
id String @id @default(cuid())
clerkId String @unique
orders Order[]
reviews Review[]
Favorite Favorite[]
Cart Cart?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
🛍️ 产品
存储产品目录条目。
model Product {
id String @id @default(cuid())
name String
company String
type String
areaOfUse String
description String
featured Boolean
image String
price Int
reviews Review[]
OrderItem OrderItem[]
Favorite Favorite[]
CartItem CartItem[]
}
🛒 购物车
每个用户都有一个购物车。
model Cart {
id String @id @default(cuid())
userId String @unique
user User @relation(fields: [userId], references: [id])
items CartItem[]
}
🧲 购物车项目
用户购物车内的商品。
model CartItem {
id String @id @default(cuid())
cartId String
cart Cart @relation(fields: [cartId], references: [id])
productId String @unique
product Product @relation(fields: [productId], references: [id])
quantity Int
price Int
}
📦 订单
已完成购买的记录。
model Order {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id])
orderItems OrderItem[]
total Int
status String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
📦 订单项
订单中的单个产品。
model OrderItem {
id String @id @default(cuid())
orderId String
order Order @relation(fields: [orderId], references: [id])
productId String
product Product @relation(fields: [productId], references: [id])
quantity Int @default(1)
price Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
✍️ 审查
客户对产品的评价。
model Review {
reviewId String @id @default(cuid())
content String
stars Int
productId String
userId String
product Product @relation(fields: [productId], references: [id])
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
❤️ 最爱
用户最喜欢的(愿望清单)产品。
model Favorite {
id String @id @default(cuid())
userId String
productId String
user User @relation(fields: [userId], references: [id])
product Product @relation(fields: [productId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
产品数据
{
"id": "cmcracmy40000ovpgm0avuzf6",
"name": "avant-garde lamp",
"company": "Modenza",
"type": "lamp",
"areaOfUse": "lighting",
"description": "Crafted from hand-blown smoked glass and brushed brass, this avant-garde lamp casts sculptural pools of warm light. Its asymmetrical design and integrated dimmer make it both a centerpiece and a functional reading light in modern interiors.",
"featured": true,
"image": "https://gips1.baidu.com/it/u=999831402,3772811305&fm=3081&app=3081&f=JPEG?w=1600&h=2000",
"price": 100
}
Supabase客户端
Supabase客户端用于与Supabase数据库交互。客户端配置了以下设置:
SUPABASE_URL:Supabase数据库的URLSUPABASE_ANON_KEY:Supabase数据库的匿名密钥
MCP服务器工具
以下工具可用:
getCart:获取用户的购物车内容productInfoViaType:按类型获取产品信息productInfoViaUse:按使用区域获取产品信息getPriceofProduct:获取产品的价格initializeMcpSession:初始化新的MCP会话addProductToCart:将产品添加到购物车removeProductFromCart:从购物车中删除产品checkout:查看购物车
用于查询用户数据的前端API
以下MCP API可用:
initialize:初始化新的MCP会话getCart:获取用户的购物车内容addProductToCart:将产品添加到购物车removeProductFromCart:从购物车中删除产品checkout:查看购物车
注意:本文档是代码的摘要,可能并不详尽。
MCP服务器工具:
getCartproductInfoViaTypeproductInfoViaUsegetPriceofProductinitializeMcpSessionaddProductToCartremoveProductFromCartcheckout
# Mcp-server
# Mcp-server
# Mcp-server
# Mcp-server
# Mcp-server
