Skip to main content
Glama
votel-mcp
by votelai

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 npx. Needs Node.js 18+.

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/mcp

ChatGPT (Pro/Plus/Business/Enterprise) — Settings > MCP Servers > Add:

https://app.votel.ai/mcp

VS Code — Command Palette > "MCP: Add Server" > HTTP:

https://app.votel.ai/mcp

Your 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@latest

Claude 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.json

  • Claude Desktop (Windows): %APPDATA%\Claude\claude_desktop_config.json

  • Cursor: .cursor/mcp.json in your project root

  • Windsurf: MCP Servers section in Windsurf settings

  • VS Code: .vscode/mcp.json in your project root

  • Cline: 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_websites

List all websites for your account

create_website

Create a new website (provisions CDN + storage)

get_website

Get website details, domains, and configuration

delete_website

Delete a website and all its resources

add_domain

Add a custom domain with DNS instructions

remove_domain

Remove a custom domain

verify_domain

Check DNS propagation and SSL status

purge_cache

Purge CDN cache (full or specific URLs)

get_analytics

Get traffic stats, bandwidth, and cache ratio

get_storage_credentials

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

VOTEL_API_KEY

Yes (local only)

—

Your Votel API key (sk_...)

VOTEL_API_URL

No

https://app.votel.ai

Backend URL

Documentation

Full setup guide with screenshots: docs.votel.ai/ai-websites/mcp-setup

License

MIT

Available Tools

45 tools
add_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

    A3.7/5.0

    Scored across 45 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers