Skip to main content
Glama
PhononX

Carbon Voice

by PhononX

create_conversation_message

Send messages to existing Carbon Voice conversations using text-to-speech transcripts or attachments, with options for threaded replies and link sharing.

Instructions

Sends a message to an existing conversation or any type with a conversation_id. To reply as a thread, included a message_id for "parent_id". You must provide a transcript or attachment.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
transcriptNoThe Message transcript will be used to generate audio using text-to-speech
linksNoArray of links to be attached to the message
from_message_typeNoFrom Message typeNewMessage
from_message_idNoMessage ID to be used as a base for the new message. (Optional only when from_message_type is NewMessage)

Implementation Reference

  • The main handler function for the MCP tool 'create_conversation_message'. It receives the input arguments, authenticates using authInfo, calls the simplified Carbon Voice API to create the message, formats the response, and handles errors.
    async (
      args: CreateConversationMessageInput,
      { authInfo },
    ): Promise<McpToolResponse> => {
      try {
        return formatToMCPToolResponse(
          await simplifiedApi.createConversationMessage(
            args.id,
            args,
            setCarbonVoiceAuthHeader(authInfo?.token),
          ),
        );
      } catch (error) {
        logger.error('Error creating conversation message:', { args, error });
        return formatToMCPToolResponse(error);
      }
    },
  • src/server.ts:183-214 (registration)
    Registers the 'create_conversation_message' tool with the MCP server, defining its name, description, input schema (merged params and body Zod schemas), and annotations.
    server.registerTool(
      'create_conversation_message',
      {
        description:
          'Sends a message to an existing conversation or any type with a conversation_id. ' +
          'To reply as a thread, included a message_id for "parent_id". You must provide a transcript or attachment.',
        inputSchema: createConversationMessageParams.merge(
          createConversationMessageBody,
        ).shape,
        annotations: {
          readOnlyHint: false,
          destructiveHint: false,
        },
      },
      async (
        args: CreateConversationMessageInput,
        { authInfo },
      ): Promise<McpToolResponse> => {
        try {
          return formatToMCPToolResponse(
            await simplifiedApi.createConversationMessage(
              args.id,
              args,
              setCarbonVoiceAuthHeader(authInfo?.token),
            ),
          );
        } catch (error) {
          logger.error('Error creating conversation message:', { args, error });
          return formatToMCPToolResponse(error);
        }
      },
    );
  • Zod schema definitions for the tool input: createConversationMessageParams (conversation ID path param) and createConversationMessageBody (body with transcript, links, from_message_type, from_message_id). These are merged for the tool's inputSchema.
    export const createConversationMessageParams = zod.object({
      "id": zod.string()
    })
    
    export const createConversationMessageBodyFromMessageTypeDefault = "NewMessage";
    
    export const createConversationMessageBody = zod.object({
      "transcript": zod.string().optional().describe('The Message transcript will be used to generate audio using text-to-speech'),
      "links": zod.array(zod.string()).optional().describe('Array of links to be attached to the message'),
      "from_message_type": zod.enum(['PreRecorded', 'NewMessage', 'Forward']).default(createConversationMessageBodyFromMessageTypeDefault).describe('From Message type'),
      "from_message_id": zod.string().optional().describe('Message ID to be used as a base for the new message. (Optional only when from_message_type is NewMessage)')
    })
  • TypeScript interface definition for CreateConversationMessage, matching the Zod body schema.
    export interface CreateConversationMessage {
      /** The Message transcript will be used to generate audio using text-to-speech */
      transcript?: string;
      /** Array of links to be attached to the message */
      links?: string[];
      /** From Message type */
      from_message_type?: CreateConversationMessageFromMessageType;
      /** Message ID to be used as a base for the new message. (Optional only when from_message_type is NewMessage) */
      from_message_id?: string;
    }
  • Generated API client helper function simplifiedApi.createConversationMessage that performs the HTTP POST request to the Carbon Voice API endpoint to create the conversation message.
    const createConversationMessage = (
      id: string,
      createConversationMessage: CreateConversationMessage,
      options?: SecondParameter<typeof mutator>,
    ) => {
      return mutator<GetMessageResponse>(
        {
          url: `/simplified/messages/conversation/${id}`,
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          data: createConversationMessage,
        },
        options,
      );
    };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PhononX/cv-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server