Skip to main content
Glama
forayconsulting

Zoom Transcript MCP Server

Zoom Transcript MCP Server

An MCP (Model Context Protocol) server for interacting with Zoom Cloud Recording transcripts. This server allows you to list, download, search, and manage your Zoom meeting transcripts through a structured interface.

Features

  • List Meetings: View all available Zoom meetings with recordings

  • Download Transcripts: Download transcripts from specific meetings by ID or UUID

  • Get Recent Transcripts: Automatically download transcripts from recent meetings

  • Search Transcripts: Search across all downloaded transcripts for specific content

  • Organized Storage: Transcripts are stored in a structured file system by month

Related MCP server: Zoom API MCP Server

Prerequisites

  • Node.js (v16 or higher)

  • Zoom Account with Cloud Recording enabled

  • Zoom OAuth App credentials (Account ID, Client ID, Client Secret)

Installation

  1. Clone this repository:

    git clone https://github.com/yourusername/zoom_transcript_mcp.git
    cd zoom_transcript_mcp
  2. Install dependencies:

    npm install
  3. Build the project:

    npm run build

Configuration

Create a .env file in the root directory with the following variables:

ZOOM_ACCOUNT_ID=your_zoom_account_id
ZOOM_CLIENT_ID=your_zoom_client_id
ZOOM_CLIENT_SECRET=your_zoom_client_secret
TRANSCRIPTS_DIR=/path/to/transcripts/directory  # Optional, defaults to ./transcripts

Alternatively, you can configure the server through your MCP settings file:

{
  "mcpServers": {
    "zoom-transcripts": {
      "command": "node",
      "args": ["/path/to/zoom-transcripts-server/build/index.js"],
      "env": {
        "ZOOM_ACCOUNT_ID": "your_zoom_account_id",
        "ZOOM_CLIENT_ID": "your_zoom_client_id",
        "ZOOM_CLIENT_SECRET": "your_zoom_client_secret",
        "TRANSCRIPTS_DIR": "/path/to/transcripts/directory"  // Optional
      }
    }
  }
}

Obtaining Zoom Credentials

  1. Go to the Zoom App Marketplace and sign in

  2. Click "Develop" > "Build App"

  3. Choose "Server-to-Server OAuth" app type

  4. Fill in the required information

  5. Under "Scopes", add the following permissions:

    • cloud_recording:read:list_account_recordings:admin

    • cloud_recording:read:recording:admin

    • cloud_recording:read:list_user_recordings:admin

  6. Save and activate your app

  7. Note your Account ID, Client ID, and Client Secret

Usage

Available Tools

1. list_meetings

Lists available Zoom meetings with recordings.

{
  "dateRange": {
    "from": "2025-01-01",
    "to": "2025-03-31"
  },
  "participant": "John Doe"  // Optional
}

2. download_transcript

Downloads a transcript for a specific meeting.

{
  "meetingId": "123456789"  // Meeting ID or UUID
}

3. get_recent_transcripts

Downloads transcripts from recent meetings.

{
  "count": 5  // Number of recent meetings to fetch (default: 5)
}

4. search_transcripts

Searches across downloaded transcripts for specific content.

{
  "query": "AI discussion",
  "dateRange": {  // Optional
    "from": "2025-01-01",
    "to": "2025-03-31"
  }
}

Example Usage with Claude

<use_mcp_tool>
<server_name>zoom-transcripts</server_name>
<tool_name>search_transcripts</tool_name>
<arguments>
{
  "query": "project timeline"
}
</arguments>
</use_mcp_tool>

Transcript Storage

Transcripts are stored in the following structure:

transcripts/
├── YYYY-MM/
│   ├── YYYY-MM-DD_HH-MM-SS_Meeting-Topic_MeetingID.vtt
│   └── metadata/
│       └── YYYY-MM-DD_HH-MM-SS_Meeting-Topic_MeetingID.json

Each transcript has a corresponding metadata JSON file containing:

  • Meeting ID and UUID

  • Topic

  • Start time and duration

  • Participants (extracted from the transcript)

  • File path to the transcript

Development

Project Structure

zoom_transcript_mcp/
├── src/
│   └── index.ts
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md
└── .env.example

Building

npm run build

Running Locally

node build/index.js

License

MIT

Available Tools

6 tools
check_local_transcriptsC

Check what transcripts are already downloaded and available locally

ParametersJSON Schema
NameRequiredDescriptionDefault
dateRangeNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool checks for locally available transcripts, implying a read-only operation, but doesn't specify whether it requires file system access, what happens if no transcripts exist, or the format of the return value (e.g., list of files, metadata). For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action ('check') and resource ('transcripts'), making it easy to parse. Every part of the sentence earns its place by conveying essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (1 parameter with nested objects, no output schema, and no annotations), the description is incomplete. It doesn't address parameter usage, return values, or behavioral details like error handling. For a tool that interacts with local files and has date-based filtering, more context is needed to guide effective use by an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 1 parameter ('dateRange') with 0% description coverage in the schema (no descriptions for 'from' or 'to' in the nested object). The description doesn't mention any parameters, failing to compensate for the low schema coverage. It doesn't explain what 'dateRange' does (e.g., filters transcripts by date) or provide context for its use, leaving parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('check') and resource ('transcripts that are already downloaded and available locally'), making the purpose understandable. It distinguishes from siblings like 'download_transcript' (which downloads) and 'get_recent_transcripts' (which might fetch from a remote source). However, it doesn't explicitly contrast with 'list_meetings' or 'search_transcripts', leaving some sibling differentiation incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing downloaded transcripts first), exclusions, or comparisons to siblings like 'get_recent_transcripts' (which might retrieve from a server) or 'search_transcripts' (which might search content). This lack of context leaves the agent to infer usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_transcriptA

Download a specific Zoom meeting transcript from the cloud to local storage

ParametersJSON Schema
NameRequiredDescriptionDefault
meetingIdYesZoom meeting ID or UUID

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the action is a download to local storage, implying a read operation, but doesn't disclose behavioral traits like whether it requires authentication, has rate limits, what format the download is in (e.g., text file, PDF), or if it overwrites existing local files. The description adds minimal context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the key information: action, resource, and destination. There's no wasted text, and it's appropriately sized for a simple tool with one parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and a simple input schema, the description is adequate but incomplete. It covers the purpose and destination but lacks details on behavioral aspects (e.g., file format, permissions) and output (e.g., success/failure indicators), which are important for a download operation. It's minimally viable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'meetingId' parameter documented as 'Zoom meeting ID or UUID'. The description doesn't add any further meaning about parameters, such as examples or constraints, so it meets the baseline of 3 where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('download'), target resource ('Zoom meeting transcript'), and destination ('from the cloud to local storage'). It distinguishes from siblings like 'check_local_transcripts' (which checks local storage) and 'get_recent_transcripts' (which likely lists rather than downloads).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a transcript needs to be downloaded to local storage, but it doesn't explicitly state when to use this tool versus alternatives like 'check_local_transcripts' (for local availability) or 'search_transcripts' (for finding transcripts without downloading). No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_action_itemsC

Identify and extract action items, tasks and commitments from meeting transcripts

ParametersJSON Schema
NameRequiredDescriptionDefault
meetingIdYesMeeting ID to extract action items from. Can be either the numeric ID or UUID.
participantNoOptional filter to only show action items from or assigned to a specific participant

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what the tool does but does not describe behavioral traits such as whether it requires specific permissions, how it handles errors, if it has rate limits, or what the output format looks like (e.g., structured list of items). For a tool with no annotations, this lack of detail is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence: 'Identify and extract action items, tasks and commitments from meeting transcripts.' It is front-loaded with the core purpose, has zero wasted words, and is appropriately sized for the tool's complexity. Every part of the sentence earns its place by specifying the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (involving extraction from transcripts), lack of annotations, and no output schema, the description is incomplete. It does not explain what the output looks like (e.g., list of action items with details), potential limitations (e.g., accuracy of extraction), or behavioral aspects like error handling. For a tool with no structured output or annotations, more context is needed to guide the agent effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear documentation for both parameters ('meetingId' and 'participant'). The description does not add any semantic details beyond what the schema provides, such as examples of action item formats or how filtering works. Given the high schema coverage, the baseline score of 3 is appropriate, as the schema adequately covers parameter meanings without extra description value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Identify and extract action items, tasks and commitments from meeting transcripts.' It specifies the verb ('identify and extract'), the resource ('action items, tasks and commitments'), and the source ('meeting transcripts'). However, it does not explicitly differentiate from sibling tools like 'search_transcripts' or 'check_local_transcripts', which might also involve transcript analysis, so it lacks sibling differentiation for a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or exclusions, such as when to prefer 'search_transcripts' for broader queries or 'list_meetings' for meeting overviews. Without such usage guidelines, the agent must infer based on tool names alone, which is insufficient for optimal selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_transcriptsC

Get and download transcripts from recent Zoom meetings. This tool will access the Zoom cloud API to fetch and download recent meeting transcripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of recent meetings to fetch (default: 5)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions accessing the Zoom cloud API and fetching/downloading, but lacks critical behavioral details: whether this requires authentication, rate limits, what 'recent' means (timeframe), if it downloads to a specific location, error handling, or output format. The description is too vague for a tool that interacts with external APIs and performs downloads.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that directly state the tool's action and method. It's front-loaded with the core purpose. However, the second sentence is somewhat redundant ('access...to fetch and download' repeats the action), and it could be more structured by separating behavioral details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (API interaction, downloads, no output schema, and no annotations), the description is incomplete. It doesn't cover authentication needs, output format (e.g., file paths or data structure), error cases, or how 'recent' is defined. For a tool that fetches and downloads data from an external service, this leaves significant gaps for an AI agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'count' parameter well-documented (type, range, default). The description adds no additional parameter semantics beyond what's in the schema—it doesn't explain how 'count' interacts with 'recent' or clarify any other implicit parameters. With high schema coverage, the baseline is 3, and the description doesn't compensate with extra insights.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get and download transcripts from recent Zoom meetings' with the specific action 'access the Zoom cloud API to fetch and download.' It distinguishes from siblings like 'check_local_transcripts' (local vs cloud) and 'download_transcript' (specific vs recent), but doesn't explicitly mention these distinctions. The purpose is clear but sibling differentiation is implied rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'list_meetings' (which might list meetings without transcripts) or 'search_transcripts' (which might search across all transcripts). There's no context about prerequisites, such as needing Zoom cloud access or recent meetings having available transcripts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_meetingsC

List available Zoom meetings with recordings that exist in the cloud

ParametersJSON Schema
NameRequiredDescriptionDefault
dateRangeNo
participantNoFilter by participant name

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that meetings must have 'recordings that exist in the cloud,' which adds some context about data availability. However, it lacks details on permissions, rate limits, pagination, or what the output looks like (e.g., format, fields). This is a significant gap for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It directly states what the tool does, making it easy to parse and understand quickly. Every part of the sentence contributes to clarifying the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (2 parameters, nested objects, no output schema, and no annotations), the description is incomplete. It lacks details on behavioral traits, parameter usage, and output format. While it specifies the resource and a constraint (recordings in the cloud), it doesn't provide enough context for an agent to use the tool effectively without additional assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention any parameters, while the input schema covers 50% of parameters (2 out of 2, with nested object 'dateRange' having descriptions for 'from' and 'to', but 'participant' lacks description). Since schema description coverage is 50% (low), the description should compensate but doesn't. It implies filtering by recordings in the cloud, which isn't reflected in the schema, adding marginal value. Baseline is 3 as schema does some work, but gaps remain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List available Zoom meetings with recordings that exist in the cloud.' It specifies the verb ('List'), resource ('Zoom meetings'), and a key constraint ('with recordings that exist in the cloud'). However, it doesn't explicitly differentiate from sibling tools like 'get_recent_transcripts' or 'search_transcripts,' which appear to be transcript-focused rather than meeting-focused.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions filtering by recordings in the cloud, but doesn't specify prerequisites, exclusions, or compare it to sibling tools. For example, it doesn't clarify if this is for Zoom-specific meetings or how it differs from transcript-related tools in the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_transcriptsB

Search across Zoom meeting transcripts for specific content. This tool will search through locally stored transcripts first.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query
dateRangeNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions searching 'locally stored transcripts first,' which hints at a fallback behavior, but doesn't disclose critical details like what happens if no local transcripts exist, whether it searches remote sources, authentication needs, rate limits, or the format of search results. For a search tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and front-loaded, consisting of two sentences that directly state the tool's purpose and a key behavioral note. Every sentence adds value without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (search functionality with local prioritization), lack of annotations, no output schema, and incomplete parameter documentation, the description is insufficient. It doesn't explain what the search returns, how results are formatted, error conditions, or dependencies on other tools like 'check_local_transcripts.' For a tool with these gaps, more contextual information is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, with the 'query' parameter documented but the 'dateRange' object lacking descriptions for its nested properties. The description adds no specific parameter semantics beyond what the schema provides—it doesn't explain query syntax, date range implications, or default behaviors. With partial schema coverage, the description doesn't compensate for the gaps, resulting in a baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search across Zoom meeting transcripts for specific content.' It specifies the verb ('search'), resource ('Zoom meeting transcripts'), and scope ('specific content'). However, it doesn't explicitly differentiate from sibling tools like 'check_local_transcripts' or 'get_recent_transcripts', which likely have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context with 'This tool will search through locally stored transcripts first,' implying a preference for local data. However, it doesn't explicitly state when to use this tool versus alternatives like 'check_local_transcripts' or 'extract_action_items,' nor does it mention any exclusions or prerequisites for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no ambiguity: checking local transcripts, downloading from cloud, extracting action items, getting recent transcripts, listing meetings, and searching transcripts. The descriptions clearly differentiate their functions, such as distinguishing between local vs. cloud operations and specific tasks like extraction vs. searching.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as check_local_transcripts, download_transcript, and extract_action_items. The naming is predictable and readable throughout, with no deviations in style or convention.

Tool Count5/5

With 6 tools, the server is well-scoped for managing Zoom transcripts, covering core operations like listing, downloading, extracting, and searching. Each tool earns its place by addressing a specific need in the workflow, avoiding bloat or thin coverage.

Completeness4/5

The tool set provides strong coverage for the transcript management domain, including listing, downloading, extracting, and searching. A minor gap exists in update or delete operations for transcripts, but agents can work around this, and the core workflows are well-supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP Server that enables interaction with Zoom's API through the Multi-Agent Conversation Protocol, allowing users to access and control Zoom's functionality via natural language commands.
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP (Multi-Agent Conversation Protocol) Server that enables interaction with the Zoom API through natural language, auto-generated using AG2's MCP builder.

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/forayconsulting/zoom_transcript_mcp'

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