# π Ultimate Elementor MCP - API Reference
Complete technical reference for all tools and services.
---
## π **Table of Contents**
- [Tool Categories](#tool-categories)
- [WordPress Tools API](#wordpress-tools-api)
- [Elementor Tools API](#elementor-tools-api)
- [File Operations API](#file-operations-api)
- [Configuration Tools API](#configuration-tools-api)
- [Debugging Tools API](#debugging-tools-api)
- [Type Definitions](#type-definitions)
- [Error Codes](#error-codes)
---
## ποΈ **Tool Categories**
| Category | Tools | Description |
|----------|-------|-------------|
| **WordPress** | 16 | Posts, pages, media, users, taxonomies |
| **Elementor** | 25 | Data management, element creation, manipulation |
| **File Operations** | 8 | Export, import, backup, restore |
| **Configuration** | 6 | Mode management, validation, testing |
| **Debugging** | 5 | Error stats, logging, health checks |
| **Total** | **60** | Complete WordPress & Elementor management |
---
## π§ **WordPress Tools API**
### **Posts**
#### `get_posts`
**Description**: Retrieve WordPress posts with optional filtering
**Parameters**:
```typescript
{
per_page?: number; // Default: 10
status?: string; // Default: 'publish'
search?: string; // Search term
author?: number; // Author ID
categories?: number[]; // Category IDs
tags?: number[]; // Tag IDs
}
```
**Returns**:
```typescript
Array<{
id: number;
title: { rendered: string };
content: { rendered: string };
status: string;
author: number;
// ... other WordPress post fields
}>
```
**Example**:
```
Get the 5 most recent published posts
```
---
#### `get_post`
**Description**: Get single post by ID
**Parameters**:
```typescript
{
id: number; // Post ID (required)
}
```
**Returns**:
```typescript
{
id: number;
title: { rendered: string };
content: { rendered: string };
// ... full post data
}
```
**Example**:
```
Get post ID 123
```
---
#### `create_post`
**Description**: Create new WordPress post
**Parameters**:
```typescript
{
title: string; // Required
content?: string; // Post content
status?: string; // Default: 'draft'
excerpt?: string; // Post excerpt
author?: number; // Author ID
categories?: number[]; // Category IDs
tags?: number[]; // Tag IDs
featured_media?: number; // Featured image ID
}
```
**Returns**:
```typescript
{
id: number;
title: { rendered: string };
link: string;
// ... created post data
}
```
**Example**:
```
Create a blog post titled "10 WordPress Tips" with introductory content, set status to publish
```
---
#### `update_post`
**Description**: Update existing post
**Parameters**:
```typescript
{
id: number; // Post ID (required)
title?: string; // New title
content?: string; // New content
status?: string; // New status
excerpt?: string; // New excerpt
// ... any other WordPress post fields
}
```
**Returns**:
```typescript
{
id: number;
title: { rendered: string };
// ... updated post data
}
```
**Example**:
```
Update post ID 456 to change the title to "15 WordPress Tips"
```
---
### **Pages**
#### `get_pages`
**Description**: Retrieve WordPress pages with optional filtering
**Parameters**:
```typescript
{
per_page?: number; // Default: 10
status?: string; // Default: 'publish'
search?: string; // Search term
parent?: number; // Parent page ID
}
```
**Returns**: Array of page objects
---
#### `create_page`
**Description**: Create new WordPress page
**Parameters**:
```typescript
{
title: string; // Required
content?: string; // Page content
status?: string; // Default: 'draft'
parent?: number; // Parent page ID
template?: string; // Page template
}
```
**Returns**: Created page object with ID
---
#### `update_page`
**Description**: Update existing page
**Parameters**:
```typescript
{
id: number; // Page ID (required)
title?: string; // New title
content?: string; // New content
status?: string; // New status
parent?: number; // New parent ID
template?: string; // New template
}
```
---
#### `delete_page`
**Description**: Delete a page
**Parameters**:
```typescript
{
id: number; // Page ID (required)
force?: boolean; // Force delete (bypass trash)
}
```
---
#### `list_all_content`
**Description**: List all pages and posts with Elementor status
**Returns**:
```typescript
Array<{
id: number;
title: string;
type: 'post' | 'page';
status: string;
elementor_status: 'β
' | 'β οΈ' | 'β';
elementor_edit_mode: boolean;
link: string;
}>
```
**Example**:
```
Show me all content with their Elementor status
```
---
### **Media**
#### `get_media`
**Description**: List media files
**Parameters**:
```typescript
{
per_page?: number; // Default: 10
media_type?: string; // 'image', 'video', 'audio', etc.
search?: string; // Search term
}
```
---
#### `upload_media`
**Description**: Upload media file
**Parameters**:
```typescript
{
file: string; // File path (required)
title?: string; // Media title
alt_text?: string; // Alt text for images
caption?: string; // Caption
description?: string; // Description
}
```
**Returns**: Uploaded media object with ID and URL
---
### **Users**
#### `get_users`
**Description**: List WordPress users
**Parameters**:
```typescript
{
per_page?: number; // Default: 10
roles?: string; // Filter by role
search?: string; // Search term
}
```
---
#### `get_user`
**Description**: Get user by ID
**Parameters**:
```typescript
{
id: number; // User ID (required)
}
```
---
### **Taxonomies**
#### `get_categories`
**Description**: List post categories
**Parameters**:
```typescript
{
per_page?: number; // Default: 10
hide_empty?: boolean; // Hide empty categories
parent?: number; // Parent category ID
}
```
---
#### `get_tags`
**Description**: List post tags
**Parameters**:
```typescript
{
per_page?: number; // Default: 10
hide_empty?: boolean; // Hide empty tags
}
```
---
## π¨ **Elementor Tools API**
### **Data Operations**
#### `get_elementor_data`
**Description**: Get complete Elementor data for a page
**Parameters**:
```typescript
{
post_id: number; // Page/Post ID (required)
}
```
**Returns**:
```typescript
Array<ElementorElement> // Array of Elementor sections/containers
```
---
#### `update_elementor_data`
**Description**: Update Elementor data for a page
**Parameters**:
```typescript
{
post_id: number; // Page/Post ID (required)
elementor_data: string | Array<ElementorElement>; // JSON string or array
}
```
**Returns**: Updated page object
---
#### `get_elementor_data_chunked`
**Description**: Get Elementor data in chunks for large pages
**Parameters**:
```typescript
{
post_id: number; // Page/Post ID (required)
chunk_size?: number; // Elements per chunk (default: 10)
}
```
**Returns**:
```typescript
{
chunks: Array<Array<ElementorElement>>;
totalElements: number;
totalChunks: number;
}
```
---
#### `backup_elementor_data`
**Description**: Create quick backup of Elementor data
**Parameters**:
```typescript
{
post_id: number; // Page/Post ID (required)
}
```
**Returns**:
```typescript
{
postId: number;
elementorData: Array<ElementorElement>;
backupTimestamp: string;
version: string;
}
```
---
#### `clear_elementor_cache`
**Description**: Clear Elementor cache
**Parameters**:
```typescript
{
post_id?: number; // Optional: Clear cache for specific page
}
```
---
### **Element Creation**
#### `create_section`
**Description**: Create new Elementor section
**Parameters**:
```typescript
{
settings?: {
layout?: 'boxed' | 'full_width';
background_background?: 'classic' | 'gradient';
background_color?: string;
background_color_b?: string;
padding?: { unit: string; top: string; right: string; bottom: string; left: string };
// ... any Elementor section settings
}
}
```
**Returns**: ElementorSection object
---
#### `create_column`
**Description**: Create new Elementor column
**Parameters**:
```typescript
{
settings?: {
_column_size?: number; // Width percentage
content_position?: 'top' | 'center' | 'bottom';
text_align?: 'left' | 'center' | 'right';
background_color?: string;
// ... any Elementor column settings
}
}
```
**Returns**: ElementorColumn object
---
#### `create_container`
**Description**: Create new Elementor container (Flexbox)
**Parameters**:
```typescript
{
settings?: {
flex_direction?: 'row' | 'column';
flex_wrap?: 'wrap' | 'nowrap';
justify_content?: 'flex-start' | 'center' | 'flex-end' | 'space-between';
align_items?: 'flex-start' | 'center' | 'flex-end' | 'stretch';
gap?: { unit: string; size: number };
// ... any Elementor container settings
}
}
```
**Returns**: ElementorContainer object
---
#### `create_heading`
**Description**: Create heading widget
**Parameters**:
```typescript
{
settings?: {
title?: string; // Heading text
header_size?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
align?: 'left' | 'center' | 'right';
title_color?: string;
typography_typography?: 'custom';
typography_font_size?: { unit: string; size: number };
// ... any Elementor heading settings
}
}
```
**Returns**: ElementorWidget (heading)
---
#### `create_text`
**Description**: Create text editor widget
**Parameters**:
```typescript
{
settings?: {
editor?: string; // HTML content
text_color?: string;
typography_font_size?: { unit: string; size: number };
// ... any Elementor text settings
}
}
```
---
#### `create_button`
**Description**: Create button widget
**Parameters**:
```typescript
{
settings?: {
text?: string; // Button text
link?: {
url: string;
is_external: boolean;
nofollow: boolean;
};
align?: 'left' | 'center' | 'right';
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
background_color?: string;
text_color?: string;
border_radius?: { unit: string; size: number };
// ... any Elementor button settings
}
}
```
---
#### `create_image`
**Description**: Create image widget
**Parameters**:
```typescript
{
settings?: {
image?: {
id: number; // Media ID
url: string;
};
image_size?: 'thumbnail' | 'medium' | 'large' | 'full';
align?: 'left' | 'center' | 'right';
caption?: string;
link_to?: 'none' | 'file' | 'custom';
// ... any Elementor image settings
}
}
```
---
### **Element Manipulation**
#### `find_element_by_id`
**Description**: Find element in page structure by ID
**Parameters**:
```typescript
{
elementor_data: Array<ElementorElement>; // Page data
element_id: string; // Element ID to find
}
```
**Returns**: ElementorElement or null
---
#### `update_element_settings`
**Description**: Update settings for specific element
**Parameters**:
```typescript
{
elementor_data: Array<ElementorElement>; // Page data
element_id: string; // Element to update
new_settings: object; // New settings
}
```
**Returns**: Updated elementor_data array
---
#### `delete_element`
**Description**: Delete element from page
**Parameters**:
```typescript
{
elementor_data: Array<ElementorElement>; // Page data
element_id: string; // Element to delete
}
```
**Returns**: Updated elementor_data array
---
#### `clone_element`
**Description**: Clone/duplicate element
**Parameters**:
```typescript
{
element: ElementorElement; // Element to clone
}
```
**Returns**: Cloned element with new ID
---
#### `extract_page_structure`
**Description**: Get page structure summary
**Parameters**:
```typescript
{
elementor_data: Array<ElementorElement>; // Page data
}
```
**Returns**:
```typescript
{
totalSections: number;
totalColumns: number;
totalContainers: number;
totalWidgets: number;
widgetTypes: { [type: string]: number };
sections: Array<{
id: string;
type: string;
columns: number;
widgets: number;
}>;
}
```
---
## π **File Operations API**
### `export_elementor_data`
**Description**: Export Elementor data to JSON file
**Parameters**:
```typescript
{
post_id: number; // Page/Post ID
elementor_data?: Array<ElementorElement>; // Data to export (optional, fetched if not provided)
file_path?: string; // Custom file path (optional)
include_metadata?: boolean; // Include page metadata (default: true)
compress?: boolean; // Compress output (default: false)
}
```
**Returns**:
```typescript
{
success: boolean;
filePath: string;
size: number;
checksum: string;
compressed: boolean;
}
```
---
### `import_elementor_data`
**Description**: Import Elementor data from file
**Parameters**:
```typescript
{
file_path: string; // File to import (required)
post_id?: number; // Page to apply to (optional)
validate?: boolean; // Validate data (default: true)
}
```
**Returns**:
```typescript
{
success: boolean;
data: Array<ElementorElement>;
validated: boolean;
postId?: number;
}
```
---
### `backup_page_data`
**Description**: Create versioned backup of page
**Parameters**:
```typescript
{
post_id: number; // Page/Post ID
elementor_data?: Array<ElementorElement>; // Data to backup
label?: string; // Backup label
}
```
**Returns**:
```typescript
{
success: boolean;
backupId: string;
filePath: string;
timestamp: string;
label: string;
}
```
---
### `restore_page_data`
**Description**: Restore page from backup
**Parameters**:
```typescript
{
backup_id: string; // Backup ID (required)
post_id?: number; // Page to restore to (optional)
}
```
**Returns**:
```typescript
{
success: boolean;
data: Array<ElementorElement>;
backupId: string;
postId?: number;
}
```
---
## βοΈ **Configuration Tools API**
### `get_configuration`
**Description**: Get current MCP configuration
**Parameters**: None
**Returns**:
```typescript
{
mode: 'essential' | 'standard' | 'advanced' | 'full';
features: {
basicWordPressOperations: boolean;
basicElementorOperations: boolean;
sectionContainerCreation: boolean;
widgetAddition: boolean;
elementManagement: boolean;
pageStructure: boolean;
performanceOptimization: boolean;
advancedElementOperations: boolean;
templateManagement: boolean;
globalSettings: boolean;
customFieldsIntegration: boolean;
revisionHistory: boolean;
};
totalEnabledFeatures: number;
}
```
---
### `test_wordpress_connection`
**Description**: Test WordPress API connection
**Parameters**: None
**Returns**:
```typescript
{
success: boolean;
baseUrl: string;
apiAvailable: boolean;
authenticated: boolean;
wordpressVersion?: string;
elementorInstalled?: boolean;
error?: string;
}
```
---
## π **Debugging Tools API**
### `get_error_statistics`
**Description**: Get error statistics and tracking
**Returns**:
```typescript
{
totalErrors: number;
byCategory: { [category: string]: number };
byCode: { [code: string]: number };
recoverableErrors: number;
nonRecoverableErrors: number;
errorRate: number;
recentErrors: Array<{
message: string;
category: string;
code: string;
timestamp: string;
}>;
}
```
---
### `health_check`
**Description**: Perform comprehensive health check
**Returns**:
```typescript
{
status: 'healthy' | 'degraded' | 'unhealthy';
checks: {
wordpressConnection: boolean;
elementorAvailable: boolean;
fileOperations: boolean;
configuration: boolean;
};
details: object;
timestamp: string;
}
```
---
## π **Type Definitions**
### **ElementorElement**
```typescript
type ElementorElement = ElementorSection | ElementorColumn | ElementorContainer | ElementorWidget;
interface ElementorSection {
id: string;
elType: 'section';
settings: ElementorSettings;
elements: Array<ElementorColumn>;
}
interface ElementorColumn {
id: string;
elType: 'column';
settings: ElementorSettings;
elements: Array<ElementorWidget>;
}
interface ElementorContainer {
id: string;
elType: 'container';
settings: ElementorSettings;
elements: Array<ElementorElement>;
}
interface ElementorWidget {
id: string;
elType: 'widget';
widgetType: string;
settings: ElementorSettings;
}
interface ElementorSettings {
[key: string]: any; // Flexible settings object
}
```
---
### **WordPress Types**
```typescript
interface WordPressPost {
id: number;
title: { rendered: string };
content: { rendered: string };
excerpt: { rendered: string };
status: string;
author: number;
date: string;
modified: string;
slug: string;
link: string;
categories: number[];
tags: number[];
meta: { [key: string]: any };
}
interface WordPressPage extends WordPressPost {
parent: number;
template: string;
}
interface WordPressMedia {
id: number;
title: { rendered: string };
source_url: string;
media_type: string;
mime_type: string;
alt_text: string;
}
```
---
## β οΈ **Error Codes**
### **Error Categories**
```typescript
enum ErrorCategory {
AUTHENTICATION = 'AUTHENTICATION',
VALIDATION = 'VALIDATION',
NETWORK = 'NETWORK',
WORDPRESS_API = 'WORDPRESS_API',
ELEMENTOR_DATA = 'ELEMENTOR_DATA',
FILE_OPERATION = 'FILE_OPERATION',
CONFIGURATION = 'CONFIGURATION',
INTERNAL = 'INTERNAL'
}
```
### **Common Error Codes**
| Code | Category | Description | Recoverable |
|------|----------|-------------|-------------|
| `AUTH_FAILED` | Authentication | Invalid credentials | Yes |
| `INVALID_URL` | Validation | Invalid URL format | No |
| `NETWORK_ERROR` | Network | Connection failed | Yes |
| `NOT_FOUND` | WordPress API | Resource not found | No |
| `INVALID_ELEMENTOR_DATA` | Elementor Data | Malformed data | No |
| `FILE_NOT_FOUND` | File Operation | File doesn't exist | No |
| `PERMISSION_DENIED` | File Operation | No file access | No |
| `INVALID_CONFIG` | Configuration | Invalid configuration | No |
---
## π **Response Formats**
### **Success Response**
```typescript
{
content: [
{
type: 'text',
text: string // JSON stringified result or success message
}
]
}
```
### **Error Response**
```typescript
{
isError: true,
content: [
{
type: 'text',
text: string // Error details in JSON format
}
]
}
```
**Error Object:**
```typescript
{
message: string;
category: ErrorCategory;
code: string;
details?: any;
statusCode?: number;
timestamp: string;
recoverable: boolean;
suggestion: string;
}
```
---
## π **Rate Limits**
### **Default Limits**
- **WordPress API**: Depends on server configuration
- **File Operations**: No built-in limit
- **MCP Calls**: No built-in limit
### **Best Practices**
- Keep `per_page` β€ 100 for list operations
- Use chunked operations for large datasets
- Implement delays for batch operations
- Monitor WordPress server load
---
## π **Further Reading**
- [WordPress REST API Reference](https://developer.wordpress.org/rest-api/reference/)
- [Elementor Developer Docs](https://developers.elementor.com/)
- [MCP Protocol Specification](https://modelcontextprotocol.io/)
---
**π§ Complete API reference for the Ultimate Elementor MCP!** π