@caelo-cms/mcp-server 0.10.67 → 0.10.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/power-catalogue.json +32 -12
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caelo-cms/mcp-server",
|
|
3
3
|
"mcpName": "io.github.caelo-cms/caelo",
|
|
4
|
-
"version": "0.10.
|
|
4
|
+
"version": "0.10.68",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MPL-2.0",
|
|
7
7
|
"description": "MCP servers for Caelo CMS: `caelo_chat` (talk to Caelo's own AI) and the admin-scoped Power-MCP (the full chat-runner tool catalogue, driven by your own agent). Lets Claude Code (or any MCP-aware client) drive a Caelo install from outside the browser.",
|
package/power-catalogue.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.10.
|
|
2
|
+
"version": "0.10.68",
|
|
3
3
|
"tools": [
|
|
4
4
|
{
|
|
5
5
|
"name": "edit_module",
|
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
},
|
|
217
217
|
{
|
|
218
218
|
"name": "edit_content",
|
|
219
|
-
"description": "Surgically edit a module's, template's or layout's body (html/css/js) by string replacement — the cheap, minimal-diff way to change existing code. Pass `entityKind` + `entityId` + `field` + an `edits` array of {oldString, newString, replaceAll?}. Each `oldString` must be UNIQUE in the body (add surrounding context if not) unless `replaceAll:true`; edits apply in order, atomically (all-or-nothing). Read the body first with read_content and copy exact text (incl. whitespace) into `oldString`; optionally pass its `sha=` as `expectedSha` to guard against a concurrent change. On success it returns the NEW `sha=` plus a line-numbered snippet of each changed region — chain another edit_content in the same turn using that sha and the fresh line numbers, WITHOUT re-reading. PREFER this over edit_module for targeted changes to existing html/css/js — it is far cheaper and the diff is reviewable. Use edit_module instead for a wholesale rewrite, a new module, or field-schema / displayName / kind changes. TEMPLATES AND LAYOUTS ARE GATED: an edit_content on a template or layout is a TWO-STEP §11.A flow — you propose, the Owner clicks Approve on the proposal card. Do not claim such an edit was applied. **Internal links** (`href`s in HTML, `url`/`link` fields, link-list and nav items): write the page's path, e.g. `/about` — it must be an EXISTING page (list_pages); a link to a page that does not exist yet is refused, so create the target first (`build_page({page:{slug, title}, modules: []})` makes an empty page shell in one call), or add the link after. The site root `/` (also `/#section`) is always valid, even before the homepage is built. Exception, a site import you are rebuilding in this chat: a link to a page of that import run is kept and resolved by resolve_import_links at the end. Images/files: their media URL (find_media). Other sites: the full https:// URL.",
|
|
219
|
+
"description": "Surgically edit a module's, template's or layout's body (html/css/js) by string replacement — the cheap, minimal-diff way to change existing code. Pass `entityKind` + `entityId` + `field` + an `edits` array of {oldString, newString, replaceAll?}. Each `oldString` must be UNIQUE in the body (add surrounding context if not) unless `replaceAll:true`; edits apply in order, atomically (all-or-nothing). Read the body first with read_content and copy exact text (incl. whitespace) into `oldString`; optionally pass its `sha=` as `expectedSha` to guard against a concurrent change. To fill an EMPTY field (e.g. a module with no js yet), pass one edit with `oldString: \"\"` and the new content as `newString`; an empty oldString on a field that has content is refused. On success it returns the NEW `sha=` plus a line-numbered snippet of each changed region — chain another edit_content in the same turn using that sha and the fresh line numbers, WITHOUT re-reading. PREFER this over edit_module for targeted changes to existing html/css/js — it is far cheaper and the diff is reviewable. Use edit_module instead for a wholesale rewrite, a new module, or field-schema / displayName / kind changes. TEMPLATES AND LAYOUTS ARE GATED: an edit_content on a template or layout is a TWO-STEP §11.A flow — you propose, the Owner clicks Approve on the proposal card. Do not claim such an edit was applied. **Internal links** (`href`s in HTML, `url`/`link` fields, link-list and nav items): write the page's path, e.g. `/about` — it must be an EXISTING page (list_pages); a link to a page that does not exist yet is refused, so create the target first (`build_page({page:{slug, title}, modules: []})` makes an empty page shell in one call), or add the link after. The site root `/` (also `/#section`) is always valid, even before the homepage is built. Exception, a site import you are rebuilding in this chat: a link to a page of that import run is kept and resolved by resolve_import_links at the end. Images/files: their media URL (find_media). Other sites: the full https:// URL.",
|
|
220
220
|
"inputSchema": {
|
|
221
221
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
222
222
|
"type": "object",
|
|
@@ -247,8 +247,7 @@
|
|
|
247
247
|
"type": "object",
|
|
248
248
|
"properties": {
|
|
249
249
|
"oldString": {
|
|
250
|
-
"type": "string"
|
|
251
|
-
"minLength": 1
|
|
250
|
+
"type": "string"
|
|
252
251
|
},
|
|
253
252
|
"newString": {
|
|
254
253
|
"type": "string"
|
|
@@ -439,7 +438,7 @@
|
|
|
439
438
|
"page": {
|
|
440
439
|
"type": "object",
|
|
441
440
|
"additionalProperties": false,
|
|
442
|
-
"description": "EITHER { pageId } to build onto an existing page (modules are appended), OR { slug, title, metaDescription, name?, templateId?, status?, parentPageId? } to create the page in the same call. Never both.",
|
|
441
|
+
"description": "EITHER { pageId, metaDescription? } to build onto an existing page (modules are appended), OR { slug, title, metaDescription, name?, templateId?, status?, parentPageId? } to create the page in the same call. Never both.",
|
|
443
442
|
"properties": {
|
|
444
443
|
"pageId": {
|
|
445
444
|
"type": "string",
|
|
@@ -477,7 +476,7 @@
|
|
|
477
476
|
"type": "string",
|
|
478
477
|
"minLength": 1,
|
|
479
478
|
"maxLength": 320,
|
|
480
|
-
"description": "
|
|
479
|
+
"description": "The page's meta description (150–160 characters, written from the page's content; in a migration, the source page's). A Stage refuses a published page without one — pass it here so the page is Stage-ready from this call. Fill-once, same as autofill_page_seo: with pageId it is written only when the page has no description yet; an existing one is kept and the result says so."
|
|
481
480
|
},
|
|
482
481
|
"parentPageId": {
|
|
483
482
|
"type": "string",
|
|
@@ -1282,7 +1281,7 @@
|
|
|
1282
1281
|
},
|
|
1283
1282
|
{
|
|
1284
1283
|
"name": "list_plugins",
|
|
1285
|
-
"description": "List the plugins installed on this site
|
|
1284
|
+
"description": "List the plugins installed on this site: their status (the Owner's decision) and their health (what the running servers make of it). `status`: `active` = the Owner wants it running; `awaiting_activation` = installed and verified, but nothing of it is loaded; `disabled` = the Owner stopped it. Availability comes from `health`, not from `status`: only `health = running` means its tools and skills are usable right now. `failing` = an active plugin failed to load on a server (`problem` says why) — it is NOT switched off, tell the operator, get_plugin has the details; `unreported` = active, but no server has reported it yet (just activated or starting); `not_running` = not active. Never tell the operator a capability works while its plugin is failing. Use when the operator asks for a capability you have no tool for (translation, forms, comments, newsletter, ratings): check whether a plugin for it is installed-but-inactive, and if so TELL the operator it exists and that one click at /settings/plugins turns it on. Plugins found on disk that failed verification are listed after the table: they are NOT installed — explain why and the fix. Do NOT use it as a general capability check before routine content work — your tool catalogue already reflects everything that is running.",
|
|
1286
1285
|
"inputSchema": {
|
|
1287
1286
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1288
1287
|
"type": "object",
|
|
@@ -1430,7 +1429,7 @@
|
|
|
1430
1429
|
"slugs": {
|
|
1431
1430
|
"type": "array",
|
|
1432
1431
|
"minItems": 1,
|
|
1433
|
-
"maxItems":
|
|
1432
|
+
"maxItems": 20,
|
|
1434
1433
|
"items": {
|
|
1435
1434
|
"type": "string",
|
|
1436
1435
|
"pattern": "^[a-z0-9-]+$",
|
|
@@ -3888,7 +3887,8 @@
|
|
|
3888
3887
|
"1K",
|
|
3889
3888
|
"2K",
|
|
3890
3889
|
"4K"
|
|
3891
|
-
]
|
|
3890
|
+
],
|
|
3891
|
+
"description": "Native resolution. 2K / 4K only on models whose get_image_capabilities lists them; omit it otherwise. 1K is accepted on every model."
|
|
3892
3892
|
},
|
|
3893
3893
|
"references": {
|
|
3894
3894
|
"type": "array",
|
|
@@ -3951,7 +3951,8 @@
|
|
|
3951
3951
|
"1K",
|
|
3952
3952
|
"2K",
|
|
3953
3953
|
"4K"
|
|
3954
|
-
]
|
|
3954
|
+
],
|
|
3955
|
+
"description": "Native resolution. 2K / 4K only on models whose get_image_capabilities lists them; omit it otherwise. 1K is accepted on every model."
|
|
3955
3956
|
},
|
|
3956
3957
|
"altText": {
|
|
3957
3958
|
"type": "string"
|
|
@@ -5758,7 +5759,7 @@
|
|
|
5758
5759
|
},
|
|
5759
5760
|
{
|
|
5760
5761
|
"name": "revalidate_plugin",
|
|
5761
|
-
"description": "Re-run the plugin validator over a submitted plugin that is NOT running (draft, awaiting activation or rejected) — after a Caelo upgrade, or to re-file a rejected submission. Passing moves it to awaiting activation (activate_plugin then proposes turning it on); failing returns the validator errors to fix. Refused for running
|
|
5762
|
+
"description": "Re-run the plugin validator over a submitted plugin that is NOT running (draft, awaiting activation or rejected) — after a Caelo upgrade, or to re-file a rejected submission. Passing moves it to awaiting activation (activate_plugin then proposes turning it on); failing returns the validator errors to fix. Refused for running or disabled plugins — those are the Owner's call; for an active plugin that fails to load use reload_plugin.",
|
|
5762
5763
|
"inputSchema": {
|
|
5763
5764
|
"type": "object",
|
|
5764
5765
|
"properties": {
|
|
@@ -5774,6 +5775,25 @@
|
|
|
5774
5775
|
"additionalProperties": false
|
|
5775
5776
|
}
|
|
5776
5777
|
},
|
|
5778
|
+
{
|
|
5779
|
+
"name": "reload_plugin",
|
|
5780
|
+
"description": "Retry loading an ACTIVE plugin on every server — the fix for a plugin whose health is `failing` (it stays active; servers do not retry on their own). Use after the cause was addressed, or when the problem looks transient, and when the operator asks to reload it. Returns this server's result right away; other servers follow within seconds — check get_plugin for their state. Not for a plugin that is awaiting activation or disabled (activating is the Owner's decision: activate_plugin).",
|
|
5781
|
+
"inputSchema": {
|
|
5782
|
+
"type": "object",
|
|
5783
|
+
"properties": {
|
|
5784
|
+
"slug": {
|
|
5785
|
+
"type": "string",
|
|
5786
|
+
"minLength": 1,
|
|
5787
|
+
"maxLength": 120,
|
|
5788
|
+
"description": "Plugin slug as list_plugins shows it."
|
|
5789
|
+
}
|
|
5790
|
+
},
|
|
5791
|
+
"required": [
|
|
5792
|
+
"slug"
|
|
5793
|
+
],
|
|
5794
|
+
"additionalProperties": false
|
|
5795
|
+
}
|
|
5796
|
+
},
|
|
5777
5797
|
{
|
|
5778
5798
|
"name": "propose_delete_layout",
|
|
5779
5799
|
"description": "Propose deleting a layout. Bound templates re-bind to site_defaults.default_layout_id. APPROVAL-GATED: calling this PAUSES for the operator's Approve/Reject right in the chat before anything changes. Do not claim the change is live until it is approved.\n\nOver MCP: call this tool yourself — it works here. The call queues an approval card in the operator's Caelo admin (their Live Edit chat and the pending-approvals page), waits for their Approve/Reject and returns the outcome (if the wait times out, continue with caelo_await_approval). Tell the operator you requested it and that they approve the card in Caelo; never ask them to paste a prompt into the Caelo chat to run it.",
|
|
@@ -7665,7 +7685,7 @@
|
|
|
7665
7685
|
},
|
|
7666
7686
|
{
|
|
7667
7687
|
"name": "get_plugin",
|
|
7668
|
-
"description": "Read one plugin in detail: version, tier, status, signature, the validator's findings, the tools / skills / capabilities its manifest declares, and its AI spend over the last 24h against its AI cost cap. Use when list_plugins' one-line summary is not enough — e.g. why a submission was rejected, what an inactive plugin would add before proposing activate_plugin, or whether a plugin is near its AI cap. Never returns the plugin's source.",
|
|
7688
|
+
"description": "Read one plugin in detail: version, tier, status, signature, health (whether the running servers have it loaded, and why not), its recent errors, the validator's findings, the tools / skills / capabilities its manifest declares, and its AI spend over the last 24h against its AI cost cap. Use when list_plugins' one-line summary is not enough — e.g. why a plugin is failing or a submission was rejected, what an inactive plugin would add before proposing activate_plugin, or whether a plugin is near its AI cap. A `core` error is Caelo's fault; its line says whether the bug report was only recorded on this site or sent to the Caelo team — repeat that exactly, never say the team knows unless it says sent; a `plugin` error comes from the plugin's own code; `transient` ones were retried. Errors never switch a plugin off. Never returns the plugin's source.",
|
|
7669
7689
|
"inputSchema": {
|
|
7670
7690
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
7671
7691
|
"type": "object",
|