关于 shopware-mcp
shopware-mcp 是面向 Shopware 6 店铺的 MCP 服务,可查询和管理商品、订单、客户、库存、报表与审计。它面向店铺运营者与开发者,内置只读默认模式,写入操作需显式开启并先以试运行展示请求内容。
主要功能
- 01精简工具覆盖主要店铺实体
- 02通过 Store API 模拟客户结购流程
- 03店铺健康审计与每日简报
- 04销售与客户报表、库存预测
- 05默认只读,写入需 --allow-write 开启
适用场景
- 01快速查询订单状态与销售概况
- 02排查结账失败或商品不显示的原因
- 03在 cron 或 CI 中定期执行店铺审计
MCP 相关
该项目是 MCP 服务,向 MCP 主机暴露店铺相关工具,并通过 Shopware Admin API 访问店铺数据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y shopware-mcpSHOPWARE_URLShop base URL, e.g. https://shop.example.comSHOPWARE_CLIENT_IDIntegration access key IDSHOPWARE_CLIENT_SECRET密钥Integration secret access keySHOPWARE_MCP_ALLOW_WRITESet to true to register the guarded write tools本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
29收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
为什么 · 演示 · 安装 · 工具 · 安全性 · 文档 · 网站 · Deutsch
介绍 shopware-mcp
Shopware 6 商店的一个 Admin API 背后有大约两百种实体。问助手“商店一切正常吗?”,要诚实地回答,就得用 Criteria 筛选器搜索七次,按技术名称操作三个状态机,做几次聚合,还需要一个绝不能原样复述给你的 OAuth 令牌。把模型直接连到这个 API,它就能访问所有内容,包括因为提示词这么说而 PATCH 价格的权限。
模型上下文协议让“给模型真正的工具”变成了一行配置更改。但它没有说明一个好的商店工具应该是什么样:两百种实体里哪些在周二早上最重要、“卡住的订单”是什么意思,或者库存更正应该在发送前先展示出来。
**shopware-mcp 就是这一层。**一个小型服务,通过 MCP 与主机通信,通过 Admin API 与商店通信;它足够了解 Shopware,能够一次调用就回答过去要在管理后台花一下午才能查清的问题。它还会留意订单何时停止进来,并像顾客一样尝试结账,以找出原因:
| 精选工具 | 商品、订单及其历史记录、文档、客户、分类、促销、评价、支付和配送方式、插件、库存、销售渠道、计划任务、商店交易设置:共 20 个工具,返回精简的 JSON,包含准确的总数、为模型编写的描述,以及 Shopware 自带的 Criteria 过滤器。没有自创的查询语言。 |
| 客户视角 | checkout_simulate 通过 Shopware 自带的 Store API,将商品和代码放入一个临时购物车,可作为访客配送到任何地方,也可作为指定客户使用其客户组、价格和规则;它还会用通俗语言解释每个购物车错误:销售渠道不配送到该国家、代码已过期、规则隐藏了某种支付方式、父商品需要选择变体,或客户无法在该渠道登录。不会创建订单;购物车会被删除。storefront_search 像客户一样搜索,并说明商品为何没有显示。 |
| 运营脉搏 | shop_pulse 将今天的数据与近期同一星期几的相同时段进行比较,并评估当前的平静期:这些时段通常会带来多少订单,以及偶然一单都没有的可能性有多大。“六小时没有订单,而这个时段通常会有 3 到 7 单”,说明结账流程出了问题,而不是周日生意清淡。 |
| 审计 | shop_audit 一次调用即可运行 17 项检查:结账订单数异常沉寂;已付款订单迟迟未发货或未开具发票;未付款订单长时间未处理;已发货订单未完成;商品缺货;按当前销售速度即将售罄;商品没有封面、没有配送时间,或在所有销售渠道中均不可见;促销已过期;销售渠道处于维护状态;店面缺少法律页面;评价等待审核;计划任务已停止运行;扩展有待安装的更新;以及哪些欧盟义务看起来已由已安装的扩展覆盖。结果按优先级排列,每项发现附有样例和提示。同一审计也可通过 cron 或 CI 中的 shopware-mcp audit 运行,无需 MCP 宿主。 |
| 报告与预测 | sales_report 请求 Shopware 聚合数据:含税金额、不含税金额、平均订单金额、按货币和渠道划分的收入、按状态划分的订单数、按日/周/月排列的时间线、热销商品,以及按需提供的与前一时段的变化对比。customer_report 对客户数据进行同样的分析:新账户数、访客占比、回头客占比、按收入排名的顶级客户。stock_forecast 根据销售速度和库存,计算可售天数、售罄日期和补货数量。这些数据已通过同一数据库中的 SQL 进行核验。 |
| 应急出口 | entity_schema 可描述 200 多种实体中的任意一种,包括插件自定义实体;entity_search 可使用相同的过滤器查询这些实体,并让 Shopware 对匹配结果进行聚合:按支付方式统计订单、按月统计收入,以及术语、总和或直方图能表达的任何内容。拒绝访问存储凭据的实体,并清除其余实体中的机密信息。 |
| 刹车 | 默认只读,除非通过 --allow-write 启动。即使启用了写入,每次写入也都是试运行,会先显示确切请求;此外,写入预算可限制进程实际执行写入的次数。发货、标记为已付款、发送提醒、退款、修正库存、添加备注、生成文档、创建商品或促销、为商品添加图片、审核评价、更新客户、一次性为 50 个订单开具发票、为记录添加标签:仅限 15 种范围明确的写入操作,不做其他操作。输出、日志或错误中绝不会出现机密信息。 |
看看实际效果
六小时没有订单,原因何在。 周日傍晚。脉搏会将这段沉寂与过去八个周日的同一时段进行比较,而这些时段总会带来 3 到 7 笔订单,并得出纯属巧合的概率约为 170 分之一。随后,Agent 会像顾客一样尝试购买,结果发现店面处于维护模式。没有下单,也没有任何更改。
顾客眼中的结账体验。 一位瑞士顾客表示优惠码无法使用。通过 Shopware 自有的 Store API 创建一个临时购物车,一次解释了这两个问题:瑞士不是该销售渠道覆盖的国家,而且该优惠码的促销活动已于 8 月结束。随后,搜索功能解释了为什么某件商品始终没有显示。
每天早晨,一页概览。 shopware-mcp brief --html brief.html 会将脉搏、审计结果和过去 7 天的数据写入一个独立页面,不会从任何位置加载内容,并会跟随读者的深色模式。可通过 cron 运行,并使用 --slack 在频道中发送一段摘要。
打开实际示例。
一条命令,实现最小权限。 shopware-mcp setup 只需以管理员身份登录一次,即可创建一个权限恰好满足工具所需的角色;这些权限是根据实际商店测得的,而非猜测得出。它还会创建一个非管理员集成。该命令只显示一次密钥,会验证二者并打印主机配置。升级后再次运行,它会更新角色,同时保留密钥。
30 秒,无声播放:在网站上观看或打开 MP4。由 docs/video/ 渲染。
本页中的所有录制内容,均为服务在带有生成式演示数据的 Shopware
6.7.13 测试商店中运行时产生的真实输出,并根据
docs/demo/ 中的记录重放。工具调用和结果均为原文,仅为适应屏幕而缩短。周围的文字则是 MCP 主机根据这些内容生成的。
一个问题,一次调用。 三笔已付款订单仍在等待发货,店面处于维护状态,一项夏季促销活动已延续至 8 月之后。答案列出了订单号和金额,并提供了安全的下一步操作。
由店铺自行计算的数据。 一次调用即可获取总计、渠道、状态、月度时间线和八个月以来的热门产品。无需逐个翻查订单;Shopware 的聚合功能完成了这项工作。
没有对应的工具?那就有对应的架构。 制造商没有专用工具。Agent 会读取实体的架构,找到 mediaId,并据此筛选。同样的方式适用于其他所有实体,包括自定义实体。
写入操作会先展示具体内容。 使用 --allow-write 后,库存更正会以其将要发送的请求形式返回。只有明确设置 dryRun: false 才会修改店铺,之后还会从 Shopware 重新读取结果。
先发货,再验证。 配送状态变更需要两个请求,发送前会先展示:先将跟踪码添加到配送信息,再更改状态。之后,订单历史会列出该状态变更、涉及的状态以及执行者。
一句话创建产品及其推广代码。 product_create 会选用店铺的默认税率并计算未税价格,同时在试运行中说明这一点。促销活动创建时处于未激活状态,因此在审核完成前,没有人会看到代码。
审核并回复。 有两条评价待审批。垃圾内容会继续隐藏;投诉会在获批的同时附上店铺的公开回复,模型完全无需操作管理后台。
关注客户,而不只是收入。 按分组统计新增账户、下单客户和回头客数量、访客占比,以及贡献期内收入份额最高的客户,并与上一期对比。
插件越多,店铺的 Agent 能力越强。 核心工具立即可用。扩展查询在后台完成后,会新增四个工具,并通知宿主刷新工具列表;之后,合规问题也能得到解答。
趁问题还没发生,及时补货。 stock_forecast 通过一次聚合读取六个月的订单明细,与当前库存合并后,逐个产品说明还剩多少天的库存、何时会售罄,以及需要订购多少。有九种产品已经超卖;另外两种目前仍然充足,但到了 10 月就不再如此。
同样的审计,无需主机介入。 shopware-mcp audit 会以 Markdown 格式输出发现的问题,并在存在严重问题时以非零状态码退出(或者使用 --fail-on warning 时,只要有任何异常就会退出)。将它加入 cron,然后查看邮件;将它加入 CI,让任务失败。shopware-mcp report 也会以同样的方式处理数据。
安装了运维插件的商店,也能获得运维 Agent。 FroshTools 是许多 Shopware 托管服务商都会安装的开源工具箱。安装后会出现另外三个工具:平台健康检查、带有工作进程的消息队列,以及依赖项安全公告。Agent 能区分过时的搜索结果和已停止运行的工作进程。
一次处理 56 张发票,每次 3 张。 order_documents_bulk_create 会按从早到晚的顺序查找已付款但尚未开具发票的订单,并在执行前显示将要创建发票的单个请求。每个订单都会计入写入预算。然后,scheduled_tasks_list 会说明积压是如何形成的:33 个任务中有 31 个逾期,从未运行过,调度器也没有运行。tag_assign 会为团队标记订单,并在过程中创建标签。
先了解情况,再让 Agent 去发现。 shopware-mcp doctor 会探测集成可以读取的内容,在可能的情况下读取其角色以检查写入权限,并列出每个工具缺少的权限。管理员会看到满屏的勾选标记;支持台角色则会收到明确说明,知道需要授予哪些权限。
使用 MCP Inspector 检查同一商店的截图



包含内容
| 二十款精选工具 | products_search、orders_get、customers_search、stock_get、promotions_list、reviews_search、payment_methods_list、shipping_methods_list、plugins_list、scheduled_tasks_list 等。每次搜索接受 { term?, filter?, sort?, page?, limit?, fields? },并返回 { total, page, limit, items }。 |
| 店铺设置 | shop_settings 从 Shopware 的系统配置中读取交易设置,可读取全店设置,也可读取带继承关系的单个销售渠道设置:访客结账、双重确认、密码规则、购物车限制、商品列表默认设置、默认税率和法律页面。仅读取核心域的允许列表;绝不会读取邮件服务器、许可证和插件密钥。 |
| 订单历史 | order_history 按顺序列出某个订单的所有状态变更,包括订单、付款和配送的状态变更:先前状态、新状态、操作,以及触发变更的是管理员用户、API 集成还是 Shopware 本身。 |
| 结账模拟 | checkout_simulate 通过 Shopware 的管理端代理向 Store API 填充一个临时购物车;这正是管理端自带订单对话框使用的路由。可作为访客并指定配送国家,也可作为已登录客户,并应用其客户组、价格、规则和地址。它会返回每件商品的价格及其商品列表价、折扣、配送费、税费、总价、可用的付款和配送方式,以及被隐藏的方式和隐藏规则,还会列出每条购物车错误并以通俗语言解释。不会创建订单,购物车会被删除。 |
| 店面搜索 | storefront_search 按客户的方式在销售渠道中搜索,采用相同的可见性、库存和缺货停售规则、排名及价格;还可按需解释某件商品:其排名,或未显示的原因(未启用、在该渠道中不可见、仅通过链接访问、缺货停售、未编入搜索索引、没有匹配该词条的关键词)。 |
| 店铺脉搏 | shop_pulse 将本地午夜以来的订单和收入与过去 2 到 12 周中同一星期、相同时段的数据进行比较;使用泊松估算评估当前的销售低迷,并监测今日付款失败占比是否高于平常。无论店铺规模如何,都只需一次聚合请求。 |
| 健康审计 | shop_audit 支持可调阈值(stuckOrderDays、lowStockThreshold、forecastDays、maxItems)。包含十七项检查:结账流程突然无活动、已付款但没有发票的订单、按当前速度即将售罄的商品、各店面的法律页面、配送时间、销售渠道可见性、待审核评价和停止运行的计划任务;提供按优先级排列的发现结果、每项发现的提示,以及列明义务和截止日期的欧盟义务概览,不会列出商品。 |
| 销售报告 | sales_report 支持任意时间段,按日、周或月统计,可选按销售渠道筛选,不计已取消订单。compareWithPrevious 会添加前一时间段,并比较订单数、收入和平均订单金额的变化。按精确商品 ID 确定畅销商品,因此并列排名不会导致收入统计偏差。 |
| 客户报告 | customer_report 支持相同的时间段:按注册客户和访客客户以及客户组细分新账户数、下单客户数(去重)、回头客占比、访客订单占比,以及按收入排名的顶级客户及其占总收入的比例。 |
| 库存预测 | stock_forecast 回答“我需要补订什么?”:统计一段时间内每件商品的售出数量、当前可用库存、库存可支撑天数、售罄日期,以及足以覆盖预测期和补货周期的补货数量。没有销量的商品不会进行估算。 |
| 任意实体 | entity_schema 列出所有实体或描述单个实体:字段、类型、标志和关联。entity_search 可查询实体,并按需对所有匹配结果执行 Shopware 聚合(terms、sum、avg、min、max、count、stats、histogram、一个嵌套指标)。长文本值会截断,密钥会清除;凭据实体和凭据字段不予提供。 |
| 感知插件的工具 | 服务会检测已安装且已启用的扩展,并为其支持的扩展添加工具。工具包包括:FroshTools(平台健康检查、消息队列、依赖项公告)和 Merqo。使用 --no-extensions 可关闭。 |
| 文档 | order_documents_list、order_document_create(由 Shopware 自带生成器创建发票、送货单、贷项通知单或取消单)、order_documents_bulk_create(一次请求为最多五十个订单创建同一种文档,默认针对尚无文档的已付款订单),以及 document_download;该工具会将 PDF 作为嵌入式资源提供给主机,而模型只能看到元数据。 |
| 受保护的写入 | stock_set(绝对值或 delta)、product_update、product_create、product_cover_set(由店铺上传来自 URL 或字节数据的图片)、order_state_transition、order_delivery_transition(发货并附上跟踪码)、order_transaction_transition(标记为已付款、发送提醒、退款)、order_note(内部备注)、order_document_create、order_documents_bulk_create、promotion_toggle、promotion_create、customer_update、review_moderate、tag_assign(按名称为客户、订单或商品分配标签;缺失的标签会自动创建)。只有使用 --allow-write 才会注册;默认 dryRun: true,实际写入后会重新获取实体。SHOPWARE_MCP_MAX_WRITES 限制每个进程的实际写入次数;批量调用按每个订单计数一次。 |
| 另有命令行工具 | shopware-mcp setup 使用一次管理员登录创建遵循最小权限原则的集成。shopware-mcp doctor 会逐个工具说明此集成是否有权使用,以及缺少哪项权限。shopware-mcp init 会测试凭据,并为 Claude Desktop、Claude Code、Cursor、VS Code、Windsurf、Gemini CLI、Codex CLI 或 Zed 打印或写入配置。shopware-mcp brief、audit 和 report 会输出 Markdown 或 JSON,使用 --html 写入自包含的 HTML 页面,使用 --json-file 写入 JSON;遇到错误时会返回非零退出码,适用于 cron 和 CI;brief 和 audit 还可使用 --slack 将摘要发送到 Slack。 |
| GitHub Action | uses: bnymnDev/[email protected] 会在工作流中使用该标签对应的 shopware-mcp 版本运行审计,将 Markdown 写入作业摘要,将计数和退出码作为输出提供,并根据你选择的严重性级别使作业失败。 |
| 资源和提示词 | shopware://shop、shopware://sales-channels、模板 shopware://order/{orderNumber}、shopware://product/{productNumber} 和 shopware://customer/{customerNumber},供主机将记录附加为上下文;以及六个提示词:order_summary、customer_profile、low_stock_report、reorder_list、review_moderation 和 weekly_review。 |
| Shopware 术语 | 过滤器采用 Shopware Criteria 过滤器(equals、contains、range、equalsAny),作用于 Shopware 字段路径,也支持 manufacturer.name 这类关联路径。状态名称采用你熟悉的技术名称。 |
| 可移植的架构 | 每个工具架构都会经过检查,避免使用某些 MCP 客户端可能无法正确解析的结构,因此同一服务可在所有主机中运行。 |
| 可靠的客户端 | 支持 OAuth 客户端凭据、提前刷新令牌、遇到 401 时重试一次,以及遇到 429/5xx 时依据 Retry-After 重试;每个请求均设有超时,提供准确的总数、继承和语言标头,并缓存实体架构。 |
| 两种传输方式 | 面向桌面主机的 stdio,以及面向其他场景的无状态 Streamable HTTP,并支持可选的 bearer token。 |
| 四种打包方式 | 提供带构建来源证明的 npm 包、面向 amd64 和 arm64 的 GHCR Docker 镜像、一键式 .mcpb Claude Desktop 捆绑包(可询问凭据和写入额度),以及官方 MCP 注册表中的条目。 |
适用对象
- 你经营一家商店,希望通过提问来获取信息,而不是在管理后台中逐项点击。订单卡住了、库存不足、上个月的数字——每项只需一个提示词。
- 你经营一家代理机构,负责管理许多商店。这里的核心功能是每个服务对应一家商店;作者为客户打造的多商店、经过审计且托管的版本,请参阅开放核心。
- 你开发 Shopware 插件,希望 Agent 今天就能访问你的自定义实体,明天还能注册自己的工具。
entity_search实现前者;在src/extensions/下添加一个文件即可实现后者。 - 你构建 Agent,希望 MCP 服务行为可靠:输出精简、总数准确、支持试运行,架构中没有意外。
60 秒上手
1. 让 setup 创建集成。它会以管理员身份登录一次(密码绝不会被保存),创建一个仅含工具所需权限的只读角色,再创建使用该角色的集成,验证两者,并打印或写入主机配置:
npx shopware-mcp setup --url https://shop.example.com --user admin --for claude-desktop --write
添加 --allow-write 以启用写入工具,添加 --settings 以启用 shop_settings;--dry-run 会先显示该角色的权限。升级后再次运行同一命令:它会更新角色并保留密钥。想自己操作?在 Settings → System → Integrations 下创建集成,为其分配一个角色(参阅权限),然后继续执行第 2 步。
2. 或者让向导测试现有凭据并为你写入主机配置:
npx shopware-mcp init # asks for URL, key and secret, tests them, prints the config
npx shopware-mcp init --for claude-desktop --write # or merges it into the host's config file
npx shopware-mcp doctor # which tools can this integration use, and what is missing
npx shopware-mcp audit --fail-on warning # the shop audit as Markdown, exit 1 when something is off
npx shopware-mcp report --interval week # the sales report of the last 30 days as Markdown
npx shopware-mcp brief --html brief.html # pulse, audit and the last 7 days as one HTML page
也可以手动运行服务:
export SHOPWARE_URL=https://shop.example.com
export SHOPWARE_CLIENT_ID=SWIA...
export SHOPWARE_CLIENT_SECRET=...
npx shopware-mcp # stdio (default)
npx shopware-mcp --http --port 3333 # Streamable HTTP on http://127.0.0.1:3333/mcp
npx shopware-mcp --allow-write # also register the guarded write tools
3. 连接主机(或让 init --write 来完成):
Claude Desktop
从最新版本下载 shopware-mcp.mcpb 并双击,或者将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"shopware": {
"command": "npx",
"args": ["-y", "shopware-mcp"],
"env": {
"SHOPWARE_URL": "https://shop.example.com",
"SHOPWARE_CLIENT_ID": "SWIA...",
"SHOPWARE_CLIENT_SECRET": "..."
}
}
}
}
Claude Code
claude mcp add shopware \
-e SHOPWARE_URL=https://shop.example.com \
-e SHOPWARE_CLIENT_ID=SWIA... \
-e SHOPWARE_CLIENT_SECRET=... \
-- npx -y shopware-mcp
Cursor, VS Code, Windsurf, Gemini CLI, Codex CLI, Zed 和其他 stdio 主机
它们使用相同的三个字段。Cursor 读取 .cursor/mcp.json,VS Code 读取 .vscode/mcp.json(使用 servers 而非 mcpServers),Windsurf 读取 ~/.codeium/windsurf/mcp_config.json,Gemini CLI 读取 ~/.gemini/settings.json,Codex CLI 读取 ~/.codex/config.toml 中的 [mcp_servers.shopware] 表,Zed 使用其 context_servers 配置块。init --for <host> --write 会写入相应配置:
{
"mcpServers": {
"shopware": {
"command": "npx",
"args": ["-y", "shopware-mcp"],
"env": {
"SHOPWARE_URL": "https://shop.example.com",
"SHOPWARE_CLIENT_ID": "SWIA...",
"SHOPWARE_CLIENT_SECRET": "..."
}
}
}
}
读取官方 MCP 注册表的主机可通过 io.github.bnymnDev/shopware-mcp 找到它。
Docker 和 HTTP 主机
docker run --rm -p 3333:3333 \
-e SHOPWARE_URL=https://shop.example.com \
-e SHOPWARE_CLIENT_ID=SWIA... -e SHOPWARE_CLIENT_SECRET=... \
ghcr.io/bnymndev/shopware-mcp
该镜像通过 http://127.0.0.1:3333/mcp 提供 Streamable HTTP 服务。将任何支持 HTTP 的主机指向此 URL。添加 -e SHOPWARE_MCP_HTTP_TOKEN=<random secret> 后,端点就会要求提供 Authorization: Bearer <secret>;如果不设令牌,请将其限制在 localhost 上,或置于经过身份验证的代理之后(参阅自托管说明)。
4. 开始提问。通常第一个有用的问题是 “商店一切正常吗?”
随便问它什么
| 你说 | Agent 调用 |
|---|---|
| “今天一切正常吗?” | shop_pulse |
| “为什么客户 10009 无法结账?” | checkout_simulate { customerNumber: "10009", items } |
| “为什么优惠码 SUMMER26 无法使用?” | checkout_simulate { promotionCodes: ["SUMMER26"], items } |
| “寄往瑞士的运费是多少?” | checkout_simulate { country: "CH", items } |
| “为什么没人能找到钢色衬衫?” | storefront_search { term: "steel shirt", explain: "SW10002" } |
| “店铺一切正常吗?” | shop_audit |
| “我们 8 月的业绩如何?” | sales_report { from, to, interval: "week" } |
| “哪些商品的库存低于 5?” | 使用带有 range 筛选条件的 products_search,或使用 low_stock_report 提示词 |
| “为客服回复总结订单 10042。” | orders_get,或使用 order_summary 提示词 |
| “哪些客户下单次数超过 10 次?” | 使用 orderCount 上的 range 筛选条件调用 customers_search |
| “PayPal 插件是最新版本吗?” | plugins_list |
| “哪些制造商没有徽标?” | 先调用 entity_schema,再对 product_manufacturer 调用 entity_search |
| “将 SW10084 的库存设为 40。” | stock_set,先试运行,再正式执行 |
| “订单 10042 已由 DHL 发货,追踪号为 00340434。” | order_delivery_transition { transition: "ship", trackingCodes } |
| “10038 的银行转账已到账。” | order_transaction_transition { transition: "paid" } |
| “上周与前一周相比如何?” | sales_report { compareWithPrevious: true },或使用 weekly_review 提示词 |
| “把 10042 的发票发给我。” | order_documents_list,然后由 document_download 返回 PDF |
| “为 10042 添加备注:客户来电,周一发货。” | order_note |
| “订单 10042 发生了什么,是谁处理的?” | order_history |
| “客户 10042 是谁,最近订购了什么?” | customers_get 和 orders_search,或使用 customer_profile 提示词 |
| “本季度我们的最佳客户是谁?” | customer_report { from, to, topCustomers: 20 } |
| “哪些评价正在等待审核?” | 使用 status: false 调用 reviews_search,或使用 review_moderation 提示词 |
| “批准 Dominique 的评价并感谢她。” | review_moderate { approved: true, comment } |
| “店面提供哪些付款方式?” | payment_methods_list、shipping_methods_list |
| “创建一个 10 % 的优惠码 AUTUMN10,适用于 10 月。” | promotion_create,创建后默认处于未启用状态,直到你另行要求 |
| “添加商品 Bench,货号 SW10200,售价 119 欧元,库存 3 件。” | product_create,根据税率计算净价 |
| “客户退回了两件,把它们加到 SW10084 的库存里。” | stock_set { delta: 2 } |
| “接下来两周需要补订什么?” | stock_forecast,或使用 reorder_list 提示词 |
| “上个月各付款方式对应的订单数和营收是多少?” | 对 order 调用带有 terms 聚合和嵌套 sum 的 entity_search |
| “哪些已付款订单还没有发票?创建发票。” | 先调用 shop_audit,然后调用 order_documents_bulk_create { type: "invoice" },先试运行 |
| “定时任务都在运行吗?” | scheduled_tasks_list { onlyProblems: true } |
| “将这位客户标记为 VIP。” | tag_assign { entity: "customer", add: ["VIP"] } |
| “访客结账已启用吗?默认税率是多少?” | shop_settings |
| “将这张图片设为 SW10084 的图片:https://…/bench.jpg” | product_cover_set,店铺会下载该图片 |
| “缩略图缺失,平台正常吗?” | 安装了 FroshTools 时调用 frosh_health 和 frosh_queue |
| “按所需的最低权限配置。” | 这不是工具:npx shopware-mcp setup |
| “这个集成会导致我的哪些工具无法使用?” | 这不是工具:npx shopware-mcp doctor |
| “每天早上给我一页简报。” | 在 cron 中运行 shopware-mcp brief --html brief.html --slack <webhook> |
| “每周一把审计报告发给我。” | 这也不是工具:在 cron 中运行 shopware-mcp audit --fail-on warning |
一屏了解筛选器
每个搜索工具都使用相同的 filter 数组,其中每个条目都是 Shopware Criteria 筛选器:
{ "type": "equals", "field": "active", "value": true }
{ "type": "range", "field": "stock", "value": { "lt": 5 } }
{ "type": "range", "field": "orderDateTime", "value": { "gte": "2026-06-01" } }
{ "type": "equals", "field": "transactions.stateMachineState.technicalName", "value": "paid" }
{ "type": "contains", "field": "name", "value": "shirt" }
{ "type": "equalsAny", "field": "id", "value": ["…", "…"] }
{ "type": "equals", "field": "manufacturer.name", "value": "Acme" }
Admin API 中可筛选的内容在这里也都适用,包括关联。
需要紧凑输出中未包含的原始字段,例如 customFields、
ean 或 weight?传入 fields: ["customFields", "ean"],这些字段就会添加到
每个项目中。需要用其他语言读取商店?设置 SHOPWARE_LANGUAGE_ID。
完整内容请参阅速查表。
工具
资源:shopware://shop、shopware://sales-channels、shopware://order/{orderNumber}、shopware://product/{productNumber}。提示词:order_summary、low_stock_report、weekly_review。
支持插件的工具
服务启动时会在后台查询商店,获取已安装并启用的扩展,并为其已识别的扩展注册额外工具。商店若未响应,则只保留核心工具。--no-extensions 会关闭整个机制。
目前提供两个工具包。FroshTools 是一个开源运维插件,可添加 frosh_health(平台健康状况和性能检查)、frosh_queue(消息队列传输、待处理消息、工作进程)和 frosh_composer_audit(依赖项安全公告);这些工具均为只读,不会调用插件自身的维护操作。Merqo 可添加 merqo_health、merqo_einvoice_inbox、merqo_returns_search 和 merqo_abandoned_carts。未安装插件的商店不会看到其对应工具,核心工具也不会因此发生任何变化。要支持其他厂商的扩展,只需在 src/extensions/ 下添加一个文件,并针对已安装的插件进行测试;工具包会列出其插件路由所需的 ACL 权限,安装该插件后,shopware-mcp setup 会授予这些权限。欢迎提交拉取请求。
安全
- 默认只读。 未设置
--allow-write(或SHOPWARE_MCP_ALLOW_WRITE=true)时,不会注册写入工具。Agent 无法发现自己无法调用的工具。 - 每次写入都先进行试运行。 全部 15 个写入工具,从
stock_set到tag_assign,默认采用dryRun: true,并返回{ dryRun: true, wouldSend: { method, url, body } };如果一次调用需要发送多个请求,则返回请求列表。实际写入会返回重新获取的实体。 - 写入额度。
SHOPWARE_MCP_MAX_WRITES=20会拒绝进程中的第 21 次实际写入,并返回WRITE_BUDGET_EXHAUSTED;试运行不计入额度。任何提示词都无法提高此额度。 - 限制写入范围。
product_update只会修改名称、描述、启用状态和一种货币的价格;product_create只会创建简单商品,不做其他操作;product_cover_set会添加一张图片(JPEG、PNG、WebP、GIF 或 AVIF,不接受 SVG),由商店自身下载。promotion_create会创建一项购物车折扣,除非另有指定,否则设为未启用。customer_update只会修改启用标记和分组。状态转换工具只会推进状态机,不会转移资金。文档由 Shopware 自带的生成器生成,本服务不会发送文档;order_documents_bulk_create每次调用最多生成 50 份文档,并按每个订单计收一次写入额度。tag_assign会按名称添加或移除标签,不会改动记录的其他部分。不会删除任何内容。其他内容均不可写入。 - 模拟购物车不是订单。
checkout_simulate和storefront_search会通过 Shopware 自带的管理代理访问 Store API,并使用访客无法持有的随机上下文令牌。不会调用订单路由,之后会删除购物车;留下的只有一条上下文记录,Shopware 会自行使其过期。以客户身份进行模拟不会触及该客户自己的会话或已保存的购物车。会对已保存购物车做出响应的扩展(例如弃购邮件发送器)会将模拟购物车视为该客户的购物车,因此只有在可以接受的情况下,才以真实客户身份进行模拟。 - 默认遵循最小权限原则。
shopware-mcp setup会根据针对一个除此之外不具备任何权限的角色进行的测量,为每个工具授予其所需的确切权限,且绝不授予管理员权限。有两项权限的范围超出其对应工具,除非你主动请求,否则不会授予:读取整个系统配置,包括 SMTP 密码和支付密钥(--settings);以及安装扩展(--plugin-updates)。Setup 只会更改其创建的角色,会列出添加或移除的每项权限,并会在任何其他环节可能失败之前显示新的密钥。管理员密码仅用于通过 https 登录一次;仅连接本机时也可使用纯 http,并且绝不会保存该密码。 - 读取内容会清理敏感信息。
entity_search会从每个负载中移除密码、密钥、令牌和哈希值,并拒绝访问用于存放凭据或系统内部信息的实体:用户、集成、ACL 角色、应用、系统配置。 - 任何地方都不会出现密钥。 凭据绝不会出现在输出、日志或错误消息中。日志只写入 stderr,级别为
error,除非你要求更详细的日志。 - 不收集遥测数据。 服务只会与商店及你的主机通信,不会与其他对象通信。
- HTTP 传输。 设置
SHOPWARE_MCP_HTTP_TOKEN后,每次调用/mcp都必须携带该 bearer token,并会以恒定时间进行比较。未设置该令牌时,请绑定到 localhost(默认设置),或将服务置于经过身份验证的反向代理之后;如果服务在没有令牌的情况下可从更广范围访问,就会发出警告。 - 请求会超时。 如果商店停止响应,单个请求最多耗时 30 秒(
SHOPWARE_MCP_TIMEOUT_MS),不会拖垮整个会话。
发现了问题?请参阅 SECURITY.md。
配置
| 变量 | 必填 | 说明 |
|---|---|---|
SHOPWARE_URL | 是 | Shop 基础 URL,例如 https://shop.example.com(末尾的斜杠会被移除) |
SHOPWARE_CLIENT_ID | 是 | 集成访问密钥 ID |
SHOPWARE_CLIENT_SECRET | 是 | 集成访问密钥 |
SHOPWARE_MCP_ALLOW_WRITE | 否 | true 会注册写入工具。默认关闭 |
SHOPWARE_MCP_MAX_WRITES | 否 | 单个进程总共可执行的实际写入次数;0(默认值)表示不设上限 |
SHOPWARE_MCP_DEFAULT_LIMIT | 否 | 搜索工具的默认分页大小(默认 20,最大 50) |
SHOPWARE_MCP_EXTENSIONS | 否 | false 会禁用插件感知工具和启动时的扩展查询 |
SHOPWARE_LANGUAGE_ID | 否 | 用于翻译字段的语言 UUID(sw-language-id)。默认使用商店的默认语言 |
SHOPWARE_MCP_TIMEOUT_MS | 否 | Admin API 每次请求的超时时间,单位为毫秒(默认 30000,范围为 1000 到 600000) |
SHOPWARE_MCP_HTTP_TOKEN | 否 | HTTP 传输在 /mcp 上要求的 Bearer token(至少 16 个字符)。默认:无 |
SHOPWARE_MCP_LOG_LEVEL | 否 | error(默认)、warn、info、debug。日志仅输出到 stderr |
TZ | 否 | shop_pulse 和 brief 中“今天”所用的时区,例如 Europe/Berlin。默认使用系统时区 |
SHOPWARE_ADMIN_USER、SHOPWARE_ADMIN_PASSWORD | 仅限 setup | setup 用于创建角色和集成的一次性管理员登录凭据。不会保存;未提供时,setup 会提示输入 |
CLI 标志优先于环境变量:--allow-write、--max-writes <n>、--no-extensions、--http、--port <n>、--host <addr>、--log-level <level>。命令包括:setup、doctor、init、brief、audit 和 report;npx shopware-mcp --help 会列出它们的选项。
集成需要对工具涉及的实体拥有读取权限,并为写入工具拥有写入权限。shopware-mcp setup 会精确授予这些权限;对于开发商店,使用 Administrator 是快捷方式(所需权限)。
设计原则
- 使用 Shopware 的术语,而非我们自己的术语。 筛选条件、字段路径、状态名称和实体名称均采用 Shopware 的术语。工具调用看起来就像它实际转换成的 Admin API 请求,Shopware 开发者无需再记一套术语。
- 默认精简,按需完整。 条目包含模型进行推理和分页所需的信息。使用
fields获取原始字段,使用page获取更多行;长文本会被截断,而非直接倾倒出来。 - 读取无需额外设置,写入则需明确启用。 写入工具仅在用户提出要求时才会启用,默认执行试运行,并返回确切请求。商店执行操作前,模型就能看到其后果。
- 让商店负责计算。 总计、时间线和热门商品都通过 Shopware 聚合得出精确数量,而非在客户端对分页结果求和。
- 核心与供应商无关。 扩展包各自存放在独立文件中,仅在商店安装了对应扩展时才会注册,且绝不会改变核心工具的行为。不收集遥测数据,也不会向外发送数据。
各项具体设计选择的原因见 docs/decisions.md。
文档
| 文档 | 内容 |
|---|---|
| docs/quickstart.md | 集成、首次运行、宿主配置、示例问题、筛选条件速查表 |
| docs/tools.md | 每个工具及其所有参数,由代码生成 |
| docs/self-hosting.md | 传输方式、Docker、反向代理、Shopware 权限、运维 |
| docs/decisions.md | 设计决策及各项决策背后的原因 |
| CONTRIBUTING.md | 设置、基本规则、端到端测试、发布 |
| SECURITY.md | 应报告的问题及报告渠道 |
| CHANGELOG.md | 各版本的变更内容 |
开源核心
本仓库中的所有内容均采用 MIT 许可,并将始终如此。它面向一家店铺、一个运营人员和交互式使用场景。
同一作者还开发了 Merqo,这是一套面向欧盟合规和日常运营的商业 Shopware 扩展套件。本服务会检测这些扩展并添加相应工具,但从不要求必须安装它们;无论是否安装,核心工具的行为都一样。
大规模运营的代理机构和商家通常需要更多功能,这正是我为客户构建和运营的内容:
- 多店铺:一个 MCP 端点即可路由到数十家店铺,并为每家店铺配置独立的凭据和权限
- 托管服务与审计跟踪:记录每次工具调用的人员、操作和时间,提供基于角色的访问控制及 SLA
- 批量操作与迁移:批量更新价格和库存、导入商品目录、安全回滚
- 定制 Agent 和 Shopware 插件:针对你的 ERP、PIM 或支持平台定制工作流
有兴趣吗?请创建带有 consulting 标签的 issue,或通过 github.com/bnymnDev 联系我。在生产环境中使用 shopware-mcp,并希望它持续得到维护?赞助会有所帮助。
从源代码构建
pnpm install
pnpm dev # stdio server via tsx
pnpm test # vitest + msw-mocked Admin API
pnpm build # tsup → dist/ (npm) and dist/bundle/ (self-contained)
pnpm pack:mcpb # Claude Desktop bundle → shopware-mcp.mcpb
pnpm inspect # MCP Inspector against dist/
pnpm docs:tools # regenerate docs/tools.md and the tool tables in both READMEs
pnpm docs:demos # re-render the recordings in docs/demo/ from their transcripts
针对真实 Shopware(dockware/dev,或你指定的任意店铺)运行端到端测试,请使用 pnpm test:e2e;参见 CONTRIBUTING.md。
状态
v0.8。本页列出的所有内容均已实现,经过针对模拟 Admin API 响应的单元测试,并且每晚都会针对真实 Shopware 进行端到端测试。上方的录制内容来自 Shopware 6.7.13;也支持 6.6。
有意不包含的功能:HTTP 传输的用户管理(使用一个静态令牌,或通过代理实现)、多店铺路由和审计跟踪(商业功能),以及超出支持团队和店铺经理日常所需的 15 种写入工具之外的其他写入工具。
适合添加的点子:更多扩展包、用通俗语言解释更多购物车错误、products_search 示例图库。适合新手的 issue是不错的起点。
许可证
如果 shopware-mcp 回答了管理员无法解答的问题,点个星可以帮助其他店铺找到它。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。