# Carbon Voice MCP MCP Server

> **Carbon Voice MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Carbon Voice MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/carbonvoice-mcp
> MewCP docs:   https://docs.mewcp.com
> All servers:  https://mewcp.com/servers (JSON: https://mewcp.com/api/servers)
> About MewCP:  https://mewcp.com/llms.txt

---

## About

Connect AI assistants to Carbon Voice for asynchronous voice and text communication. Create, send, search, and retrieve voice messages, access transcriptions, manage conversations and folders, and use AI actions to summarize discussions and extract action items.

---

## Details

- Server ID: `carbonvoice-mcp`
- Version: 2.12.0
- Tools: 42
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Carbon Voice MCP has to be in the toolset
first. In order:

1. Add Carbon Voice MCP to your toolset at https://mewcp.com/mcp/carbonvoice-mcp
2. Connect your Carbon Voice MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Add the gateway URL to your client (see Connect below). It signs in with OAuth
   the first time it connects, so there is no key to copy.

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (42)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `list_messages` _(read)_ — List messages with filtering by date, conversation, folder, workspace, creator or language. USE WHEN: The general-purpose message reader; full bodies incl.…
- `get_message` _(read)_ — Get one message by ID, optionally expanded with related records. USE WHEN: You have a message ID. `fields` ADDS related data (`conversation`, `creator`,…
- `get_recent_messages` _(read)_ — Get up to 10 of the most recent messages, each with its conversation, creator and labels. USE WHEN: A quick "what just happened" glance. Pre-joined, so no…
- `create_conversation_message` _(write)_ — Post a message into an existing conversation, or reply in a thread. USE WHEN: You have a `conversation_id`. Pass `parent_id` (a message ID) to reply as a…
- `create_direct_message` _(write)_ — Send a direct message to one or more people, by user ID or email. USE WHEN: Reaching people outside an existing conversation. Address it with `to.user_ids` or…
- `create_voicememo_message` _(write)_ — Create a voice memo, either from text (spoken via text-to-speech) or from an audio file at a URL. USE WHEN: Pass `transcript` (2-5000 chars) to have Carbon…
- `add_attachments_to_message` _(write)_ — Attach one or more link URLs to an existing message. USE WHEN: Adding external links to a message that already exists. USE INSTEAD: `create_message_share_link`…
- `get_user` _(read)_ — Get a user's full profile by ID — names, languages, voice settings, workspace roles. USE WHEN: You already have a user ID and need complete details. USE…
- `search_user` _(read)_ — Find a single user by email, phone or name. USE WHEN: Resolving ONE person. Supply exactly one of `email`, `phone` or `name`. Name search only matches your own…
- `search_users` _(read)_ — Resolve several users at once by emails, phones, IDs or names. USE WHEN: Turning a list of people into user IDs in one call — the right first step before any…
- `get_current_user` _(read)_ — Get the calling user's own identity, workspaces and settings. USE WHEN: Establishing who you are acting as, or finding the caller’s workspace IDs before a…
- `list_conversations` _(read)_ — List your conversations from the last 6 months, optionally filtered by participants, type and name. USE WHEN: Finding a `conversation_id`. Filter with…
- `get_conversation` _(read)_ — Get one conversation by ID, with full metadata. USE WHEN: You have a `conversation_id` and need its description, visibility, owner or workspace name. USE…
- `get_conversation_users` _(read)_ — List the people in a conversation. USE WHEN: Finding out who is in a conversation, or collecting participant user IDs. USE INSTEAD: `search_users` to resolve…
- `summarize_conversation` _(write)_ — Summarize a conversation by running an AI Action over its recent messages. USE WHEN: You want a conversation summarized and have a `conversation_id`. Message…
- `get_root_folders` _(read)_ — List the root folders of a workspace for a given folder type. USE WHEN: Orienting in the folder tree, or finding a `folder_id`. `type` is required: `voicememo`…
- `create_folder` _(write)_ — Create a folder in a workspace, optionally nested under another. USE WHEN: Organising memos. `name`, `type` and `workspace_id` are all required; add…
- `get_folder` _(read)_ — Get one folder's metadata and, optionally, its immediate subfolders. USE WHEN: Inspecting a folder. Set `include_first_level_tree: true` to get subfolders.…
- `get_folder_with_messages` _(read)_ — Get a folder together with the messages stored directly in it. USE WHEN: Reading a folder’s contents. Only messages at that folder’s own level are returned —…
- `update_folder_name` _(destructive)_ — Rename a folder. USE WHEN: Changing only the name. `name` is the sole editable field here. USE INSTEAD: `move_folder` to change where a folder sits in the…
- `delete_folder` _(destructive)_ — Permanently delete a folder, including every nested folder and all their messages. USE WHEN: Only when the whole subtree should be destroyed. This cascades and…
- `move_folder` _(destructive)_ — Move a folder into another folder, or up to a workspace root. USE WHEN: Relocating a folder. Pass `folder_id` for a new parent folder, or `workspace_id` to…
- `move_message_to_folder` _(destructive)_ — Move a message into a folder, or out to a workspace. USE WHEN: Filing a memo. Only `voicememo`/`prerecorded` messages you created can be moved, and the message…
- `get_workspaces_basic_info` _(read)_ — List every workspace you belong to, as id and name only. USE WHEN: The cheapest way to resolve a workspace name to an ID before a workspace-scoped call. Takes…
- `list_ai_actions` _(read)_ — List the AI Actions (Prompts) available to you — each has an `id` usable as `prompt_id`. USE WHEN: Before calling `run_ai_action` or `summarize_conversation`,…
- `run_ai_action` _(write)_ — Run an AI Action (Prompt) against one or more specific messages. USE WHEN: You have concrete `message_ids` and a `prompt_id`, and want the AI Action applied to…
- `run_ai_action_for_shared_link` _(write)_ — Run an AI Action (Prompt) against one or more shared messages, addressed by share link ID. USE WHEN: You have share link IDs — from…
- `get_ai_action_responses` _(read)_ — Retrieve AI Action results that were generated previously. USE WHEN: You want existing output rather than a fresh run — e.g. showing what an AI Action already…
- `create_message_share_link` _(write)_ — Create a shareable link to an existing message (e.g. a voice memo), and get the URL back. USE WHEN: `share_type: "link"` for a shareable URL; `"forward"` to…
- `get_message_share_link` _(read)_ — Look up an existing message share link by its ID, including the message behind it. USE WHEN: You have a share link ID and want its URL, access settings, or…
- `list_my_action_items` _(read)_ — List your action items across every conversation and folder: those assigned to you, PLUS unassigned ones you created. USE WHEN: Answering "what do I owe / what…
- `list_action_items` _(read)_ — List action items belonging to one container — a conversation, a folder, or home. USE WHEN: You have a `container_id` and want its action items.…
- `get_action_item` _(read)_ — Get one action item by its ID, with full detail. USE WHEN: You have an action item ID and need its notes, assignee, due date, or source message. USE INSTEAD:…
- `create_action_item` _(write)_ — Create an action item, optionally attached to a conversation or folder. USE WHEN: Recording a task. Only `title` is required. Attach it by passing both…
- `update_action_item` _(destructive)_ — Change an action item's title, notes, assignee, or due date. USE WHEN: Editing item content. Send only the fields you want changed — omitted fields are left as…
- `set_action_item_status` _(destructive)_ — Move an action item between `suggested`, `todo` and `done`. USE WHEN: Completing an item (`done`), reopening it (`todo`), or accepting an AI-suggested item by…
- `delete_action_item` _(destructive)_ — Permanently delete an action item. USE WHEN: The item was created in error and should not exist at all. USE INSTEAD: `set_action_item_status` with `done` to…
- `suggest_action_items_from_message` _(write)_ — Extract action items from ONE message and return them immediately. USE WHEN: Turning a single message into tasks — "what did she ask me to do?". The items come…
- `suggest_action_items_from_messages` _(write)_ — Queue AI extraction of candidate action items from specific messages. Runs in the background. USE WHEN: Turning a conversation into tasks — "what did we agree…
- `search_message_ids` _(read)_ — Find message IDs by notified state, mentions, labels, creator, conversation or workspace — returning IDs plus cursor metadata. USE WHEN: Any filter…
- `search_messages_by_heard_status` _(read)_ — Find messages by whether you have listened to them, and get per-conversation unheard counts. USE WHEN: "What have I not listened to yet" / "catch me up".…
- `list_inbox_notifications` _(read)_ — List your inbox notifications, with a total unread count. USE WHEN: Answering "what did I miss" or "where was I mentioned" — pass `category: "mentions"` for…

---

## Connect

- URL: https://gateway.mewcp.com/personal/mcp
- Transport: Streamable HTTP (remote). Nothing to install.
- Sign-in: OAuth. On first connect the client opens a browser window to sign in
  to MewCP and approve access. No API key.
- Headless clients (SDKs, servers without a browser) send an API key instead:
  `Authorization: Bearer <API_KEY>`, key from https://mewcp.com/dashboard/api-keys

Agents setting themselves up: follow https://mewcp.com/SKILL.md

Step-by-step guide per client:

- Claude Desktop: https://mewcp.com/mcp/carbonvoice-mcp/connect/claude
- ChatGPT: https://mewcp.com/mcp/carbonvoice-mcp/connect/chatgpt
- VS Code: https://mewcp.com/mcp/carbonvoice-mcp/connect/vscode
- Cursor: https://mewcp.com/mcp/carbonvoice-mcp/connect/cursor
- Codex: https://mewcp.com/mcp/carbonvoice-mcp/connect/codex
- Claude Code: https://mewcp.com/mcp/carbonvoice-mcp/connect/claude-code
- OpenCode: https://mewcp.com/mcp/carbonvoice-mcp/connect/opencode
- OpenClaw: https://mewcp.com/mcp/carbonvoice-mcp/connect/openclaw
- Antigravity: https://mewcp.com/mcp/carbonvoice-mcp/connect/antigravity
- Hermes: https://mewcp.com/mcp/carbonvoice-mcp/connect/hermes
- DeepSeek Harness: https://mewcp.com/mcp/carbonvoice-mcp/connect/dsh
- Python: https://mewcp.com/mcp/carbonvoice-mcp/connect/python
- TypeScript: https://mewcp.com/mcp/carbonvoice-mcp/connect/typescript