
Power your agent
The publisher's own URL. Not a PlugMCP endpoint.
Host a copy with our keys and logs.
https://api.cactal.ai/v1/mcpThe Claude button above opens Claude with the name and URL filled in. You still confirm it there.
1claude mcp add --transport http ai.cactal-cactal https://api.cactal.ai/v1/mcpRun in a terminal.
1{2 "mcpServers": {3 "ai.cactal-cactal": {4 "command": "npx",5 "args": [6 "-y",7 "mcp-remote",8 "https://api.cactal.ai/v1/mcp"9 ]10 }11 }12}claude_desktop_config.json
Remote URL or a command on your machine? How the two installs differ
Run on PlugMCP
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
Launch60 tools
The website platform for AI agents. One API to build, host, and operate real websites.
1{2 "mcpServers": {3 "ai.cactal-cactal": {4 "url": "https://api.cactal.ai/v1/mcp",5 "headers": {}6 }7 }8}| Tool | What it does |
|---|---|
| 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 acting through a user OAuth connection. Never include credentials, secrets, raw sensitive user content |
| 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 it to combine both; supports `sort` by `createdAt`, `updatedAt`, or `name` and case-insensitive `se |
| 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 caller can manage the website’s CMS schema and domains. Websites in the trash remain retrievable by |
| 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-in naming request attempts to replace on its next run together with a matching available slug and p |
| 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 their current verification status and the DNS records still expected. |
| 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); the request fails with 403 `custom_domains_disabled` otherwise. Adding or removing domains on an |
| 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 is supported when it forwards the verification request to Cactal. `failureMessage` distinguishes a mi |
| 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 query. Only `active` custom domains can be made primary — the request fails with 409 otherwise. Any |
| 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 deregistration fails, the domain stays in `removing` status and a background sweep retries until it is gone. Pl |
| 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 hyphens, and it may not be one of the labels Cactal reserves. The change takes effect immediately, on pub |
| 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 broad MIME family: image, video, audio, font, or document), or `search`, which prefix-matches each t |
| 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. MCP clients that render images also receive the image. |
| 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, data, documents, and archives are refused. Images, fonts, and PDFs must parse as what they claim, ho |
| 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 serving the file. |
| 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 request. Read them before working on a website. |
| 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 that no longer matches fails with `validation` and returns the current content. |
| 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 logs or anything derivable from the website source. A passage that no longer matches fails with `val |
| 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 to keep; your own findings belong in agent notes. |
| 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 queryIndexes into queries. matched reports a hit; truncated means evidence may be omitted, clipped means |
| 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 independent of source drafts and publishing. Read the current favicon from the `faviconUrl` field on `G |
| 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 `target=published` or an explicit `version`, and pin continuation requests to the resolved response versio |
| 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 `version`. |
| 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 websiteSourceCode.files.read. `pattern` is literal text unless `isRegex` is set, and matching is line by line, so a |
| 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; writes without a token take the lease automatically unless another editor is still working: the Cactal |
| 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 identical content. |
| 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 whole call. Set `dryRun` to validate and count replacements without committing. Takes the edit lease |
| 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. Failures return `ok: false` with diagnostics, and pages that compiled but threw while rendering in `rende |
| 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 never-published website. |
| 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 when no `leaseToken` is sent. |
| 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 include a query string, so dynamic routes are captured with real values rather than placeholders. Focu |
| 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 discover the schema before reading or writing items. |
| 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; `displayName` is 1–200 characters and `description` up to 2,000. Optionally pass `fields` (up to 100, s |
| 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 the website already uses it, and when the website has a published version the rename is validated ag |
| 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 collection — delete those fields first. If the website has a published version, the deletion is val |
| 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`, `slug`, `publishedAt`, `publishAt`, `createdAt`, `updatedAt`, or `position`; `type` is immutable after |
| 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 until every active item has a valid value for the field. Setting `isUnique: true` enforces uniqueness |
| 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 website has a published version, the deletion is validated against the published site’s content quer |
| 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` / `false`) and a JSON-encoded `filter` map of `{ fieldKey: { operator: value } }` — operators `eq`, `neq`, |
| 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 present and missing optional values read as `null`. `depth` (0–3, default 0) embeds referenced items in p |
| 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 once even when multiple fields point to the target. `depth` (0–3, default 0) controls reference hydrat |
| 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 be present, `plain_text` and `markdown` are capped at 1,048,576 bytes (markdown must not contain raw |
| 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 `files` replaces that field’s value wholesale — pass `null` (or `[]` for multi-valued fields) to clear |
| 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` unpublishes an item or cancels its schedule. A published item must be unpublished before it can be scheduled |
| 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 incoming references are preserved so the item can be restored. |
FAQ
Copy the http config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
No required environment variable is listed on this record.
Cactal is reached over HTTP.
Last checked 2026-11-11. The website platform for AI agents. One API to build, host, and operate real websites.
From the publisher
README is not crawled yet. No repository on file.
The website platform for AI agents. One API to build, host, and operate real websites.
© 2026 MCP Directory.