mcpField
C
Cmssy

Cmssy

远程服务
cmssy.com商业与营销1今天更新

关于 Cmssy

Cmssy 的 MCP 服务通过 Cmssy API,让 AI Agent 读取和管理页面及其他工作区内容。它涵盖内容编辑、自定义数据模型和商务操作,并支持页面国际化内容。

主要功能

  1. 01读取和管理页面
  2. 02编辑页面区块与布局
  3. 03管理自定义模型和记录
  4. 04处理订单、退货和折扣
  5. 05上传及浏览媒体

适用场景

  1. 01创建和更新多语言网站页面
  2. 02管理结构化工作区记录
  3. 03处理店铺订单与退款

MCP 相关

该服务使用工作区 ID 和 API token 将 MCP 客户端连接到 Cmssy API,提供页面、模型、记录、媒体和商务操作的读写工具;可用操作取决于工作区权限。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://api.cmssy.io/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npm@cmssy/mcp-server0.132.0

工具

96
参数类型必填说明
searchstring否用于按页面名称或 slug 筛选页面的可选文本

详细介绍

@cmssy/mcp-server

适用于 Cmssy CMS 的 MCP 服务——支持 AI 驱动的页面创建与管理,并提供 i18n 支持。

设置

前置条件
  1. 一个 Cmssy 工作区——免费套餐即可;购物车和结账功能需要 Pro
  2. 一个 API 令牌(Dashboard > API Tokens,以 cs_ 开头)
  3. 你的工作区 ID(Workspace Settings > General)

该服务默认与 https://api.cmssy.io 通信。只有在使用其他后端时才传入 --api-url。

添加到 Claude Code

在项目根目录的 .mcp.json 中添加:

{
  "mcpServers": {
    "cmssy": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cmssy/mcp-server@latest",
        "--token",
        "cs_YOUR_TOKEN",
        "--workspace-id",
        "YOUR_WORKSPACE_ID"
      ]
    }
  }
}
环境变量

你也可以设置以下变量来代替 CLI 参数:

  • CMSSY_API_TOKEN — API 令牌(cs_xxx)
  • CMSSY_WORKSPACE_ID — 工作区 ID
  • CMSSY_API_URL — API URL(可选;默认值为 https://api.cmssy.io,因此只有在使用可自托管后端时才设置)
检查当前运行的构建版本

--version 和 --help 无需令牌,因此即使服务 尚未配置也会返回结果。针对客户端启动时使用的同一配置运行 该标记,从 mcp.json 中复制配置:

npx -y @cmssy/mcp-server --version          # what an unpinned config runs
npx -y @cmssy/mcp-server@latest --version   # what the registry serves today
npm view @cmssy/mcp-server version          # the newest published version

前两个结果可能不一致,而这种不一致本身就是答案:已热启动的 npx 缓存中保存着未锁定版本的配置先前解析到的构建版本,而 @latest 会重新解析并报告最新版本。因此,@latest --version 无法诊断 过期缓存——它反而会掩盖问题。如果工具因 API 本应提供的字段而失败,请先检查未锁定版本的配置,再进行比较。

可以运行 npx clear-npx-cache 清除缓存;也可以在配置中锁定版本,这样就无需诊断缓存问题。

隐私政策

完整政策:https://www.cmssy.com/privacy。联系方式:[email protected]。

  • 此服务收集什么:不收集任何自身数据。它不保留本地数据库、不写入文件,也不会向任何分析服务发送数据。
  • 发送什么以及发送到哪里:每次工具调用都会向 Cmssy API(除非设置了 CMSSY_API_URL,否则为 https://api.cmssy.io)发出一个 GraphQL 请求,其中包含你的 API 令牌、工作区 ID、工具参数、客户端名称和版本,以及正在运行的工具名称。Cmssy API 会根据最后两项信息,为每次工具调用记录一条使用事件。
  • 文件和 URL:upload_media 只会读取你提供的本地文件路径,或下载你提供的 URL,然后将字节上传到 API 返回的 Cmssy 存储 URL。它不会访问其他文件。
  • 使用情况和存储:Cmssy API 会按照上述政策所述,在欧盟存储工作区内容(页面、记录、媒体、订单、客户)。内容不会被出售,也不会用于训练 AI 模型。
  • 与第三方共享:此服务只与 Cmssy API 和 Cmssy 存储 URL 通信,此外还会访问你提供给 upload_media 的任何 URL。Cmssy 服务自身使用的第三方服务列于该政策中。
  • 数据保留:调用返回后,此服务不会保留任何内容。工作区数据会一直保留,直到你将其删除或关闭账户;保留期限详见该政策。
  • 你的令牌:令牌具有创建者所拥有成员的权限。你可以随时前往 Dashboard > API Tokens 撤销令牌。

响应格式(写入工具)

从 0.6.0 开始,大多数写入工具都接受可选参数 response:

  • response: "minimal"(默认值)——返回简短确认信息(约 200 字节): 页面工具返回 {id, slug, hasUnpublishedChanges, updatedAt}, 区块工具返回 {pageId, blockId, hasUnpublishedChanges, updatedAt}, 表单工具返回 {id, slug, status, updatedAt}, 模型工具返回 {id, slug, updatedAt}, 记录工具返回 {id, status, updatedAt}, 订单工具返回 {id, orderNumber, status, paymentStatus, fulfillmentStatus, total, balanceDue, currency, updatedAt}, 折扣工具返回 {id, code, type, value, enabled, updatedAt}。
  • response: "full"——返回完整的变更响应(0.6 之前的行为)。

只有在需要内联获取写入后的状态时才使用 "full";否则,请改为调用 get_page/get_form/get_model/get_record。这样可以避免回显内容占满 Agent 的上下文窗口。

接受 response 的工具:create_page、update_page_blocks、 update_page_settings、publish_page、unpublish_page、revert_to_published、 update_page_layout、add_block_to_page、update_block_content、 remove_block_from_page、create_form、update_form、create_model、 update_model、create_record、update_record、create_manual_order、 edit_order、update_order_details、mark_order_paid、record_order_payment、 refund_order、cancel_order、close_order、reopen_order、 create_return、approve_return、reject_return、cancel_return、 receive_return、refund_return、complete_return、update_return_tracking、 create_shipment、update_shipment、 set_order_pipeline_stage、record_order_invoice、 record_order_invoice_correction、create_discount、 update_discount、set_discount_enabled。

patch_block_content 和各类 delete_* / 仅更改状态的工具 (update_form_submission_status、import_records) 已会返回简短确认信息,不接受 response。

可用工具

读取工具
工具描述
list_pages带层级结构的页面树(可选 search 筛选条件)
get_page按 slug 或 id 获取完整页面,包含区块、i18n 内容和区域设置(自身的 regionSettings 及含继承来源的解析后 resolvedRegions)
get_site_config语言、导航、网站名称
get_workspace_info工作区名称、方案、限制
list_media媒体库列表
list_trashed_pages页面回收站:已删除的组、删除者、子树大小,以及各项的清除时间(删除后 30 天)
写入工具
工具描述
create_page创建新页面
update_page_blocks设置页面的完整区块数组
update_page_settings更新页面元数据和 SEO
publish_page发布页面
unpublish_page取消发布页面
delete_page将页面及其子树移至回收站,可在 30 天内恢复
restore_page将回收站中的页面组恢复为未发布的草稿
revert_to_published丢弃草稿,恢复为已发布版本
区块辅助工具
工具描述
add_block_to_page在指定位置插入区块(自动生成 UUID 和翻译)
update_block_content将内容合并到现有区块
patch_block_content精准修补 HTML(在唯一标记附近插入/替换)
remove_block_from_page按 ID 移除区块
update_page_layout更新布局区块和覆盖项
update_region_settings设置一个布局区域的设置(根据清单验证;不影响其他区域)
update_region_settings

区域(布局位置)设置由工作区的布局清单声明,并在写入时根据清单进行验证。该工具读取页面当前的 layoutRegionSettings,只替换指定区域,然后将整个列表写回,因此相邻区域会保留其值(清单不再声明的 区域条目,以及区域架构不再包含的键,会在过程中被移除——这与管理编辑器执行的清理相同)。对于未知区域、未知键,或在未声明设置的区域中传入非空 values(此类区域仅接受 values: {}),后端会原样返回其 BAD_USER_INPUT 消息;如果存在 blockWarnings,也会一并返回。

{ "pageId": "...", "region": "sidebar", "values": { "width": "wide" } }

子页面会继承区域设置,除非它们设置了自己的值—— get_page 会在 resolvedRegions 中显示每个区域的生效值 (settingsAreInherited、settingsSourcePageId)。

patch_block_content

对于较长 HTML 内容字符串(例如 docs-article 正文)的小幅编辑, patch_block_content 所需 token 约为 update_block_content 的十分之一, 并且会在写入数据库前捕获标记错误。

{
  "pageId": "...",
  "blockId": "...",
  "locale": "en",
  "operations": [
    {
      "op": "insert_before",
      "marker": "<h2>Environment Variables</h2>",
      "html": "<hr><h2>cmssy skills install</h2><p>...</p>",
    },
  ],
}

共有三种操作:insert_before、insert_after、replace_section。每个 标记都必须恰好匹配一次——匹配 0 次或 2 次以上都会报错并显示 实际匹配数(不会出现静默的部分应用状态)。对于 replace_section, startMarker 包含在范围内,endMarker 不包含在范围内。

需要由 @cmssy/cli 注册的工作区,并具有 PAGES_EDIT 权限。 默认 fieldPath 为 "content"(docs-article 上的 HTML 正文);如果要修补其他字符串字段, 请覆盖此值。

模型工具(自定义数据模型)

AI Agent 可以定义 ModelDefinition 并对其记录执行 CRUD 操作。架构/字段遵循 @cmssy/types 中的 PropertyField;每次写入时都会根据模型验证记录。

工具描述
list_models列出工作区中的所有 ModelDefinition
get_model按 ID(ObjectId)或 slug 获取模型
create_model创建模型(name、slug、fields、可选的 statusField)
update_model更新模型的任意字段(字段变更会触发架构迁移)
delete_model删除模型——同时删除其所有记录
list_records使用筛选条件(JSON)、排序、分页和可选的填充来列出记录
get_record按 ID 获取记录;公司记录包含其 VAT ID、验证状态和豁免信息
create_record创建记录;data 以模型字段键为键
update_record更新记录的 data 和/或变更其状态
delete_record删除记录
import_records批量导入最多 1000 条记录;返回 { importedCount, errors }
bulk_update_records对最多 200 个 ID 或所有符合筛选条件的记录设置 data 和/或 status

根据操作类型,需要工作区权限 MODELS_VIEW(读取)/ MODELS_CREATE / MODELS_EDIT / MODELS_DELETE。

商务工具(订单、购物车、折扣)

管理店面的订单、购物车和折扣码。**所有金额字段均为整数最小货币单位(分)。**订单/折扣写入工具接受 response 参数(参见响应格式)。

工具描述
list_orders按付款/履约/配送/状态、仓库队列、客户、货币、日期列出订单;通过 skip/limit 分页
get_order获取订单及其商品、付款、包裹、发票和更正发票、税费汇总与处理方式、销售渠道,以及为其定价的价格表
get_order_pipeline获取工作区可配置的订单流程阶段
create_manual_order创建由管理员录入的订单,可选填写配送地址
edit_order替换订单的商品行(重新计算总额)
update_order_details更新客户邮箱、备注、采购订单编号和配送地址
mark_order_paid记录全额付款(手动对账,不验证支付服务提供商)
record_order_payment记录针对应付余额的部分付款
refund_order退款(全额退款,或通过 amount 指定部分退款)
cancel_order取消订单
close_order将订单标记为已完成;如果付款或履约进度落后,则自动重新打开
reopen_order重新打开已关闭的订单
create_return创建退货:商品行、数量、原因和退货包裹追踪信息
approve_return批准客户申请的退货
reject_return拒绝退货申请
cancel_return取消尚未退款的退货
receive_return按商品行记录收到的数量,以及退回库存的数量
refund_return记录退货退款
complete_return关闭已收货但未退款的退货
update_return_tracking设置退货包裹的承运商和追踪编号
create_shipment为订单添加包裹(承运商、追踪编号、链接、状态)
update_shipment更改包裹状态或追踪信息,并为其历史记录添加备注
set_order_pipeline_stage将订单移至某个流程阶段
record_order_invoice为订单关联发票(编号、URL、服务提供商)
record_order_invoice_correction为已开票订单关联更正发票(贷项通知单)
list_carts列出购物车(管理员视图,可选按状态筛选),并显示其销售渠道
delete_carts永久删除 1 至 100 个购物车,全部删除或一个也不删
list_discounts列出折扣码(按启用状态/类型/代码筛选)
get_discount按 ID 获取折扣
create_discount创建折扣(percentage/fixed/free_shipping)
update_discount部分更新(代码/类型/货币;代码使用后即锁定)
set_discount_enabled启用或停用折扣
list_products商品目录,包含库存和变体信息(基于 Data Model)
bulk_update_products批量设置或调整所选商品的状态、库存或价格
bulk_delete_products批量删除所选商品记录
set_product_tiers设置商品记录级别的批量价格阶梯
set_product_variants替换商品的全部变体
set_product_currency_prices替换商品在其他货币中的价格和价格阶梯,以及变体的各币种价格,不更改库存
产品是自定义数据模型的记录;这些工具在通用记录工具的基础上,增加了与产品相关的库存和变体读取,以及批量写入功能。批量工具可针对明确的 ids 列表,或所有符合 filter 条件的记录(allMatching: true)。不支持单独写入变体库存,也没有独立的库存变更工具——库存通过 patch.setStock / patch.adjustStock 批量设置或调整。

需要工作区权限:ORDERS_VIEW / ORDERS_MANAGE(订单)、CARTS_VIEW(购物车)、DISCOUNTS_VIEW / DISCOUNTS_MANAGE(折扣)、MODELS_VIEW / MODELS_EDIT / MODELS_DELETE(产品)。

客户工具

客户是在网站上登录的账户——即启用了账户的模型记录,而不是管理工作区的团队(list_team)。

工具描述
list_customers列出客户及其状态、验证情况、最近登录时间、公司和订单统计信息(分页)
get_customer获取一位客户的账户摘要及其个人资料记录数据
suspend_customer阻止登录并结束所有活动会话(订单和购物车会保留)
unsuspend_customer允许已暂停的客户重新登录
send_customer_password_reset向活跃客户发放重置令牌;应用的 account.* webhook 会发送邮件
resend_customer_verification向待验证客户发放新的验证令牌;应用的 webhook 会发送邮件
unlock_customer清除登录失败计数和锁定状态
set_customer_company_role为客户分配公司角色(admin 可查看公司的所有订单,buyer 只能查看自己的订单)
set_customer_price_list为没有所属公司的客户分配价格表;null 表示取消分配
价格清单工具

价格清单(Gold、Silver、经销商层级)按目录价格的折扣百分比,以及每个产品或变体的固定价格,为买家定价。每位买家使用一个清单:公司的成员使用公司的清单;没有关联公司的客户使用自己的清单。

工具说明
list_price_lists列出所有价格清单,包括 percentOff、固定价格数量、分配数量和渠道
get_price_list获取一个清单及其一页固定价格(按产品筛选,使用游标分页)
create_price_list创建清单,设置名称、可选折扣百分比,以及发布到哪些渠道
update_price_list重命名清单、更改其 percentOff、时间窗口或渠道([] 表示取消发布)
delete_price_list删除清单并取消其在所有位置的分配
set_price_list_entry为一个产品或变体设置固定价格,可选设置批量折扣阶梯
set_price_list_entries一次性新增或更新最多 1000 个固定价格,要么全部成功,要么全部不生效
remove_price_list_entries按产品/变体移除最多 1000 个固定价格
set_company_price_list为公司记录分配价格清单;所有成员均使用该清单;null 表示取消分配
set_company_price_display_mode设置公司买家查看净价还是含税价;null = 默认值(净价)
set_company_tax_rounding设置公司的增值税舍入方式:per_line 或 per_rate;null = 工作区设置
set_company_vat_id设置或清除公司的欧盟增值税 ID;更改 ID 后将不再通过验证
set_company_vat_verified确认或撤销对公司增值税 ID 的核验;此设置会影响反向征税
set_company_tax_exemption以合法理由免除公司订单的增值税;null 表示清除
销售渠道工具

销售渠道(零售、餐饮、B2B)是店面发送的一个键,用于从已发布到该渠道的价格清单中获取价格:对于每个产品,优先使用买家个人或公司清单,其次是该渠道设有日期的清单,再其次是该渠道的基础清单,最后是目录价格。使用 create_price_list / update_price_list 的 channels 发布清单。

工具说明
list_sales_channels列出所有渠道,包括 key、displayMode、priceAccess、启用的清单和未结购物车数量
get_sales_channel获取一个渠道及其已发布清单、nextChangeAt 和 activeCartCount
create_sales_channel创建渠道(创建后 key 固定);每个工作区最多 20 个
update_sales_channel重命名渠道或更改其 displayMode 或 priceAccess
delete_sales_channel删除渠道、取消发布其清单,并放弃其未结购物车
Webhook 工具

管理出站事件 Webhook。create_webhook 和 rotate_webhook_secret 只会返回一次签名密钥,之后无法再次获取。

工具描述
list_webhooks列出 Webhook 端点(永不返回密钥)
list_webhook_deliveries最近的投递尝试(待处理/成功/失败)
list_webhook_event_types可订阅事件的权威允许列表
create_webhook创建端点;返回端点和密钥(仅一次)
update_webhook部分更新;传入 enabled 以启用/停用
rotate_webhook_secret轮换签名密钥(新密钥仅返回一次)
delete_webhook删除端点

需要工作区权限 WEBHOOKS_VIEW(读取)/ WEBHOOKS_MANAGE (创建、更新、轮换、删除)。

资源

URI描述
cmssy://sitemap完整页面树的 JSON
cmssy://workspace工作区信息和站点配置

示例工作流

> List all pages in my workspace
> Search for pages matching "blog"
> Show me the available block types
> Which pages still use block types the site no longer registers?
> Create a new "Features" page with content in English and Polish
> Add a hero block to the Features page
> Publish the Features page

托管服务端(库)

createHostedServer 会在不持有令牌且不使用磁盘的主机上提供相同的工具。每个工具都需要一个 workspace(<orgSlug>/<workspaceSlug>);list_workspaces 会列出连接可使用的工作区。该包只检查 workspace 的格式,以下所有事项都由主机负责:

  • resolveWorkspace(workspace) 是授权环节。 每次调用时都要检查调用方是否仍是该工作区的成员,以及该连接是否已获授权访问该工作区。对于“工作区不存在”和“该工作区不属于你”,应抛出相同的消息,以免拒绝请求时泄露哪些工作区存在。
  • 执行器负责限定范围。 它返回的 CmssyApi(createCmssyApi(execute, workspaceId))会以该用户身份在该工作区中执行每个文档;该包不会发送任何用于限定范围的信息。
  • fetchUrl 是 SSRF 防护边界。 拒绝私有、环回和链路本地地址,并对每次重定向重新检查。读取时,该包会将正文大小限制为 50MB。

开发

pnpm install
pnpm dev -- --token cs_xxx --workspace-id xxx --api-url http://localhost:4000

评论

支持 Markdown

第一次接触 MCP?

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

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