mcpField
S
shopware-mcp

shopware-mcp

本地服务
github.com/bnymnDev商业与营销374 周前更新

关于 shopware-mcp

shopware-mcp 是面向 Shopware 6 店铺的 MCP 服务,可查询和管理商品、订单、客户、库存、报表与审计。它面向店铺运营者与开发者,内置只读默认模式,写入操作需显式开启并先以试运行展示请求内容。

主要功能

  1. 01精简工具覆盖主要店铺实体
  2. 02通过 Store API 模拟客户结购流程
  3. 03店铺健康审计与每日简报
  4. 04销售与客户报表、库存预测
  5. 05默认只读,写入需 --allow-write 开启

适用场景

  1. 01快速查询订单状态与销售概况
  2. 02排查结账失败或商品不显示的原因
  3. 03在 cron 或 CI 中定期执行店铺审计

MCP 相关

该项目是 MCP 服务,向 MCP 主机暴露店铺相关工具,并通过 Shopware Admin API 访问店铺数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"bnymndev-shopware": {
"command": "npx",
"args": [
"-y",
"shopware-mcp"
],
"env": {
"SHOPWARE_URL": "<SHOPWARE_URL>",
"SHOPWARE_CLIENT_ID": "<SHOPWARE_CLIENT_ID>",
"SHOPWARE_CLIENT_SECRET": "<SHOPWARE_CLIENT_SECRET>",
"SHOPWARE_MCP_ALLOW_WRITE": "<SHOPWARE_MCP_ALLOW_WRITE>"
}
}
}
}
启动命令npx -y shopware-mcp
需要配置的环境变量
SHOPWARE_URLShop base URL, e.g. https://shop.example.com
SHOPWARE_CLIENT_IDIntegration access key ID
SHOPWARE_CLIENT_SECRET密钥Integration secret access key
SHOPWARE_MCP_ALLOW_WRITESet to true to register the guarded write tools

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmshopware-mcp0.8.0

工具

29

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

shopware-mcp:Shopware 6 的 MCP 服务

npm CI 针对真实 Shopware 的每夜端到端测试 MCP 注册表 node MIT

为什么 · 演示 · 安装 · 工具 · 安全性 · 文档 · 网站 · 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 种范围明确的写入操作,不做其他操作。输出、日志或错误中绝不会出现机密信息。

左侧是 MCP 宿主,中间是 shopware-mcp,右侧是 Shopware 6 Admin API。工具调用向右流动,精简的 JSON 向返回。

各家商店并不相同,因此工具列表也不尽相同:启动时,服务会查询已安装的扩展,并为其认识的扩展注册额外工具。普通商店会获得核心工具集。插件更多的商店无需配置,就能拥有更强大的 Agent。

看看实际效果

六小时没有订单,原因何在。 周日傍晚。脉搏会将这段沉寂与过去八个周日的同一时段进行比较,而这些时段总会带来 3 到 7 笔订单,并得出纯属巧合的概率约为 170 分之一。随后,Agent 会像顾客一样尝试购买,结果发现店面处于维护模式。没有下单,也没有任何更改。

shop_pulse 报告了异常的六小时沉寂,随后 checkout_simulate 发现店面处于维护模式

顾客眼中的结账体验。 一位瑞士顾客表示优惠码无法使用。通过 Shopware 自有的 Store API 创建一个临时购物车,一次解释了这两个问题:瑞士不是该销售渠道覆盖的国家,而且该优惠码的促销活动已于 8 月结束。随后,搜索功能解释了为什么某件商品始终没有显示。

checkout_simulate 解释了国家被限制和优惠码已过期;storefront_search 解释了商品为何不可见

每天早晨,一页概览。 shopware-mcp brief --html brief.html 会将脉搏、审计结果和过去 7 天的数据写入一个独立页面,不会从任何位置加载内容,并会跟随读者的深色模式。可通过 cron 运行,并使用 --slack 在频道中发送一段摘要。 打开实际示例。

商店概览:异常沉寂提示横幅、今日订单数和收入与典型周日的对比,以及两张对比今天与过去八个周日的柱状图

一条命令,实现最小权限。 shopware-mcp setup 只需以管理员身份登录一次,即可创建一个权限恰好满足工具所需的角色;这些权限是根据实际商店测得的,而非猜测得出。它还会创建一个非管理员集成。该命令只显示一次密钥,会验证二者并打印主机配置。升级后再次运行,它会更新角色,同时保留密钥。

shopware-mcp setup 创建了一个拥有 51 项权限的只读角色和一个集成,只显示一次密钥,验证了 28 个只读工具中的 28 个,不包含 shop_settings,并打印 Claude Code 命令

30 秒入门视频:终端中真实的 shop_audit 答案、数据、安全模型和安装方法
30 秒,无声播放:在网站上观看或打开 MP4。由 docs/video/ 渲染。

本页中的所有录制内容,均为服务在带有生成式演示数据的 Shopware 6.7.13 测试商店中运行时产生的真实输出,并根据 docs/demo/ 中的记录重放。工具调用和结果均为原文,仅为适应屏幕而缩短。周围的文字则是 MCP 主机根据这些内容生成的。

一个问题,一次调用。 三笔已付款订单仍在等待发货,店面处于维护状态,一项夏季促销活动已延续至 8 月之后。答案列出了订单号和金额,并提供了安全的下一步操作。 shop_audit:Agent 提出一个问题,工具返回带样例的优先级调查结果,Agent 对其进行总结

由店铺自行计算的数据。 一次调用即可获取总计、渠道、状态、月度时间线和八个月以来的热门产品。无需逐个翻查订单;Shopware 的聚合功能完成了这项工作。

sales_report:总计、按渠道划分的收入、按状态划分的订单、月度时间线和热门产品

没有对应的工具?那就有对应的架构。 制造商没有专用工具。Agent 会读取实体的架构,找到 mediaId,并据此筛选。同样的方式适用于其他所有实体,包括自定义实体。

entity_schema 然后是 entity_search:Agent 找到 mediaId 字段,并找到 27 个没有徽标的制造商

写入操作会先展示具体内容。 使用 --allow-write 后,库存更正会以其将要发送的请求形式返回。只有明确设置 dryRun: false 才会修改店铺,之后还会从 Shopware 重新读取结果。

stock_set:试运行会返回将要发送的 PATCH 请求,Agent 提出确认,随后执行实际写入并返回重新读取的产品

先发货,再验证。 配送状态变更需要两个请求,发送前会先展示:先将跟踪码添加到配送信息,再更改状态。之后,订单历史会列出该状态变更、涉及的状态以及执行者。

order_delivery_transition 然后是 order_history:试运行列出两个请求,写入操作发出订单,历史记录显示状态变更及执行该操作的集成

一句话创建产品及其推广代码。 product_create 会选用店铺的默认税率并计算未税价格,同时在试运行中说明这一点。促销活动创建时处于未激活状态,因此在审核完成前,没有人会看到代码。

product_create 和 promotion_create:试运行显示包含税率和未税价格的 POST 请求,产品创建后,促销活动以未激活状态创建

审核并回复。 有两条评价待审批。垃圾内容会继续隐藏;投诉会在获批的同时附上店铺的公开回复,模型完全无需操作管理后台。

reviews_search 然后是 review_moderate:两条待处理评价,其中一条在试运行后获批并附上回复

关注客户,而不只是收入。 按分组统计新增账户、下单客户和回头客数量、访客占比,以及贡献期内收入份额最高的客户,并与上一期对比。

customer_report:新增客户、下单客户和回头客数量、与上一期的对比,以及按收入排名的头部客户

插件越多,店铺的 Agent 能力越强。 核心工具立即可用。扩展查询在后台完成后,会新增四个工具,并通知宿主刷新工具列表;之后,合规问题也能得到解答。

支持插件的工具:扩展查询完成后,tools/list 中的工具从 23 个增至 27 个,随后 merqo_health 回答合规问题

趁问题还没发生,及时补货。 stock_forecast 通过一次聚合读取六个月的订单明细,与当前库存合并后,逐个产品说明还剩多少天的库存、何时会售罄,以及需要订购多少。有九种产品已经超卖;另外两种目前仍然充足,但到了 10 月就不再如此。 库存预测:11 种商品将在 60 天内售罄,显示每日销量、可售天数、售罄日期和建议补货数量

同样的审计,无需主机介入。 shopware-mcp audit 会以 Markdown 格式输出发现的问题,并在存在严重问题时以非零状态码退出(或者使用 --fail-on warning 时,只要有任何异常就会退出)。将它加入 cron,然后查看邮件;将它加入 CI,让任务失败。shopware-mcp report 也会以同样的方式处理数据。

命令行中的 shopware-mcp audit 和 report:以退出码 1 返回 Markdown 格式的发现结果,随后是月度销售报告表格

安装了运维插件的商店,也能获得运维 Agent。 FroshTools 是许多 Shopware 托管服务商都会安装的开源工具箱。安装后会出现另外三个工具:平台健康检查、带有工作进程的消息队列,以及依赖项安全公告。Agent 能区分过时的搜索结果和已停止运行的工作进程。

FroshTools 工具包:frosh_health 列出失败的平台检查,frosh_queue 显示 134 条等待处理的消息且没有工作进程,Agent 指出原因

一次处理 56 张发票,每次 3 张。 order_documents_bulk_create 会按从早到晚的顺序查找已付款但尚未开具发票的订单,并在执行前显示将要创建发票的单个请求。每个订单都会计入写入预算。然后,scheduled_tasks_list 会说明积压是如何形成的:33 个任务中有 31 个逾期,从未运行过,调度器也没有运行。tag_assign 会为团队标记订单,并在过程中创建标签。

order_documents_bulk_create 对 3 个订单进行试运行和执行,scheduled_tasks_list 显示 31 个逾期任务,tag_assign 试运行并创建 invoice-sent 标签

先了解情况,再让 Agent 去发现。 shopware-mcp doctor 会探测集成可以读取的内容,在可能的情况下读取其角色以检查写入权限,并列出每个工具缺少的权限。管理员会看到满屏的勾选标记;支持台角色则会收到明确说明,知道需要授予哪些权限。

shopware-mcp doctor:管理员集成的所有工具均已就绪;随后是客户数据访问受限的支持台集成,以及需要授予的权限

使用 MCP Inspector 检查同一商店的截图

MCP Inspector 中的 shop_audit 结果

MCP Inspector 中的 sales_report 结果

已注册插件感知型工具的工具列表


包含内容

二十款精选工具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 Actionuses: 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。 完整内容请参阅速查表。


工具

工具访问权限用途
shop_info读取店铺信息
shop_settings读取店铺设置
sales_channels_list读取列出销售渠道
products_search读取搜索商品
products_get读取获取商品
orders_search读取搜索订单
orders_get读取获取订单
order_history读取订单历史记录
order_documents_list读取列出订单文档
document_download读取下载文档 PDF
customers_search读取搜索客户
customers_get读取获取客户
categories_list读取列出类别
promotions_list读取列出促销活动
reviews_search读取搜索商品评价
payment_methods_list读取列出付款方式
shipping_methods_list读取列出配送方式
plugins_list读取列出插件和应用
scheduled_tasks_list读取计划任务
stock_get读取获取库存
stock_forecast读取库存预测
storefront_search读取像客户一样进行搜索
checkout_simulate读取模拟结账
sales_report读取销售报告
customer_report读取客户报告
shop_pulse读取店铺动态
shop_audit读取店铺健康状况审计
entity_schema读取实体架构
entity_search读取搜索任意实体
stock_set写入(受保护)设置库存(受保护)
product_update写入(受保护)更新商品(受保护)
product_create写入(受保护)创建商品(受保护)
product_cover_set写入(受保护)设置商品封面图片(受保护)
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写入(受保护)分配标签(受保护)
每个工具的所有参数见:docs/tools.md。搜索会返回
{ total, page, limit, items },其中 total 为精确总数,limit 上限为 50;错误会以 { error: { status, code, detail } } 的形式返回,让模型能够据此作出反应,而不是猜测。

资源: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仅限 setupsetup 用于创建角色和集成的一次性管理员登录凭据。不会保存;未提供时,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 是快捷方式(所需权限)。


设计原则

  1. 使用 Shopware 的术语,而非我们自己的术语。 筛选条件、字段路径、状态名称和实体名称均采用 Shopware 的术语。工具调用看起来就像它实际转换成的 Admin API 请求,Shopware 开发者无需再记一套术语。
  2. 默认精简,按需完整。 条目包含模型进行推理和分页所需的信息。使用 fields 获取原始字段,使用 page 获取更多行;长文本会被截断,而非直接倾倒出来。
  3. 读取无需额外设置,写入则需明确启用。 写入工具仅在用户提出要求时才会启用,默认执行试运行,并返回确切请求。商店执行操作前,模型就能看到其后果。
  4. 让商店负责计算。 总计、时间线和热门商品都通过 Shopware 聚合得出精确数量,而非在客户端对分页结果求和。
  5. 核心与供应商无关。 扩展包各自存放在独立文件中,仅在商店安装了对应扩展时才会注册,且绝不会改变核心工具的行为。不收集遥测数据,也不会向外发送数据。

各项具体设计选择的原因见 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是不错的起点。

许可证

MIT

如果 shopware-mcp 回答了管理员无法解答的问题,点个星可以帮助其他店铺找到它。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。