Skip to main content
Glama
kuklaph
by kuklaph

cascade-cms-mcp-server

An MCP (Model Context Protocol) server that exposes Cascade CMS operations to LLMs and agents. It wraps cascade-cms-api with Zod validation, JSON responses, structuredContent, and actionable errors.

Built in TypeScript on Bun. It provides Cascade asset tools, draft workflows, file-data helpers, browser-backed tools, guardrails, and local cache inspection.

Start with Setup for required values and client config. Use What It Can Do to judge fit. Agent Reference covers tool-call mechanics.

Setup

Requirements

  • Node 20+.

  • Bun 1.0+ for the preferred bunx setup.

  • A Cascade CMS instance with REST API access and an API key.

  • An MCP client that can launch stdio servers, such as Claude, Codex, Cline, MCP Inspector, or another compliant client.

The stdio entrypoint supports legacy 2025 initialization and MCP 2026-07-28 discovery. Legacy serving remains enabled, and clients that support automatic negotiation select the appropriate protocol without server configuration changes.

Quick Start

Most MCP clients need command, args, CASCADE_API_KEY, and CASCADE_URL. Browser-backed tools also need CASCADE_BROWSER_USERNAME, CASCADE_BROWSER_PASSWORD, and CASCADE_BROWSER_SITE_ID. Use bunx when available; use npx otherwise.

The credentials below are placeholders. Use your MCP client's secret/env handling, local environment, or dotseal-encrypted values for real credentials.

For Cascade API access, consider using a dedicated service/API user when your organization can provide one. Give that user only the permissions needed for the MCP workflows instead of using a personal account.

MCP Client Config

Use one of these shapes for JSON-based MCP configs.

{
  "mcpServers": {
    "cascade-cms": {
      "command": "bunx",
      "args": ["cascade-cms-mcp-server"],
      "env": {
        "CASCADE_API_KEY": "your_api_key_here",
        "CASCADE_URL": "https://yourorg.cascadecms.com/api/v1/",
        "CASCADE_BROWSER_USERNAME": "browser_username",
        "CASCADE_BROWSER_PASSWORD": "browser_password",
        "CASCADE_BROWSER_SITE_ID": "production_site_id",
        "CASCADE_BROWSER_URL": "https://yourorg.cascadecms.com/"
      }
    }
  }
}

Node/npm fallback:

{
  "mcpServers": {
    "cascade-cms": {
      "command": "npx",
      "args": ["-y", "cascade-cms-mcp-server"],
      "env": {
        "CASCADE_API_KEY": "your_api_key_here",
        "CASCADE_URL": "https://yourorg.cascadecms.com/api/v1/",
        "CASCADE_BROWSER_USERNAME": "browser_username",
        "CASCADE_BROWSER_PASSWORD": "browser_password",
        "CASCADE_BROWSER_SITE_ID": "production_site_id",
        "CASCADE_BROWSER_URL": "https://yourorg.cascadecms.com/"
      }
    }
  }
}

Omit CASCADE_BROWSER_URL when the browser UI root matches the origin derived from CASCADE_URL.

For UI-based clients, enter the same values:

Field

Bun value

Node/npm value

Command

bunx

npx

Arguments

cascade-cms-mcp-server

-y, cascade-cms-mcp-server

Environment

CASCADE_API_KEY, CASCADE_URL, browser env values when using browser-backed tools, optional cohort size, batch delay, and timeout values

Same

Restart the client after config changes. Call server_version to confirm the server is running.

Client-Specific Examples

Client-specific setup screens and config file locations vary. Use the same command, args, and env values above.

Codex uses ~/.codex/config.toml:

[mcp_servers.cascade-cms]
command = "bunx"
args = ["cascade-cms-mcp-server"]

[mcp_servers.cascade-cms.env]
CASCADE_API_KEY = "your_api_key_here"
CASCADE_URL = "https://yourorg.cascadecms.com/api/v1/"
CASCADE_BROWSER_USERNAME = "browser_username"
CASCADE_BROWSER_PASSWORD = "browser_password"
CASCADE_BROWSER_SITE_ID = "production_site_id"
CASCADE_BROWSER_URL = "https://yourorg.cascadecms.com/"

Claude Desktop uses claude_desktop_config.json:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Claude Code can use its normal MCP config flow. This repo also includes a Claude Code plugin manifest in .claude-plugin/plugin.json; if you install the plugin, set credentials in the shell environment that launches Claude Code.

Native Windows configs that use npx may need command: "cmd" with args ["/c", "npx", "-y", "cascade-cms-mcp-server"].

Encrypted Environment Values

All environment values below may use dotseal ciphertexts in enc:<iv>:<authTag>:<ciphertext> format. Plaintext values still work.

Generate ciphertext with dotseal:

bunx dotseal encrypt "your_api_key_here"

Example:

"env": {
  "CASCADE_API_KEY": "enc:...",
  "CASCADE_URL": "https://yourorg.cascadecms.com/api/v1/",
  "CASCADE_BROWSER_USERNAME": "browser_username",
  "CASCADE_BROWSER_PASSWORD": "enc:...",
  "CASCADE_BROWSER_SITE_ID": "production_site_id",
  "CASCADE_BROWSER_URL": "https://yourorg.cascadecms.com/"
}

Environment Variables

Variable

Required

Description

CASCADE_API_KEY

Yes

API key generated from your Cascade dashboard

CASCADE_URL

Yes

Cascade API URL, for example https://yourorg.cascadecms.com/api/v1/

CASCADE_TIMEOUT_MS

No

Request timeout in milliseconds. Default: 30000

CASCADE_MAX_CONCURRENT_REQUESTS

No

Logical Cascade API operations admitted per cohort. Integer 1 through 5000; default: 10

CASCADE_REQUEST_BATCH_DELAY_MS

No

Delay between queued logical-operation cohorts in milliseconds. Integer 0 through 2147483647; default: 3000. 0 removes the pause but retains the cohort barrier

CASCADE_BROWSER_USERNAME

Browser API

Browser UI username for browser-backed tools

CASCADE_BROWSER_PASSWORD

Browser API

Browser UI password for browser-backed tools

CASCADE_BROWSER_SITE_ID

Browser API

Cascade site ID for browser-backed tools. Use the production site ID by default

CASCADE_BROWSER_URL

No

HTTPS browser UI root URL. Defaults to the origin derived from CASCADE_URL. Set this when the browser login host or root path differs

The server admits normal Cascade API operations into cohorts of up to 10 by default. Set CASCADE_MAX_CONCURRENT_REQUESTS to an integer from 1 through 5000 to change the cohort size. The fixed upper bound is a worst-case guard against configuration mistakes. Each cohort member covers one complete logical client operation, including upstream retries. A partial active cohort can accept more operations until it reaches its configured size. Once full, completed members do not create refill slots.

Additional operations wait in FIFO order until every member of the active cohort settles. If work is waiting, the server pauses for CASCADE_REQUEST_BATCH_DELAY_MS before releasing the next cohort. The default delay is 3000 milliseconds; set it to 0 to remove the pause while retaining the all-settled cohort barrier. No delay runs when a cohort finishes without queued work. Up to 1000 normal operations may wait; additional operations fail immediately with a retry message. Cancelling an MCP request while its Cascade operation is queued removes it before dispatch; cancellation does not abort an operation that has already started or interrupt an inter-cohort delay already underway. CASCADE_TIMEOUT_MS begins when the queued operation starts, not while it waits.

This is a logical-operation limit, not an exact physical-fetch limit. One upstream operation may issue multiple HTTP requests, so physical request concurrency can exceed CASCADE_MAX_CONCURRENT_REQUESTS.

Rare timeout limitation: the upstream client reports a timeout without aborting the underlying fetch. A timed-out fetch may remain active briefly after its logical operation settles, so physical requests may temporarily overlap the next cohort.

The cohort settings apply only to normal Cascade client calls. Purely local operations do not join cohorts, and browser-backed operations use the separate serialized queue below. Composite workflows join a cohort for each normal client call rather than for the entire MCP tool invocation.

Browser API Setup

Standard Cascade API tools only require CASCADE_API_KEY and CASCADE_URL. Browser-backed tools also log in through Cascade's browser UI, cache a session cookie in the MCP process, and call browser-only endpoints.

Recommended browser setup:

  1. Set CASCADE_BROWSER_USERNAME, CASCADE_BROWSER_PASSWORD, and CASCADE_BROWSER_SITE_ID together before starting the MCP server.

  2. Use the production site ID for CASCADE_BROWSER_SITE_ID unless you intentionally want browser tools scoped to another site.

  3. Set CASCADE_BROWSER_URL only when the browser UI root differs from the origin derived from CASCADE_URL. It must use HTTPS. The hosts must match, have a parent/subdomain relationship, or both be under cascadecms.com (for example, tenant.cascadecms.com and tenant-admin.cascadecms.com). Credentials, queries, and fragments are rejected.

The site ID is required because Cascade's browser UI keeps an active site context. Browser login calls switchSite.act after authentication to mirror selecting a site in Cascade's site picker.

Browser session operations run one at a time per server process so login, site selection, cookie use, expiry recovery, and retries cannot interleave. Up to 20 additional browser session operations wait in FIFO order. Browser-backed physical requests still start at most once every 3 seconds per server process to avoid pressuring Cascade's browser UI endpoints. Standard Cascade API operations use the separate concurrency limit above.

Find the Site ID

CASCADE_BROWSER_SITE_ID is the browser setup value users usually need to look up. To get the recommended production site ID:

  1. Log in to Cascade in a browser.

  2. Select the production site from the site picker.

  3. Open Manage Site.

  4. Copy the site ID from the browser URL into CASCADE_BROWSER_SITE_ID.

If CASCADE_API_KEY and CASCADE_URL are already configured, you can ask your MCP agent to list Cascade sites. The agent can call api_list_sites and use the production site's ID from that response. This depends on the API user's permissions and may not show the intended production site.

When all three browser values are present, the first browser-backed operation logs in automatically and caches the session. Server startup and standard API tools do not wait for browser authentication. Without CASCADE_BROWSER_SITE_ID, call browser_login with site_id before other browser-backed tools in the same server process.

Related MCP server: TDX MCP Server

What It Can Do

Use this section to decide whether this MCP covers the job. Your MCP client or agent reads the exact tool schemas and chooses the tool calls.

Need

Supported

Read Cascade assets by id or path

Yes

Search assets by terms, fields, type, and site

Yes

Create, edit, move, copy, rename, or delete assets

Yes

Publish or unpublish assets

Yes

List sites

Yes

Read or edit access rights

Yes

Read or update workflow settings and perform workflow transitions

Yes

List messages, mark messages, delete messages, and inspect subscribers/relationships

Yes

Read audit logs and system preferences

Yes

Inspect raw asset content, references, strings, links, paths, and structured-data nodelets after a read

Yes

Inspect binary file.data, read bounded byte ranges, return image content, and export files locally

Yes

Build, inspect, patch, validate, and submit complete create/edit asset drafts

Yes

Authenticate to the Cascade browser UI and cache a browser session

Yes

Check the browser-only active editing draft notification for an asset

Yes; requires browser API config or prior browser_login, plus asset_id and asset_type

List all browser-only version history records for an asset

Yes; requires browser API config or prior browser_login, plus asset_id and asset_type

List, create, update, and delete browser-admin snippets

Yes; requires browser API config or prior browser_login

Fetch additional characters from large/truncated responses

Yes

Persist blocked-call rules that prevent matching MCP tool calls from running

Yes

Generate site and root-folder removal safeguards

Yes

Use your MCP client's tool list or inspector for exact request schemas.

Agent Reference

These sections are mainly for agents and users configuring MCP approvals. They cover response handling, tool groups, workflow examples, guardrails, and MCP resources.

Response Model

Most tool responses put JSON text in content[0]. When present, structuredContent is the authoritative machine-readable result.

Oversized responses return bounded _cache metadata. Use local_read_cached_response with that handle to page through the full serialized response. characters_total, characters_returned, and offsets use JavaScript UTF-16 code units. bytes_total and bytes_returned remain as deprecated compatibility aliases and are not byte counts. Handles are connection-scoped and may be evicted after later calls or lost when the client reconnects.

api_read uses preview as its primary mode. Preview returns routine asset identity, file MIME metadata when available, and an asset_handle for targeted inspection. Use read_mode: "raw" only when preview or cached inspection cannot provide what you need, including when an exact REST field is unavailable or preview indexing limits are exceeded. Follow-up tools inspect cached data and do not call Cascade again.

file_data_image returns image-only MCP content. Call file_data_info separately for JSON metadata.

Tool Permissions

Use these groups when configuring MCP client approvals. Client config syntax varies. A common policy is to allow read-only inspection by default and require approval for tools that create, update, delete, publish, check in/out, change browser-admin state, write local files, or mutate local MCP state such as drafts and guardrails.

"Read-only" means the tool does not persist a change. It may still call Cascade unless the group says it is local-only.

Direct Cascade REST tools use the api_ prefix. Browser-backed, cached-asset, file-data, draft, and local utility tools keep their distinct namespaces.

Cascade API read-only tools:

Tool

Purpose

api_read

Read an asset and return a preview or raw response

api_search

Search Cascade assets

api_list_sites

List Cascade sites

api_read_access_rights

Read access rights for an asset

api_read_workflow_settings

Read workflow settings for a folder

api_read_workflow_information

Read workflow information for an asset

api_list_subscribers

List subscribers for an asset

api_list_messages

List Cascade messages

api_read_audits

Read audit log entries

api_read_preferences

Read system preferences

Browser-backed read-only tools:

These tools call Cascade browser UI endpoints. They use a cached browser session or log in automatically when browser env values are configured.

Tool

Purpose

browser_check_draft

Check browser-only active editing draft notification for an asset

browser_list_asset_versions

List all version history records for an asset

browser_list_snippets

List browser-admin snippets with pagination

Local cache and utility read tools:

These tools do not call Cascade directly. They inspect in-memory handles created by earlier tool calls or return MCP server metadata.

Tool

Purpose

server_version

Read this MCP server's name and version

local_read_cached_response

Fetch more text from a cached oversized response

asset_list_facts

List indexed raw JSON facts from a cached read

asset_search_values

Search scalar values in a cached read

asset_search_keys

Search object keys in a cached read

asset_get_value

Fetch one raw JSON value from a cached read

asset_list_scalar_artifacts

List links, paths, and similar scalar artifacts from a cached read

asset_list_references

List Cascade references found in a cached read

asset_list_nodelets

List structured-data nodelets from a cached read

asset_get_nodelet

Fetch one structured-data nodelet from a cached read

asset_resolve_nodes

Resolve structured-data nodes by semantic criteria

asset_assert_values

Assert structured-data field values from a cached read

Structured-data selectors support expected_matches to assert exact match counts.

Read-only cached-asset JSON Pointer and pointer-prefix fields reject the reserved object-key segments __proto__, prototype, and constructor.

File data tools:

Use these for Cascade file assets whose binary content is stored in file.data. Each tool accepts an asset_handle from api_read or a direct file identifier. With an asset_handle, the tool uses the local cache. With an identifier, it reads the file from Cascade first and caches it.

Tool

Purpose

file_data_info

Return byte count, SHA-256, detected MIME/kind, and a short hex preview

file_data_read

Return a bounded byte range as hex or base64

file_data_image

Return magic-byte verified image files as image-only MCP content

file_data_export

Write exact bytes to an explicit local output_path

api_create, api_edit, and local_draft_submit accept file.data as signed Java bytes (-128..127) or unsigned file bytes (0..255) and send Cascade signed bytes. file_data_export writes to an explicit local path, refuses overwrites unless overwrite: true, and can verify expected_sha256.

Local draft workflow tools:

Drafts are mutable, in-memory payloads for api_create or api_edit. Local draft tools do not change Cascade until local_draft_submit.

  • Edit drafts start from a cached asset_handle; create drafts start from an asset envelope or scaffold.

  • Patch tools mutate only the local draft addressed by draft_handle.

  • local_draft_set_file_data reads exactly one of input_path or base64_data, normalizes bytes to signed file.data, and keeps bytes outside draft JSON until submit.

  • local_draft_open and local_draft_validate return cascade_url, asset_title, asset_display_name, asset_path, asset_parent_id, asset_parent_path, asset_type, asset_name, asset_site_name, and asset_site_id. Unavailable values are null.

  • They also return approval_asset, approval_path, and approval_url for clients with compact approval previews. approval_asset uses the first nonempty display name, title, or asset name.

  • If a patch could change any approval field, run local_draft_validate afterward and pass its final values to local_draft_submit; otherwise the values from local_draft_open remain current.

  • local_draft_submit verifies the asset fields and any supplied preview aliases, validates the final payload, checks tool-block rules, re-reads edit sources to reject stale drafts, and then calls Cascade.

Local draft inspection tools:

Tool

Purpose

local_draft_get_value

Fetch one JSON value from a draft

local_draft_list_facts

List indexed JSON facts from a draft

local_draft_search_values

Search scalar values in a draft

local_draft_search_keys

Search object keys in a draft

local_draft_list_references

List references in a draft

local_draft_list_scalar_artifacts

List links, paths, and similar artifacts in a draft

local_draft_list_nodelets

List structured-data nodelets in a draft

local_draft_get_nodelet

Fetch one structured-data nodelet from a draft

local_draft_resolve_nodes

Resolve structured-data nodes by semantic criteria

local_draft_assert_values

Assert structured-data field values in a draft

local_draft_validate

Validate a draft without calling Cascade

Approval recommended for local MCP state or filesystem changes:

Tool

State change

local_draft_open

Creates a mutable local draft from a read snapshot or initial asset payload

local_draft_scaffold_create

Creates a mutable local create draft with required placeholders for one asset type

local_draft_scaffold_from_asset

Creates a mutable local create draft from a cached asset shape

local_draft_apply_patch

Mutates a local draft with JSON Pointer patch operations

local_draft_apply_semantic_patch

Mutates a local draft after resolving structured-data nodes semantically

local_draft_mutation_plan_execute

Runs local draft workflow steps sequentially and stops on first failure

local_draft_set_file_data

Sets signed Cascade file bytes on a local file draft from exactly one path or base64 payload

file_data_export

Writes Cascade file bytes to an explicit local filesystem path

browser_login

Authenticates to the browser UI and stores a local browser session for later browser tools

tool_blocks

Changes the local blocked-call repository

protect_site_removal

Changes the local blocked-call repository after reading accessible sites and root folders

Approval recommended for Cascade or browser-admin changes:

Tool

State change

api_create

Creates an asset

api_edit

Edits an asset

local_draft_submit

Creates or edits an asset from the complete validated draft payload

api_move

Moves or renames an asset

api_copy

Copies an asset

api_site_copy

Copies a site

api_edit_access_rights

Changes asset access rights

api_edit_workflow_settings

Changes workflow settings

api_perform_workflow_transition

Performs a workflow transition

api_mark_message

Marks a message

api_check_out

Checks out an asset

api_check_in

Checks in an asset

api_edit_preference

Changes a system preference

browser_create_snippet

Creates a browser-admin snippet

browser_update_snippet

Updates a browser-admin snippet by ID

browser_delete_snippets

Deletes one or more browser-admin snippets by ID

High-impact approval recommended:

Tool

State change

api_remove

Deletes an asset, except sites and root-folder path / requests

api_delete_message

Deletes a message

api_publish_unpublish

Publishes or unpublishes an asset

Workflow Examples

Read a page by id:

{
  "tool": "api_read",
  "arguments": {
    "identifier": {
      "id": "d3631e59ac1easd2434bd70be3fbfe8148abc",
      "type": "page"
    }
  }
}

Read a folder by path:

{
  "tool": "api_read",
  "arguments": {
    "identifier": {
      "path": { "path": "/about/team", "siteName": "www" },
      "type": "folder"
    }
  }
}

Inspect cached read data after a preview:

{
  "tool": "asset_search_values",
  "arguments": {
    "asset_handle": "a_550e8400-e29b-41d4-a716-446655440000",
    "value_contains": "admissions"
  }
}

Use the asset_handle returned by api_read; asset_* tools are follow-ups, not first-step reads.

Edit from a cached read without reconstructing the full payload in chat:

{
  "tool": "local_draft_open",
  "arguments": {
    "operation": "edit",
    "asset_handle": "a_550e8400-e29b-41d4-a716-446655440000",
    "expected_raw_hash": "ce4136fed2dd50c2a7eaf8f6802a5f7820515dda57f0a7f91a47861db6c8fff4"
  }
}
{
  "tool": "local_draft_apply_patch",
  "arguments": {
    "draft_handle": "d_550e8400-e29b-41d4-a716-446655440001",
    "expected_revision": 1,
    "operations": [
      {
        "op": "replace",
        "path": "/asset/page/structuredData/structuredDataNodes/4/structuredDataNodes/9/text",
        "value": "<p>Updated HTML</p>"
      }
    ]
  }
}
{
  "tool": "local_draft_submit",
  "arguments": {
    "approval_asset": "Example Page",
    "approval_path": "/example",
    "approval_url": "https://example.cascadecms.com/entity/open.act?id=page-001&type=page",
    "cascade_url": "https://example.cascadecms.com/entity/open.act?id=page-001&type=page",
    "asset_title": "Example page",
    "asset_display_name": "Example Page",
    "asset_path": "/example",
    "asset_parent_id": null,
    "asset_parent_path": "/",
    "asset_type": "page",
    "asset_name": "example",
    "asset_site_name": "my-site",
    "asset_site_id": null,
    "draft_handle": "d_550e8400-e29b-41d4-a716-446655440001",
    "expected_revision": 2,
    "discard_on_success": true
  }
}

Rules meant to block submitted drafts may target local_draft_submit. Use api_create or api_edit when the same rule should also block direct calls and matching local draft workflows before local draft work continues. For api_create, path rules match the intended parent path plus asset name once both are known.

New rules should use current tool names. Existing unprefixed and cascade_* direct REST names remain compatible during rule matching.

Scaffold a create draft when starting from an asset type instead of a read:

{
  "tool": "local_draft_scaffold_create",
  "arguments": {
    "asset_type": "page",
    "relationship_style": "path"
  }
}

The response includes the draft handle, scaffolded asset envelope, and required placeholders to patch before validation or submit. To scaffold from a cached asset, use local_draft_scaffold_from_asset with the asset_handle and raw_hash from api_read.

Set binary file data on a file draft before submit:

{
  "tool": "local_draft_set_file_data",
  "arguments": {
    "draft_handle": "d_550e8400-e29b-41d4-a716-446655440001",
    "expected_revision": 1,
    "input_path": "C:\\tmp\\image.jpg"
  }
}

Provide exactly one of input_path or base64_data. The tool normalizes bytes to Cascade signed file.data, preserves existing string text, and keeps the byte payload outside draft JSON until submit.

Search for pages:

{
  "tool": "api_search",
  "arguments": {
    "searchInformation": {
      "searchTerms": "admissions",
      "searchTypes": ["page"],
      "searchFields": ["title", "summary"],
      "siteName": "www"
    },
    "limit": 100,
    "offset": 0
  }
}

Guardrails: Blocked Tool Calls

Use tool_blocks to list or add local rules that block matching tool calls before they reach Cascade. Rules live at ~/.cascade-cms-mcp-server/tool-blocks.json.

The safest access control is still Cascade/API permissions. Tool blocks are an additional MCP-local guardrail for defense in depth, not a replacement for server-side permissions.

Each rule needs tools plus at least one selector: url, id, or path. Explicit id and path selectors also need type. reason is optional and appears in the blocked-call error.

Use protect_site_removal to generate remove and move safeguards for accessible sites and their root folders. It replaces its previous generated rules and preserves unrelated rules.

{
  "tool": "tool_blocks",
  "arguments": {
    "action": "add",
    "rule": {
      "url": "https://college.cascadecms.com/entity/open.act?id=block-1&type=block",
      "tools": ["api_remove", "api_edit"],
      "reason": "Protected block"
    }
  }
}

Resources

URI

Kind

Description

cascade://entity-types

Static

Cascade entity type strings with short descriptions

cascade://sites

Dynamic

Live listSites() result

cascade://text-encoding

Static

Text, rich text, XML, format, and template encoding rules

cascade://asset/{handle}/raw

Template

Exact raw JSON cached from a prior api_read preview

cascade://draft/{handle}/raw

Template

Exact draft JSON unless blocked by draft read tool-block rules, the tool-block repository cannot be read, or the handle is invalid/missing

Troubleshooting

  • If tools appear unavailable, verify the MCP client can start the server and that CASCADE_API_KEY and CASCADE_URL are set in the environment used by that client.

  • If a cached handle is missing, rerun the originating tool. Handles are in-memory and connection-scoped.

  • If local_draft_open reports an expected_raw_hash mismatch, rerun api_read and use the current raw_hash.

  • If local_draft_submit reports that the source asset changed, rerun api_read and open a fresh draft.

  • If a draft patch or submit reports an expected_revision mismatch, inspect the draft and retry with the current revision.

  • If a rendered response is truncated, call local_read_cached_response with the returned handle, offset, and length.

  • Most MCP clients write server stderr to client logs. This server keeps stdout reserved for MCP JSON-RPC.

Security Notes

  • Credentials are loaded from environment variables only. Keep real values in the local MCP client environment, a client secret store, or dotseal-encrypted env values.

  • Cached response, asset, and draft handles are in-memory and connection-scoped. Browser sessions are process-scoped. Restart the MCP server to clear them.

  • Draft and write tools check blocked-call rules before mutating local state or calling Cascade.

  • Error messages are redacted before being logged or returned.

  • Input validation rejects unknown fields at the MCP boundary.

License

MIT - see LICENSE.

Available Tools

37 tools
cascade_asset_get_nodeletGet cached Cascade asset nodeletA
Read-onlyIdempotent

Use after cascade_read. Fetch the exact structuredData nodelet or bounded subtree at a JSON Pointer in the cached asset_handle returned by cascade_read. This is a convenience view over structuredDataNodes, not an audit-complete view. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
pointerNoJSON Pointer returned by cascade_read preview root_outline or cascade_asset_list_nodelets.
depthNoChild depth to include. Default 0 returns only the exact nodelet.
include_textNoWhether to include text fields in returned nodelets.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds value by clarifying that this is a convenience view not audit-complete, that it never reads Cascade directly (thus cached), and describes oversized responses returning bounded _cache metadata. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five sentences, front-loaded with the main purpose. Each sentence adds meaningful information without redundancy. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with no output schema and 4 parameters, the description explains response format (JSON text), authoritative structuredContent, and oversized response behavior. It also references cascade_read for context. While additional details on response structure could help, it is largely complete given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds context about JSON Pointer, bounded subtree, and authoritative structuredContent, but does not provide parameter-specific details beyond the schema. It adds some value but not significant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'fetch' and the resource 'exact structuredData nodelet or bounded subtree at a JSON Pointer', and situates the tool after cascade_read. It distinguishes from siblings by noting it is a convenience view over structuredDataNodes, not an audit-complete view, and that it never reads Cascade directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after cascade_read', providing clear context. However, it does not explicitly state when not to use this tool or list alternative tools for different scenarios, though it implies that for full asset reads one should use cascade_read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_get_valueGet cached raw asset valueA
Read-onlyIdempotent

Use after cascade_read. Retrieve the exact raw cached value at a JSON Pointer. Long strings can be sliced with offset and length. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
pointerNoJSON Pointer into the exact cached raw JSON.
offsetNo
lengthNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnly, idempotent), the description reveals that the tool never reads Cascade directly, supports slicing with offset/length, returns JSON text, and that structuredContent is authoritative for fitting responses. This adds valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four front-loaded sentences concisely convey purpose, usage, behavior, and edge cases. No redundant information; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description explains response types (JSON text, structuredContent, oversized cache metadata) and links to cascade_read_response. It covers parameter behavior (slicing, pointer) and dependency on cascade_read, providing a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (asset_handle and pointer have descriptions; offset and length lack descriptions). The description adds context for JSON Pointer and slicing, but does not fully define offset and length parameters. Baseline 3 due to partial coverage, with slight improvement from description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs and resources: 'Retrieve the exact raw cached value at a JSON Pointer' and states it should be used after cascade_read, clearly distinguishing from sibling tools like cascade_read and cascade_read_response.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after cascade_read' and explains when to use structuredContent vs _cache metadata. It also contrasts with cascade_read for oversized responses, but does not provide explicit when-not-to-use or alternative tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_list_factsList cached raw asset factsA
Read-onlyIdempotent

Use after cascade_read. List object, array, key, and scalar facts indexed from the full cached raw Cascade response. Supports pointer, key, value, scalar, and reference filters with cursor pagination. This tool never reads Cascade directly and reports complete: true only when the current filter has no remaining matches. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
pointer_prefixNo
fact_kindNo
keyNo
key_containsNo
value_containsNo
scalar_typeNo
non_emptyNo
reference_kindNo
cursorNo
limitNo

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint), the description adds critical behavioral details: never reads Cascade directly, complete flag behavior, response format (JSON text vs structuredContent), overflow handling with _cache metadata, and relationship to cascade_read read_mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet comprehensive, with every sentence adding value. It front-loads the primary purpose and efficiently packs behavioral, usage, and response details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, no output schema), the description covers key aspects: data source, filtering capabilities, pagination, response format, and integration with cascade_read. It lacks detailed parameter descriptions but is otherwise complete for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 9% schema description coverage (only asset_handle described), the description mentions filter types (pointer, key, value, scalar, reference) and cursor pagination, but does not explain each of the 11 parameters individually, leaving significant ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists cached raw asset facts, with specific mention of object, array, key, and scalar facts, filters, and pagination. It avoids tautology but does not explicitly differentiate from sibling tools like cascade_asset_list_nodelets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises 'Use after cascade_read' and explains the tool never reads Cascade directly, providing context for when to use. However, it does not exclude alternatives or specify when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_list_nodeletsList cached Cascade asset nodeletsA
Read-onlyIdempotent

Use after cascade_read. List child structuredData nodelets for a JSON Pointer in the cached asset_handle returned by cascade_read. Use pointer "" to list root nodelets. This is a convenience view over structuredDataNodes, not an audit-complete view. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
pointerNoJSON Pointer of the parent nodelet. Use an empty string to list root nodelets.
cursorNo
limitNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds valuable context: it never reads Cascade directly, handles oversized responses by returning bounded _cache metadata, and states that structuredContent is authoritative when the response fits. This goes beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of 4 sentences, each adding unique value. It is concise but could benefit from breaking into logical sections or bullet points for readability. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, and rich annotations, the description covers usage dependency on cascade_read, pointer semantics, caching behavior, and response format. It lacks details on cursor and parameters, but those might be standard. Overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (cursor and lack descriptions). Description adds meaning for asset_handle and pointer (e.g., 'REQUIRED' and usage of empty string for root), but does not elaborate on cursor and . Baseline 3 with low coverage; description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description clearly state the tool lists cached Cascade asset nodelets for a given JSON Pointer. It distinguishes from siblings like cascade_asset_get_nodelet (single nodelet) and cascade_read (direct read). The verb 'list' and resource 'cached asset nodelets' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after cascade_read' and how to use pointer for root nodelets. It contrasts with cascade_read's read_mode control. However, it does not provide explicit when-not-to-use scenarios or alternative tool names beyond cascade_read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_list_referencesList cached Cascade asset referencesA
Read-onlyIdempotent

Use after cascade_read. List Cascade-native references discovered from id/path pairs, structured asset nodes, metadata, page configurations, and page regions. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
pointer_prefixNo
reference_kindNo
value_containsNo
cursorNo
limitNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, setting a safe baseline. The description adds important behavioral details: the tool never reads Cascade directly, responses are JSON text, structuredContent is authoritative within size limits, and oversized responses return bounded _cache metadata. These go beyond annotations to inform the agent about response handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, using four sentences to convey purpose, usage context, and key behavioral traits. It front-loads the critical instruction ('Use after cascade_read'). While efficient, it could be slightly improved by integrating parameter guidance without adding bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema), the description covers high-level context (purpose, cache behavior, tie to cascade_read) but lacks parameter explanations and detailed output structure. It mentions response format (JSON, structuredContent, _cache) but does not describe fields or pagination, leaving gaps for an agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, with only asset_handle documented. The main description does not explain any of the other five parameters (pointer_prefix, reference_kind, etc.), nor does it provide usage hints for filtering. The description fails to compensate for the low schema coverage, leaving agents without guidance on how to customize queries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists Cascade-native references from a cache, with specific sources (id/path pairs, asset nodes, metadata, etc.). It explicitly positions the tool as a companion to cascade_read and distinguishes itself by noting it never reads Cascade directly, differentiating it from cascade_read and other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after cascade_read,' providing clear context for when to invoke this tool. It implies the tool is for accessing cached data without live reads, but does not explicitly list when not to use it or name alternative tools for other scenarios. The guidance is functional but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_list_scalar_artifactsList cached raw scalar artifactsA
Read-onlyIdempotent

Use after cascade_read. Enumerate derived link/path-like artifacts from cached raw string scalar facts, including http_url, site_link, href, src, anchor, mailto, tel, and root_path. Returns JSON Pointer and offset provenance. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
artifact_kindNo
pointer_prefixNo
keyNo
key_containsNo
value_containsNo
cursorNo
limitNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable details beyond annotations: 'never reads Cascade directly,' explains response format (JSON text with structuredContent authority and _cache metadata for oversized responses). This enhances transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise and front-loaded with the core purpose. It uses multiple sentences but each adds meaningful information. However, it could be more structured by separating usage guidelines from behavioral notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters with low schema coverage and no output schema, the description provides some behavioral context (response handling, cursor? not mentioned) but lacks details on return structure beyond 'JSON Pointer and offset provenance.' Pagination and parameter usage are not explained, making it incomplete for complex scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 13% (only asset_handle described). The description does not explain other parameters like artifact_kind, pointer_prefix, cursor, limit, etc. It lists artifact types but doesn't map them to parameters, leaving the agent without sufficient guidance on how to filter or paginate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool enumerates derived link/path-like artifacts from cached raw string scalar facts, listing specific types like http_url, site_link, href, etc. It distinguishes from siblings like cascade_asset_list_facts by focusing on scalar artifacts rather than general facts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after cascade_read,' providing clear context for when to invoke the tool. It does not explicitly mention alternatives or when not to use it, but the instruction is sufficient given the sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_search_keysSearch cached raw asset object keysA
Read-onlyIdempotent

Use after cascade_read. Find object key occurrences anywhere in the cached raw Cascade response. Returns the JSON Pointer to the keyed value plus parent pointer. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
keyNo
key_containsNo
pointer_prefixNo
cursorNo
limitNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint. The description adds valuable context: 'This tool never reads Cascade directly,' explains response format ('JSON text') and handling of oversized responses ('bounded _cache metadata'). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is 5 sentences and fairly concise. The last sentence about read_mode could be moved to cascade_read description, but overall it is not overly long and mostly relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so description should detail return values. It mentions returning 'JSON Pointer to the keyed value plus parent pointer' and handling oversized responses. However, it omits pagination via cursor/limit and does not explain the key parameter semantics, leaving gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 17% (only asset_handle described). The description does not explain the other five parameters (key, key_contains, pointer_prefix, cursor, limit), so despite low coverage, the description fails to compensate, leaving the agent without necessary detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Find object key occurrences anywhere in the cached raw Cascade response.' It specifies the verb and resource, and distinguishes from siblings by noting it operates on cached data after cascade_read, not directly reading Cascade.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use after cascade_read,' providing context for proper usage. It also explains that the tool never reads Cascade directly, implying the prerequisite. However, it does not explicitly state when not to use or list alternatives, so a 4 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_asset_search_valuesSearch cached raw asset scalar valuesA
Read-onlyIdempotent

Use after cascade_read. Search full scalar values across the cached raw Cascade response, not shortened previews. Returns JSON Pointer provenance, scalar type, value length, preview, and match offsets where practical. This tool never reads Cascade directly. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_handleNoREQUIRED: Asset handle returned by cascade_read structuredContent.asset_handle.
value_containsNo
pointer_prefixNo
keyNo
key_containsNo
scalar_typeNo
non_emptyNo
cursorNo
limitNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, etc.), the description adds critical behavioral details: it never reads Cascade directly (cached operation), response format (JSON text with structuredContent authoritative), oversized behavior (bounded _cache metadata), and dependency on cascade_read's read_mode. These significantly enhance transparency without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five sentences, each adding distinct value: usage gate, core function, return details, data source caveat, oversized behavior, and read_mode relationship. No redundant or extraneous content; tightly packed with information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no output schema, the description covers high-level behavior but lacks details on parameter usage (e.g., value_contains, cursor, limit) and full return structure. While it references cascade_read and cascade_read_response for context, the omission of parameter descriptions and output format leaves gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has only 11% coverage (only asset_handle described as REQUIRED). The description adds no parameter-specific information, failing to compensate for the low schema coverage. It does not explain the other 8 parameters (value_contains, pointer_prefix, etc.), leaving their semantics entirely to the schema's empty descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches full scalar values in the cached raw Cascade response, distinguishing it from shortened previews. It specifies the resource (cached raw asset scalar values) and the action (search), and mentions a prerequisite (use after cascade_read), making the purpose highly specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use after cascade_read, providing a clear prerequisite. It contrasts with shortened previews, implying when not to use, but does not name alternative tools like cascade_asset_search_keys or cascade_asset_get_value. The mention of oversized responses and cascade_read_response gives additional context without exhaustive exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_check_inCheck In AssetA

Release a checked-out Cascade asset and commit the working copy with a comment.

Completes the pair opened by cascade_check_out: the working copy becomes the new committed version, the lock is released, and the comments string is stored in the asset's version history. Must be called by the same user who performed the check-out. The asset (identified by id/path) must be currently checked out — Cascade will reject check-in of an asset that isn't locked.

Args:

  • identifier (object, required): The asset to check in

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

  • comments (string, required): Description of the changes — stored in version history

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Commit working changes with a note" -> { identifier: { type: "page", id: "..." }, comments: "Fixed broken links in footer." }

  • Don't use when: The asset isn't checked out — you'll get "Asset not checked out".

  • Don't use when: Someone else checked it out — only the owner can check in.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Asset not checked out" when the asset isn't currently locked

  • "Checked out by another user" when a different user holds the lock

  • "Permission denied" when credentials lack edit rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe checked-out asset (or its working copy) to check back in.
commentsNoREQUIRED: Check-in comments describing the changes. Empty string is allowed.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds that the lock is released, working copy becomes the new version, and comments are stored. It lists error messages ('Asset not found', 'not checked out', etc.). However, it doesn't explicitly address idempotency (that calling twice fails) or clarify if the operation is reversible, which would enhance transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (Args, Returns, Examples, Error Handling). However, it ends with an irrelevant block about 'Responses are JSON text... cascade_read_response' that seems copied from another tool, adding clutter. This reduces conciseness and focus.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description fully explains the return format (OperationResult with success/message). It covers the lifecycle with check_out, error handling, and prerequisites. All necessary information for an agent to invoke the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% but the main description goes beyond by detailing the nested structure of 'identifier' (id, path, type) and the required nature of 'comments'. It provides concrete examples and error conditions, adding significant value over the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: release a checked-out asset, commit the working copy, and store comments in version history. It distinguishes itself from sibling 'cascade_check_out' by explicitly pairing with it. The verb 'check in' is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'Use when' and 'Don't use when' examples, specifying that it should be used to commit changes and not if the asset isn't checked out or if another user holds the lock. It also states the caller must be the same user who checked out, providing clear decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_check_outCheck Out AssetA

Lock a Cascade asset for exclusive editing.

Check-out creates a working copy of the asset that only the authenticated user can edit; other users see the previously committed version until check-in. Required for some asset types (especially files and binary content types) before cascade_edit will succeed. The response includes a workingCopyIdentifier that represents the locked working copy for subsequent calls. Always pair with cascade_check_in when editing finishes to release the lock.

Args:

  • identifier (object, required): The asset to check out

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

Returns: Cascade OperationResult: { success: true, workingCopyIdentifier?: { id, type, path: { path, siteId, siteName } } } On failure: { success: false, message: "" }

Examples:

  • Use when: "Lock a page before editing" -> { identifier: { type: "page", id: "..." } }

  • Use when: "Check out a file for binary replacement" -> { identifier: { type: "file", path: { path: "/assets/logo.png", siteName: "www" } } }

  • Don't use when: You've finished editing — use cascade_check_in to release.

  • Don't use when: Read-only operations — checkout isn't needed for cascade_read.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Already checked out" when another user holds the lock

  • "Permission denied" when credentials lack edit rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset to check out (creates a working copy for exclusive editing).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavioral traits: required for some asset types, creates working copy, only user can edit, others see previous version, response includes workingCopyIdentifier, must pair with check_in. Annotations already indicate non-readonly and non-destructive. The description adds context beyond annotations. Minor deduction for irrelevant tail about structuredContent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is long but well-structured with sections. However, it includes irrelevant text about structuredContent and cascade_read that doesn't belong, reducing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description provides a clear return schema and error handling. Examples and pairing with sibling are provided. Slightly incomplete due to irrelevant tail, but overall adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description is minimal ('The asset to check out...'). The description's Args section adds nested structure (id, path, type) with constraints (type required, id preferred). This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool locks a Cascade asset for exclusive editing, creating a working copy. It distinguishes from sibling tools like cascade_check_in for releasing the lock.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance (before editing, for certain asset types) and when-not-to (finished editing, read-only operations). Also references cascade_check_in as the counterpart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_copyCopy Cascade AssetA

Copy an asset to a new container with a new name.

Creates a fresh, independent copy of an asset. Unlike cascade_move, the original stays in place and the copy gets its own ID. destinationContainerIdentifier and newName are both required. For copying an entire site, use cascade_site_copy instead.

Args:

  • identifier (object, required): The source asset to copy

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the source

  • copyParameters (object, required):

    • destinationContainerIdentifier (object, required): The container (folder/site) that will receive the copy

    • doWorkflow (boolean, required): Whether to run workflow on the copy

    • newName (string, required): Name for the new asset (must be unique within destination)

  • workflowConfiguration (object, optional, shape varies — see Cascade docs): Workflow step assignments

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Duplicate /templates/basic as /templates/basic-v2" -> { identifier: { type: "page", path: { path: "/templates/basic", siteName: "www" } }, copyParameters: { destinationContainerIdentifier: { type: "folder", path: { path: "/templates", siteName: "www" } }, newName: "basic-v2", doWorkflow: false } }

  • Don't use when: You want to rename in place — use cascade_move.

  • Don't use when: You want to copy an entire site — use cascade_site_copy.

Error Handling:

  • "Asset not found" when the source identifier doesn't resolve

  • "Destination not found" when destinationContainerIdentifier is invalid

  • "Name collision" when newName already exists in destination

  • "Permission denied" when credentials lack read on source or create on destination. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset to copy.
copyParametersNoCopy parameters: destination, new name, and workflow flag.
workflowConfigurationNoOptional workflow configuration applied when doWorkflow=true.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only and non-destructive; description adds that the original stays and copy gets its own ID, destination and name are required, and workflow can be run. However, there is a trailing paragraph about response formats and cascade_read that seems irrelevant and slightly confusing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with clear sections (Args, Returns, Examples, Error Handling). However, the error handling section includes unrelated text about JSON responses and cascade_read, and there is minor repetition ('both required'). Still mostly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 complex parameters and no output schema, the description covers purpose, parameter details, examples, error handling, and usage guidelines. It provides a complete picture despite the minor irrelevant text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has minimal descriptions (100% coverage but vague). The description elaborates on each parameter, including nested structure, required fields within copyParameters, and examples. This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool copies an asset to a new container with a new name, creating an independent copy. It distinguishes itself from siblings like cascade_move (original stays) and cascade_site_copy (for sites).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (duplicate an asset) and when-not-to-use (rename in place → cascade_move, copy site → cascade_site_copy). Includes an example and error handling scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_createCreate Cascade AssetA

Create a new asset in Cascade CMS.

The request body wraps a typed envelope under asset — one of 48 envelope keys (page, file, folder, symlink, textBlock, feedBlock, indexBlock, xmlBlock, xhtmlDataDefinitionBlock, twitterFeedBlock, reference, template, xsltFormat, scriptFormat, user, group, role, assetFactory, contentType, destination, editorConfiguration, metadataSet, pageConfigurationSet, publishSet, dataDefinition, sharedField, site, workflowDefinition, workflowEmail, wordPressConnector, googleAnalyticsConnector, fileSystemTransport, ftpTransport, databaseTransport, cloudTransport, and the *Container types). This matches the upstream Cascade REST API Asset schema exactly. Returns the new asset's ID on success.

Payload conventions (apply to every create call):

  • Send ONLY the fields you actually need to set. Every optional field should be omitted unless you have a real value to provide — Cascade applies its own defaults server-side. Do not pad payloads with "reasonable defaults" like reviewOnSchedule: false or shouldBePublished: true when you do not need to override them.

  • For every <thing>Id / <thing>Path pair (parentFolderId vs parentFolderPath, siteId vs siteName, contentTypeId vs contentTypePath, metadataSetId vs metadataSetPath, ...), prefer the id form when you know the id. Path is a valid fallback and Cascade resolves it server-side — don't round-trip through cascade_read just to look up an id.

  • Text encoding: rich-text fields (xhtml, WYSIWYG structuredData text, xmlBlock xml) must be well-formed XML — named HTML entities like &nbsp; and astral-plane Unicode (including emoji) crash the render. See resource cascade://text-encoding for the per-field-category rules.

Args:

  • asset (object, required): Single-key envelope. Key is the camelCase type; value is the asset body. Common shapes (only required fields shown — add optionals only when you need to set them):

    • { page: { name, parentFolderId OR parentFolderPath, siteId OR siteName, contentTypeId OR contentTypePath, ... } }

    • { file: { name, parentFolderId OR parentFolderPath, siteId OR siteName, text? OR data?, ... } }

    • { folder: { name, parentFolderId OR parentFolderPath, siteId OR siteName, ... } }

    • { textBlock: { name, parentFolderId OR parentFolderPath, siteId OR siteName, text, ... } }

    • { xmlBlock: { name, parentFolderId OR parentFolderPath, siteId OR siteName, xml, ... } }

    • { symlink: { name, parentFolderId OR parentFolderPath, siteId OR siteName, linkURL, ... } } Admin-area types (assetFactory, contentType, transports, workflow*, *Container) use parentContainerId/Path instead of parentFolderId/Path.

Returns: Cascade OperationResult: { success: true, createdAssetId: "" } On failure: { success: false, message: "" }

Examples:

  • Use when: "Create a page under /about" -> { asset: { page: { name: "team", parentFolderPath: "/about", siteName: "www", contentTypePath: "/standard-page" } } }

  • Use when: "Upload a text file" -> { asset: { file: { name: "robots.txt", parentFolderPath: "/", siteName: "www", text: "User-agent: *" } } }

  • Use when: "Create a text block" -> { asset: { textBlock: { name: "greeting", parentFolderPath: "/blocks", siteName: "www", text: "Hello" } } }

  • Don't use when: The asset already exists — use cascade_edit.

  • Don't use when: You want to duplicate an existing asset — use cascade_copy.

Error Handling:

  • "Parent folder not found" when parentFolderId/parentFolderPath is invalid

  • "Asset name collision" when an asset with the same name exists in the parent

  • "Permission denied" when credentials lack create access on the parent

  • "Invalid content type" when contentTypeId/contentTypePath doesn't resolve. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoThe asset payload to create. `type` chooses the branch (page/file/folder/block/symlink get strict validation; other types pass through).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint false, etc.), the description details the creation behavior: returns asset ID, error handling cases (parent folder not found, asset name collision, permission denied), and text encoding warnings. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy due to the complexity of handling 48 asset types, but it is well-structured: purpose, payload conventions, shapes, examples, error handling. Could be slightly more concise, but the structure earns a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple asset types), lack of output schema, and rich annotations, the description covers purpose, usage, parameters, return value, error handling, examples, and alternatives. It is comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'asset' is explained in depth: envelope structure, common shapes for all asset types, required fields, admin-area differences, and payload conventions (prefer IDs, omit optionals). This adds immense value beyond the schema's minimal description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Create a new asset in Cascade CMS,' a specific verb+resource. It distinguishes from sibling tools (cascade_edit, cascade_copy) by stating when not to use it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' examples and 'Don't use when' with alternatives. Also includes payload conventions for every create call, guiding proper usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_delete_messageDelete MessageA
DestructiveIdempotent

Permanently delete a message from the authenticated user's Cascade mailbox.

This is a DESTRUCTIVE operation — once deleted, the message cannot be recovered (archive is not the same as recycle-bin for messages). Prefer cascade_mark_message with markType: "archive" for retention. Messages must belong to the authenticated user; you cannot delete messages in another user's mailbox.

Args:

  • identifier (object, required): The message to delete

    • id (string, required): Message ID (from cascade_list_messages)

    • type (string, required): Must be "message"

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Permanently clear spam-like notifications" -> { identifier: { type: "message", id: "..." } }

  • Don't use when: You want to hide it without deleting — use cascade_mark_message with markType: "archive".

  • Don't use when: You want to delete in bulk — this deletes one message per call.

Error Handling:

  • "Message not found" when the identifier doesn't resolve

  • "Permission denied" when the message belongs to another user. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe message to delete.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint and idempotentHint. The description adds crucial details: operation is irreversible, no recovery, permission checks, and error handling messages. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). However, the final paragraph about cascade_read and responses is unrelated to this tool and adds noise, slightly reducing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers purpose, parameters, usage, errors, and expected behavior completely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description explains the identifier parameter structure, required fields (id, type), and that id comes from cascade_list_messages. Adds meaningful context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it permanently deletes a message from the authenticated user's Cascade mailbox. It distinguishes from siblings like cascade_mark_message (archive) and indicates it's not for bulk deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (permanently clear spam) and when-not-to-use (use archive instead, no bulk deletion). Also specifies that messages must belong to the authenticated user.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_editEdit Cascade AssetA

Edit an existing Cascade CMS asset.

Accepts the full asset body (same envelope shape as cascade_create). The workflow is symmetric when cascade_read is called with read_mode: "raw": modify the raw asset envelope and pass the same envelope back to cascade_edit. Some asset types require a prior cascade_check_out.

Payload conventions:

  • Edit replaces the asset body, so send the full object as read — do not try to send only the fields you are changing.

  • When constructing an edit payload from scratch (not round-tripping a read), still omit optional fields you have no intention of setting; don't invent defaults.

  • Prefer id over path on every id/path pair (metadataSetId over metadataSetPath, etc.). Cascade resolves paths server-side.

  • Text encoding: same rules as cascade_create — rich-text fields must be well-formed XML with only the five XML built-in entities (&amp;, &lt;, &gt;, &quot;, &apos;). See resource cascade://text-encoding.

Args:

  • asset (object, required): Single-key envelope (same as cascade_create). Inner object must include id to identify the existing asset.

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Update a page's metadata" -> Read first with cascade_read; modify asset.page.metadata; pass { asset: asset.asset } back.

  • Use when: "Change a block's structured data" -> { asset: { xhtmlDataDefinitionBlock: { id: "...", structuredData: { ... } } } }

  • Use when: "Rewrite a symlink's target" -> { asset: { symlink: { id: "...", linkURL: "https://new.example.com" } } }

  • Don't use when: The asset doesn't exist — use cascade_create.

  • Don't use when: You want a partial patch — Cascade's edit replaces the asset body; always send the full object.

Error Handling:

  • "Asset not found" when id doesn't resolve

  • "Permission denied" when credentials lack edit rights

  • "Asset is checked out by another user" when the asset is locked

  • "Validation error" when required fields are missing or malformed. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoThe asset payload to edit. Must include `id` to identify the target asset. Parent-folder fields are ignored on edit — use move to relocate.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, destructiveHint=false) are present. The description adds important behavioral details: edit replaces the entire asset body (not a partial patch), some types require check-out, and error conditions (not found, permission, locked, validation). This goes beyond the annotations, though the replacement behavior could be seen as partially contradicting destructiveHint=false, but it is not a true contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured into sections (intro, workflow, conventions, args, returns, examples, don't use, errors). Every sentence adds value; however, some redundancy exists (e.g., error handling is repeated in two places). Front-loaded with the core verb+resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of editing assets (multiple types, check-out requirement, full replacement semantics), the description covers workflow, parameter structure, return format (OperationResult), and common errors. No output schema exists, but returns are described. For a mutation tool, this is highly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single 'asset' parameter. The description adds crucial meaning: 'Must include id to identify the target asset', 'Parent-folder fields are ignored on edit', and payload conventions like preferring id over path. This significantly enhances the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Edit an existing Cascade CMS asset,' which clearly states the verb ('edit') and resource ('Cascade CMS asset'). It explicitly distinguishes from sibling tools like cascade_create, cascade_read, and cascade_move by contrasting when to use this tool vs. others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool (examples like 'Update a page's metadata'), when not to use it ('Don't use when: The asset doesn't exist — use cascade_create'), prerequisites ('requires a prior cascade_check_out'), and the recommended workflow (symmetric with cascade_read in raw mode).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_edit_access_rightsEdit Access RightsA

Modify access rights (ACL) for a Cascade asset. Optionally apply to all descendants.

Replaces the asset's ACL wholesale — include every user/group you want to keep; anyone omitted loses their explicit entry and falls back to allLevel. For folders or containers, setting applyToChildren: true propagates the new ACL recursively. Typical workflow: call cascade_read_access_rights first to get the current ACL, modify the array, then pass it here.

Args:

  • identifier (object, required): The asset whose ACL to modify

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

  • accessRightsInformation (object, required):

    • aclEntries (array, optional): Full explicit ACL. Each entry: { name, type: "user"|"group", level: "read"|"write", id? }; include id for group entries when Cascade provides it.

    • allLevel (string): Default for everyone not listed. One of "none" | "read" | "write".

  • applyToChildren (boolean, optional): For containers only. Default false. Propagates the ACL to all descendants.

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Grant group 'editors' write access" -> { identifier: { type: "folder", id: "..." }, accessRightsInformation: { aclEntries: [{ name: "editors", type: "group", level: "write" }], allLevel: "read" } }

  • Use when: "Lock a folder tree down" -> pass applyToChildren: true alongside the restricted ACL.

  • Don't use when: You only want to read — use cascade_read_access_rights.

  • Don't use when: You want to change workflow policy — use cascade_edit_workflow_settings.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "User/group not found" when an aclEntries name is invalid

  • "Permission denied" when credentials lack admin/edit-acl rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset or container whose access rights to modify.
accessRightsInformationNoREQUIRED: Complete access rights payload matching Cascade's AccessRightsInformationSend shape.
applyToChildrenNoApply these rights to child assets/containers (default: false). Only meaningful for folders and containers.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-readonly, non-destructive, non-idempotent, open-world. The description adds critical behavioral details: it replaces the ACL wholesale (any omitted users lose explicit entry and fall back to allLevel), the recommended workflow (read first, modify array, then write), and that applyToChildren propagates recursively. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with sections for Args, Returns, Examples, Error Handling. Uses bolding and bullet points. However, it is somewhat verbose; could be trimmed slightly without losing clarity. Still effective for agent comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description fully explains return values (Cascade OperationResult). It covers all parameters, behavioral nuances, error cases, and provides multiple examples. Completely equips the agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. The description goes beyond schema by explaining the semantics of aclEntries (optional but if omitted only allLevel applies), the structure of identifier (id vs path), and the behavior of applyToChildren (for containers only, default false). Examples clarify usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool modifies access rights (ACL) for a Cascade asset, optionally applying to descendants. It uses specific verbs ('modify', 'replaces') and resources ('access rights', 'ACL'). It distinguishes from siblings by naming alternatives like cascade_read_access_rights and cascade_edit_workflow_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-to-use examples ('Grant group editors write access', 'Lock a folder tree down') and when-not-to-use ('Don't use when: You only want to read', 'Don't use when: You want to change workflow policy') with direct references to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_edit_preferenceEdit System PreferenceA

Update a single Cascade system preference.

Accepts a preference object with name and value. The name must exactly match an existing preference key (see cascade_read_preferences for the full list); value is always sent as a string, even for numeric or boolean preferences (Cascade parses it). Changes take effect server-wide immediately. Requires system-admin-level credentials.

Args:

  • preference (object, required, shape varies — see Cascade docs): The preference to update

    • name (string, required): Exact preference key

    • value (string, required): New value (serialized as string even for numbers/booleans)

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Increase the server's API timeout" -> { preference: { name: "api.request.timeoutSeconds", value: "60" } }

  • Use when: "Toggle a feature flag" -> { preference: { name: "feature.somefeature.enabled", value: "true" } }

  • Don't use when: You want to read current values — use cascade_read_preferences first.

  • Don't use when: The target is user-scoped — system preferences are server-wide.

Error Handling:

  • "Preference not found" when name is not a recognized key

  • "Invalid value" when value can't be parsed for the preference's type

  • "Permission denied" when credentials lack system-admin rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
preferenceNoREQUIRED: The preference to create or update. Shape: `{ name: string, value: string }`.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (mutation) and no destruction or idempotency. The description adds critical context: changes take effect server-wide immediately, requires system-admin credentials, and details error handling (preference not found, invalid value, permission denied). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action and usage guidelines, but it includes a large boilerplate block after 'Error Handling' that discusses generic response handling and unrelated tools (e.g., cascade_read_response, cascade_read). This extraneous text reduces conciseness and relevance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema. The description explains the return format (OperationResult), error cases, and essential behavior. However, the irrelevant boilerplate at the end slightly detracts from coherence, but the core information is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds substantial meaning beyond the schema: it explains the name must exactly match an existing key, value is always a string (even for numbers/booleans), and Cascade parses it. The Args section mirrors and elaborates on the schema, providing clear constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a single Cascade system preference,' specifying a precise verb and resource. It distinguishes from siblings by referencing cascade_read_preferences for reading and implying system-level scope, differentiating it from user-scoped tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Don't use when' examples guide the agent on appropriate usage, including alternatives like cascade_read_preferences and clarifying that it is not for user-scoped preferences. This provides clear context for when to invoke this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_edit_workflow_settingsEdit Workflow SettingsA

Update workflow settings for a Cascade container (folder/site). Optionally propagate to children.

Replaces the container's workflow configuration wholesale. Two boolean flags control propagation: applyInheritWorkflowsToChildren copies the "inherit" setting to descendants, applyRequireWorkflowToChildren copies the "required" setting. Call cascade_read_workflow_settings first so you can pass the existing workflowSettings with only your edits.

Args:

  • identifier (object, required): The container to update

    • id (string, optional): Container ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Typically "folder" or "site"

  • workflowSettings (object, required, shape varies — see Cascade docs): Complete replacement workflow configuration

    • workflowDefinitions (array): Which workflows apply in this container

    • inheritWorkflows (boolean): Whether to inherit from parent

    • requireWorkflow (boolean): Whether workflow is mandatory for edits

  • applyInheritWorkflowsToChildren (boolean, optional, default false): Propagate inheritWorkflows to descendants

  • applyRequireWorkflowToChildren (boolean, optional, default false): Propagate requireWorkflow to descendants

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Require workflow on /releases and all its children" -> set requireWorkflow: true + applyRequireWorkflowToChildren: true.

  • Use when: "Swap a workflow definition on a folder" -> pass the new workflowDefinitions array.

  • Don't use when: You want to advance an in-flight workflow — use cascade_perform_workflow_transition.

  • Don't use when: You only need to read — use cascade_read_workflow_settings.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Invalid workflow definition" when a referenced workflow ID is wrong

  • "Permission denied" when credentials lack admin rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe folder whose workflow settings to modify.
workflowSettingsNoREQUIRED: Workflow settings payload (inheritWorkflows, requireWorkflow, workflowDefinitions, etc.). Matches Cascade's WorkflowSettingsSend shape.
applyInheritWorkflowsToChildrenNoApply the 'inheritWorkflows' setting to child folders (default: false).
applyRequireWorkflowToChildrenNoApply the 'requireWorkflow' setting to child folders (default: false).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it 'replaces configuration wholesale' and explains propagation flags. Adds error handling details. Annotations (destructiveHint: false) are consistent; no contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections and bullet points, but includes an irrelevant block about bounded _cache metadata and cascade_read response, which bloat the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all 4 params, return type (OperationResult), error handling, and examples. No output schema but description explains return values. Slightly verbose on unrelated content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds significant detail: propagation logic, workflowSettings shape, optionality, and usage examples, elevating meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (Update) and resource (workflow settings for a Cascade container). It distinguishes from siblings by explicitly naming cascade_read_workflow_settings and cascade_perform_workflow_transition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use examples (e.g., 'Require workflow on /releases') and when-not-to-use with alternatives ('Don't use when... cascade_perform_workflow_transition'). Advises reading settings first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_list_messagesList User MessagesA
Read-onlyIdempotent

List in-Cascade mailbox messages for the authenticated user.

Cascade has an internal message center — workflow requests, publish notifications, system alerts, and peer messages all land here. Returns all messages visible to the authenticated user (both unread and read, active inbox and archived, depending on your Cascade server's defaults). Message IDs from this list can be passed to cascade_mark_message or cascade_delete_message.

Args:

  • limit (number, optional): Max results per page, 1-500 (default 50)

  • offset (number, optional): Skip N results for pagination (default 0)

Returns: The response is a page: { success: true, total: , count: , offset: , has_more: , next_offset: <offset for next page, if has_more>, messages: [ { id, type: "message", to, from?, subject, date?, body }, ... ] } On failure: { success: false, message: "" }

Examples:

  • Use when: "What's in my Cascade inbox?" -> {}

  • Use when: "Check if workflow messages are waiting" -> {} then filter messages by subject.

  • Don't use when: You want an asset's relationships or subscribers — use cascade_list_subscribers.

  • Don't use when: You want audit events — use cascade_read_audits.

Pagination:

  • Default limit of 50 works for most inboxes. Increase up to 500 for larger ones.

  • If has_more is true and you need all messages, call again with offset: next_offset.

  • For focused queries (most recent only), stop as soon as you have what you need.

Error Handling:

  • "Authentication failed" when credentials are invalid

  • "Permission denied" when the user has no mailbox configured. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results per page (default: 50, max: 500). Check has_more and use next_offset to iterate. For a complete enumeration, loop until has_more=false.
offsetNoSkip this many results for pagination (default: 0). Use with limit + has_more to iterate through large result sets.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds significant behavioral context: lists both unread/read, active/archived depending on server defaults, pagination details, error handling (authentication failed, permission denied). A minor deduction for including a somewhat tangential note about JSON structuredContent and cache metadata, which may confuse rather than clarify.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Examples, Pagination, Error Handling) and front-loaded purpose. However, it includes a somewhat generic paragraph about JSON structuredContent and cascade_read that is not directly relevant to this tool, slightly reducing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description thoroughly documents the return format (including fields like total, count, offset, has_more, next_offset, messages array with subfields) and error responses. Pagination and error handling are fully explained, making it complete for a list tool with two optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good descriptions for limit and offset. The description adds value by explaining pagination usage (e.g., 'Use with limit + has_more to iterate') and providing default values and ranges beyond the schema. This extra context justifies a 4 rather than a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists in-Cascade mailbox messages for the authenticated user, with specific verb 'list' and resource 'messages'. It distinguishes from siblings by noting that message IDs can be used with cascade_mark_message or cascade_delete_message, and gives explicit examples of when not to use this tool (e.g., for asset subscribers use cascade_list_subscribers).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use (e.g., 'What's in my Cascade inbox?') and when not to use (e.g., 'Don't use when: You want an asset's relationships or subscribers — use cascade_list_subscribers'). It also gives alternatives and a clear example for checking workflow messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_list_sitesList Cascade SitesA
Read-onlyIdempotent

List all sites accessible with the current API credentials.

Returns identifiers (id, name, type="site") for every site the authenticated user can see. This is typically the first call an agent makes to discover which sites exist before reading or editing assets inside them. The response contains only identifiers — call cascade_read with { type: "site", ... } to fetch a site's full configuration.

Args: (none)

Returns: Cascade OperationResult: { success: true, sites: [ { id, type: "site", path: { path, siteId, siteName } }, ... ] } On failure: { success: false, message: "" }

Examples:

  • Use when: "What sites do I have access to?" -> {}

  • Use when: "I need to find a siteId before reading a page" -> call this, then match by name.

  • Don't use when: You already know the site name/id — skip straight to cascade_read.

  • Don't use when: You need a site's full config — use cascade_read with type "site".

Error Handling:

  • "Permission denied" when credentials are invalid

  • "Authentication failed" when the API key is missing or revoked. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive, idempotent, and open world. The description adds useful context about return structure (identifiers only) and error handling scenarios, but no additional behavioral traits beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections (args, returns, examples, error handling) but overly verbose with generic boilerplate about responses and _cache metadata that is not specific to this tool. Could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, no output schema, and strong annotations, the description covers purpose, typical usage, return structure, and error handling. It is complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; baseline is 4. The description correctly notes '(none)' args, so no added meaning needed beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all sites accessible with current credentials and returns identifiers. It distinguishes itself from sibling tools like cascade_read by specifying it only returns basic info, not full configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (first call to discover sites) and when not to (already know site name/id, need full config). Includes examples of natural language queries that map to this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_list_subscribersList Asset Relationships & SubscribersA
Read-onlyIdempotent

List the relationships an asset has — the other assets that reference it ("what is using this?") and the users subscribed to its notifications.

Cascade exposes two related discovery questions through this single endpoint:

  1. "What relationships does this asset have?" — i.e. what references it: "which pages use this block?", "which pages link to this file?", "which content-types use this data definition?". The referenced asset is the query target; the assets that point at it show up in the response.

  2. "Who gets notified when this asset changes?" — user/group subscribers, both auto (ownership/workflow/group) and manual (opt-in).

Directionality matters: the lookup runs against the asset being referenced, NOT the asset doing the referencing. If a page embeds a block, query the BLOCK to find the page. Querying the page will NOT list its embedded blocks — it will list the assets that reference the page.

Args:

  • identifier (object, required): The asset whose relationships/subscribers to list

    • id (string, optional): Asset ID. Prefer id when known; Cascade auto-resolves path→id server-side when only path is given.

    • path (object, optional): { path, siteId OR siteName } — valid fallback when id is unknown.

    • type (string, required): Entity type of the asset. Use the EntityType string (e.g. "page", "block_XHTML_DATADEFINITION", "contenttype") — NOT the camelCase envelope key ("xhtmlDataDefinitionBlock", "contentType"). Most asset kinds differ between the two schemes; see IdentifierSchema.type / cascade://entity-types.

Returns: Cascade OperationResult: { success: true, subscribers: [ { id, type, path: { path, siteId, siteName } }, ... ], manualSubscribers: [ { id, type, path: { path, siteId, siteName } }, ... ] } Entries may be related assets (pages, content-types, ...) that reference this one, users subscribed to notifications, or both — distinguish by type. On failure: { success: false, message: "" }

Examples:

  • Use when: "What relationships does this block have?" / "Which pages use this block?" -> { identifier: { type: "block_XHTML_DATADEFINITION", id: "" } } then inspect response entries.

  • Use when: "Which assets link to this file?" -> { identifier: { type: "file", id: "" } }.

  • Use when: "Who gets notified when /about changes?" -> { identifier: { type: "folder", path: { path: "/about", siteName: "www" } } }.

  • Don't use when: You want outbound relationships — i.e. "which blocks does this page embed?". That direction isn't queryable; read the page and inspect its body.

  • Don't use when: You want to read messages sent — use cascade_list_messages.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Permission denied" when credentials lack read access. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset whose subscribers to list.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, consistent with listing. Description adds directionality constraints, error handling cases, and response structure. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections and examples, but slightly verbose. Every sentence adds value, but could be slightly tighter. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, description provides full return structure and error scenarios. Covers all key behaviors for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has one parameter with minimal description, but the tool description extensively documents identifier properties (id, path, type), including valid type strings and fallback behavior. Greatly enriches schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it lists relationships (assets referencing this one) and subscribers. It distinguishes two discovery questions and contrasts with sibling tools like cascade_list_messages and cascade_search. Clear verb+resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and 'Don't use when' examples, explains directionality, and names alternative tools (cascade_list_messages). Excellent guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_mark_messageMark MessageA
Idempotent

Mark a Cascade inbox message as read, unread, archive, or unarchive.

Toggles the status of a single message. markType controls the action: "read"/"unread" swap the read flag; "archive"/"unarchive" move the message between the inbox and the archive. This is idempotent — marking an already-read message as "read" is a no-op.

Args:

  • identifier (object, required): The message to mark

    • id (string, required): Message ID (from cascade_list_messages)

    • type (string, required): Must be "message"

  • markType (string, required): One of "read" | "unread" | "archive" | "unarchive"

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Mark a workflow notice as read" -> { identifier: { type: "message", id: "..." }, markType: "read" }

  • Use when: "Archive an old notification" -> { identifier: { type: "message", id: "..." }, markType: "archive" }

  • Don't use when: You want to delete — use cascade_delete_message.

  • Don't use when: You want to list — use cascade_list_messages.

Error Handling:

  • "Message not found" when the identifier doesn't resolve

  • "Invalid markType" when markType is outside the allowed set

  • "Permission denied" when the message belongs to another user. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe message to mark.
markTypeNoREQUIRED: Action to apply to the message: 'read' | 'unread' | 'archive' | 'unarchive'.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, but the description reinforces this by explaining idempotency. Discloses error types like 'Message not found' and 'Permission denied'. However, includes an irrelevant paragraph about cascade_read_response and cascade_read that adds noise and reduces clarity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Most content is valuable, but the final paragraph about cascade_read_response and cascade_read is irrelevant to this tool and adds unnecessary length. The examples and error handling are well-structured but the extraneous section hurts conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, parameters, return format (OperationResult), error handling, and usage examples. Lacks an output schema but provides a structured return description. The irrelevant tail about cascade_read_response slightly detracts from completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage, but the description adds critical context: identifier.id comes from cascade_list_messages, identifier.type must be 'message', and markType allowed values are explicitly listed. This goes beyond the schema's minimal descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool marks a Cascade inbox message as read/unread/archive/unarchive. It distinguishes from siblings like cascade_delete_message and cascade_list_messages by explicitly naming them in the 'Don't use when' section.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use examples (e.g., 'Mark a workflow notice as read') and when-not-to-use with alternative tool names. Covers both common use cases and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_moveMove or Rename Cascade AssetA

Move an asset to a new container and/or rename it.

Performs an in-place rename when newName is set but destinationContainerIdentifier is omitted, a pure move when destinationContainerIdentifier is set and newName is omitted, or both simultaneously when both are provided. References to the asset from other assets are updated automatically by Cascade.

Args:

  • identifier (object, required): The asset to move

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

  • moveParameters (object, required):

    • destinationContainerIdentifier (object, optional): Where to move the asset. Omit to keep in current container.

    • doWorkflow (boolean, required): Whether to run workflow on the move

    • newName (string, optional): New asset name. Omit to keep current name.

  • workflowConfiguration (object, optional, shape varies — see Cascade docs): Workflow step assignments

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Rename /about/teem to /about/team" -> { identifier: { type: "page", id: "..." }, moveParameters: { doWorkflow: false, newName: "team" } }

  • Use when: "Move page to /archive" -> { identifier: { type: "page", id: "..." }, moveParameters: { doWorkflow: false, destinationContainerIdentifier: { type: "folder", path: { path: "/archive", siteName: "www" } } } }

  • Don't use when: You want to duplicate — use cascade_copy.

Error Handling:

  • "Asset not found" when the source identifier doesn't resolve

  • "Destination not found" when destinationContainerIdentifier is invalid

  • "Name collision" when an asset with newName already exists in the destination

  • "Permission denied" when credentials lack move rights on source or destination. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset to move.
moveParametersNoMove parameters: destination container and/or new name.
workflowConfigurationNoOptional workflow configuration applied when doWorkflow=true.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate the tool is not read-only, not destructive, not idempotent, and open world. The description adds value by explaining automatic reference updates and providing detailed error handling messages. However, it does not discuss reversibility or side effects beyond reference updates, and the description includes some redundant system-level notes about responses that might not apply solely to this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (overview, args, returns, examples, error handling). It front-loads the core behavior. However, it is somewhat verbose, especially in the args section where it repeats schema details, and the system-level notes about structuredContent and oversized responses add noise but are likely required by the platform.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of moving/renaming assets with optional workflow and reference updates, and no output schema, the description covers all essential information: return format, error handling, examples, and parameter interactions. It also refers to external documentation for complex subfields (workflowConfiguration), ensuring completeness for AI agent selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds significant meaning beyond the schema. It explains the three operational modes (rename only, move only, both), details each parameter's subfields (e.g., identifier, moveParameters), and provides concrete examples showing how to structure calls for different use cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool moves or renames a Cascade asset, distinguishing it from sibling tools like cascade_copy (for duplication) and cascade_remove (for deletion). It uses a specific verb ('move or rename') and identifies the resource ('Cascade asset').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use (move/rename) and when not to use ('Don't use when: You want to duplicate — use cascade_copy'). Examples with 'Use when' and 'Don't use when' provide clear context. It also details three scenarios (rename only, move only, both) and specifies that references are updated automatically.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_perform_workflow_transitionPerform Workflow TransitionA

Advance an in-flight workflow to its next step (approve, reject, publish, etc.).

Executes a named action against an active workflow. The workflowId and actionIdentifier come from a prior cascade_read_workflow_information call — the tool does not enumerate actions itself. A transitionComment is recommended so reviewers understand the decision; it's stored in the workflow history. Once the final step is executed, Cascade may publish, delete, or otherwise commit the change associated with the workflow.

Args:

  • workflowId (string, required): The active workflow's id (from cascade_read_workflow_information)

  • actionIdentifier (string, required): The action to take (from workflow.actions[].identifier)

  • transitionComment (string, optional): User comment explaining this transition

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Approve an editor's page submission" -> { workflowId: "...", actionIdentifier: "approve", transitionComment: "Looks good." }

  • Use when: "Reject and send back" -> { workflowId: "...", actionIdentifier: "reject", transitionComment: "Fix the headline." }

  • Don't use when: You don't yet know which actions are valid — call cascade_read_workflow_information first.

  • Don't use when: No workflow exists — this only advances an in-flight one.

Error Handling:

  • "Workflow not found" when workflowId is invalid or already finished

  • "Invalid action" when actionIdentifier is not among the workflow's available actions

  • "Permission denied" when current user can't act on this workflow step. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowIdNoREQUIRED: The ID of the active workflow to transition.
actionIdentifierNoREQUIRED: The identifier of the workflow action/transition to perform (e.g., 'approve', 'reject').
transitionCommentNoOptional comment recorded with the workflow transition.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds behavioral context: it executes a named action, may trigger publishing/deletion upon final step, stores comments in history, and provides error scenarios. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with labeled sections (Args, Returns, Examples, Error Handling). It is somewhat lengthy but each sentence adds value. Could be slightly more concise but remains clear and focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly explains the return format and error messages. It covers prerequisites, side effects, and error handling, making it complete for a workflow transition tool with good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema describes each parameter briefly. The description adds meaningful context: workflowId comes from a prior call, actionIdentifier from workflow.actions[].identifier, and transitionComment is recommended for reviewers. This enhances schema coverage of 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it advances an in-flight workflow to its next step (approve, reject, publish, etc.), with a specific verb and resource. It distinguishes itself from siblings by explicitly referencing the prerequisite tool cascade_read_workflow_information and by contrasting with read-only tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use and when-not-to-use guidance, including examples (approve, reject) and negative conditions ('Don't use when: You don't yet know which actions are valid...', 'Don't use when: No workflow exists'). It also explains prerequisite calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_protect_site_removalProtect Cascade Sites From RemovalA
DestructiveIdempotent

Persist generated blocked-call rules that prevent removal of accessible Cascade sites and their root folders.

The tool lists accessible sites, blocks cascade_remove by site id and site name/path, then tries to read each site's root folder at "/". Readable root folders are blocked by id, and path "/" is always included to block path-based root-folder removal. Existing generated rules from this tool are replaced instead of duplicated; unrelated rules are preserved.

Returns a report with protected site count, protected root-folder id count, unreadable root folders, the block-store path, and final rule count. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond annotations: it replaces existing generated rules, preserves unrelated rules, and details the return report and response handling. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, front-loaded with purpose, then details mechanics, return format, and edge cases. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully explains the return value and handles edge cases like oversized responses. It covers all necessary aspects for a zero-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so baseline is 4. The description does not need to explain parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool persists blocked-call rules to prevent removal of Cascade sites and root folders. It uses specific verbs and resources, distinguishing it from sibling tools like cascade_remove or cascade_tool_blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for protecting sites from removal by describing the blocking mechanism. However, it lacks explicit guidance on when not to use or direct comparisons with alternatives like cascade_tool_blocks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_publish_unpublishPublish or Unpublish AssetA
Destructive

Publish a Cascade asset to its configured destinations, or unpublish it from those destinations.

The operation is controlled by the publishInformation payload: by default it publishes; set unpublish: true to remove the asset from its destinations instead. Publishing propagates changes to external systems (HTTP, FTP, filesystem targets). This can affect production websites — use with care. Publishing is asynchronous on Cascade's side; this call queues the job and returns quickly.

Args:

  • identifier (object, required): The asset to publish or unpublish

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

  • publishInformation (object, required, shape varies — see Cascade docs):

    • destinations (array, optional): Specific destination identifiers. Omit for "all enabled destinations".

    • unpublish (boolean, optional, default false): When true, unpublish instead of publish.

    • publishRelatedAssets (boolean, optional): Also publish referenced assets.

    • publishRelatedPublishSet (boolean, optional): Also publish related publish sets.

    • scheduledDate (string, optional): ISO-ish date for scheduled (future) publish.

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Publish a page now" -> { identifier: { type: "page", id: "..." }, publishInformation: {} }

  • Use when: "Unpublish a page" -> { identifier: { type: "page", id: "..." }, publishInformation: { unpublish: true } }

  • Use when: "Schedule publish for next week" -> { identifier: { ... }, publishInformation: { scheduledDate: "2026-04-20T12:00:00Z" } }

  • Don't use when: You want to delete entirely — use cascade_remove (which can unpublish too).

  • Don't use when: You haven't yet committed edits — Cascade publishes the last committed version.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "No destinations configured" when the asset has no destinations and none were supplied

  • "Permission denied" when credentials lack publish rights

  • "Workflow required" when the asset's container demands workflow approval before publish. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset to publish or unpublish.
publishInformationNoREQUIRED: Publish parameters (unpublish flag, destinations list, etc.). Matches Cascade's PublishInformation shape.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true. The description adds valuable context: async behavior, production impact, error handling. However, it includes an irrelevant paragraph about cascade_read responses that may confuse agents, slightly reducing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized with clear sections and examples, but includes an off-topic paragraph about cascade_read responses that adds verbosity without contributing to this tool's description. Could be more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all necessary aspects: operation, parameters, usage, error handling, return shape (OperationResult), and examples. No output schema exists, but the description adequately compensates. Extremely complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description goes far beyond by detailing identifier and publishInformation subfields, providing examples, and listing error conditions. This adds substantial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (publish/unpublish) and resource (Cascade asset) and clearly distinguishes the dual operation. It explicitly contrasts with the sibling tool cascade_remove, which is used for deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use scenarios (publish page, unpublish, schedule) and when-not-to-use (delete, not committed edit). It names the alternative cascade_remove, making selection clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_readRead Cascade AssetA
Read-onlyIdempotent

Read an asset from Cascade CMS by identifier.

Default preview mode returns a compact browse-oriented asset_handle, asset identity, raw_hash, index_version, fact/reference counts, node counts, root nodelet outline, and raw_resource_uri. Preview is not audit-complete; use cascade_asset_list_facts, cascade_asset_search_values, cascade_asset_search_keys, cascade_asset_get_value, cascade_asset_list_scalar_artifacts, cascade_asset_list_references, cascade_asset_list_nodelets, and cascade_asset_get_nodelet with the returned asset_handle for follow-up inspection. Use read_mode: "raw" only when the full REST payload is required.

Args:

  • identifier (object, required): The asset to read

    • id (string, optional): Cascade internal asset ID (e.g., "d3631e59ac1e..."). Takes priority over path when both are provided.

    • path (object, optional): Site-qualified path

      • path (string, required): Asset path within the site, starting from root (e.g., "/about/team")

      • siteId OR siteName (string): Which site the path belongs to

    • type (string, required): Entity type — one of the 56 EntityTypeString values (page, file, folder, block, template, etc.)

    • recycled (boolean, optional): Read from recycle bin.

  • read_mode (string, optional): 'preview' (default, compact handle-based output) or 'raw' (full REST payload; expensive for structured assets). Returns: Preview mode: { asset_handle, asset_type, asset_identity, raw_resource_uri, raw_hash, index_version, audit_complete: false, total_fact_count, reference_count, node_count, max_depth, root_outline, omitted_fields, warnings, next_actions } Raw mode: { success: true, asset: { : { ...type-specific representation } } } On failure: { success: false, message: "Asset not found" }

Examples:

  • Use when: "Read the homepage" -> { identifier: { type: "page", path: { path: "/", siteName: "www" } } }

  • Use when: "Get file by ID" -> { identifier: { type: "file", id: "abc123..." } }

  • Use when: "Load folder config" -> { identifier: { type: "folder", path: { path: "/about", siteName: "www" } } }

  • Don't use when: You want to modify — use cascade_edit instead.

  • Don't use when: You want to check access rights — use cascade_read_access_rights.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Permission denied" when credentials lack read access

  • "Site not found" when siteName/siteId is invalid. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset to read. Provide id + type (preferred) or path + type.
read_modeNoRead mode for cascade_read. 'preview' (default) returns a compact asset_handle plus nodelet outline for structured assets. 'raw' returns the full Cascade REST payload and can be expensive for pages or data-definition blocks.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that preview mode is not audit-complete, raw mode is expensive, and lists possible error responses. Annotations already indicate read-only and idempotent, and the description adds context about behavior and limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized into sections with clear headings. While lengthy, every section adds necessary detail. Slightly verbose but still concise for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description fully specifies return shapes for both modes and error handling. All necessary context for correct invocation is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions; the description adds examples, clarifies id priority over path, and explains read_mode options, providing additional value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads an asset from Cascade CMS by identifier. It distinguishes preview vs raw mode and references sibling tools for follow-up inspection, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Don't use when' examples guide the agent, including naming alternative tools like cascade_edit for modifications and cascade_read_access_rights for access checks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_read_access_rightsRead Access RightsA
Read-onlyIdempotent

Read access rights (users/groups + permission levels) for a Cascade asset.

Returns the complete ACL (access control list) for an asset: which users and groups can read or write it, and what the default level is for everyone else. Access levels are "none", "read", and "write" for allLevel, and "read" or "write" for explicit ACL entries. Useful for auditing permissions before sharing content or before a bulk edit.

Args:

  • identifier (object, required): The asset whose ACL to read

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

Returns: Cascade OperationResult: { success: true, accessRightsInformation: { identifier: { ... }, aclEntries: [ { name, type: "user"|"group", level }, ... ], allLevel: "none"|"read"|"write" } } On failure: { success: false, message: "" }

Examples:

  • Use when: "Who has edit access to /about?" -> { identifier: { type: "folder", path: { path: "/about", siteName: "www" } } }

  • Use when: "Audit page permissions" -> { identifier: { type: "page", id: "..." } }

  • Don't use when: You want to change permissions — use cascade_edit_access_rights.

  • Don't use when: You want workflow settings — use cascade_read_workflow_settings.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Permission denied" when credentials lack admin/read-acl rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset or container whose access rights to read.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and idempotent. The description adds useful behavioral context (e.g., error handling, response format includes structuredContent, and oversized responses return _cache metadata). However, it includes a tangential mention of cascade_read and read_mode that may be slightly confusing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections but contains redundant or extraneous details (e.g., 'Responses are JSON text...' paragraph seems generic and not specific to this tool). It could be more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having only one parameter and no output schema, the description thoroughly explains the input structure, return shape (including ACL entries and allLevel), error messages, and usage examples, making it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a brief description. The description significantly adds value by detailing the identifier's nested structure (id, path, type) and providing concrete examples, greatly aiding correct parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads access rights for a Cascade asset, details the ACL and permission levels, and distinguishes itself from siblings like cascade_edit_access_rights and cascade_read_workflow_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides when-to-use (e.g., 'Who has edit access to /about?') and when-not-to-use (e.g., for changing permissions, use cascade_edit_access_rights; for workflow settings, use cascade_read_workflow_settings). It also includes error handling guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_read_auditsRead Audit LogA
Read-onlyIdempotent

Read Cascade audit log entries matching the specified filters.

Queries Cascade's system audit log for events like edits, publishes, logins, check-outs, deletes, and workflow transitions. All auditParameters fields are optional — providing none returns every recorded event (expect large volumes; always apply a date range filter). Results are always returned newest-first by Cascade; this MCP layer then slices the page.

Args:

  • auditParameters (object, required, shape varies — see Cascade docs): Filter conditions

    • identifier (object, optional): Limit to events on a specific asset

    • username (string, optional): Limit to events by a specific user

    • groupname (string, optional): Limit to events by users in a group

    • rolename (string, optional): Limit to events by users with a role

    • startDate (string, optional): ISO-ish date; earliest event to include

    • endDate (string, optional): ISO-ish date; latest event to include

    • auditType (string, optional): One of: "login", "login_failed", "logout", "start_workflow", "advance_workflow", "edit", "copy", "create", "reference", "delete", "delete_unpublish", "check_in", "check_out", "activate_version", "publish", "unpublish", "recycle", "restore", "move"

  • limit (number, optional): Max results per page, 1-500 (default 50)

  • offset (number, optional): Skip N results for pagination (default 0)

Returns: The response is a page: { success: true, total: , count: , offset: , has_more: , next_offset: <offset for next page, if has_more>, audits: [ { user, action, identifier?: { ... }, date }, ... ] } On failure: { success: false, message: "" }

Examples:

  • Use when: "Who edited /about today?" -> { auditParameters: { identifier: { type: "folder", path: { path: "/about", siteName: "www" } }, auditType: "edit", startDate: "2026-04-13T00:00:00Z" } }

  • Use when: "All logins in April 2026" -> { auditParameters: { auditType: "login", startDate: "2026-04-01T00:00:00Z", endDate: "2026-04-30T23:59:59Z" } }

  • Don't use when: You want the current state — use cascade_read.

  • Don't use when: You want user inbox messages — use cascade_list_messages.

Pagination:

  • Default limit of 50 works for most queries. Increase up to 500 for larger pages.

  • If has_more is true and you need all audits, call again with offset: next_offset.

  • For a complete enumeration (e.g., all audits in a date range), loop until has_more: false.

  • For focused queries where you only need the most recent, stop as soon as you have what you need.

Error Handling:

  • "Invalid date format" when startDate/endDate don't parse

  • "Invalid auditType" when auditType isn't in the allowed set

  • "Permission denied" when credentials lack audit-read rights. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
auditParametersNoREQUIRED: Audit filters (identifier, username, groupname, role, auditType, start/end dates). Matches Cascade's AuditParameters shape.
limitNoMaximum results per page (default: 50, max: 500). Check has_more and use next_offset to iterate. For a complete enumeration, loop until has_more=false.
offsetNoSkip this many results for pagination (default: 0). Use with limit + has_more to iterate through large result sets.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds significant behavioral context: results are always newest-first, all filter fields are optional, default limit is 50, max 500, pagination via has_more/next_offset, error handling for invalid dates, audit types, and permission denied. This goes well beyond the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with clear sections (Args, Returns, Examples, Pagination, Error Handling) and front-loaded with purpose. It is verbose but every section adds value. Minor repetition (e.g., error handling mentions cascade_read_response boilerplate) prevents a 5, but it remains well-organized and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description provides a sample return structure (success, total, count, offset, has_more, next_offset, audits) with field descriptions. It covers pagination loops, error scenarios, and example queries. For a read operation with filter complexity, this is comprehensive and leaves little ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for each parameter. The description adds value by explaining the meaning of auditParameters fields more contextually (e.g., allowed values for auditType, optional nature) and clarifying pagination behavior. While the schema covers syntax, the description enhances semantic understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Read Cascade audit log entries matching the specified filters.' It clearly identifies the verb 'Read' and resource 'audit log entries.' The tool name 'cascade_read_audits' reinforces this. The description further distinguishes from siblings like 'cascade_read' (current state) and 'cascade_list_messages' (user inbox) through explicit 'Don't use when' notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit 'Use when' examples (e.g., 'Who edited /about today?') and 'Don't use when' alternatives ('use cascade_read', 'use cascade_list_messages'). It also advises on when to apply date range filters to avoid large volumes, giving clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_read_preferencesRead System PreferencesA
Read-onlyIdempotent

Read all Cascade system preferences.

Returns every configurable server-wide preference as name/value pairs. Preferences include things like default publish behavior, image handling defaults, API limits, and UI options. Typically useful before calling cascade_edit_preference so you know the current value. Requires system-admin-level credentials.

Args: (none)

Returns: Cascade OperationResult: { success: true, preferences: [ { name: "...", value: "..." }, ... ] } On failure: { success: false, message: "" }

Examples:

  • Use when: "What's the current publish-on-save setting?" -> {}

  • Use when: "Inspect all server preferences" -> {}

  • Don't use when: You want user-level settings — preferences are system-wide.

  • Don't use when: You only need one preference — still call this (there's no read-single endpoint), then filter client-side.

Error Handling:

  • "Permission denied" when credentials lack system-admin rights

  • "Authentication failed" when the API key is invalid. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, but description adds credential requirements, error handling details, and the return format. No contradiction. The extra paragraph on structured content seems irrelevant but does not mislead.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and return format, but includes a somewhat irrelevant boilerplate paragraph about read_mode and structured content that appears copied from another tool. This adds unnecessary length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the extraneous boilerplate, the description covers behavior, error handling, usage examples, and differentiation from sibling tools. No output schema exists, but the return format is described. Mostly complete for a zero-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and the description explicitly states 'Args: (none)' with example usage showing empty input. Schema coverage is 100%, so no additional parameter info needed. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read all Cascade system preferences' and elaborates with examples of preference types. It distinguishes from siblings like cascade_edit_preference by advising to check current values before editing, and from user-level tools by noting preferences are system-wide.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly stated when to use (to inspect or check before editing) and when not to use (for user-level settings). It also requires system-admin-level credentials, providing clear prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_read_responseRead cached MCP response sliceA
Read-onlyIdempotent

Retrieve a slice of a cached MCP response by handle (cascade_read_response).

When a Cascade tool response exceeds the MCP character budget, the server caches the complete payload and returns a handle in structuredContent._cache.handle plus a preview in the text block. Use cascade_read_response to fetch the rest — either the remainder in chunks, or a targeted byte range if you know the structure.

Args:

  • handle (string, required): The handle returned by a prior tool call's structuredContent._cache.handle (e.g. "h_550e8400-...").

  • offset (number, optional, default 0): Byte offset within the full rendered response. Use the originating call's bytes_returned as the next offset, or structuredContent._cache.next_offset when iterating.

  • length (number, optional, default 25000): Max characters to return in this slice. Capped at 25000.

Returns: { success: true, handle: "", bytes_total: , offset: , bytes_returned: , slice_text: "", has_more: , next_offset: <offset to use next, if has_more> } The same JSON object is returned in content[0].text and structuredContent; slice_text contains the response slice.

Examples:

  • Continue reading: { handle: "h_abc...", offset: 20000 }

  • Specific byte range: { handle: "h_abc...", offset: 50000, length: 10000 }

  • Don't use when: The originating response fit under the limit (no handle was minted).

  • Don't use when: The handle is older than 50 oversize responses back (LRU-evicted); re-run the originating tool.

Error Handling:

  • "Handle not found" — the handle was evicted (cache holds the last 50 oversize responses) or never existed. Re-run the originating tool. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleNoREQUIRED: Response handle returned by a previous oversize tool call. Found in structuredContent._cache.handle (e.g. 'h_550e8400-e29b-41d4-a716-446655440000').
offsetNoByte offset to start the slice. Default 0. Use the previous call's next_offset to continue iterating.
lengthNoMaximum characters to return in this slice. Default and max 25000. Smaller slices are fine; iterate via next_offset.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive. The description adds valuable behavioral context: caching mechanism (last 50 oversize responses), LRU eviction, error strings, and that slice_text contains the response. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized with sections: summary, parameter details, return format, examples, error handling. No wasted sentences; every part adds value. Concise for the information provided.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (caching, slicing, error states) and lack of output schema, the description fully equips an agent to use it correctly: parameter semantics, return structure, iteration pattern, and eviction handling are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context: handle source (structuredContent._cache.handle), offset usage (use next_offset), length cap (25000), and default values. This goes beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a slice of a cached MCP response by handle, with specific context about when it's needed (oversize responses). This distinguishes it from all sibling cascade tools, which are for asset operations or other functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when to use (response exceeds budget, handle returned) and when not to use (response fit under limit, handle evicted). Provides examples and error handling guidance, including re-running the originating tool if handle is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_read_workflow_informationRead Workflow InformationA
Read-onlyIdempotent

Read information about the in-flight workflow attached to an asset.

When an asset is going through an approval workflow, Cascade tracks the current step, who owns it, what history has been recorded, and which actions (forward, reverse, reassign, etc.) are available. This tool surfaces that state. The returned workflow object has an id and a list of available actions; pass those to cascade_perform_workflow_transition to advance the workflow.

Args:

  • identifier (object, required): The asset whose workflow state to read

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

Returns: Cascade OperationResult: { success: true, workflow: { id: "", name: "...", currentStep: "...", actions: [ { identifier, label, actionType, nextId }, ... ], history: [ ... ], ownedByCurrentUser: boolean, relatedAsset: { ... } } } On failure: { success: false, message: "" } — also when no workflow is in flight

Examples:

  • Use when: "What step is /about/team in?" -> { identifier: { type: "page", path: { path: "/about/team", siteName: "www" } } }

  • Use when: "List actions I can take on this asset's workflow" -> pass the identifier and read workflow.actions.

  • Don't use when: You want workflow policy — use cascade_read_workflow_settings.

  • Don't use when: No workflow is in flight — expect a "no workflow" failure.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "No workflow in progress" when the asset has no active workflow

  • "Permission denied" when credentials lack read access. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset whose active workflow information to read.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and no destructive actions. Description adds behavioral context: what the tool returns (workflow state, actions, history), error conditions ('Asset not found', 'No workflow in progress', 'Permission denied'), and handling of oversized responses with _cache metadata. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (Args, Returns, Examples, Error Handling). Every sentence serves a purpose; no fluff. Despite length, it is efficiently organized for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Completely covers all necessary context: purpose, usage guidance, parameter details, return format (OperationResult with workflow object), error handling, and examples. No gaps; an agent can fully understand how and when to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (parameter identifier documented), so baseline is 3. Description adds significant meaning: explains identifier can use id or path object with siteId/siteName, requires type, and provides examples with concrete shapes. This far exceeds the schema's minimal description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it reads workflow information for an asset, with specific verb 'read' and resource 'workflow information', and distinguishes from sibling 'cascade_read_workflow_settings' by explicitly stating 'Don't use when: You want workflow policy — use cascade_read_workflow_settings'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use examples ('What step is /about/team in?') and when-not-to-use scenarios ('Don't use when: No workflow is in flight' and 'Don't use when: You want workflow policy'), with alternative tool named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_read_workflow_settingsRead Workflow SettingsA
Read-onlyIdempotent

Read workflow settings for a Cascade container (folder or site).

Returns which workflow definitions are available on the container, whether workflow is required for changes inside it, whether children inherit the setting, and the step/action configuration. Workflow settings apply to containers only — if you query a non-container, Cascade returns an error. Use this before editing workflow policy so you know the existing configuration.

Args:

  • identifier (object, required): The container

    • id (string, optional): Container ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Typically "folder" or "site"

Returns: Cascade OperationResult: { success: true, workflowSettings: { identifier: { ... }, workflowDefinitions: [ ... ], inheritedWorkflowDefinitions: [ ... ], inheritWorkflows: boolean, requireWorkflow: boolean } } On failure: { success: false, message: "" }

Examples:

  • Use when: "Does /about require workflow?" -> { identifier: { type: "folder", path: { path: "/about", siteName: "www" } } }

  • Use when: "Read a site's workflow policy" -> { identifier: { type: "site", id: "..." } }

  • Don't use when: You want to inspect an in-flight workflow — use cascade_read_workflow_information.

  • Don't use when: Target is not a container — workflow settings are container-only.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Not a container" when type is not folder/site/similar

  • "Permission denied" when credentials lack read access. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe folder whose workflow settings to read.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds context: error messages ('Asset not found', 'Not a container', 'Permission denied'), response format (JSON text, structuredContent authority, oversized responses with _cache metadata), and that workflow settings apply only to containers. This supplements the annotations effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized into sections: purpose, args, returns, examples, don't use, error handling. Every section adds value. A few boilerplate sentences about response handling are slightly lengthy but not detrimental. Overall efficient for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter and no output schema, the description is highly comprehensive. It details the return structure, error cases, usage scenarios, and mentions inheritance behavior. It also references sibling tools, making the context complete for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single identifier parameter. The description goes beyond: explains the param is a container (folder/site), provides structure for id and path (with siteId or siteName), and gives examples. This adds significant meaning not present in the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read workflow settings for a Cascade container (folder or site).' It specifies the verb (read) and resource (workflow settings of a container). It distinguishes from sibling tools like cascade_read_workflow_information and cascade_edit_workflow_settings by clarifying scope and usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and 'Don't use when' sections with concrete examples, such as 'Does /about require workflow?' and mentions alternatives like cascade_read_workflow_information for in-flight workflows. It also warns against querying non-containers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_removeRemove (Delete) Cascade AssetA
DestructiveIdempotent

Delete an asset from Cascade CMS.

By default, deletion sends the asset to the recycle bin; deleteParameters can unpublish and/or hard-delete. Site removal and root-folder path "/" removal are rejected; root-folder ID safeguards require generated tool-block rules. If the asset is under a workflow that requires review, workflowConfiguration specifies the approval flow. This is a DESTRUCTIVE operation — confirm intent before calling.

Args:

  • identifier (object, required): The asset to delete

    • id (string, optional): Asset ID (preferred)

    • path (object, optional): { path, siteId OR siteName }

    • type (string, required): Entity type of the asset

  • deleteParameters (object, optional, shape varies — see Cascade docs): Controls delete behavior

    • doWorkflow (boolean): Whether to run the workflow on delete

    • unpublish (boolean): Unpublish from destinations before deleting

  • workflowConfiguration (object, optional, shape varies — see Cascade docs): Workflow step assignments when user can't bypass workflow

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Delete a page" -> { identifier: { type: "page", id: "..." } }

  • Use when: "Unpublish then delete" -> { identifier: { type: "page", id: "..." }, deleteParameters: { unpublish: true } }

  • Don't use when: You just want to move/rename — use cascade_move.

  • Don't use when: You want to unpublish without deleting — use cascade_publish_unpublish with unpublish: true.

Error Handling:

  • "Asset not found" when the identifier doesn't resolve

  • "Permission denied" when credentials lack delete rights

  • "Asset has children" when deleting a non-empty folder without cascade

  • "Workflow required" when the container requires workflow and none was supplied. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierNoThe asset to remove (moves to recycle bin by default).
workflowConfigurationNoOptional workflow configuration to apply during removal. Matches Cascade's WorkflowConfiguration shape.
deleteParametersNoOptional delete parameters (e.g., to bypass the recycle bin or unpublish first). Matches Cascade's DeleteParameters shape.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true; description adds value by detailing default recycle-bin behavior, hard-delete/unpublish options, rejected operations (site removal), workflow requirements, and a warning label. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with Args, Returns, Examples, and Error Handling sections. Front-loaded with key purpose. Slightly lengthy due to examples and error details, but remains efficient and organized for a complex tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all inputs with examples and error handling, explains return format, and references relevant sibling behavior (cascade_read_response). Despite no output schema, description provides complete guidance for safe usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with param descriptions; description further enriches by explaining default behavior (recycle bin), specifying shape of identifier, detailing deleteParameters (doWorkflow, unpublish), and workflowConfiguration with examples. Adds significant meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Delete an asset from Cascade CMS' with specific verb and resource, and explicitly distinguishes from siblings like cascade_move and cascade_publish_unpublish in the 'Don't use when' examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use scenarios (delete, unpublish then delete) and when-not-to-use with alternatives (cascade_move, cascade_publish_unpublish). Also includes error handling for common failure modes, guiding correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_server_versionRead MCP server versionA
Read-onlyIdempotent

Read this MCP server's name and version (cascade_server_version).

Use this tool when you need to confirm which cascade-cms-mcp-server version is running in the client.

Args: (none)

Returns: { success: true, name: "cascade-cms-mcp-server", version: "" }

Examples:

  • Check the MCP server version: {}. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent. Description adds return format and example, plus some generic response handling notes. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose. Some boilerplate about responses and cascade_read is unnecessary but not harmful. Overall concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with full annotations, the description covers purpose, return shape, and example. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%. Description explicitly states 'Args: (none)', which is clear. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Purpose is explicit: 'Read this MCP server's name and version'. Verb and resource are specific, and the tool is clearly distinct from sibling cascade tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use: 'when you need to confirm which cascade-cms-mcp-server version is running'. No alternatives mentioned, but for a version check this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_site_copyCopy Cascade SiteA

Copy an entire site to a new site with a new name.

Duplicates all assets, folders, templates, and configuration from an existing site into a brand-new site. This is a LONG-RUNNING operation — Cascade returns once the copy has started but finishes asynchronously. Poll cascade_list_sites to confirm completion. Either originalSiteId or originalSiteName must be provided; if both are given, originalSiteId wins.

Args:

  • originalSiteId (string, optional): Source site ID. Preferred when known.

  • originalSiteName (string, optional): Source site name. Used when originalSiteId is omitted.

  • newSiteName (string, required): Name for the new copied site. Must be unique across sites.

(Either originalSiteId or originalSiteName is required; the tool rejects calls that omit both.)

Returns: Cascade OperationResult: { success: true } On failure: { success: false, message: "" }

Examples:

  • Use when: "Duplicate the 'staging' site as 'staging-2026'" -> { originalSiteName: "staging", newSiteName: "staging-2026" }

  • Use when: "Copy site by id for a new campaign" -> { originalSiteId: "abc123...", newSiteName: "campaign-fall" }

  • Don't use when: You want to copy a single asset — use cascade_copy.

  • Don't use when: The site already exists under newSiteName — no merge behavior is supported.

Error Handling:

  • "requires either originalSiteId or originalSiteName" when both are omitted

  • "Source site not found" when the original identifier doesn't resolve

  • "Site name collision" when newSiteName already exists

  • "Permission denied" when the user isn't a site-copy administrator. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
originalSiteIdNoID of the site to copy. Takes precedence over originalSiteName when both are provided. One of originalSiteId/originalSiteName is required.
originalSiteNameNoName of the site to copy. Alternative to originalSiteId. One of originalSiteId/originalSiteName is required.
newSiteNameNoREQUIRED: Name of the new site that will be created from the copy.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the operation is long-running and asynchronous, requiring polling via cascade_list_sites. Lists specific error messages (e.g., 'Source site not found'). Annotations (readOnlyHint=false, destructiveHint=false) are consistent with the description's disclosure of a non-idempotent mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections (Args, Returns, Examples, Error Handling), but includes an irrelevant concluding paragraph about cascade_read and cascade_read_response that appears to be a copy-paste error, adding unnecessary verbosity and potential confusion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the full context: purpose, parameter relationships, asynchronous behavior, polling recommendation, return structure (success/error), and error cases. No output schema is needed because the description adequately explains the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds critical semantics: the mutual exclusivity and precedence of originalSiteId over originalSiteName, and the explicit requirement for newSiteName (not captured in the required array).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Copy an entire site to a new site with a new name', a specific verb-resource pair. It explicitly distinguishes itself from the sibling tool cascade_copy by stating 'Don't use when: You want to copy a single asset — use cascade_copy'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage examples ('Use when: ...') and contraindications ('Don't use when: ...'). It explains when to prefer originalSiteId over originalSiteName and warns against using for single-asset copies or when the new site name already exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cascade_tool_blocksManage blocked Cascade tool callsA
Destructive

List or add blocked Cascade tool-call rules stored in the local JSON repository.

Use this tool when an agent should persist a guardrail that prevents selected Cascade tools from running against matching asset payloads. Rules require:

  • tools: exact MCP tool names to block, such as cascade_remove or cascade_edit.

  • url: one or more https Cascade CMS asset URLs at /entity/open.act. Each URL must include id and type.

  • type plus id/path for explicit selectors. URL selectors and explicit selectors may be combined.

Actions:

  • list: return the repository path and current rules.

  • add: append rule.

This management tool writes only the local repository. Because add can change guardrails, clients should require user approval before calling this tool. The blocked-call check runs before checked Cascade tools invoke Cascade. Responses are JSON text; structuredContent is authoritative when the response fits. Oversized responses return bounded _cache metadata for cascade_read_response. For cascade_read, read_mode controls preview versus raw Cascade payload shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoAction to perform against the local tool block repository.
ruleNoRule to append when action is 'add'.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructive and non-read-only behavior. The description adds context: writes only local repository, blocked-call check runs before other tools, and explains response format. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and bullet points. It is slightly verbose but every sentence adds value. Could be trimmed slightly but remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description sufficiently explains response behavior (JSON text, structuredContent, cache metadata). It also clarifies the tool's role in the broader toolset, making it complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but parameter descriptions are minimal. The description adds significant meaning: action can be 'list' or 'add', and rule requires specific fields (tools, url, type+id/path). This compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages blocked Cascade tool-call rules with explicit actions (list, add). It distinguishes itself from siblings by focusing on guardrail persistence, which no other sibling tool addresses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('persist a guardrail') and details required fields for rules. It also advises user approval for the add action, but does not explicitly state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 37 tool updatesv1.1.2
    • First observedcascade_asset_get_nodelet
    • First observedcascade_asset_get_value
    • First observedcascade_asset_list_facts
    • First observedcascade_asset_list_nodelets
    • First observedcascade_asset_list_references
    • First observedcascade_asset_list_scalar_artifacts
    • First observedcascade_asset_search_keys
    • First observedcascade_asset_search_values
    • First observedcascade_check_in
    • First observedcascade_check_out
    • First observedcascade_copy
    • First observedcascade_create
    • First observedcascade_delete_message
    • First observedcascade_edit
    • First observedcascade_edit_access_rights
    • First observedcascade_edit_preference
    • First observedcascade_edit_workflow_settings
    • First observedcascade_list_messages
    • First observedcascade_list_sites
    • First observedcascade_list_subscribers
    • First observedcascade_mark_message
    • First observedcascade_move
    • First observedcascade_perform_workflow_transition
    • First observedcascade_protect_site_removal
    • First observedcascade_publish_unpublish
    • First observedcascade_read
    • First observedcascade_read_access_rights
    • First observedcascade_read_audits
    • First observedcascade_read_preferences
    • First observedcascade_read_response
    • First observedcascade_read_workflow_information
    • First observedcascade_read_workflow_settings
    • First observedcascade_remove
    • First observedcascade_search
    • First observedcascade_server_version
    • First observedcascade_site_copy
    • First observedcascade_tool_blocks

TDQS

A4.4/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose, from asset CRUD to post-read inspection, workflow management, and system administration. Descriptions effectively differentiate between similar operations (e.g., cascade_read_workflow_information vs cascade_read_workflow_settings).

Naming Consistency5/5

All tools follow a consistent 'cascade_verb_noun' pattern (e.g., cascade_read, cascade_create, cascade_asset_list_facts). The naming convention is uniform and predictable across the entire set.

Tool Count4/5

With 37 tools, the surface is comprehensive but slightly heavy. The count is justified by the depth of CMS operations (CRUD, workflow, messaging, search, audit, etc.), though some consolidation (e.g., asset inspection tools) could be considered.

Completeness4/5

The tool set covers most major CMS workflows: read, create, edit, copy, move, delete, publish, workflow, search, audit, access control, and preferences. A minor gap is the absence of a direct 'list children' tool, but search can serve this purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that wraps the TeamDynamix (TDX) REST API, enabling AI-assisted IT service management through natural language. It exposes 41 tools for managing tickets, assets, CMDB, knowledge base articles, and other core TDX domains.
    41
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides 12 MCP tools to directly interact with DEM MDM backend API, enabling Cursor or AI agents to manage MDM data.
    -
  • A
    license
    C
    quality
    D
    maintenance
    Enables AI-powered WordPress management via MCP, with 158 tools for posts, pages, media, plugins, themes, users, comments, and more, plus token-optimized responses.
    100
    78
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kuklaph/cascade-cms-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server