# Language Codes Source: https://docs.meetgeek.ai/api/api-reference/v1/appendix-language-codes | Code | Locale | | ------------ | -------------------------------- | | `af-ZA` | Afrikaans (South Africa) | | `sq-AL` | Albanian (Albania) | | `am-ET` | Amharic (Ethiopia) | | `ar-DZ` | Arabic (Algeria) | | `ar-BH` | Arabic (Bahrain) | | `ar-EG` | Arabic (Egypt) | | `ar-IQ` | Arabic (Iraq) | | `ar-IL` | Arabic (Israel) | | `ar-JO` | Arabic (Jordan) | | `ar-KW` | Arabic (Kuwait) | | `ar-LB` | Arabic (Lebanon) | | `ar-LY` | Arabic (Libya) | | `ar-MA` | Arabic (Morocco) | | `ar-OM` | Arabic (Oman) | | `ar-QA` | Arabic (Qatar) | | `ar-SA` | Arabic (Saudi Arabia) | | `ar-SY` | Arabic (Syria) | | `ar-PS` | Arabic (Palestine) | | `ar-TN` | Arabic (Tunisia) | | `ar-AE` | Arabic (United Arab Emirates) | | `ar-YE` | Arabic (Yemen) | | `hy-AM` | Armenian (Armenia) | | `az-AZ` | Azerbaijani (Azerbaijan) | | `eu-ES` | Basque (Spain) | | `bn-BD` | Bengali (Bangladesh) | | `bn-IN` | Bengali (India) | | `bs-BA` | Bosnian (Bosnia and Herzegovina) | | `bg-BG` | Bulgarian (Bulgaria) | | `my-MM` | Burmese (Myanmar) | | `ca-ES` | Catalan (Spain) | | `zh-HK` | Chinese (Hong Kong) | | `zh-CN` | Chinese (China) | | `zh-TW` | Chinese (Taiwan) | | `hr-HR` | Croatian (Croatia) | | `cs-CZ` | Czech (Czech Republic) | | `da-DK` | Danish (Denmark) | | `nl-BE` | Dutch (Belgium) | | `nl-NL` | Dutch (Netherlands) | | `en-AU` | English (Australia) | | `en-CA` | English (Canada) | | `en-GH` | English (Ghana) | | `en-HK` | English (Hong Kong) | | `en-IN` | English (India) | | `en-IE` | English (Ireland) | | `en-KE` | English (Kenya) | | `en-NZ` | English (New Zealand) | | `en-NG` | English (Nigeria) | | `en-PK` | English (Pakistan) | | `en-PH` | English (Philippines) | | `en-SG` | English (Singapore) | | `en-ZA` | English (South Africa) | | `en-TZ` | English (Tanzania) | | `en-GB` | English (United Kingdom) | | `en-US` | English (United States) | | `et-EE` | Estonian (Estonia) | | `fil-PH` | Filipino (Philippines) | | `fi-FI` | Finnish (Finland) | | `fr-BE` | French (Belgium) | | `fr-CA` | French (Canada) | | `fr-FR` | French (France) | | `fr-CH` | French (Switzerland) | | `gl-ES` | Galician (Spain) | | `ka-GE` | Georgian (Georgia) | | `de-AT` | German (Austria) | | `de-DE` | German (Germany) | | `de-CH` | German (Switzerland) | | `el-GR` | Greek (Greece) | | `gu-IN` | Gujarati (India) | | `he-IL` | Hebrew (Israel) | | `hi-IN` | Hindi (India) | | `hu-HU` | Hungarian (Hungary) | | `is-IS` | Icelandic (Iceland) | | `id-ID` | Indonesian (Indonesia) | | `it-IT` | Italian (Italy) | | `it-CH` | Italian (Switzerland) | | `ja-JP` | Japanese (Japan) | | `jv-ID` | Javanese (Indonesia) | | `kn-IN` | Kannada (India) | | `kk-KZ` | Kazakh (Kazakhstan) | | `km-KH` | Khmer (Cambodia) | | `ko-KR` | Korean (South Korea) | | `lo-LA` | Lao (Laos) | | `lv-LV` | Latvian (Latvia) | | `lt-LT` | Lithuanian (Lithuania) | | `mk-MK` | Macedonian (North Macedonia) | | `ms-MY` | Malay (Malaysia) | | `ml-IN` | Malayalam (India) | | `mt-MT` | Maltese (Malta) | | `mr-IN` | Marathi (India) | | `mn-MN` | Mongolian (Mongolia) | | `ne-NP` | Nepali (Nepal) | | `no-NO` | Norwegian (Norway) | | `fa-IR` | Persian (Iran) | | `pl-PL` | Polish (Poland) | | `pt-BR` | Portuguese (Brazil) | | `pt-PT` | Portuguese (Portugal) | | `pa-Guru-IN` | Punjabi (Gurmukhi, India) | | `ro-RO` | Romanian (Romania) | | `ru-RU` | Russian (Russia) | | `sr-RS` | Serbian (Serbia) | | `si-LK` | Sinhala (Sri Lanka) | | `sk-SK` | Slovak (Slovakia) | | `sl-SI` | Slovenian (Slovenia) | | `es-AR` | Spanish (Argentina) | | `es-BO` | Spanish (Bolivia) | | `es-CL` | Spanish (Chile) | | `es-CO` | Spanish (Colombia) | | `es-CR` | Spanish (Costa Rica) | | `es-CU` | Spanish (Cuba) | | `es-DO` | Spanish (Dominican Republic) | | `es-EC` | Spanish (Ecuador) | | `es-SV` | Spanish (El Salvador) | | `es-GQ` | Spanish (Equatorial Guinea) | | `es-GT` | Spanish (Guatemala) | | `es-HN` | Spanish (Honduras) | | `es-MX` | Spanish (Mexico) | | `es-NI` | Spanish (Nicaragua) | | `es-PA` | Spanish (Panama) | | `es-PY` | Spanish (Paraguay) | | `es-PE` | Spanish (Peru) | | `es-PR` | Spanish (Puerto Rico) | | `es-ES` | Spanish (Spain) | | `es-US` | Spanish (United States) | | `es-UY` | Spanish (Uruguay) | | `es-VE` | Spanish (Venezuela) | | `su-ID` | Sundanese (Indonesia) | | `sw-KE` | Swahili (Kenya) | | `sw-TZ` | Swahili (Tanzania) | | `sv-SE` | Swedish (Sweden) | | `ta-IN` | Tamil (India) | | `ta-MY` | Tamil (Malaysia) | | `ta-SG` | Tamil (Singapore) | | `ta-LK` | Tamil (Sri Lanka) | | `te-IN` | Telugu (India) | | `th-TH` | Thai (Thailand) | | `tr-TR` | Turkish (Turkey) | | `uk-UA` | Ukrainian (Ukraine) | | `ur-IN` | Urdu (India) | | `ur-PK` | Urdu (Pakistan) | | `uz-UZ` | Uzbek (Uzbekistan) | | `vi-VN` | Vietnamese (Vietnam) | | `zu-ZA` | Zulu (South Africa) | # Template Names Source: https://docs.meetgeek.ai/api/api-reference/v1/appendix-template-names List of available template names: `1:1 Meeting` `Board meeting` `Brainstorming session` `Customer discovery call` `Customer onboarding` `General meeting` `Product demo` `Screening interview` `Startup discovery call` `Weekly team meetin` # Webhooks Source: https://docs.meetgeek.ai/api/api-reference/v1/appendix-webhooks ## Overview Webhooks provide a way for your application to receive real-time notifications about specific events. By configuring webhooks, you can automate workflows and seamlessly integrate our platform with your application. ## Configuration To set up a webhook, follow these steps: 1. **Navigate to Settings:** Go to the [Integrations Page](https://app.meetgeek.ai/integrations) and open the **Public API** section; 2. **Enter Webhook URL:** Specify the endpoint where webhook events should be sent; 3. **Save Changes:** Click **Save** to activate the webhook. ## Event Notifications When a meeting analysis is completed, the system sends three `POST` requests to the configured webhook URL. The request payloads are in JSON format, as shown below: #### Successful Analysis: ```json theme={null} { "message": "File analyzed successfully", "meeting_id": "9433976b-cfa3-4373-9afb-eb0b7a5915df" } ``` #### Failed Analysis: ```json theme={null} { "message": "File analyzed failed" } ``` Your server must respond with an `HTTP 200 OK` status code and no response body to acknowledge receipt of the webhook. The second and third POST requests are sent only as retries in case the initial request is not acknowledged. If your server successfully responds with 200 OK, no further retries will be made. ## Team-Level Webhooks For meetings that are shared with a team, webhooks are triggered for all team members who have view access to the meeting. This ensures that relevant users receive timely notifications about the meeting’s analysis status. The meeting owner must have Share Access to the teams they wish to share with. If they do not have Share Access, the webhook notification will be sent only to them. To manage access permissions, go to the [Team Sharing](https://app.meetgeek.ai/teams) page and update the sharing settings for each team member. ## Webhook Security To ensure the authenticity and integrity of webhook payloads, MeetGeek adds a new header: ```http theme={null} X-MG-Signature: ``` ### How it works * MeetGeek computes an HMAC SHA-256 of the exact raw request body (`body_bytes`), using the configured secret; * Clients should recompute the HMAC and compare it against the header using a constant-time comparison function to avoid timing attacks. ### Verification Examples ```python Python theme={null} import hmac import hashlib def is_valid(secret: str, body: bytes, sig_header: str) -> bool: expected = hmac.new( key=secret.encode(), msg=body, digestmod=hashlib.sha256 ).hexdigest() return hmac.compare_digest(f"{expected}", sig_header) ``` ```go Go theme={null} import ( "crypto/hmac" "crypto/sha256" "encoding/hex" ) func IsValid(secret []byte, body []byte, sigHeader string) bool { mac := hmac.New(sha256.New, secret) mac.Write(body) expected := hex.EncodeToString(mac.Sum(nil)) return hmac.Equal([]byte(expected), []byte(sigHeader)) } ``` ```javascript Node.js theme={null} const crypto = require('crypto'); // body must be raw buffer from req.body function isValid(secret, body, sigHeader) { const expected = crypto .createHmac('sha256', secret) .update(body) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(sigHeader) ); } ``` ```java Java (Spring Boot) theme={null} import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.MessageDigest; public static boolean isValidSignature(String secret, byte[] body, String headerSig) throws Exception { Mac hmac = Mac.getInstance("HmacSHA256"); hmac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); byte[] hash = hmac.doFinal(body); String expected = bytesToHex(hash); return MessageDigest.isEqual(expected.getBytes("UTF-8"), headerSig.getBytes("UTF-8")); } private static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) sb.append(String.format("%02x", b)); return sb.toString(); } ``` ### Best Practices * Always use **constant-time comparison** (`compare_digest`, `hmac.Equal`, `MessageDigest.isEqual`) to prevent timing attacks; * Compute the HMAC over the **exact raw request body** — please avoid re-serializing or formatting it; * If validation fails, return **HTTP 401 Unauthorized** and do not process the request. # Delete meeting Source: https://docs.meetgeek.ai/api/api-reference/v1/delete-meeting DELETE /v1/meetings/{meetingId} Deletes a meeting given a meeting id # Download recording Source: https://docs.meetgeek.ai/api/api-reference/v1/download POST /v1/meetings/{meetingId}/download Retrieves a temporary download link for a specific meeting recording This feature is available starting with the Pro plan. The download link is valid for up to 4 hours from the time of generation. Within that 4-hour window, repeated requests for the same recording will return the same download link. A maximum of 5 simultaneous downloads is allowed per meeting id. Additional requests will be denied until active downloads complete. Please only share the download link only with people or automations you trust, as anyone possessing the link will be able to download the meeting recording. # Highlights Source: https://docs.meetgeek.ai/api/api-reference/v1/highlights GET /v1/meetings/{meetingId}/highlights Get all highlights by meeting id # Insights Source: https://docs.meetgeek.ai/api/api-reference/v1/insights GET /v1/meetings/{meetingId}/insights Get all insights by meeting id # Get meeting Source: https://docs.meetgeek.ai/api/api-reference/v1/meeting GET /v1/meetings/{meetingId} Get meeting details given a meeting id # Get meetings Source: https://docs.meetgeek.ai/api/api-reference/v1/meetings GET /v1/meetings Retrieves paginated past meetings of a user # Summary Source: https://docs.meetgeek.ai/api/api-reference/v1/summary GET /v1/meetings/{meetingId}/summary Get summary given the meeting id # Team Meetings Source: https://docs.meetgeek.ai/api/api-reference/v1/team-meetings GET /v1/teams/{teamId}/meetings Retrieves paginated past meetings of a user # Teams Source: https://docs.meetgeek.ai/api/api-reference/v1/teams GET /v1/teams Get teams of user # Transcript Source: https://docs.meetgeek.ai/api/api-reference/v1/transcript GET /v1/meetings/{meetingId}/transcript Get all transcript sentences by meeting id # Upload recording Source: https://docs.meetgeek.ai/api/api-reference/v1/upload POST /v1/upload Upload a video or audio file for analysis and receive a notification upon completion When providing a download URL, ensure that the link is publicly accessible and triggers the download immediately upon access. If the link does not function as expected, verify its settings. If the issue persists, contact our support team for assistance. # Authorization Source: https://docs.meetgeek.ai/api/getting-started/authorization Authenticate requests with the MeetGeek API ## Overview We implement token-based authentication, enabling only authorized users to access data. ## Token-Based Authentication All API endpoints are authenticated using Bearer tokens. To make an authenticated request, add the `Authorization` header followed by the word Bearer and your API key. ```javascript theme={null} Authorization: Bearer your_api_key ``` ## Acquiring a Token For service accounts and enterprise company-wide integrations, please use [this form](https://y3srtzd46y3.typeform.com/to/mNnNw2a8) to talk to our team and request a custom quote. To access the public API, you will need an API key. Follow these steps to obtain your key: 1. Sign up for an account at [app.meetgeek.ai](https://app.meetgeek.ai) 2. Generate your API key by going to [Integrations](https://app.meetgeek.ai/integrations) -> Public API Card. 3. (Optional) Use the Webhook URL to receive notifications when the analysis of an uploaded meeting is finished. 4. Copy and store your API key securely *** # Introduction Source: https://docs.meetgeek.ai/api/getting-started/introduction Welcome to the MeetGeek open API docs. We're actively developing new versions of the public API. You can check our roadmap and log a feature request using [this form](https://roadmap.meetgeek.ai/?b=6697cd9275f931bf1aafcbc0) ## Quickstart Follow this quick guide to perform your first MeetGeek REST API request. ## 1. Regional Hosting MeetGeek offers three API endpoints hosted in different regions: two in Europe and one in the United States. By default, requests sent to `https://api.meetgeek.ai` are routed to our European data center. If you need to specify a region explicitly, you can use the appropriate endpoint listed below. These endpoints replace the base URL for all REST API calls, ensuring your requests are directed to the correct regional infrastructure. | Region | REST Endpoint to use | | ----------------------------------------------- | ---------------------------- | | [**Default (Europe)**](https://app.meetgeek.ai) | `https://api.meetgeek.ai` | | [**Europe**](https://app.meetgeek.ai) | `https://api-eu.meetgeek.ai` | | [**US**](https://us.meetgeek.ai) | `https://api-us.meetgeek.ai` | API keys are region-specific: Each region requires its own API key. If you need to make requests to multiple regions, you must generate and use a separate API key for each. ## 2. Obtain Credentials For service accounts and enterprise company-wide integrations, please use [this form](https://y3srtzd46y3.typeform.com/to/mNnNw2a8) to talk to our team and request a custom quote. To access the public API, you will need an API key. Follow these steps to obtain your key: 1. Sign up for an account at [app.meetgeek.ai](https://app.meetgeek.ai) 2. Generate your API key by going to [Integrations](https://app.meetgeek.ai/integrations) -> Public API Card. 3. (Optional) Use the Webhook URL to receive notifications when the analysis of an uploaded meeting is finished. 4. Copy and store your API key securely ## 3. Your first request Visit [our playground](../api-reference/endpoint/) for examples on how create authenticated requests # Limits Source: https://docs.meetgeek.ai/api/getting-started/limits API rate and file size limits ## Overview It's important to understand the limitations of our API for a seamless experience and uninterrupted usage. If you have specific requirements please contact us using [this form](https://y3srtzd46y3.typeform.com/to/mNnNw2a8) or through the messenger. ## API rate Limits | Plan | Limit | Uploads | | --------------------- | ----------------------- | --------------------- | | Free & Pro | **100** requests/day | **10** uploads/day | | Business & Enterprise | **100** requests/minute | **10** uploads/minute | # Authentication Source: https://docs.meetgeek.ai/mcp/cloud-mcp/authentication Authenticate with the MeetGeek Cloud MCP server. ## Authentication page Authentication for the Cloud MCP server is handled through MeetGeek's auth page: ``` https://auth.meetgeek.ai ``` You will be redirected there automatically when connecting through your AI assistant (ChatGPT or Claude). There is nothing to configure manually. ## Authentication flow 1. Your AI assistant redirects you to [auth.meetgeek.ai](https://auth.meetgeek.ai). 2. Sign in with **Google** or **Microsoft** — whichever is linked to your MeetGeek workspace. 3. Approve the requested permissions. 4. You are redirected back to your AI assistant, now connected. # Introduction Source: https://docs.meetgeek.ai/mcp/cloud-mcp/introduction Use MeetGeek MCP over the cloud. ## Overview The MeetGeek Cloud MCP server runs remotely and connects MCP-compatible clients, such as Claude Desktop, Cursor, or other AI tools, to your MeetGeek meeting data over the network. It exposes meeting context (transcripts, summaries, metadata) through a standardized interface, allowing clients to access and use this data without relying on internal APIs. With the Cloud MCP server you can: * Query transcripts, summaries, and highlights from your meetings * Ask questions about past meetings using natural language * Automate workflows that rely on meeting context * Integrate meeting data across distributed systems and services The Cloud MCP server requires a MeetGeek API key and network access. ## Next steps * [Setup](/mcp/cloud-mcp/setup) — configure the cloud server * [Authentication](/mcp/cloud-mcp/authentication) — connect your MeetGeek API key * [Tools](/mcp/cloud-mcp/tools) — available tools and example queries # Setup Source: https://docs.meetgeek.ai/mcp/cloud-mcp/setup Connect to the MeetGeek Cloud MCP server in ChatGPT or Claude. ## Overview The MeetGeek Cloud MCP server is hosted by MeetGeek and accessible over HTTPS. There is nothing to install — you connect through your AI assistant's built-in integration store or developer settings. ## Add MeetGeek MCP **Via the Apps store (recommended)** 1. Open ChatGPT and go to the **Apps** tab in the left sidebar. 2. Search for **MeetGeek** and click **Connect**. 3. Complete the authentication flow at [auth.meetgeek.ai](https://auth.meetgeek.ai). **Via Developer Mode** 1. In ChatGPT settings, enable **Developer Mode**. 2. Go to **Apps → Add app** and enter the MeetGeek MCP endpoint: ``` https://mcp.meetgeek.ai/mcp ``` 3. Complete the authentication flow at [auth.meetgeek.ai](https://auth.meetgeek.ai). **Via the Connectors tab (recommended)** 1. Open Claude and go to the **Connectors** tab. 2. Find **MeetGeek** and click **Connect**. 3. Complete the authentication flow at [auth.meetgeek.ai](https://auth.meetgeek.ai). **Via Developer Mode** 1. In Claude settings, enable developer/custom connector mode. 2. Add a new connector pointing to: ``` https://mcp.meetgeek.ai/mcp ``` 3. Complete the authentication flow at [auth.meetgeek.ai](https://auth.meetgeek.ai). The Cloud MCP server is always up to date. You never need to update anything to get new tools or bug fixes. # Tools Source: https://docs.meetgeek.ai/mcp/cloud-mcp/tools Available tools and example prompts for the MeetGeek Cloud MCP server. ### `fetch_user_meetings` **List User Meetings** — Retrieve a paginated list of the authenticated user's past meetings. Returns meeting metadata including IDs, titles, timestamps, and participant counts. | Parameter | Type | Required | Description | | --------- | ------ | -------- | --------------------------------------------------------------------------- | | `cursor` | string | No | Pagination cursor from a previous response. Leave empty for the first page. | | `limit` | number | No | Number of meetings to return per page (1–100, default 10) | *** ### `fetch_meeting_metadata` **Get Meeting Metadata** — Retrieve metadata for a specific meeting. Returns title, start/end timestamps, duration, participants, recording status, and processing state. | Parameter | Type | Required | Description | | ------------ | ------ | -------- | ---------------------------------------------------------------- | | `meeting_id` | string | Yes | Meeting ID (from `fetch_user_meetings` or `fetch_team_meetings`) | *** ### `fetch_meeting_transcript` **Get Meeting Transcript** — Retrieve the full text transcript of a meeting. Returns timestamped segments with speaker identification. Use pagination for long meetings. | Parameter | Type | Required | Description | | ------------ | ------ | -------- | -------------------------------------------------------- | | `meeting_id` | string | Yes | Meeting ID | | `cursor` | string | No | Pagination cursor. Omit for the first page. | | `limit` | number | No | Number of transcript segments to return per page (1–500) | *** ### `fetch_meeting_highlights` **Get Meeting Highlights** — Retrieve AI-generated highlights: key moments, important decisions, and notable quotes with timestamps and speaker context. | Parameter | Type | Required | Description | | ------------ | ------ | -------- | ----------- | | `meeting_id` | string | Yes | Meeting ID | *** ### `fetch_meeting_summary` **Get Meeting Summary** — Retrieve an AI-generated summary covering main topics, key decisions, action items, and next steps. | Parameter | Type | Required | Description | | ------------ | ------ | -------- | ----------- | | `meeting_id` | string | Yes | Meeting ID | *** ### `fetch_meeting_insights` **Get Meeting Insights** — Retrieve AI-powered analytics including sentiment analysis, topic breakdown, speaking time distribution, engagement metrics, and template-based custom insights. | Parameter | Type | Required | Description | | ------------ | ------ | -------- | ----------- | | `meeting_id` | string | Yes | Meeting ID | *** ### `fetch_team_meetings` **List Team Meetings** — Retrieve a paginated list of meetings for a specific team. | Parameter | Type | Required | Description | | --------- | ------ | -------- | --------------------------------------------- | | `team_id` | string | Yes | Team ID | | `cursor` | string | No | Pagination cursor. Omit for the first page. | | `limit` | number | No | Number of meetings to return per page (1–100) | *** ### `submit_recording_for_analysis` **Upload Recording for Analysis** — Submit an audio or video file by public URL for async processing. Returns a meeting ID once queued; transcript, summary, highlights, and insights become available after processing completes. The URL must be a direct download link to the media file (MP3, MP4, WAV, M4A, WEBM). Links to preview pages or file viewers are not supported. | Parameter | Type | Required | Description | | --------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `download_url` | string | Yes | Publicly accessible direct download URL of the audio/video file | | `language_code` | string | No | BCP-47 language code for transcription (e.g. `en-US`, `es-ES`, `fr-FR`). Defaults to `en-US`. See [language codes](/api/api-reference/v1/appendix-language-codes). | | `template_name` | string | No | Analysis template to apply. Determines which insights and summaries are generated. See [template names](/api/api-reference/v1/appendix-template-names). | *** ## Example prompts ``` List my last 10 meetings. ``` ``` Show me the transcript of meeting ID abc123. ``` ``` What were the highlights from my last meeting? ``` ``` Summarize meeting abc123. ``` ``` What insights are available for meeting abc123? ``` ``` Show me the past meetings for team ID team456. ``` ``` Upload the recording at https://example.com/call.mp4 in English. ``` # Introduction Source: https://docs.meetgeek.ai/mcp/getting-started/introduction Connect your AI assistant to MeetGeek meeting data with MCP. ## What is MeetGeek MCP? MeetGeek MCP (Model Context Protocol) is a standardized interface that lets AI assistants — such as ChatGPT, Claude, and other MCP-compatible clients — access your meeting data directly. Instead of switching between your AI tool and the MeetGeek app, you can ask questions and trigger actions from within the assistant's chat interface: * "Summarize my last meeting with the Acme team." * "What action items came out of yesterday's standup?" * "Upload this recording and analyze it in English." MeetGeek MCP exposes a set of tools that the AI can call on your behalf. All data is fetched in real time from your MeetGeek workspace. ## Two ways to connect MeetGeek MCP comes in two flavors depending on your use case: | | [Local MCP](/mcp/local-mcp/introduction) | [Cloud MCP](/mcp/cloud-mcp/introduction) | | ---------------- | ---------------------------------------- | ---------------------------------------- | | **Transport** | stdio (local process) | HTTP Streamable | | **Installation** | Node.js package on your machine | Nothing to install | | **Auth** | API key | OAuth via auth.meetgeek.ai | | **Best for** | Developers, power users | Everyone | Not sure which to pick? See [Local vs Cloud](/mcp/getting-started/local-vs-cloud). # Local vs Cloud Source: https://docs.meetgeek.ai/mcp/getting-started/local-vs-cloud Choose the right MeetGeek MCP integration for your setup. ## Overview MeetGeek offers two MCP server options. Both expose the same set of tools and meeting data — the difference is in how they run and how they authenticate. The Local MCP server runs as a process on your own machine. Your MCP client (e.g. Claude Desktop, Cursor) spawns it on demand and communicates over **stdio**. **Choose Local MCP if you:** * Are a developer or technical user comfortable with Node.js * Want full control over the server process and its environment * Are using a desktop MCP client like Claude Desktop or Cursor * Prefer to authenticate with an API key rather than OAuth | | | | --------------------- | -------------------------------------------- | | **Transport** | stdio | | **Installation** | Node.js package on your machine | | **Authentication** | API key | | **Updates** | Manual (`npm update`) | | **Supported clients** | Claude Desktop, Cursor, any stdio MCP client | [Get started with Local MCP →](/mcp/local-mcp/introduction) The Cloud MCP server is hosted by MeetGeek. Your AI assistant connects to it over **HTTPS** using the Streamable HTTP transport. Nothing is installed on your machine. **Choose Cloud MCP if you:** * Want the simplest possible setup with nothing to install * Are using ChatGPT or Claude through their web or mobile interfaces * Prefer to authenticate with your existing MeetGeek account (Google or Microsoft) * Want automatic updates without managing a local package | | | | --------------------- | ------------------------------------------------------ | | **Transport** | HTTP Streamable | | **Installation** | None | | **Authentication** | OAuth via [auth.meetgeek.ai](https://auth.meetgeek.ai) | | **Updates** | Automatic | | **Supported clients** | ChatGPT, Claude (web/mobile), any HTTP MCP client | [Get started with Cloud MCP →](/mcp/cloud-mcp/introduction) # Authentication Source: https://docs.meetgeek.ai/mcp/local-mcp/authentication Authenticate the Local MCP server with your MeetGeek API key. ## API key The Local MCP server authenticates using your MeetGeek API key. This key is passed as an environment variable — it is never stored on disk by the server itself. ### Obtaining your API key 1. Log in to [app.meetgeek.ai](https://app.meetgeek.ai) 2. Go to **Integrations → Public API** 3. Generate a new API key and copy it API keys are region-specific. Make sure the key matches the region you intend to use (`api.meetgeek.ai`, `api-eu.meetgeek.ai`, or `api-us.meetgeek.ai`). ### Passing the key to the server Set the `MEETGEEK_API_KEY` environment variable in your MCP client configuration: ```json theme={null} { "env": { "MEETGEEK_API_KEY": "" } } ``` Alternatively, you can export it in your shell profile and reference it from there — but setting it directly in the client config is recommended to avoid accidental exposure. ## Scopes The Local MCP server uses the same permissions as the REST API key. It can access all resources that are visible to the authenticated user, including meetings, transcripts, summaries, highlights, and team data. # Introduction Source: https://docs.meetgeek.ai/mcp/local-mcp/introduction Run MeetGeek MCP locally on your machine. ## Overview The MeetGeek Local MCP server runs on your machine and connects MCP-compatible clients, such as Claude Desktop, Cursor, or other AI tools, directly to your MeetGeek meeting data. It communicates over **stdio** (standard input/output), meaning no ports are opened and no network exposure is required. The server process is started by the MCP client on demand. With the Local MCP server you can: * Query transcripts, summaries, and highlights from your meetings * Ask questions about past meetings using natural language * Automate workflows that rely on meeting context * Keep all data processing local to your environment The Local MCP server requires Node.js 18+ installed on your machine. ## Next steps * [Setup](/mcp/local-mcp/setup) — install and configure the local server * [Authentication](/mcp/local-mcp/authentication) — connect your MeetGeek API key * [Tools](/mcp/local-mcp/tools) — available tools and example queries # Setup Source: https://docs.meetgeek.ai/mcp/local-mcp/setup Install and configure the MeetGeek Local MCP server. ## Prerequisites * Node.js 18 or later * A MeetGeek account with a Public API key ([get one here](https://app.meetgeek.ai/integrations)) * An MCP-compatible client (e.g. Claude Desktop, Cursor) ## Installation Install the MeetGeek MCP server globally via npm: ```bash theme={null} npm install -g @meetgeek/mcp-server ``` ## Configure your MCP client Add the following entry to your MCP client's configuration file. Edit the following file based on your operating system: * macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` * Windows: `%APPDATA%\Claude\claude_desktop_config.json` Ensure the file contains the following configuration: ```json theme={null} { "mcpServers": { "meetgeek": { "command": "meetgeek-mcp", "env": { "MEETGEEK_API_KEY": "your_api_key_here" } } } } ``` Open **Settings → MCP** and add a new server entry: ```json theme={null} { "name": "meetgeek", "command": "meetgeek-mcp", "env": { "MEETGEEK_API_KEY": "your_api_key_here" } } ``` ## Verify the connection Restart your MCP client. The MeetGeek tools should appear in the available tools list. You can test by asking your AI assistant: > "List my recent MeetGeek meetings" # Tools Source: https://docs.meetgeek.ai/mcp/local-mcp/tools Available tools and example prompts for the MeetGeek Local MCP server. ### `meetings` **List User Meetings** — Retrieves paginated past meetings of a user. | Parameter | Type | Required | Description | | --------- | ------ | -------- | ------------------------------------------ | | `cursor` | string | No | Pagination cursor from a previous response | | `limit` | number | No | Number of meetings to return | *** ### `meetingDetails` **Get Meeting Details** — Fetch full metadata for a specific meeting. | Parameter | Type | Required | Description | | ----------- | ------ | -------- | --------------------- | | `meetingId` | string | Yes | The ID of the meeting | *** ### `transcript` **Get Meeting Transcript** — Get all transcript sentences for a meeting. | Parameter | Type | Required | Description | | ----------- | ------ | -------- | -------------------------------------- | | `meetingId` | string | Yes | The ID of the meeting | | `cursor` | string | No | Pagination cursor | | `limit` | number | No | Number of transcript entries to return | *** ### `highlights` **Get Meeting Highlights** — Get all highlights extracted from a meeting. | Parameter | Type | Required | Description | | ----------- | ------ | -------- | --------------------- | | `meetingId` | string | Yes | The ID of the meeting | *** ### `summary` **Get Meeting Summary** — Get the AI-generated summary for a meeting. | Parameter | Type | Required | Description | | ----------- | ------ | -------- | --------------------- | | `meetingId` | string | Yes | The ID of the meeting | *** ### `insights` **Get Meeting Insights** — Get all structured insights (action items, decisions, etc.) for a meeting. | Parameter | Type | Required | Description | | ----------- | ------ | -------- | --------------------- | | `meetingId` | string | Yes | The ID of the meeting | *** ### `teamMeetings` **List Team Meetings** — Retrieves paginated past meetings for a specific team. | Parameter | Type | Required | Description | | --------- | ------ | -------- | ---------------------------- | | `teamId` | string | Yes | The ID of the team | | `cursor` | string | No | Pagination cursor | | `limit` | number | No | Number of meetings to return | *** ### `uploadRecording` **Upload Recording** — Upload a video or audio file by URL for analysis. A webhook notification is sent upon completion. This tool is write-only and non-idempotent. Each call triggers a new upload and analysis job. | Parameter | Type | Required | Description | | --------------- | ------ | -------- | ----------------------------------------------------------------------------------------------- | | `download_url` | string | Yes | Publicly accessible URL of the audio/video file | | `language_code` | string | Yes | Language of the recording (see [language codes](/api/api-reference/v1/appendix-language-codes)) | | `template_name` | string | No | Summary template to apply (see [template names](/api/api-reference/v1/appendix-template-names)) | *** ## Example prompts ``` List my last 10 meetings. ``` ``` Show me the transcript of meeting ID abc123. ``` ``` What were the highlights from my last meeting? ``` ``` Summarize the meeting with ID abc123. ``` ``` What action items were identified in meeting abc123? ``` ``` Show me the past meetings for team ID team456. ``` ``` Upload the recording at https://example.com/call.mp4 in English. ```