create_omi_conversation
Generate Omi conversations by inputting text, metadata, and optional geolocation. Designed for AI assistants to store and manage user interactions via the Omi MCP Server.
Instructions
Creates a new Omi conversation with text content and metadata
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| finished_at | No | When the conversation/event ended in ISO 8601 format. Optional. | |
| geolocation | No | Location data for the conversation. Optional object containing latitude and longitude. | |
| language | No | Language code (e.g., "en" for English). Optional, defaults to "en". | en |
| started_at | No | When the conversation/event started in ISO 8601 format. Optional. | |
| text | Yes | The full text content of the conversation | |
| text_source | Yes | Source of the text content. Required. Options: "audio_transcript", "message", "other_text". | |
| text_source_spec | No | Additional specification about the source. Optional. | |
| user_id | Yes | The user ID to create the conversation for |
Implementation Reference
- src/index.ts:248-291 (handler)Handler function that constructs a POST request to the Omi API to create a new conversation with provided text and metadata.async ({ text, user_id, text_source, started_at, finished_at, language, geolocation, text_source_spec }) => { try { const url = `https://api.omi.me/v2/integrations/${APP_ID}/user/conversations?uid=${user_id}`; // Construct the body with required parameters const body: Record<string, any> = { text, text_source, language, }; // Add optional parameters only if they are defined if (started_at) body.started_at = started_at; if (finished_at) body.finished_at = finished_at; if (geolocation) body.geolocation = geolocation; if (text_source_spec) body.text_source_spec = text_source_spec; log(`Creating conversation with URL: ${url}`); log(`Request body: ${JSON.stringify(body)}`); const response = await fetch(url, { method: 'POST', headers: { Authorization: `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify(body), }); log(`Response status: ${response.status}`); if (!response.ok) { const errorText = await response.text(); throw new Error(`Failed to create conversation: ${response.status} ${response.statusText} - ${errorText}`); } return { content: [{ type: 'text', text: '{}' }], }; } catch (error) { log(`Error creating conversation: ${error}`); throw new Error(`Failed to create conversation: ${error instanceof Error ? error.message : String(error)}`); } }
- src/index.ts:231-247 (schema)Zod input schema defining parameters for creating an Omi conversation, including text, user_id, text_source, optional timestamps, language, geolocation, and text_source_spec.text: z.string().describe('The full text content of the conversation'), user_id: z.string().describe('The user ID to create the conversation for'), text_source: z .enum(['audio_transcript', 'message', 'other_text']) .describe('Source of the text content. Required. Options: "audio_transcript", "message", "other_text".'), started_at: z.string().optional().describe('When the conversation/event started in ISO 8601 format. Optional.'), finished_at: z.string().optional().describe('When the conversation/event ended in ISO 8601 format. Optional.'), language: z.string().default('en').describe('Language code (e.g., "en" for English). Optional, defaults to "en".'), geolocation: z .object({ latitude: z.number().describe('Latitude coordinate. Required when geolocation is provided.'), longitude: z.number().describe('Longitude coordinate. Required when geolocation is provided.'), }) .optional() .describe('Location data for the conversation. Optional object containing latitude and longitude.'), text_source_spec: z.string().optional().describe('Additional specification about the source. Optional.'), },
- src/index.ts:227-292 (registration)Registration of the 'create_omi_conversation' tool on the MCP server using server.tool(), including description, input schema, and inline handler.server.tool( 'create_omi_conversation', 'Creates a new Omi conversation with text content and metadata', { text: z.string().describe('The full text content of the conversation'), user_id: z.string().describe('The user ID to create the conversation for'), text_source: z .enum(['audio_transcript', 'message', 'other_text']) .describe('Source of the text content. Required. Options: "audio_transcript", "message", "other_text".'), started_at: z.string().optional().describe('When the conversation/event started in ISO 8601 format. Optional.'), finished_at: z.string().optional().describe('When the conversation/event ended in ISO 8601 format. Optional.'), language: z.string().default('en').describe('Language code (e.g., "en" for English). Optional, defaults to "en".'), geolocation: z .object({ latitude: z.number().describe('Latitude coordinate. Required when geolocation is provided.'), longitude: z.number().describe('Longitude coordinate. Required when geolocation is provided.'), }) .optional() .describe('Location data for the conversation. Optional object containing latitude and longitude.'), text_source_spec: z.string().optional().describe('Additional specification about the source. Optional.'), }, async ({ text, user_id, text_source, started_at, finished_at, language, geolocation, text_source_spec }) => { try { const url = `https://api.omi.me/v2/integrations/${APP_ID}/user/conversations?uid=${user_id}`; // Construct the body with required parameters const body: Record<string, any> = { text, text_source, language, }; // Add optional parameters only if they are defined if (started_at) body.started_at = started_at; if (finished_at) body.finished_at = finished_at; if (geolocation) body.geolocation = geolocation; if (text_source_spec) body.text_source_spec = text_source_spec; log(`Creating conversation with URL: ${url}`); log(`Request body: ${JSON.stringify(body)}`); const response = await fetch(url, { method: 'POST', headers: { Authorization: `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify(body), }); log(`Response status: ${response.status}`); if (!response.ok) { const errorText = await response.text(); throw new Error(`Failed to create conversation: ${response.status} ${response.statusText} - ${errorText}`); } return { content: [{ type: 'text', text: '{}' }], }; } catch (error) { log(`Error creating conversation: ${error}`); throw new Error(`Failed to create conversation: ${error instanceof Error ? error.message : String(error)}`); } } );