产品订单管理服务器

基于Node.js和Express.js构建的MCP服务器,提供产品管理和订单处理API。

  • by Ashishmehta108
  • TypeScript
  • 云端部署
  • 更新于
在 GitHub 查看 ashishmehta108/mcp-server

使用说明

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:与订单关联的客户ID
  • productId:与订单关联的产品ID
  • quantity:订购的产品数量
  • 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数据库的URL
  • SUPABASE_ANON_KEY:Supabase数据库的匿名密钥

MCP服务器工具

以下工具可用:

  • getCart:获取用户的购物车内容
  • productInfoViaType:按类型获取产品信息
  • productInfoViaUse:按使用区域获取产品信息
  • getPriceofProduct:获取产品的价格
  • initializeMcpSession:初始化新的MCP会话
  • addProductToCart:将产品添加到购物车
  • removeProductFromCart:从购物车中删除产品
  • checkout:查看购物车

用于查询用户数据的前端API

以下MCP API可用:

  • initialize:初始化新的MCP会话
  • getCart:获取用户的购物车内容
  • addProductToCart:将产品添加到购物车
  • removeProductFromCart:从购物车中删除产品
  • checkout:查看购物车

注意:本文档是代码的摘要,可能并不详尽。

MCP服务器工具:

  • getCart
  • productInfoViaType
  • productInfoViaUse
  • getPriceofProduct
  • initializeMcpSession
  • addProductToCart
  • removeProductFromCart
  • checkout
# Mcp-server
# Mcp-server
# Mcp-server
# Mcp-server
# Mcp-server