01What this is
MightyAutomation runs a remote MCP server — the open protocol AI clients use to call external tools. Connect it and your AI assistant can work your CRM: find and create contacts, tag them and add notes, send emails, enroll automations, create booking links, add, reschedule and cancel calendar appointments, import files and manage event webhooks. It can also read your pipeline board, email campaign stats, automation steps, Content Calendar, Media Assets library and Mighty Dial call log.
- Endpoint — https://dev.mightyautomation.ai/api/mcp
- Transport — Streamable HTTP, stateless JSON-RPC 2.0 over POST. There is no SSE stream: GET and DELETE return 405 (a browser GET is sent to this page).
- Auth — a project-scoped API key (mva_mcp_…).
- Plugin source — mightymikereid/mightyautomation-plugin on GitHub.
The project is resolved from the key — there is no workspace parameter, so a key can never address another workspace.
02Setup with an API key
API keys are the supported way to connect every client below.
1. Get your MCP key
- Sign in and open your project. MCP keys are a paid-plan feature.
- Go to Integrations → Zapier & other tools → AI connectors — MCP.
- Click Generate MCP key and copy it — it is shown once. Generating again rotates it (one active key per project).
The key can be sent as Authorization: Bearer <key>, as a bare Authorization: <key>, or in an x-ma-mcp-key header for clients that cannot set Bearer.
2. Add it to your client
Cursor — add to ~/.cursor/mcp.json (or the project's .cursor/mcp.json):
{
"mcpServers": {
"mightyautomation": {
"url": "https://dev.mightyautomation.ai/api/mcp",
"headers": {
"Authorization": "Bearer mva_mcp_YOUR_KEY"
}
}
}
}Claude Desktop / claude.ai — Settings → Connectors → Add custom connector:
Name: MightyAutomation URL: https://dev.mightyautomation.ai/api/mcp Header: Authorization: Bearer mva_mcp_YOUR_KEY
ChatGPT — turn on developer mode and add a custom MCP server with the endpoint URL and the Authorization header above.
Grok Bot — install from the plugin repository, or add a custom connector with the endpoint URL and the Authorization header.
Copilot (VS Code), Gemini and other clients — any MCP client that supports remote Streamable HTTP servers with custom headers can connect with the endpoint URL and the Authorization header. In VS Code, the same url + headers block goes in your MCP server configuration.
Clients that only speak stdio — bridge with mcp-remote:
npx mcp-remote https://dev.mightyautomation.ai/api/mcp \ --header "Authorization: Bearer mva_mcp_YOUR_KEY"
3. Test it
Ask your AI “Who am I connected as?” — it should call whoami and name your project. Or from a terminal:
curl -X POST https://dev.mightyautomation.ai/api/mcp \
-H "Authorization: Bearer mva_mcp_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'03Sign in with OAuth (available on dev / rolling out)
Available on dev / rolling out. OAuth sign-in is shipped on the dev environment and is not yet the supported path — use an API key (above) for production workspaces.
- Add https://dev.mightyautomation.ai/api/mcp as a custom connector and leave the auth header empty. The client discovers the authorization server from the 401 challenge.
- OAuth 2.1 authorization code with PKCE; clients register themselves (dynamic client registration).
- You sign in, pick one project and click Allow. The app can then use the tools on that project only, billed exactly like an MCP key.
- The consent screen marks Claude and ChatGPT callback URLs as verified; other clients are shown as unverified.
- See and disconnect apps under Integrations → AI connectors — MCP → Connected AI apps.
04Example prompts
- “Who am I connected as?” — whoami
- “Create a contact for jane@acme.com, tag her 'webinar', and add a note that she asked about pricing.” — upsert_contact, add_tag, add_note
- “Show me every lead in the Qualified stage that has a phone number.” — list_pipeline_stages, search_leads
- “Move jane@acme.com to the Nurture stage and mark her lifecycle as prospect.” — find_contact, list_pipeline_stages, update_contact
- “Email mike@example.com a reminder about his appointment on Thursday.” — find_contact, send_email
- “Enroll jane@acme.com in the Welcome automation.” — list_automations, enroll_automation
- “Create a booking link for jane@acme.com and give me the URL.” — find_contact, create_booking_link
- “What appointments are booked for next week?” — list_appointments
- “What happened in my CRM today?” — list_events
- “Import this PDF into my media library: https://example.com/brochure.pdf” — import_file
- “Send contact_created events to https://example.com/hook.” — create_hook, list_hooks
- “What is my credit balance?” — get_credit_balance
- “How many contacts are in each stage of my pipeline?” — get_pipeline_board
- “Book a 30-minute call with jane@acme.com next Tuesday at 2pm, then move it to Wednesday.” — create_appointment, list_appointments, reschedule_appointment
- “How did my last email campaign perform?” — list_campaigns
- “What is on my content calendar this month?” — list_content_calendar
- “Show me today's missed inbound calls.” — list_dial_calls
05Tools
The server exposes 37 tools (18 read, 19 write). Each one maps onto the matching REST API route, so results are identical either way.
Read — free
| Tool | What it does | Price |
|---|---|---|
| whoami read | Validate the connection and return the workspace (project) this key is bound to, plus the key label and scope. | Free |
| find_contact read | Look up a CRM contact by email address (case-insensitive). Returns the contact if it exists. For broader searches by name, company, stage, or phone use search_leads. | Free |
| list_contacts read | List CRM contacts, newest first. Filter to contacts created after a timestamp, and page with limit/offset. Use search_leads for name/stage/tag-style searches. | Free |
| get_contact read | Full contact record plus recent activity and upcoming events. Get the id from find_contact, list_contacts, or search_leads. | Free |
| search_leads read | Search the CRM by free text (matches first/last name, email, company), pipeline stage, lifecycle (lead|prospect|contact|customer|churned), or "has a phone number". Returns matching contacts and a total. | Free |
| list_pipeline_stages read | Pipeline stage names in board order. Use the exact stage names from here when calling update_contact or search_leads. | Free |
| list_automations read | Automations in the workspace (id, name, status). Use an automation id or name with enroll_automation. | Free |
| list_appointments read | Upcoming appointments on the workspace calendar. Optionally bound the window with from/to ISO timestamps. | Free |
| list_events read | Workspace event feed, newest first — contact_created, tag_added, entered_stage, form_submitted, appointment_booked, call_completed, and more. Use type to filter to one event type and since to filter by timestamp. | Free |
| list_hooks read | REST-hook subscriptions — the URLs MightyAutomation POSTs events to. Pair with create_hook / delete_hook to manage them. | Free |
| get_pipeline_board read | The CRM pipeline as a board: every stage in board order with how many contacts sit in it, plus a count of contacts with no stage. A "deal" here is a contact in a pipeline stage — there are no deal amounts. List the contacts in one stage with search_leads (stage). | Free |
| list_campaigns read | Email campaigns in the workspace, newest first — name, subject, status, audience size, sent count, and schedule. Read-only: this never sends or schedules a campaign. | Free |
| get_automation read | One automation's full definition — its trigger and steps — plus name, status, and timestamps. Get the id from list_automations. Read-only. | Free |
| list_content_calendar read | Content Calendar items between two dates, time-sorted: planned items (with type and status), scheduled or published blog posts, published podcast episodes, and ready video clips. Read-only — nothing is created, scheduled, or posted. | Free |
| list_media_assets read | Files in the workspace Media Assets library, newest first — title, kind, MIME type, size, tags, and source. Metadata only (no download links). Use import_file to add a file. | Free |
| list_dial_calls read | The Mighty Dial call log, newest first — direction, from/to numbers, status, duration, voicemail flag, and the matched contact. Read-only: no recordings or transcripts, and it never places a call. | Free |
| get_credit_balance read | MightyAI credit balance for this workspace plus the last 10 ledger entries (grants, purchases, spend) — this is how you check what MCP calls and AI usage cost. | Free |
| grok_render_status read | Check a video render's progress — status queued/rendering/done/failed, error detail, and a signed download URL once done. Ids come from grok_generate_video. | Free |
Write — billed per successful call
| Tool | What it does | Price |
|---|---|---|
| upsert_contact write | Create a CRM contact, or update it if one already exists for the email. This is how you "save a lead" — email is the only required field. Tags are merged (never replaced), notes are appended, and events are emitted so automations can fire. | $0.005 |
| update_contact write | Update fields on an existing contact — move it to a new pipeline stage, change lifecycle, set email/phone/name, or mark do_not_contact. Only the fields you pass are changed; tags replaces the tag set (use add_tag to merge instead). | $0.005 |
| add_tag write | Merge one or more tags onto a contact — existing tags are kept. Locate the contact by contact_id or email. | $0.005 |
| add_note write | Append a note to a contact's timeline — visible in the CRM and usable for handoffs, call summaries, or context the member should see. | $0.005 |
| send_email write | Send an email to a contact from the workspace sender identity and log it on the contact timeline. Fails safely if the contact is marked do-not-contact. Confirm the subject/body with the member before sending — this is a real outbound email. | $0.005 |
| enroll_automation write | Start an automation for a contact — locate it by automation_id or automation_name (case-insensitive; names come from list_automations) and the contact by contact_id or email. Google steps (Gmail send, Calendar event, Drive file, Sheets row) do NOT run immediately: they come back in pending_google_approvals with status awaiting_approval until the account owner approves them in the app. | $0.005 |
| create_booking_link write | Generate a shareable scheduling link — the contact (or anyone with the link) can book an appointment on the workspace calendar. Optionally bind it to a contact so the booking attaches to their record. | $0.005 |
| create_appointment write | Add an appointment, call, or meeting to the workspace Sales Calendar, optionally attached to a contact (by contact_id or email). This writes the CRM calendar only — it does not create a Google Calendar event, send an invite, or email anyone. | $0.005 |
| reschedule_appointment write | Move an appointment to a new start time (and optionally a new length). Ids come from list_appointments. CRM calendar only — no attendee email. Appointments synced to Google Calendar or booked through a scheduling link return manage_in_app: reschedule those in the Sales Calendar. | $0.005 |
| cancel_appointment write | Cancel an appointment on the Sales Calendar, optionally noting a reason on it. Ids come from list_appointments. CRM calendar only — no attendee email. Appointments synced to Google Calendar or booked through a scheduling link return manage_in_app: cancel those in the Sales Calendar. Confirm with the member first. | $0.005 |
| import_file write | Download a remote file (public https URL) into the workspace Media Assets library. Allowed types: image/*, audio/*, video/*, and application/pdf — text/html and other types are rejected; max 10 MB. Optionally attach a note to a contact recording that the file was imported for them. | $0.025 |
| create_hook write | Register a webhook URL — MightyAutomation POSTs each matching event to it as they happen. Use event_type "*" for every event, or a specific type like contact_created / form_submitted / appointment_booked. This is how an external agent receives real-time notifications instead of polling list_events. | $0.005 |
| delete_hook write | Remove a webhook subscription by id (ids come from list_hooks). Events stop being delivered to that URL. Idempotent — deleting a missing hook still succeeds. | $0.005 |
| grok_upload_transcript write | Store a transcript in the workspace for the Grok Boost audio pipeline. Returns a transcript_id to pass to grok_generate_audio. | $0.005 |
| grok_generate_audio write | Turn a stored transcript (transcript_id), pasted text, or ready-made script turns into a generated podcast episode via ElevenLabs. Paid, metered generation that runs in the background: returns immediately with the job id — call grok_stitch with it for status and the final audio path. | $0.025 |
| grok_stitch write | Report a podcast job's generation status and — once its stored dialogue chunks exist — re-stitch them with the show intro/outro bookends and return the final audio path. Poll this after grok_generate_audio; also re-runs the stitch to apply updated bookends without paying for generation again. | $0.005 |
| grok_generate_video write | Render a video through the workspace video connector (default hyperframes — AI-authored motion graphics rendered in the platform sandbox). Pass audio_job_id (from grok_generate_audio) or audio_path to mux narration under the video. Paid, metered render that runs in the background: returns immediately with render_id — call grok_render_status for progress and the result path. | $0.050 |
| grok_publish_youtube write | Upload a finished render to the workspace's connected YouTube channel (Data API v3). This is a REAL outbound publish — visibility defaults to private; use unlisted or public deliberately. Requires the channel to be connected in admin → Grok Boost first. | $0.025 |
| grok_run_pipeline write | Orchestrated Grok Boost run: transcript (transcript_id, text, or turns) → ElevenLabs audio → HyperFrames video → optional YouTube publish. Stages run in the background across separate invocations — returns immediately with a run_id; watch grok_runs / the admin feed for progress and the final video_url. | $0.050 |
06Troubleshooting
- 401 Unauthorized (JSON-RPC -32001, with a WWW-Authenticate header) — the key is missing, mistyped or revoked, or an OAuth access token is invalid or expired. Make sure the whole mva_mcp_… key is sent; rotate it under Integrations if unsure.
- 403 insufficient_scope — the key is not an MCP, agent or Zapier key (for example a voice-scheduling key). Generate an MCP key.
- 429 rate_limited — about 60 requests per minute per key. Every tool call in a batch counts. Wait a few seconds and retry.
- 503 “MCP is temporarily unavailable” — the server is not accepting tool traffic right now. Retry later.
- 400 Parse error — the body was not valid JSON-RPC 2.0. 405 — the request was not a POST.
- Plan or credit messages — these come back as a normal response (HTTP 200) whose tool result has isError: true and a message, not as an HTTP error code:
- “plan doesn't include MCP access or the subscription is inactive” — a paid, active plan is required for every tool call, reads included.
- “automatic credit top-up failed” — tools pause until billing is fixed.
- “credit balance is too low”, “contribution policy” not accepted, or “temporarily paused for maintenance” — write tools are blocked; read tools still work.
- Validation errors — arguments are checked against each tool's schema before anything runs; a bad type, email or id fails with a named error and costs nothing.
- A failed call charged nothing — is that right? Yes. Failed calls are never charged.
07Pricing
- Plan — MCP requires an active paid MightyAutomation plan (see pricing).
- Read tools — free. That is all 18: whoami, find_contact, list_contacts, get_contact, search_leads, list_pipeline_stages, list_automations, list_appointments, list_events, list_hooks, get_pipeline_board, list_campaigns, get_automation, list_content_calendar, list_media_assets, list_dial_calls, get_credit_balance, grok_render_status.
- Write tools — $0.005 of Mighty credits per successful call; import_file is $0.025; grok_generate_audio is $0.025; grok_generate_video is $0.050; grok_publish_youtube is $0.025; grok_run_pipeline is $0.050.
- send_email — also bills the standard per-email messaging rate, on top of the tool fee.
- Failed calls are never charged — validation errors, not-found and other errors never debit credits.
- Credits are non-refundable — see the terms.
08Security model
- Project-scoped — a key only reaches its own project's data.
- MCP-only keys — mva_mcp_ keys work on the MCP endpoint only, not on the REST API.
- Stored hashed — only the key's SHA-256 hash is kept; the key is shown once.
- Safety rails — send_email refuses do-not-contact contacts; delete_hook is idempotent.
- Treat the key like a password: don't paste it into chats or commit it to a repository.
09Privacy & support
Each tool call is logged with the tool name, project, latency and error flag. Data handling is covered by the privacy policy.
Need help? See the support page.