What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
Extensibility
The Agility CMS MCP Server connects AI assistants directly to your Agility CMS instances, letting you manage content through natural-language conversations. It implements the Model Context Protocol (MCP) — an open standard supported by Claude, ChatGPT, GitHub Copilot, Cursor, Windsurf, Gemini, and other MCP-compatible clients.
Ask your AI assistant to model content, create pages, bulk-edit items, audit your schema, publish updates, or run a multilingual migration — and it calls the right Agility Management APIs on your behalf, always within your existing permissions.
https://mcp.agilitycms.com/api/mcpVersion 2.0 grew the toolset from 20 to 27 tools and added full authoring and publishing workflows, with a human-in-the-loop confirmation model for anything destructive. Five more tools have been added since then (dedicated publish and unpublish tools for content and pages, plus save_page_model), so the server now exposes 32 tools.
publish_content and unpublish_content take content items live or offline, and publish_page and unpublish_page do the same for pages. manage_content_workflow and manage_page_workflow approve, decline, or request approval for content items and pages.save_page_model creates or updates a page model and its content zones.delete_content_item, delete_page, and delete_media tools, each gated behind explicit confirmation.list_media lists assets (paged) and returns the Edge (CDN) URL; pairs with the existing upload flow and the new delete_media.get_current_user is a read-only "whoami" that confirms which user the active token authenticates as (it never returns credentials).DELETE" prompt in your own UI.save_page now validates zone names against the page model (instead of silently dropping mismatched components), linked-content reference names are normalized to their canonical case, and permission denials surface as clear messages without ever leaking your token.There are no breaking changes to the tools that existed in 1.0. Existing setups keep working — you simply gain the new tools.
The server exposes 32 tools across five categories. Each tool is annotated so MCP clients know whether it only reads data or can modify your instance. Actions that take content offline or remove data (unpublish and delete) are annotated as destructive and can ask for confirmation before they run. See Confirmation for destructive actions.
| Tool | What it does |
|---|---|
get_available_instances | Lists the Agility instances you can access |
get_current_user | Identifies the user the current token authenticates as (read-only whoami) |
get_locales | Returns the locale codes configured for an instance |
get_containers | Lists content containers (content lists and single items) |
| Tool | What it does |
|---|---|
get_content_models | Lists content model definitions |
get_component_models | Lists component (page module) model definitions, including Agility's built-in components |
get_content_model_details | Returns the full field schema for a content model |
get_component_model_details | Returns the full field schema for a component model (always includes the numeric model ID) |
save_content_model | Creates or updates a content model |
save_component_model | Creates or updates a component model |
save_page_model | Creates or updates a page model and its content zones |
save_container | Creates or updates a container |
| Tool | What it does |
|---|---|
get_content_items | Retrieves a list of items from a container, with filtering and pagination |
get_content_item | Fetches one or more items by ID (batch supported) |
save_content_items | Creates or updates one or more content items in a single batch. Returns each item's contentID and a ready-made editor URL. |
publish_content | Publishes one or more content items (takes them live) |
unpublish_content | Unpublishes one or more content items (takes them offline) (destructive) |
manage_content_workflow | Approves, declines, or requests approval for content items |
delete_content_item | Deletes one or more content items (confirmed — type DELETE) |
| Tool | What it does |
|---|---|
get_sitemaps | Lists all sitemaps (channels) for an instance |
get_sitemap | Retrieves a specific sitemap, with depth/path filtering and flat mode |
get_page | Retrieves a page by ID, including zones, SEO, and dynamic config |
get_page_models | Lists available page models (templates), with zone definitions |
save_page | Creates or updates a page — static, dynamic, folder, or link (validates zone names) |
reorder_page_modules | Reorders the components within a page zone |
publish_page | Publishes one or more pages (takes them live) |
unpublish_page | Unpublishes one or more pages (takes them offline) (destructive) |
manage_page_workflow | Approves, declines, or requests approval for pages |
delete_page | Deletes one or more pages (confirmed — type DELETE) |
| Tool | What it does |
|---|---|
initialize_media_upload | Starts a media upload and returns a temporary signed URL to POST the file to |
list_media | Lists assets in the media library (paged), returning the Edge (CDN) URL — find a mediaID, spot duplicates |
delete_media | Deletes a media asset by mediaID (confirmed — type DELETE) |
Actions that take content offline or remove data are gated:
| Action | Confirmation |
|---|---|
delete_content_item, delete_media, delete_page | Type DELETE to proceed |
unpublish_content, unpublish_page | Annotated as destructive, so your client may prompt before running it. Reversible with publish_content / publish_page. |
publish_content, publish_page | Not annotated as destructive. Runs under your Agility permissions and is reversible with unpublish_content / unpublish_page. |
manage_content_workflow / manage_page_workflow (approve / decline / request-approval) | Not gated (low risk) |
How an action is confirmed depends on what your MCP client supports (negotiated at connection):
DELETE") in your own UI — a gate the AI assistant can't satisfy on its own.humanConfirmed: false).The hosted server uses the streamable-HTTP endpoint https://mcp.agilitycms.com/api/mcp. On first connection your client opens a browser window to authenticate with Agility via OAuth — no API keys or passwords to copy around.
Fastest path: visit mcp.agilitycms.com/instructions for the Add to Claude button, one-click install buttons (VS Code, Cursor, and more), and copy-paste setup for every supported client.
For supported editors, a single click adds the hosted server and kicks off the OAuth sign-in:
vscode:mcp/install deep linkvscode-insiders:mcp/install deep linkcursor://anysphere.cursor-deeplink/mcp/install deep linkhttps://lmstudio.ai/install-mcp deep linkGrab the buttons from mcp.agilitycms.com/instructions. For everything else, use the manual steps below.
Agility CMS is an official connector in Claude's connector directory, so there is no URL to paste.
Team or Enterprise workspaces: an admin enables the Agility CMS connector from the workspace admin settings. That makes it available to everyone but does not connect anyone: each member still signs in to Agility individually, and their own Agility permissions govern every call. There is no shared or service credential.
Adding it manually: if the directory entry hasn't reached you yet, open Customize → Connectors → Add and add a custom connector:
Agility CMShttps://mcp.agilitycms.com/api/mcpclaude mcp add --transport http "Agility-CMS" https://mcp.agilitycms.com/api/mcp
Use the one-click VS Code badge, or set it up manually:
Ctrl+Shift+P on Windows/Linux, Cmd+Shift+P on Mac).https://mcp.agilitycms.com/api/mcpAdd the server with a single command:
gemini mcp add --transport http agility-cms https://mcp.agilitycms.com/api/mcp
Or add it manually to ~/.gemini/settings.json:
{
"mcpServers": {
"agility-cms": {
"httpUrl": "https://mcp.agilitycms.com/api/mcp"
}
}
}
On first connection, follow the OAuth flow to grant access. Run /mcp inside Gemini CLI to confirm the Agility tools are loaded.
Agility CMShttps://mcp.agilitycms.com/api/mcpAgility CMS MCPhttps://mcp.agilitycms.com/api/mcpAgility CMS MCPhttps://mcp.agilitycms.com/api/mcpChatGPT now calls connectors apps. You add a custom MCP app through Developer mode:
Agility CMShttps://mcp.agilitycms.com/api/mcpNote: Custom MCP apps are available on the web to Pro, Plus, Business, Enterprise, and Education accounts.
The server uses OAuth 2.0 with short-lived access tokens. You sign in through Agility's standard login, and the server acts strictly within your existing permission boundaries — it can only see and change what your account is allowed to. No passwords are ever stored by the MCP server.
The model and content tools understand Agility's full field catalog, including:
When creating or updating models, include all relevant field properties — undefined properties are treated as empty or null.
Media uploads use a secure signed-URL flow rather than embedding file bytes in the conversation:
initialize_media_upload to receive a temporary uploadUrl (valid for 5 minutes).POST the file to that URL as multipart form-data (field name file).save_content_items or save_page.Use list_media to browse the library (and spot duplicates before re-uploading), and delete_media to remove an asset by its mediaID.
save_content_items always saves to the instance's default workflow state (typically Staging). A state value passed on save is not honored, and the tool flags this in its response. Saved items are not live until you publish them: use publish_content to take content live and unpublish_content to take it offline. Pages follow the same pattern: save_page saves to Staging, and publish_page / unpublish_page take pages live or offline. To move content items or pages through approval, use manage_content_workflow or manage_page_workflow (approve, decline, request-approval).
For User Selectable linked-content fields, the stored value is the linked container's reference name. The editor matches that name case-sensitively, so the server normalizes whatever case you supply to the container's canonical case from get_containers on save (and returns the canonical case on read) — preventing the "dropdown renders blank" problem.
/pricing landing page with a hero, a 3-up feature grid, and a CTA."