votel-mcp
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@votel-mcp List my websites"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
votel-mcp
An MCP server that lets AI assistants manage and publish websites via Votel.
Connect Your AI Client
There are two ways to connect — pick the one that fits your client:
Method | How it works | Best for |
Remote (OAuth) | Connect via URL. No install needed. | Claude.ai, ChatGPT, VS Code |
Local (API Key) | Run on your machine with | Claude Code, Claude Desktop, Cursor, Windsurf, Cline |
Remote Setup (OAuth)
No API key or Node.js required. Add the server URL and authorize with your Votel account.
Claude.ai (Pro/Max/Team/Enterprise) — Settings > Integrations > MCP Servers > Add Server:
https://app.votel.ai/mcpChatGPT (Pro/Plus/Business/Enterprise) — Settings > MCP Servers > Add:
https://app.votel.ai/mcpVS Code — Command Palette > "MCP: Add Server" > HTTP:
https://app.votel.ai/mcpYour client handles the OAuth login flow automatically.
Local Setup (API Key)
Get your API key from Settings > API Keys in your Votel dashboard.
Claude Code
claude mcp add votel-mcp \
-e VOTEL_API_KEY=sk_your_api_key_here \
-- npx -y votel-mcp@latestClaude Desktop / Cursor / Windsurf / Cline
Add to your MCP config file:
{
"mcpServers": {
"votel-mcp": {
"command": "npx",
"args": ["-y", "votel-mcp@latest"],
"env": {
"VOTEL_API_KEY": "sk_your_api_key_here"
}
}
}
}Config file locations:
Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.jsonCursor:
.cursor/mcp.jsonin your project rootWindsurf: MCP Servers section in Windsurf settings
VS Code:
.vscode/mcp.jsonin your project rootCline: MCP server settings in the Cline extension
Client Compatibility
Client | Local (API Key) | Remote (OAuth) |
Claude.ai | — | Yes |
ChatGPT | — | Yes |
Claude Code | Yes | Yes |
Claude Desktop | Yes | Yes (Pro+) |
Cursor | Yes | Yes |
Windsurf | Yes | Yes |
VS Code | Yes | Yes |
Cline | Yes | Yes |
Related MCP server: wp-mcp-control-server
Available Tools
Tool | Description |
| List all websites for your account |
| Create a new website (provisions CDN + storage) |
| Get website details, domains, and configuration |
| Delete a website and all its resources |
| Add a custom domain with DNS instructions |
| Remove a custom domain |
| Check DNS propagation and SSL status |
| Purge CDN cache (full or specific URLs) |
| Get traffic stats, bandwidth, and cache ratio |
| Get storage credentials for direct file uploads |
Example Prompts
Managing sites:
"What websites do I have?"
"Create a website called Anderson Legal Group"
"Add the domain example.com to Anderson Legal Group and show me the DNS records I need to set up"
"Purge the cache for Anderson Legal Group"
"How much traffic has Anderson Legal Group gotten this month?"
"Delete the website called Old Test Site"
Design & publish (one-shot):
"Design a professional website for a law firm called Harper & Associates and publish it to example.com"
"Build a sleek dark-themed landing page for a SaaS product called Launchpad and put it live on example.com"
"Create a clean website for a dentist office called Bright Smile Dental and publish it to example.com"
"Make a modern site for a real estate agent named Sarah Chen and deploy it to example.com"
"Design a restaurant website for an Italian place called Nonna's Kitchen with their menu and hours, then publish it to example.com"
Environment Variables
Variable | Required | Default | Description |
| Yes (local only) | — | Your Votel API key ( |
| No |
| Backend URL |
Documentation
Full setup guide with screenshots: docs.votel.ai/ai-websites/mcp-setup
License
MIT
Available Tools
45 toolsadd_domainA
Add a custom domain to a website. Returns DNS records you need to configure. Example: 'Add example.com to my website'.
Inputs: site_id (required), hostname (required).
add_task_attachmentA
Attach a file to a task. Provide either a local file_path (uploaded to Votel storage) or a pre-hosted url. Example: 'Attach /tmp/proposal.pdf to task '.
Inputs: task_id (required), url, name, file_path.
add_task_commentA
Add a comment to a task's activity timeline. The comment is appended to the task's recent_comments array; auto-generated activity entries (field changes) are preserved. Example: 'Comment on task : spoke with client, will reschedule'.
Inputs: content (required), task_id (required).
complete_taskA
Mark a task as completed (or reopen with is_completed=false). Example: 'Mark task as done'.
Inputs: task_id (required), is_completed.
create_contactA
Create a new contact in your CRM. Provide at least a name, email, or phone. Example: 'Add a contact named John Smith with email john@example.com'.
Inputs: tags, email, phone, company, +3 more.
create_custom_fieldA
Create a new custom field for contacts. Supports text, email, phone, dropdown, date, number, and textarea types. Example: 'Create a dropdown field called Industry with options: Tech, Healthcare, Finance'.
Inputs: label (required), field_type (required), options.
create_folderA
Create a new folder in a website's storage. Example: 'Create an images folder'.
Inputs: site_id (required), folder_name (required), path.
create_taskA
Create a new task. Supports the full task field set: assignee, priority, type, status, project, tags, due date with time/timezone, duration, subtask parent, and contact link. Use list_users / list_projects / list_task_statuses / list_task_types to discover valid IDs. Example: 'Create a high priority task to follow up with John tomorrow'.
Inputs: title (required), tags, due_date, due_time, +14 more.
create_websiteA
Create a new website with CDN hosting. Provisions storage and pull zone automatically. Example: 'Create a website called My Business'.
Inputs: name (required), storage_region.
delete_contactA
Delete a contact from your CRM (soft delete). Example: 'Delete contact '.
Inputs: contact_id (required).
delete_fileA
Delete a file from a website's storage. Example: 'Delete old-page.html from my website'.
Inputs: site_id (required), file_name (required), path.
delete_taskA
Soft-delete a task. Example: 'Delete task '.
Inputs: task_id (required).
delete_websiteA
Permanently delete a website and all its resources (storage, CDN, files). Cannot be undone. Example: 'Delete the website called Test Site'.
Inputs: site_id (required).
get_analyticsB
Get traffic analytics for a website — requests, bandwidth, and cache hit ratio. Example: 'Show analytics for my website'.
Inputs: site_id (required), date_to, date_from.
get_contactA
Get detailed information about a specific contact including all fields, tags, and notes. Example: 'Show me details for contact '.
Inputs: contact_id (required).
get_contact_activityA
Get recent activity for a contact — calls, emails, SMS, notes, and system events. Example: 'Show recent activity for John' or 'What happened with contact ?'.
Inputs: contact_id (required), limit, activity_type.
get_pipeline_leadsA
Get contacts/leads in a specific pipeline, optionally filtered by stage. Example: 'Show leads in my Sales pipeline' or 'Who is in the Negotiation stage?'.
Inputs: pipeline_id (required), limit, stage.
get_storage_credentialsA
Get storage credentials for direct file uploads to a website. Example: 'Get upload credentials for my website'.
Inputs: site_id (required).
get_taskA
Get full detail for a single task — fields, comments, attachments, subtask count. Example: 'Show me task '.
Inputs: task_id (required).
get_task_statsA
Summary task statistics for the workspace — counts by status, priority, etc. Optional filter by assignee. Example: 'Give me task stats' or 'Show task stats for Alice'.
Inputs: assigned_to_id.
get_websiteA
Get detailed information about a website including domains, CDN config, and status. Example: 'Show me details for website '.
Inputs: site_id (required).
list_contact_fieldsA
List all contact fields (built-in and custom) with their types and visibility. Useful for understanding what data you can store on contacts. Example: 'What fields are available for contacts?' or 'Show custom fields'.
Inputs: no named parameters.
list_contactsA
List contacts in your CRM with optional search and filtering. Returns name, email, phone, and lifecycle stage. Example: 'Show my contacts' or 'Find contacts named John'.
Inputs: page, limit, search, lifecycle_stage.
list_filesA
List files and folders in a website's storage. Use path '/' for root directory. Example: 'Show files in my website'.
Inputs: site_id (required), path.
list_pipelinesA
List all sales pipelines with their stages. Shows pipeline name, stage names, and lead counts. Example: 'Show my pipelines' or 'What stages does my sales pipeline have?'.
Inputs: no named parameters.
list_projectsA
List task projects/pipelines for the workspace. Each project has its own status set and task-type set. Example: 'Show me my projects'.
Inputs: no named parameters.
list_subtasksA
List all subtasks of a parent task. To create a subtask, call create_task with parent_task_id. Example: 'Show subtasks of task '.
Inputs: task_id (required).
list_tasksA
List tasks with optional filtering by completion, priority, type, assignee, or search term. Example: 'Show my tasks', 'Show high priority open tasks', 'Tasks assigned to Alice'.
Inputs: limit, search, priority, task_type, +3 more.
list_task_statusesA
List the custom statuses available for a project (or for the project that contains a given task). Statuses are scoped per-project, NOT per task_type. Example: 'What statuses can I set on task ?'.
Inputs: task_id, project_id.
list_task_tagsA
Autocomplete task tag suggestions. Example: 'What tags exist for tasks?' or 'Tags starting with foll'.
Inputs: limit, query.
list_task_typesA
List the task types available for a project (or for the project that contains a given task). Each type has a 'key' (used as task_type on a task) and a display 'label'. Example: 'What task types can I use in project ?'.
Inputs: task_id, project_id.
list_usersA
List users in the workspace — use to discover assigned_to_id values for tasks. Example: 'Who can I assign tasks to?'.
Inputs: query.
list_variablesA
List all global variables with their current values. These are used in templates, workflows, and agent prompts. Example: 'Show my global variables' or 'What variables are set?'.
Inputs: no named parameters.
list_websitesA
List all websites for your account. Returns name, CDN hostname, status, and domain count for each site. Example: 'List my websites' or 'Show active websites'.
Inputs: search, status.
move_lead_stageB
Move a contact to a different pipeline stage. Example: 'Move John to the Closed Won stage'.
Inputs: stage_id (required), contact_id (required), pipeline_id (required).
publish_siteA
Deploy multiple files to a website in one call. Pass a map of file paths to content. CDN cache is purged automatically. This is the best way to publish or update a website. Example: 'Build a landing page and publish it'.
Inputs: files (required), site_id (required), purge_cache.
purge_cacheA
Clear CDN cache for a website. Purge everything or specific URLs. Example: 'Purge cache for my website'.
Inputs: site_id (required), urls.
remove_domainA
Remove a custom domain from a website. Example: 'Remove example.com from my website'.
Inputs: site_id (required), hostname (required).
remove_task_attachmentA
Remove an attachment from a task by its display name. Does not delete the underlying file from storage. Example: 'Remove proposal.pdf from task '.
Inputs: task_id (required), attachment_name (required).
send_smsA
Send an SMS text message to a contact. The contact must have a phone number on file. Example: 'Send John a text saying: Your appointment is confirmed for tomorrow at 2pm'.
Inputs: message (required), contact_id (required).
snooze_taskA
Snooze a task until a future datetime. Example: 'Snooze task until tomorrow 9am'.
Inputs: task_id (required), snoozed_until (required).
update_contactA
Update fields on an existing contact. Only the fields you provide are changed. Example: 'Update John's phone to 555-1234'.
Inputs: contact_id (required), tags, email, phone, +4 more.
update_taskA
Update fields on an existing task. Use is_completed (boolean) to toggle completion — there is no flat 'status' enum on the backend; for custom statuses use status_id with values from list_task_statuses. Example: 'Set task priority to urgent and assign to Alice'.
Inputs: task_id (required), tags, title, due_date, +18 more.
upload_fileA
Upload a file to a website's storage. Content must be base64-encoded. File is immediately available via CDN. Example: 'Upload index.html to my website'.
Inputs: content (required), site_id (required), file_name (required), path.
verify_domainA
Check DNS propagation and SSL status for a custom domain. Example: 'Check if example.com is verified'.
Inputs: site_id (required), hostname (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 45 tools
Most tools target distinct resources with clear actions. A few pairs like complete_task vs update_task and upload_file vs publish_site could be confused, but descriptions provide enough detail to differentiate them.
All tool names follow a consistent verb_noun snake_case pattern (list_, get_, create_, update_, delete_, add_, remove_, etc.). No style mixing or unpredictable naming.
With 45 tools, the surface is quite heavy. While the server spans multiple domains (websites, CRM, pipelines, tasks), the count exceeds the typical comfortable range and includes some redundant convenience tools like complete_task.
The tool set covers most core workflows for websites, contacts, and tasks. Minor gaps exist, such as no update_website or pipeline creation/editing, but these can be worked around or are outside the primary scope.
Maintenance
Related MCP Connectors
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
Build, edit, host, and publish websites from AI assistants. Setup: https://mcp.orivox.org/
Create, edit, preview, publish, and manage web pages from MCP-capable AI clients.
WordPress MCP server: publish posts, AI images, SEO and full site management, self-hosted
Related MCP Servers
- AlicenseAqualityDmaintenanceA complete MCP server enabling AI assistants to manage cPanel hosting through natural language, including file, database, email, subdomain, and system operations.161MIT
- FlicenseCqualityAmaintenanceMCP server that connects AI clients to WordPress for content management, site settings, Elementor editing, and more via a secure API.149-
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI agents to manage WordPress sites, including Elementor page building, content CRUD, plugin management, and site configuration via the WordPress REST API.52 npmISC
- AlicenseAqualityDmaintenanceAn MCP server that lets AI agents design complete websites and generate import-ready Elementor v4 JSON, allowing for automated website building with structural validity.15MIT