# 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.
```