Skip to content
Back to search
100
MCP live v1.0.0 MCP 2025-11-25 streamable-http

Cactal

ai.cactal/cactal

The website platform for AI agents. One API to build, host, and operate real websites.

Watch this dependency Share evidence report
Uptime
100.0%
1 direct probes · 30d
Response
575ms
last probe
Tools
84
callable
Resources
0
readable
Prompts
0
available
Score: 100/100
Handshake verified by our own probe.
pass Answers the MCP handshake 50/50
The handshake and the list calls succeeded on the primary URL.
pass Lists tools, resources or prompts 30/30
84 tools, 0 resources, 0 prompts returned.
pass 3 or more catalogue items 10/10
84 items in total; 3 or more earns these points.
pass Describes itself 10/10
86 characters; more than 30 earns these points.

Tools · 84

feedback_submit

Adds user-requested free-form feedback to the Cactal product-feedback inbox. Describe what happened and what would have made the experience better. Agents must set `authorKind` to `agent` even when ac…

websites_list

Lists accessible websites. By default returns active websites: use `organizationId` to scope one organization, `scope=shared` without it for direct grants outside your memberships, or `scope=all` with…

websites_get

Returns a single website by `websiteId`, or by its `organizationSlug` + `websiteSlug` pair when starting from a URL — provide exactly one of the two identifications. The response includes whether the …

websites_create

Creates a website in the organization. Provide either a `name` (trimmed, 1–200 characters) or a creation `prompt`; a prompt returns immediately with the temporary name `Untitled site`, which the built…

websites_rename

Updates the website’s display name and, when supplied, its URL slug. The slug must be lowercase, URL-safe, unreserved, and unique among active websites in the organization.

websiteDomains_list

Returns every domain record attached to the website, oldest first: the automatically allocated platform subdomain plus any custom domains. Platform subdomains are always `active`; custom domains carry…

websiteDomains_createCustomDomain

Claims `hostname` for this website and registers it with the Cactal edge. Custom domains must first be enabled for the website (`websiteDomains.setEnabled`, owner-only — enabling is the billing moment…

websiteDomains_verifyCustomDomain

Re-checks the ownership TXT record, edge readiness, and whether an HTTPS request to the hostname reaches this Cactal domain, then returns the updated status. A customer CDN or reverse proxy in front i…

websiteDomains_setPrimaryDomain

Makes this domain the canonical hostname for the published website: requests reaching the platform subdomain or any other custom domain are permanently redirected (HTTP 308) to it, preserving path and…

websiteDomains_removeCustomDomain

Deregisters the hostname from the Cactal edge and deletes the domain record. If the removed domain was primary, the oldest remaining active custom domain is promoted automatically. If edge deregistrat…

websiteDomains_renamePlatformDomain

Moves the website to `<label>.<platform domain>`, the free address every website is allocated at creation. `label` is just the leading part: 1-40 characters, lowercase letters, digits, and inner hyphe…

websiteAssets_list

Returns ready assets newest first as compact rows (`description`, `category`, dimensions, `url`, `srcSet`); fetch one asset for `originalUrl` and `variants`. Filter by `kind`, `category`, `type` (the …

websiteAssets_get

Returns the asset with `description`, `category`, and its CDN delivery shape: for transformable images `url` is the optimized 1920px default and `originalUrl` the original bytes; both never expire. MC…

websiteAssets_importFromUrl

Fetches 1-10 public http(s) URLs server-side, one at a time, and stores each as a ready asset with no upload or finalize step. Media only: images, fonts, PDF, audio, video, dotLottie, and Rive; text, …

websiteAssets_update

Changes `filename`, `description`, or `category`. Pass only the fields to change; `null` clears a field. `category` is images only.

websiteAssets_delete

Archives the asset: it immediately stops appearing in list responses and its id returns 404 from every asset endpoint. Archival cannot be undone through the API; previously issued CDN URLs keep servin…

websiteKnowledge_project_get

Returns the website’s durable project knowledge: the text the user maintains as `content`, plus the `agentNotes` Cactal distills from agent conversations. Both are included in every Cactal agent reque…

websiteKnowledge_project_edit

Applies exact-match text edits to the user’s project knowledge text, in order; an empty `oldStr` appends. Change it only when the user asks; agent-discovered facts belong in agent notes. A passage tha…

websiteKnowledge_agentNotes_edit

Applies exact-match text edits to the agent notes, in order; an empty `oldStr` appends. Record only durable facts, decisions, rejected directions, and constraints, one short line each, never progress …

websiteKnowledge_list

Lists the website’s private durable context entries: uploaded files and pasted text, each with a `title`, a generated `description`, and an `origin` of `upload` or `text`.

websiteKnowledge_create

Keeps pasted or typed text as a context entry the agent searches and reads when relevant, using one of the website’s 25 slots. Cactal titles and describes it. Use this for material the user gives you …

websiteKnowledge_update

Renames a context entry or replaces the text the agent reads. Replacing text does not change the downloadable original; images have no text.

websiteKnowledge_read

Read a bounded line range from a project context document. Read short relevant documents directly; search large documents first. Do not reread sufficient search passages.

websiteKnowledge_search

Find evidence across selected project context documents. Batch independent queries; use passages directly when sufficient. Results merge overlapping text and include source ranges and zero-based query…

websiteKnowledge_view

Returns one private PNG, JPEG, or WebP context resource.

websiteFavicons_set

Sets the website’s current favicon to a ready PNG, SVG, or ICO image from the same website asset library. Send `assetId: null` to clear it. The change applies immediately to every site host and is ind…

websiteSourceCode_summary_get

Returns `headVersion`, `publishedVersion`, and whether the website has unpublished source changes.

websiteSourceCode_files_list

Lists file identities, sizes, and line counts without contents, sorted by type then name with cursor pagination (default 20, maximum 100). Filter by name with `nameGlob`. Defaults to head; pass `targe…

websiteSourceCode_files_read

Reads up to 50 files by name from head, published, or an explicit version. A single-file read supports line and character ranges; continue truncated reads with `nextStartCharacter` and the resolved `v…

websiteSourceCode_files_search

Finds text across every source file and returns one entry per matching line with its file name, line, and column. Call this first to locate code, then read only the files it names with websiteSourceCo…

websiteSourceCode_changes_list

Lists added, removed, and modified file identities between two version refs, defaulting from published to head. Results use cursor pagination; pin continuation requests to the resolved version numbers…

websiteSourceCode_files_diff

Returns a bounded unified diff for one file name between two version refs, defaulting from published to head.

websiteSourceCode_lease_acquire

Acquires and replaces the website's single edit lease, taking over from any other editor. Writes that pass the returned principal-bound `leaseToken` keep working until someone else takes the lease; wr…

websiteSourceCode_files_upsert

Creates or replaces one head file. Pages, components, and modules require `name`; singleton types take only `type`. Takes the edit lease when no `leaseToken` is sent and returns `changed: false` for i…

websiteSourceCode_files_strReplace

Atomically applies ordered exact-string edits to up to 50 files and 200 edits in total as one head version. Each `oldStr` must match once unless `replaceAll` is true, and any failing edit aborts the w…

websiteSourceCode_files_delete

Deletes one head file while preserving history. Address named files by `type` and `name`, and singletons by `type`; takes the edit lease when no `leaseToken` is sent.

websiteSourceCode_pages_editRoute

Rewrites and normalizes a page's `definePage` route literal. Takes the edit lease when no `leaseToken` is sent.

websiteSourceCode_metadata_edit

Replaces a page's complete metadata object when `page` is sent, otherwise the site defaults in `website_config`. Takes the edit lease when no `leaseToken` is sent.

websiteSourceCode_head_check

Runs the publish-time framework quality gate without changing source: format, typecheck, lint, build, and a server-render of every page using placeholder content synthesized from the CMS schema. Failu…

websiteSourceCode_deployment_status

Returns the preview revision, available page routes, publish availability, and build state for the selected head or published source version. Fails with 404 when `target=published` is requested for a …

websiteSourceCode_deployment_ensure

Returns an existing non-failed deployment for the selected version or builds one. Poll status when another request is already building it.

websiteSourceCode_head_publish

Validates, builds, and publishes head. Canonical formatting may create a new head first. Pass the `version` the check returned to refuse publishing a draft that changed since. Takes the edit lease whe…

websiteSourceCode_head_restore

Copies an earlier version or `published` into a new head without publishing or rewriting history. Takes the edit lease when no `leaseToken` is sent.

websiteSourceCode_published_unpublish

Takes the website offline without changing its draft source or version history. The unchanged head can be published again later. No edit lease is required.

websiteSourceCode_published_rollback

Validates and republishes an earlier version as a new head and published version, preserving history. Takes the edit lease when no `leaseToken` is sent.

websitePreview_capture

Renders one page of the site in a real browser and returns the image, so you can check layout, spacing, and responsive behaviour that source-level checks cannot see. `path` is site-relative and may in…

cms_schema_snapshot

Returns every active collection and field of a website in one call — the full content model. Collections are ordered newest first; fields are grouped by collection in display order. Use this to discov…

cms_collections_create

Creates a collection in the website’s CMS. `slug` uses lowercase letters, digits, and hyphens (max 64 characters, starting with a letter) and must be unique among the website’s active collections; `di…

cms_collections_update

Updates `displayName` (1–200 characters), `description` (up to 2,000 characters; pass `null` to clear), and/or `slug` (a rename). A slug change fails with a conflict when another active collection in …

cms_collections_delete

Soft-deletes the collection, making it and all of its items unreachable through the API; the slug becomes reusable. Refused with a conflict while any reference field in another collection targets this…

cms_fields_create

Adds a typed field at the end of the collection’s field order. `key` is lowercase snake_case (max 64 characters), must be unique in the collection, and cannot use the reserved metadata names `id`, `sl…

cms_fields_update

Updates `displayName`, `description`, `required`, `isUnique`, `example`, and (for `option` fields only) `config`; `type` and `targetCollectionId` are immutable. Setting `required: true` is rejected un…

cms_fields_delete

Permanently deletes the field and its stored values: the key is stripped from every item’s `data`, and reference or asset attachments made through the field are removed. This cannot be undone. If the …

cms_items_list

Returns the collection’s active items in manual (drag) order by default, 20 per page (max 100); paginate with `cursor` or with 1-based `page` offsets, not both. Filter with `published` (`true` / `fals…

cms_items_get

Returns one item, looked up by `itemId` or by the `collectionId` + `slug` pair (provide exactly one of the two). The `data` object is complete and schema-shaped: every currently-defined field is prese…

cms_items_backreferences_list

Lists active items that reference the target item through a `reference` or `multi_reference` field, newest first, with cursor pagination (default 20 per page, maximum 100). Each source item appears on…

cms_items_create

Creates an item at the end of the collection’s manual order. Scalar values go in `data` keyed by field key and are validated against the field types — unknown keys are rejected, required fields must b…

cms_items_update

Patches an item; omitted fields are left untouched. Keys in `data` are merged into the existing values and validated the same way as on create, while each key provided in `references`, `images`, or `f…

cms_items_setPublished

Use exactly one publication action: `published: true` publishes immediately and sets `publishedAt` to now; a future `publishAt` schedules a draft for automatic publication; `published: false` unpublis…

cms_items_delete

Soft-deletes the item: it disappears from reads, list results, and backreferences, and fields referencing it read `null` (single reference) or shrink (multi-reference). Its slug becomes reusable, and …

cms_items_restore

Restores a soft-deleted item, making it readable again and re-exposing references to and from it. Returns 404 when the item is not currently deleted.

websiteAnalytics_query_get

Returns aggregate engagement totals — page views, distinct visitors, visits, bounces, and total time in seconds — for a date range, optionally broken down by one dimension. Use it to answer "how much …

websiteAnalytics_timeseries_get

Returns one traffic time series bucketed by `unit` (`year`, `month`, `day`, `hour`, or `minute`). `series` selects which: `pageviews` returns parallel `pageviews` and `sessions` arrays with one point …

websiteAnalytics_realtime_get

Returns a compact snapshot of traffic over Umami's trailing 30-minute realtime window: total page views, distinct visitors, tracked custom events, and distinct countries, plus the snapshot timestamp. …

websiteForms_list

Returns every form with inbox and spam counts, whether the published site still references it, who it notifies, the number of inbox submissions since the caller last opened the Forms tab, and monthly …

websiteForms_submissions_list

Returns submissions newest first as a cursor-paginated page. Filter by `form` name, `status` (`inbox` by default, or `spam`), and `source` (`published` for real visitors, `draft` for test submissions …

websiteForms_submissions_get

Returns one submission with its fields in submitted order.

websiteForms_submissions_setStatus

Moves a submission between the inbox and the spam folder. Restoring to `inbox` sends the notification email if it was never sent. Spam is deleted automatically after 30 days.

websiteForms_submissions_delete

Permanently deletes one submission.

websiteForms_recipients_add

Adds an email address to one form, identified by its name from the action path. New forms notify the organization owners until changed. Organization members and website editors receive submissions imm…

websiteForms_recipients_remove

Stops emailing an address for one form. A form with no recipients emails nobody; its submissions still reach the Forms inbox.

websiteForms_recipients_resend

Issues a fresh confirmation link to a pending, failing, or stopped address.

docs_search

Search the Cactal product documentation: concepts, guides, agent workflows, platform limits, and the API reference. Returns matching Markdown excerpts with page paths; read a full page with the docs r…

docs_read

Read one Cactal documentation page as Markdown. Pass a page path from docs search results, for example "concepts/publishing" or "agents/agent-safe-publishing". Pass "llms.txt" for an index of every pa…

skills_read

Read the matching Cactal skill before acting: source-editing-workflow before source edits, design-direction for design, copywriting for words. Required skills are included. - analytics: Traffic, visi…

profile_get

Returns who this credential acts for (a stable `id`, plus `name` and `email` for a person) and the organizations it can work in. An organization lists `websites` only when access is limited to those w…

webResearch_screenshot

Renders an external public page in a real browser and returns the image, to study a reference site or the user's existing site: its layout, hierarchy, density, and feel. Consent banners and overlays a…

webResearch_probe

Renders a public page in a browser and runs measurement presets or a custom script in it, for the exact colors, type, spacing, radii, shadows, font files, images, and head metadata a screenshot cannot…

webResearch_profile

Reads one to ten of a business's own pages (its site, Google listing, Instagram, Facebook, Yelp, or any other profile) into one Markdown profile each (name, address, phone, links, hours, services and …

webResearch_viewImage

Fetches 1 to 48 public image URLs and returns the pictures; nothing is stored. Up to 4 come back full size (an SVG also returns the start of its source); more come back on contact sheets, each a grid …

websiteSecrets_list

Returns the names of a website's secrets with when each was created and last changed. Values are write-only and never returned. Server functions read secrets from `env` by name.

websiteFunctions_runs_list

Lists a website's server function runs, newest first, for `http` calls and form submissions alike. Secret values are redacted. Runs are kept for 30 days.

websiteFunctions_runs_get

Returns one run with its input, output, console output and outgoing requests. Secret values, in plain and common encoded forms, are redacted.

websiteFunctions_invoke

Runs one of the draft site's `http` server functions with the website's secrets and returns its result, exactly as page code on the draft would receive it. It makes the function's real outgoing reques…

How to use

Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://api.cactal.ai/v1/mcp

Cursor or Cline: add to your MCP config:

{
  "mcpServers": {
    "cactal": {
      "url": "https://api.cactal.ai/v1/mcp",
      "transport": "streamable-http"
    }
  }
}