@ cloudhal/ mcp- 服务器
Cloudhal的模型上下文协议表面(第2026-07-28段, @modelcontextprotocol/server 2.3. ADR-0004和ADR-0011.
工具 : 每一个工具, 及其范围, 以及一个人是否批准它 工具参考 定义产生的 src/tools.ts (单位:千美元)node scripts/mcp-tools-doc.ts; CI 失效时已失效)。 服务器按固定顺序列出它们. 每个工具都有JSON Schema输入/输出(由合同计划建造)、诚实的说明和 structuredContent。更新需要当前 rev (乐观地锁定). 每个突变快照自动显示( 每个呼叫一个快照; 治理快照携带) cloudhal.opId) (中文(简体) ).
分类学(RFC-0002): create_entry 编号 : update_entry 带 terms: { [taxonomy]: { set?, add?, remove?, primary? } } 以 id 、 shell 、 旧 shell 、 名称、同义词或单数/ plural 计值, 由商店解决; 未知或模棱两可的值是带有建议的错误(unknown_term, (中文(简体) ), ambiguous_term绝不是隐含的创造. tags 是一个被折旧的别名,用于 terms.tag.add。 。 。 . list_entries 取 RFC 第 5 节 filter代理人只通过 propose_term (单位:千美元)allowNewTerms:没有 = 拒绝、提议 = 提议、免费 = 活动;现有匹配被退回。 结构工具(site:write)总是等待一个人;他们的提示列出被触动的文章和每一个方向. 特工从不调离现场,从不回收弹壳,也从不批准他们自己的建议(在询问任何人之前先检查)。 将不变量错误映射到稳定代码( E)required_term, (中文(简体) ), too_many_terms,.),在文本中的下一步. 任务三角洲和治理结果opId,计数,重定向)进入审计行 input.effect。 。 。 .
核准: publish, (中文(简体) ), rollback, (中文(简体) ), delete_* 和结构分类/再定向工具返回 MCP 的多回转 input_required 带有引出(电文带有diff摘要)和HMAC署名 requestState 与工具、论据和主因联系在一起。 当事人在客户端中回答;电话仅以明确接受完成. 不引人注意的客户 confirmToken 接通第二通相同的电话confirmTokenFallback: false 关掉它.
技能: skill://<name>/SKILL.md 财务报告和审定财务报表 skill://<name>/references/<file> 资源。 跟踪技能的客户端发送 _meta["cloudhal.skill"] = "<name>";政策引擎然后将呼叫限制在该技能宣布的范围.
import { createCloudhalMcpServer } from "@cloudhal/mcp-server"; // McpServer for one principal
import { serveCloudhalStdio } from "@cloudhal/mcp-server/stdio"; // what `cloudhal mcp` runs
import { createCloudhalMcpHandler } from "@cloudhal/mcp-server/http"; // fetch(request, principal) — mounted at /mcp by @cloudhal/api
tools.ts 是 SDK 独立的( S)defineTools(), (中文(简体) ), runTool() = 政策 = 审计 = 处理者),是首先进行的测试; test/e2e.test.ts 运行一个真实的客户端 QQ 服务器对通过内存传输,并证明 Sprint 5 退出标准.
工具参考
110个工具,在服务器列出它们的顺序中.
| 工具 | 范围 | 仁爱 | 核准 | 它会做什么 |
|---|---|---|---|---|
list_sites | site:read | 读取 | —— 说 | 这个主机可以运行. |
get_site | site:read | 读取 | —— 说 | 网站的页面顺序、地点、主题、出版的快照和每次收集的设置(collections.<key>.permalink,例如/blog/{slug};一个没有一个人活在/<c |
list_pages | content:read | 读取 | —— 说 | 按导航顺序排列的站点页(所有状态). |
get_page | content:read | 读取 | —— 说 | 附有各节和当前修订版的一页 rev )),更新时返回. |
create_page | content:write | 写入 | 按键模式 | 创建页面草稿并附加到网站的导航上 . |
update_page | content:write | 写入 | 按键模式 | 替换页面的标题、路径、段落或seo,或设置自己的运动关卡和铬(RFC-0025:页眉默认 + 透明 + 隐藏 ;页脚默认 + minimal + 隐藏 ;无效返回 t...) |
get_catalog | content:read | 读取 | —— 说 | 页面表面可在该网站使用的组件(RFC-0020): Cloudhal的布局,内容和互动原始人加上主题的块类型,带有道具,孩子规则,b |
patch_draft | content:write | 写入 | 按键模式 | 与 RFC 6902 JSON Patch 操作在 /title,/ sisters 和/seo 上一步一步地构建或更改一页操作,例如 {"op":"add""path":"/ sessions/-""值":{... a surface...}{. |
import_surface | content:write | 写入 | 按键模式 | 添加(或替换)来自另一个基因UI格式的页面表面: a2ui 取 A2UI v0.9 消息( 创建 Surface, 更新组件, 更新 DataModel; 基本目录), json-render. |
export_surface | content:read | 读取 | —— 说 | 一个页面的表面部分, 以另一种基因UI格式: a2ui (A2UI v0.9 基本目录的信息,当网站有主域时,图像作为绝对 URL)或 json-re. |
delete_page | content:write | 写入( 破坏性) | 按键模式 | 删除一页并将其从导航中删除. |
list_entries | content:read | 读取 | —— 说 | 内容条目,最新第一. |
get_entry | content:read | 读取 | —— 说 | 附有正文和当前修订版的一个内容条目. |
create_entry | content:write | 写入 | 按键模式 | 在现有收藏( list Collections; 一个新的收藏需要创建 Collection first) 中创建内容条目草稿( markdown body), 可选择根据现有条款存档(terms; . (中文(简体) ) |
update_entry | content:write | 写入 | 按键模式 | 更新标题、摘要、正文、正文、现况(审查- 草案-公布),术语(terms: 由 id、 swit 或 name 添加、去除或设置分类和标记或输入自定义字段(fields. |
add_correction | content:write | 写入 | 按键模式 | 当所发表的故事发生实质变化时,在文章(RFC-0019§2)中添加更正、澄清或更新通知. |
delete_entry | content:write | 写入( 破坏性) | 按键模式 | 删除内容条目. |
list_translations | content:read | 读取 | —— 说 | 页面或条目的每个语言版本(其翻译组): 地语,状态,方法(原作,人文,机器,机器审查),是否是 stale (其来源已改变罪..... |
list_stale_translations | content:read | 读取 | —— 说 | 译出源自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出. |
get_translation_source | content:read | 读取 | —— 说 | 您需要将页面或条目翻译为 locale:源(翻译其标题,文本,摘要和SEO;保留部分ID,类型,链接,数字,图像和绑定),fo |
save_translation | content:write | 写入 | 按键模式 | 保存页面或条目的翻译 locale 作为与源当前修改相关的草案,以你的模型为出处. |
search_site | content:read | 读取 | —— 说 | 通过单词查找节点, 而不是列出全部 . |
get_theme_settings | content:read | 读取 | —— 说 | 主题的设计设置(RFC-0017):他们的方案(颜色为#rrggbb, enums, 数字;每个本地标题),对比规则颜色必须满足,以及站点的当前值. |
set_theme_settings | site:write | 写入 | 总是一个人 | 更改站点的设计设置( 颜色, 类型, 间隔 : get them settings listed them) . |
list_block_types | content:read | 读取 | —— 说 | 这个站点可以使用的打出块(RFC-0015):呼号,按钮,视频嵌入,FAQ和主题的自有. |
get_body | content:read | 读取 | —— 说 | 读出下标正体(一篇文章,或一页的丰富文本部分)为块:每个块有其id,散列,类型,下标和到底是谁修改了. |
edit_body | content:write | 写入 | 取决于电话 | 按块来修改标记下体,而不是重写: 替换一个块,在一块内替换文本,插入,移动或删除块,插入打出块(插入Block:一个叫出,一个b |
diff_node | content:read | 读取 | —— 说 | 在两个版本之间比较一页或一篇文章:变化的字段,及其正文(或每个丰富文本部分)块,与编辑块内所变化的单词相接. |
get_design | site:read | 读取 | —— 说 | 在构建或重新设计页面时首先读取(RFC-0021). |
get_design_tokens | site:read | 读取 | —— 说 | 站点设计标志为W3C Design Tokens (DTCG 2025.10)文件,为Figma (Tokens Studio),"风格词典"或设计师:光和暗的颜色角色,角光,s |
set_design | site:write | 写入 | 总是一个人 | 替换网站的设计规则(DESIGN.md,Markdown,最多24000个字符;无效去掉. |
get_chrome | site:read | 读取 | —— 说 | 网站的页眉,页脚和品牌(RFC-0025):设置什么,显示什么页面(默认填充),每个允许值的表单计划,菜单按住页眉和 |
set_chrome | site:write | 写入 | 总是一个人 | 更改站点头和页脚( get chrome 列出字段和允许值) . |
set_brand | site:write | 写入 | 总是一个人 | 更改网站的品牌(get chrome将字段列出):标志和标志Dark作为网站的图像资产(资产:<id>,从list assets或上传 asset;网站名称显示没有 |
render_page | preview:create | 读取 | —— 说 | 看一页的草稿,人们会看到:在桌面(1440年),平板电脑(768年)和电话(390年)的正版浏览器中制作,宽度和回放截图加自动检查(si |
list_taxonomies | site:read | 读取 | —— 说 | 站点分类法(如分类法,标签法)及其规则: required (审查/发表的文章需要一个主要术语), maxPerEntry, (中文(简体) ), allowNewTerms (无:只有人们会添加条件..... |
list_terms | content:read | 读取 | —— 说 | 一种分类学术语,每个语系都有名称,同义词(altnames),旧鼻涕(slugHistory),父词,状态,能见度和用法(文章总计并发表,最后使用). |
resolve_terms | content:read | 读取 | —— 说 | 给定的 ID 、 sults 、 名称或同义词的现有分类词是指什么( 与 指定 相同的规则 ) terms: id → sult → 旧 sult → 取名 →同义词 → 单数/平分. |
propose_term | content:draft:own | 写入 | 按键模式 | 在当前不匹配时建议新名词( 请检查 list terms / solution terms first) . |
update_term | content:write | 写入 | 按键模式 | 只更改一个名词的文本:名,同义词,存档内涵(描述)和每个地块的SEO,及其图像. |
rename_term | site:write | 写入 | 总是一个人 | 更改术语的 swit( 其存档 URL) . |
merge_terms | site:write | 写入 | 总是一个人 | 将重复名词合并为同一分类法的一个目标名词:每篇文章被重新放入目标名下(主要名词如下),来源退休并被取出姓名和鼻涕 |
retire_term | site:write | 写入( 破坏性) | 总是一个人 | 退去一个名词:它从每篇文章中删除,它的子名词向上移动,它的档案重定向(301)到 redirectToId (或为类别,取其母)-而无取向 |
set_term_parent | site:write | 写入 | 总是一个人 | 将一个名词移动到同一等级分类学的另一个名词下(null: to the top level). |
set_term_visibility | site:write | 写入 | 总是一个人 | 制作一个公共名词(archive, feed and sitemap enter;在文章上显示)或内部名词(没有公共URL;主题和过滤器可能仍然使用). |
review_term | site:write | 写入 | 总是一个人 | 就拟议术语作出决定:批准(它变得活跃,如果公开,则获得其档案)、拒绝(退休和从文章中删除)或合并(纳入现有术语, mergeIntoId) (中文(简体) ). |
taxonomy_report | content:read | 读取 | —— 说 | 关于词汇的发现:单用和未用名词,相近重复(编辑相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去 |
create_taxonomy | site:write | 写入 | 总是一个人 | 创建包含其规则和存档路径的分类学(如系列,区域). |
update_taxonomy | site:write | 写入 | 总是一个人 | 更改分类的规则,标签或归档(密钥永不变). |
list_redirects | site:read | 读取 | —— 说 | 该站点的改道(从 到301/302,准确/前缀,理由,出处节点). |
create_redirect | site:write | 写入 | 总是一个人 | 将站点不再服务的路径重定向到此站点的另一路径(代理无法重定向到其他主机). |
delete_redirect | site:write | 写入( 破坏性) | 总是一个人 | 删除重定向, 其旧路径将回答 404, 除非有东西为它服务 . |
list_collections | content:read | 读取 | —— 说 | 该网站的藏品(RFC-0040):已申报的藏品,已有入场的藏品,并有帖子. |
create_collection | site:write | 写入 | 总是一个人 | 宣告新的收藏(RFC-0040),例如事件,团队或工作,其名称出自站点默认地块(labels),可选图标,permalink(/<prefix>/{slug},默认/<key> |
update_collection | site:write | 写入 | 总是一个人 | 更改收藏的名称( 每个地方合并), 图标, 种子, 站点地图, 默认排序( RFC- 0040) 或其已输入自定义字段( )fields,整个列表; RFC-0041, 列表字段, 日期- dr.. |
preview_structured_data | content:read | 读取 | —— 说 | JSON-LD文档的一个条目的页面在其收藏的结构数据预设(RFC-0042:事件,JobPosting,Product, Recipe)下发出出,其构建与站点的构建完全相同,带有 |
rename_field | site:write, (中文(简体) ), content:write | 写入 | 总是一个人 | 重命名已输入自定义字段的密钥( RFC- 0041 §6): 每个条目的值从 from 改为 to; 没有转换. |
change_field_type | site:write, (中文(简体) ), content:write | 写入( 破坏性) | 总是一个人 | 更改已打入自定义字段的类型, 或选择的多值( RFC- 0041 §6) , 用一个封闭的表格转换每个值( text {richText, text- number, text- select, text- ↔url, date- -- datetim...) |
set_field_localized | site:write, (中文(简体) ), content:write | 写入 | 总是一个人 | 使一个已打入的自定义字段本地化(每个语言版本都有自己的价值;翻译回原作)或共享(只有原作持有;翻译自有同 |
remove_field | site:write, (中文(简体) ), content:write | 写入( 破坏性) | 总是一个人 | 删除一个已打入的自定义字段(RFC-0041 §6):其值从每个条目被删除,然后是定义. |
set_collection_permalink | site:write | 写入 | 总是一个人 | 移动收藏条目的活性位置(RFC-0038):permarink"/blog/{slug}"将收藏"posts"放入/blog/<slug>;无效回溯到默认/<collection>/{slug}. |
list_menus | site:read | 读取 | —— 说 | 站点导航菜单(主页:页眉,页脚,侧边栏,自定义密钥)有id,rev,max Depth,项数和站点上隐藏了多少项. |
get_menu | site:read | 读取 | —— 说 | 一个菜单:存储的树(写作时将其回放),以及每个地方的项目,网站是否显示(state),为什么不(reason:失踪,未公布,其他地方,..... |
update_menu | site:write | 写入 | 总是一个人 | 编辑有操作的菜单,按顺序和全部或无操作: 添加 {项目, 父?, 索引?} , 删除 {项目Id} (及其子树), 移动 {项目Id, 父?, 索引?}, 更新 {项目Id,.. |
set_menu | site:write | 写入 | 总是一个人 | 替换菜单的整棵树(或创建菜单:省略rev). |
delete_menu | site:write | 写入( 破坏性) | 总是一个人 | 删除菜单; 站点掉回该密钥的主题衍生出默认值( 如页眉中的顶级页面) . |
list_assets | content:read | 读取 | —— 说 | 一个网站的媒体库的文件,最新的第一:图像、视频、音频、文件和数据. |
get_asset | content:read | 读取 | —— 说 | 媒体库的一个文件有它的URL,校验和文件以及每一个使用它的地方(节点,字段和标题). |
upload_asset | asset:upload | 写入 | 按键模式 | 从基数64数据(最多为4 MB已解码)向站点的媒体库中添加一个文件. |
fetch_asset_url | asset:upload | 写入 | 按键模式 | 让服务器将一个公共的 https 文件( 最多25 MB) 下载到网站的媒体库: 服务器按照严格的规则获取( 仅https, 没有内部主机或 IP 地址...) |
update_asset | asset:upload | 写入 | 按键模式 | 更改文件的备选案文文本、标题或标题( in) locale),信用,许可,装饰性旗帜,URL sult或图像的焦点(focal:主题所在,从0到1的x和y.. |
retire_asset | asset:manage | 写入 | 按键模式 | 从库中隐藏一个文件和拾取器,所以没有新的用途. |
restore_asset | asset:manage | 写入 | 按键模式 | 再次提供已退休文件. |
delete_asset | asset:manage | 写入( 破坏性) | 按键模式 | 从媒体库中删除一个文件. |
create_snapshot | content:draft:own | 写入 | 按键模式 | 作为不可改变的、贴有标签的快照,冻结网站的现状. |
list_snapshots | site:read | 读取 | —— 说 | 最新地点的快照 哪个现场直播. |
diff_snapshots | site:read | 读取 | —— 说 | 在两个快照之间添加,更改并去除节点. |
preview_page | preview:create | 读取 | —— 说 | 将一个页面(或通过条目Id)渲染到 HTML 上,因为网站会显示它,加上一个预览链接(签名,到部署的站点,或 cloudhal dev URL) (中文(简体) ). |
publish | site:publish | 写入( 破坏性) | 总是一个人 | 抓取当前状态并让它活下来. |
rollback | site:rollback | 写入( 破坏性) | 总是一个人 | 将制作点放在更早的快照上(必须是活生生的祖先). |
get_analytics | analytics:read | 读取 | —— 说 | 网站如何在一定范围内进行:页面浏览,访问(来自其他网站或输入),网站盘点时的独特访客,预估的缓存-受袭比率(上云 |
top_content | analytics:read | 读取 | —— 说 | 在一定范围内浏览最多的页面,文章和档案,其目前的标题和路径(被更名的文章显示其新内容;被删除的则被读作已去)和页面更改. |
content_stats | analytics:read | 读取 | —— 说 | 一个页面的读者,文章或存档(由id所写,所以历史活下来了 switt 的修改):与上个时期的页面浏览和访问,一个系列,通过频道的访问,裁判主机,..... |
broken_links | analytics:read | 读取 | —— 说 | 请求在404或410中以一个范围结束,大多数点击率第一,与它们连接的同站点页,当它们最后一次被看到时和一个建议的目标(一个现有的重定向,o |
list_comments | comments:read | 读取 | —— 说 | 网站的读者评论,最先更新(状态待决,批准,隐藏,垃圾邮件,删除,或报告为公开报告). |
get_comment_thread | comments:read | 读取 | —— 说 | 一条文章的评论按显示顺序排列(最上层最古老,每篇后有答复),有线程状态和开放报告的细节. |
comments_summary | comments:read | 读取 | —— 说 | 计算一个站点的评论:按状态,待定年龄,开放报告,最繁忙的线程,标签,未解的问题和日封盖. |
label_comments | comments:moderate | 写入 | 取决于电话 | 最多50个评论(垃圾-可疑、有毒、离题、问题、需要-重写、赞誉、个人数据.)上添加或去除咨询标签. |
moderate_comments | comments:moderate | 写入 | 取决于电话 | 更改最多50个评论的状态. |
draft_comment_reply | comments:reply | 写入 | 取决于电话 | 代表网站起草对核准的评论的答复(解释性案文,2至5 000个字符). |
set_comment_thread | comments:moderate | 写入 | 取决于电话 | 设定文章的评论线索: 已关闭( 无新评论, 已有评论保留) 并隐藏( 无显示) 降低能见度 ; 打开、 默认和关闭日期 等待在.. |
list_schedule | schedules:read | 读取 | —— 说 | 网站在从和到(最多62天)之间发生的情况:发布(定期发布)、时间门(文章和网页上的禁止和过期)和自动化运行,以及 |
get_schedule | schedules:read | 读取 | —— 说 | 列表列表中的一个项,按其编号排列(rel .,出站口:<nodeId>:from turn, occ:<automationId>:<at>),详细内容. |
list_releases | schedules:read | 读取 | —— 说 | 网站的发布(排定发布时间)按时间顺序,按州:草案,等待 批准,安排,运行,发布,冲突,错过,过期,失效,取消. |
get_release | schedules:read | 读取 | —— 说 | 带有被封被封被封被封被封被封被封被封被封被封被封的被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被封被被封被封被封被封被封被封被封被封被 |
propose_release | schedules:write | 写入 | 取决于电话 | 给一个人留一份发行稿:命名的文章和页被固定在他们现在的版本上(加上他们需要的尚未活下来的东西),可选择有一段时间. |
schedule_release | schedules:write | 写入 | 取决于电话 | 一次发布一个发布会(或取名文章和页面,现在被贴上),或"在批准后". |
reschedule | schedules:write | 写入 | 取决于电话 | 将释放移至另一个时间. |
cancel_schedule | schedules:write | 写入 | 取决于电话 | 撤出一出:内无所出. |
set_embargo | schedules:write, (中文(简体) ), content:write | 写入 | 取决于电话 | 在现场保留文章或页面直至 from (一瞬间):它一直没有出现在每一页,列表,饲料和站点地图中,由站点本身执行. |
lift_embargo | schedules:write | 写入 | 取决于电话 | 要求某人在封锁前发表一篇文章或一页(删除) from,或移动它更早). |
schedule_unpublish | schedules:write, (中文(简体) ), content:write | 写入 | 取决于电话 | 一次从现场取出一篇文章或一页(从此从每一页,列表,饲料和站点地图中消失,由站点本身执行). |
list_automations | schedules:read | 读取 | —— 说 | 站点自动化:内置任务和计划代理任务,及其再现,状态和下跑. |
list_runs | schedules:read | 读取 | —— 说 | 每次出现自动化或发布时发生的情况,首先是最新的情况:状态(不论是否)和结果(是否做了某些事情)、使用、纹饰和摘要. |
get_run | schedules:read | 读取 | —— 说 | 一次与审计行、快照和核准申请一起运行. |
begin_run | 读取 | —— 说 | 在其窗口打开时启动此自动化运行( 它的密钥只在运行内工作) . | |
end_run | 读取 | —— 说 | 以简短的简写摘要(你做了什么,一个人应该看什么)及其结果来结束你的运行:做工作,无所事事,提议(你留下了建议)或等待应用..... | |
pause_automation | 读取 | —— 说 | 阻止自动化再次运行(你自己的自动化钥匙,或钥匙背后的人的自动化). | |
get_mode | 读取 | —— 说 | 您当前的模式, 您的密钥本身的模式, 任何生效的时框高地( 以及结束时), 以及您最新的高地请求的状况 . | |
request_elevation | site:read | 读取 | —— 说 | 要求一个人在有限的时间内(5–1440分)使用更自主的模式,例如AUTO一小时发布一系列小文章更新. |