Available MCP Tools
Complete overview of all OptimoCMS MCP tools with parameters and examples.
Available MCP Tools
OptimoCMS provides 25 MCP tools across 8 categories. Every tool is available in Cursor, Claude Desktop, and Lovable.
Sites
list_sites
List all websites accessible with the current API key.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | No | Max sites to return (default 25, max 100) |
status | string | No | Filter by status: active, paused, building, error |
Example prompt: "Show all my active sites."
get_site
Get detailed information about a specific website including design tokens, domain, and status.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
Example prompt: "What are the details of site site_abc123?"
Pages
list_pages
List all pages for a website with titles, slugs, and status.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
limit | number | No | Max pages to return (default 25, max 100) |
status | string | No | Filter: published, draft, archived, all |
Example prompt: "Show all published pages of site site_abc123."
get_page
Get full page detail including content blocks, SEO metadata, and timestamps.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
pageId | string | Yes | The page ID |
Example prompt: "Get the content of page page_xyz789 on site site_abc123."
create_page
Create a new page. Requires write permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
title | string | Yes | Page title |
slug | string | No | URL slug (auto-generated from title if omitted) |
blocks | array | No | Content blocks |
Example prompt: "Create an 'About Us' page on site site_abc123."
update_page
Update an existing page. Can change title, slug, blocks, SEO, or status.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
pageId | string | Yes | The page ID |
title | string | No | New title |
slug | string | No | New URL slug |
status | string | No | published, draft, archived |
blocks | array | No | New content blocks (replaces all existing) |
seo | object | No | SEO metadata: title, description, ogImage, noIndex |
Example prompt: "Set page page_xyz789 to draft."
Publishing
publish_site
Publish (deploy) a website to production. Rate limited: max 1 deploy per 5 minutes per site. Requires publish permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
Example prompt: "Publish site site_abc123."
Media
search_media
Search the media library by filename or alt text. Optionally filter by MIME type.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
query | string | Yes | Search query (matched against filename and alt text) |
mimeType | string | No | Filter by MIME type prefix, e.g. image/ or video/ |
limit | number | No | Max results (default 25, max 100) |
Example prompt: "Find all images with 'logo' in the name on site site_abc123."
Analytics
get_analytics
Get analytics summary: pageviews, unique visitors, average session duration, bounce rate, and top pages.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
period | string | No | Period: last7d, last30d, last90d (default: last30d) |
Example prompt: "How has site site_abc123 performed in the last 7 days?"
AI
generate_page
Generate a new page using AI from a text prompt. Requires ai permission. Rate limited: 2 calls per minute. Cost: ~€0.30 per call.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
prompt | string | Yes | Description of the page to generate |
language | string | No | Content language: nl, en, de, fr, es |
style | string | No | Visual style hint: minimalist, corporate, playful etc. |
Example prompt: "Generate a modern landing page for a bakery in minimalist style."
translate_page
Translate all content blocks of a page to another language. Requires ai permission. Rate limited: 5 calls per minute.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
pageId | string | Yes | The page ID |
targetLanguage | string | Yes | Target language: nl, en, de, fr, es |
Example prompt: "Translate page page_xyz789 to German."
assist_content
AI-powered content improvement for an existing page. Describe what to change. Requires ai permission. Rate limited: 5 calls per minute.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
pageId | string | Yes | The page ID |
instruction | string | Yes | What to change (free-text instruction) |
Example prompt: "Make the tone of page page_xyz789 more professional."
generate_template
Generate a reusable component template from a description. Requires ai permission. Rate limited: 2 calls per minute.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID (for context like design tokens) |
prompt | string | Yes | Template description |
style | string | No | Visual style hint |
Example prompt: "Create a pricing table template with 3 tiers."
generate_template_variants
Generate style variants of an existing template. Produces multiple visual variations. Requires ai permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
templateId | string | Yes | The base template ID |
count | number | No | Number of variants (default 3, max 5) |
styles | string[] | No | Specific style names, e.g. ["dark", "playful", "corporate"] |
Example prompt: "Create 3 variants of template tmpl_abc: dark, playful, and corporate."
Import
preview_import
Crawl a website URL and return a preview of what the import would produce. Does NOT create a site. Requires ai permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | The website URL to preview |
language | string | No | Target language: nl, en, de, fr, es (default: nl) |
Example prompt: "Preview what would be imported from https://example.com."
import_website
Import a website by URL into OptimoCMS. Crawls the site, detects layout, maps sections to components, and creates a new site. Requires ai permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | The website URL to import |
language | string | No | Target language (default: nl) |
siteName | string | No | Name for the new site |
siteId | string | No | Existing site ID to overwrite |
selectedSubPages | string[] | No | URLs of sub-pages to include |
importBlogPosts | boolean | No | Import WordPress blog posts (default: true) |
hdImport | boolean | No | HD Import with vision-guided refinement (professional+ tier) |
Example prompt: "Import https://example.com as 'Example Site' with all sub-pages."
Booking
get_available_slots
Get available booking time slots for a specific date. Requires verticals permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
date | string | Yes | Date in YYYY-MM-DD format |
serviceId | string | No | Specific service ID |
Example prompt: "What time slots are available on 2026-06-15 for site site_abc123?"
create_booking
Create a new booking. Check available slots first. Requires verticals permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
serviceId | string | Yes | The service ID |
date | string | Yes | Date in YYYY-MM-DD format |
startTime | string | Yes | Start time in HH:mm format |
customerName | string | Yes | Customer full name |
customerEmail | string | Yes | Customer email address |
customerPhone | string | No | Customer phone number |
staffId | string | No | Staff member ID |
Example prompt: "Book an appointment for John Smith on 2026-06-15 at 14:00."
list_bookings
List bookings, optionally filtered by status or date. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
status | string | No | Filter: pending, confirmed, cancelled, completed |
date | string | No | Filter by date (YYYY-MM-DD) |
limit | number | No | Max results (default 25, max 100) |
Example prompt: "Show all confirmed bookings for today."
E-commerce
list_products
List products in the site shop. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
limit | number | No | Max results (default 25, max 100) |
category | string | No | Filter by category |
Example prompt: "Show all products in the 'Bread' category of site site_abc123."
create_product
Create a new product. Price in cents (e.g. 1999 = €19.99). Requires verticals permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
title | string | Yes | Product name |
priceCents | number | Yes | Price in cents |
description | string | No | Product description |
category | string | No | Category |
stock | number | No | Stock quantity (null = unlimited) |
Example prompt: "Add a product 'Sourdough Bread' for €4.50 with 50 in stock."
update_product
Update an existing product. Only provided fields are changed. Requires verticals permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
productId | string | Yes | The product ID |
title | string | No | New name |
priceCents | number | No | New price in cents |
description | string | No | New description |
category | string | No | New category |
active | boolean | No | Active/inactive |
stock | number | No | New stock quantity |
Example prompt: "Increase the price of product prod_123 to €5.99."
list_orders
List shop orders. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
status | string | No | Filter: pending, paid, shipped, delivered, completed, cancelled, refunded |
limit | number | No | Max results (default 25, max 100) |
Example prompt: "Show all unpaid orders for site site_abc123."
Loyalty
get_member_status
Get loyalty program member status including points balance and tier. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
memberId | string | Yes | The member ID |
Example prompt: "How many points does member mem_456 have on site site_abc123?"
earn_points
Award loyalty points to a member. Requires verticals permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
memberId | string | Yes | The member ID |
points | number | Yes | Number of points (positive integer) |
description | string | Yes | Reason for awarding |
Example prompt: "Give member mem_456 100 points for a €50 purchase."
list_rewards
List available loyalty rewards. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
limit | number | No | Max results (default 25, max 100) |
Example prompt: "What rewards can members redeem on site site_abc123?"
Reviews
list_reviews
List reviews, optionally filtered by status. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
status | string | No | Filter: all, pending, approved, rejected |
limit | number | No | Max results (default 25, max 100) |
Example prompt: "Show all pending reviews for site site_abc123."
Jobs
list_jobs
List job vacancies. Requires verticals or read permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
status | string | No | Filter: draft, review, published, paused, closed, filled, archived |
limit | number | No | Max results (default 25, max 100) |
Example prompt: "Show all open vacancies for site site_abc123."
create_job
Create a new job vacancy in draft status. Requires verticals permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
siteId | string | Yes | The site ID |
title | string | Yes | Job title |
description | string | No | Full description (supports markdown) |
location | string | No | Location (e.g. "Amsterdam" or "Remote") |
department | string | No | Department |
jobType | string | No | full_time, part_time, contract, internship, volunteer, temporary |
Example prompt: "Create a job posting for Senior Frontend Developer in Amsterdam."
Permissions per tool
| Tool | Required permission |
|---|---|
list_sites, get_site, list_pages, get_page | read |
create_page, update_page | write |
publish_site | publish |
search_media | read |
get_analytics | read |
generate_page, translate_page, assist_content, generate_template, generate_template_variants | ai |
preview_import, import_website | ai |
get_available_slots, create_booking, list_bookings | verticals |
list_products, create_product, update_product, list_orders | verticals |
get_member_status, earn_points, list_rewards | verticals |
list_reviews | verticals or read |
list_jobs, create_job | verticals |