mcp-research-pipeline
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-research-pipelinesearch YouTube for 'machine learning basics' and create a NotebookLM notebook"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-research-pipeline
MCP server that unifies YouTube transcripts, YouTube search, and Google NotebookLM into a research pipeline for Claude Desktop and any MCP client.
What It Does
Extract YouTube transcripts (free, no API key needed)
Search YouTube for videos, channels, and playlists (via TranscriptAPI.com)
Create NotebookLM notebooks, add sources, ask questions, and generate deliverables (podcasts, quizzes, reports, etc.)
One-shot research pipeline: search → create notebook → add sources → ask — in a single tool call
NotebookLM acts as a free RAG system — Google pays for the analysis tokens. This MCP server lets Claude Desktop interact with it programmatically.
Related MCP server: notebooklm-claude-integration
Quick Start
Prerequisites
Python 3.10+
uv (recommended) or pip
Step 1: Clone and install
git clone https://github.com/rubayatkhan/mcp-research-pipeline.git
cd mcp-research-pipeline
uv syncStep 2: Install Playwright browser
NotebookLM requires a Chromium browser for authentication. This is a one-time setup:
uv run python -m playwright install chromiumNote:
playwrightis not a standalone CLI command — it's bundled inside the project's virtual environment. Always run it withuv run python -m playwright, not justplaywright.
Step 3: Authenticate with NotebookLM (optional)
uv run notebooklm loginThis opens a browser window for Google sign-in. Your credentials are saved at ~/.notebooklm/storage_state.json and persist across server restarts.
Skip this step if you only want YouTube transcript/search tools. NotebookLM tools will return a helpful error message telling you to authenticate.
Step 4: Get a TranscriptAPI key (optional)
Sign up at transcriptapi.com to get an API key. You get 100 free credits.
Skip this step if you only need
get_transcript(which is free and keyless). The search, channel, and playlist tools require this key.
Step 5: Configure Claude Desktop
Add to your Claude Desktop config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Option A — Direct venv script (recommended, avoids path issues):
{
"mcpServers": {
"research-pipeline": {
"command": "/absolute/path/to/mcp-research-pipeline/.venv/bin/mcp-research-pipeline",
"env": {
"TRANSCRIPT_API_KEY": "your-key-here"
}
}
}
}Replace /absolute/path/to/mcp-research-pipeline with your actual clone location. Leave TRANSCRIPT_API_KEY empty or omit the env block if you don't have a key yet.
Option B — Using uv run (only if your path has no spaces):
{
"mcpServers": {
"research-pipeline": {
"command": "uv",
"args": [
"run",
"--directory", "/absolute/path/to/mcp-research-pipeline",
"python", "-m", "mcp_research_pipeline"
],
"env": {
"TRANSCRIPT_API_KEY": "your-key-here"
}
}
}
}Warning: Option B fails if your path contains spaces (e.g., iCloud Drive, OneDrive, Google Drive). Use Option A instead.
Step 6: Restart Claude Desktop
Fully quit Claude Desktop (Cmd+Q / Ctrl+Q) and reopen it. The research-pipeline server should appear in your MCP tools.
Troubleshooting
"Server disconnected" in Claude Desktop
Check the server log at ~/Library/Logs/Claude/mcp-server-research-pipeline.log (macOS). Common causes:
Error | Fix |
| Your path has spaces. Switch to Option A (direct venv script). |
| Run |
| Don't use |
Server starts then immediately disconnects | NotebookLM auth may have expired. Run |
"NotebookLM is not connected"
Run uv run notebooklm login in the project directory. This opens a browser for Google authentication.
"TRANSCRIPT_API_KEY" errors
The get_transcript tool works without any API key. Only search_youtube, get_channel_latest, get_channel_videos, and get_playlist_videos need a TranscriptAPI.com key.
Paths with spaces (iCloud, OneDrive, Google Drive)
If your project lives in a path with spaces (like ~/Library/Mobile Documents/com~apple~CloudDocs/), the uv run --directory approach will fail. Two options:
Use Option A (direct venv script path) — this always works.
Create a symlink to a path without spaces:
ln -sf "/path/with spaces/mcp-research-pipeline" ~/mcp-research-pipelineThen point Claude Desktop at
~/mcp-research-pipeline/.venv/bin/mcp-research-pipeline.
Tools (15 total)
YouTube (5 tools)
Tool | Cost | Description |
| Free | Fetch transcript from a YouTube URL or video ID |
| 1 credit | Search YouTube for videos or channels |
| Free | Get 15 most recent videos from a channel |
| 1 credit/page | Paginated list of all channel videos |
| 1 credit/page | Paginated list of playlist videos |
NotebookLM — Notebooks (5 tools)
Tool | Description |
| Create a new NotebookLM notebook |
| List all notebooks |
| Add a URL, YouTube video, or text to a notebook |
| List sources in a notebook |
| Ask a question against notebook sources (RAG) |
NotebookLM — Artifacts (4 tools)
Tool | Description |
| Generate audio, video, quiz, flashcards, report, mind_map, infographic, slide_deck, or data_table |
| List all artifacts in a notebook |
| Poll generation status |
| Download a completed artifact |
Pipeline (1 tool)
Tool | Description |
| End-to-end: search YouTube → create notebook → add sources → ask question |
Environment Variables
Variable | Required | Description |
| No | TranscriptAPI.com API key (enables YouTube search tools) |
| No | Custom path to NotebookLM auth (default: |
Development
# Install with dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Lint
uv run ruff check src/ tests/
# Run server locally (stdio mode)
uv run python -m mcp_research_pipelineArchitecture
The server uses three design patterns:
Facade Pattern: 15 MCP tools presenting a unified interface over three different APIs
Adapter Pattern:
clients/layer wraps each third-party library behind a common async interfaceLifespan Management: FastMCP lifespan hook creates expensive clients once at startup, tears them down on shutdown
server.py (FastMCP + lifespan)
├── clients/
│ ├── youtube_transcript.py → youtube-transcript-api (sync→async)
│ ├── transcript_api.py → TranscriptAPI.com REST (httpx)
│ └── notebooklm.py → notebooklm-py (async)
├── tools/
│ ├── youtube.py (5 tools)
│ ├── notebook.py (5 tools)
│ ├── artifacts.py (4 tools)
│ └── pipeline.py (1 tool)
└── utils/
├── youtube_url.py (URL parsing)
└── errors.py (error translation)License
MIT
Available Tools
15 toolsadd_sourceB
Add a source to a NotebookLM notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | If true, wait for the source to finish processing (default: true). | |
| value | Yes | The URL, YouTube URL, or raw text content to add. | |
| notebook_id | Yes | ID of the target notebook. | |
| source_type | Yes | One of "url", "youtube", or "text". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It merely restates the action and does not mention that adding a source may trigger asynchronous processing, that the wait parameter controls that behavior, or that the operation modifies an existing notebook. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single direct sentence with no filler, repetition, or irrelevant detail. It front-loads the action and target clearly, which is an excellent example of conciseness even though other dimensions lack depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich and an output schema exists, so return-value documentation is not needed from the description. However, with no annotations and only a one-line description, the agent is left without guidance on usage context, processing behavior, or when to set wait to false. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters with meaningful descriptions. The description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and target: 'Add a source to a NotebookLM notebook.' It is not a tautology and conveys the core operation, but it does not explicitly differentiate itself from sibling tools like research_topic or list_sources beyond the obvious verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, when not to use it, or any prerequisites. Usage context is only implied by the verb 'add' and the resource 'source,' which is not enough to help an agent choose among the rich sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_notebookA
Ask a question against the sources in a NotebookLM notebook.
NotebookLM uses your sources as context (RAG) and provides referenced answers. This is powered by Google's infrastructure.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | Your question or prompt. | |
| source_ids | No | Optional list of source IDs to scope the query to. | |
| notebook_id | Yes | ID of the notebook to query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of disclosing behavior. It adds meaningful context by explaining that the tool uses notebook sources as RAG context and produces referenced answers. It does not discuss limitations like out-of-scope questions or citation formatting, but the core behavioral model is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the action and resource, and each sentence contributes to understanding the tool. The final sentence about Google infrastructure is slightly low-value but does not meaningfully hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full input schema and the presence of an output schema, the description covers the essential context: what question to ask, what context is used, and what kind of answer to expect. Minor gaps remain around when to prefer sibling tools and how source_ids changes grounding, but the definition is adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the input schema. The description adds no extra parameter-level meaning, which is acceptable given the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('Ask a question'), a specific resource ('sources in a NotebookLM notebook'), and explains the grounding mechanism (RAG with referenced answers). This is clearly distinct from sibling tools like search_youtube or research_topic, so an agent can easily infer what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool should be used: when the user wants an answer grounded in notebook sources rather than general web search. It does not explicitly name alternatives or state exclusions, so it stops just short of full alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_artifact_statusB
Check the generation status of a NotebookLM artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID returned by generate_artifact. | |
| notebook_id | Yes | ID of the notebook. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description only states the read-only 'check' operation, which is the core behavior. It does not disclose polling semantics, repeated-call safety, or task-not-found behavior; with no annotations, the description could be more explicit, but the low-risk status-check behavior keeps this at a marginal 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It loses a point because the brevity comes at the expense of usage guidance, but as a standalone statement it is appropriately compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter poll, the schema covers inputs and an output schema exists, so return-format knowledge is not required. However, the absence of any explicit 'poll after generate_artifact' context or mention of how to know an artifact is ready leaves an agent without the typical workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both task_id and notebook_id already have plain descriptions. The tool description adds no parameter-level detail, so it earns the baseline score rather than credit for compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ('Check') with a specific resource ('generation status of a NotebookLM artifact'), so an agent can infer the tool's function. It does not explicitly contrast with list_artifacts or generate_artifact, but the focus on status is enough to separate it from generation/download operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to call this tool. It never mentions that it should follow generate_artifact or that list_artifacts is an alternative, so the agent must infer polling context from the parameter schema and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_notebookB
Create a new NotebookLM notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new notebook. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It correctly indicates a creation operation (implying mutation), which is a basic behavioral trait. However, it does not disclose any side effects, required permissions, or the fact that a notebook is likely empty after creation. It adds minimal behavioral context beyond the obvious word 'create'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no waste. It states the purpose instantly and is appropriate for a simple one-parameter tool. No unnecessary details are present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with one parameter and an output schema, the description covers the basic purpose. However, without annotations or details about post-creation behavior (e.g., whether the notebook starts empty, whether duplicate names are allowed), it lacks some context. The output schema helps, but the description could mention what happens after creation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'name' has a clear schema description. The tool description does not add additional parameter semantics, but with full schema coverage, the schema itself is sufficient. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new NotebookLM notebook' clearly states the action (create) and the resource (NotebookLM notebook). While it is concise, it doesn't explicitly differentiate from sibling tools like add_source or generate_artifact, but the resource is specific enough to avoid major confusion. The verb and object are direct and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (creating a notebook as an initial step), but it does not state when to use this tool versus alternatives. There are no explicit exclusions or when-not-to-use guidance. The clear resource type gives some implied context, but no explicit guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_artifactA
Download a completed NotebookLM artifact to a local file.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact_id | No | Optional specific artifact ID (default: latest). | |
| notebook_id | Yes | ID of the notebook. | |
| output_path | Yes | Local file path to save the artifact. | |
| artifact_type | Yes | Type of artifact (audio, video, quiz, etc.). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It states the core action and a key constraint (artifact must be completed) and the side effect (writing to a local file), but it does not mention possible failures, overwrite behavior, or whether the output path can be a directory. This is adequate but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes: 'Download', 'completed', 'NotebookLM artifact', and 'local file' are all needed and meaningful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter operation with full schema coverage and an output schema, the description is mostly sufficient. However, it does not connect to the broader artifact workflow (e.g., how to obtain artifact_id via list_artifacts or wait for completion via check_artifact_status), so an agent may still need extra inference to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description repeats 'artifact' and 'local file' concepts already present in the schema without adding new semantics like file extensions, type constraints, or how artifact_id defaults to the latest artifact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Download') and resource ('completed NotebookLM artifact') with a clear destination ('to a local file'). This uniquely distinguishes it from siblings like generate_artifact, list_artifacts, and check_artifact_status, which cover creation, listing, and status checking rather than retrieval to disk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'completed' implies the tool should be used after an artifact has finished generating and likely after checking status with check_artifact_status, but this is only implied, not explicit. There is no when-not-to-use guidance or naming of alternatives, so the agent must infer the workflow from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_artifactA
Generate a NotebookLM artifact from notebook sources.
Supported artifact types: audio, video, quiz, flashcards, report, mind_map, infographic, slide_deck, data_table.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | If true, wait for generation to complete (can take minutes). | |
| source_ids | No | Optional list of source IDs to use (default: all sources). | |
| notebook_id | Yes | ID of the notebook with sources. | |
| instructions | No | Optional instructions to guide generation. | |
| artifact_type | Yes | Type of artifact to generate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 only says 'Generate' and lists artifact types; it does not disclose that generation can take minutes, that failures may occur, or that the operation may be asynchronous depending on wait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded, and the supported artifact types are presented in a compact, scannable list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented input schema and an available output schema, the description is nearly complete for invoking generation. The only notable gap is guidance about asynchronous behavior and status-checking, which is partially covered by the wait parameter description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful value by enumerating valid artifact_type values (audio, video, quiz, flashcards, report, mind_map, infographic, slide_deck, data_table), which the schema does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Generate a NotebookLM artifact from notebook sources') and enumerates the supported artifact types, making the tool's scope immediately clear. The action 'generate' also distinguishes it from management siblings like list_artifacts, check_artifact_status, and download_artifact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives. It does not mention that generation may be asynchronous, that wait can be used for blocking, or that check_artifact_status/list_artifacts are relevant follow-up tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_latestB
Get the 15 most recent videos from a YouTube channel. FREE — no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | Channel handle (e.g. "@3blue1brown") or channel URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose the result limit (15 videos) and the cost profile (free), which is useful. However, it does not mention error behavior, invalid input handling, rate limits, or whether it is a read-only operation, though this is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that communicates the core purpose and the key cost detail with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema, the description is largely complete: it specifies the exact return scope, the input form is covered by the schema, and cost is disclosed. The only notable gap is lack of guidance on how it relates to get_channel_videos.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the channel parameter with an example and format options. The description adds no parameter-specific meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource: the 15 most recent videos from a YouTube channel. It adds the concrete scope '15 most recent' and a cost/free signal, which helps differentiate it from search_youtube and get_transcript, but it does not explicitly distinguish it from the closely named sibling get_channel_videos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives like get_channel_videos or search_youtube. The 'FREE — no credits' note implies cost may matter, but it does not state conditions, exclusions, or when a different tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_videosA
Paginated list of all videos from a YouTube channel. Costs 1 credit/page.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Channel handle or URL (required for first page). | |
| continuation | No | Continuation token from previous response (for next page). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses that the tool is paginated and charges 1 credit per page, which directly impacts whether an agent should invoke it. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, informative sentences with no filler. The core behavior is stated first, and the credit-cost warning is a valuable standalone sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, existing output schema, and the explicit pagination and cost disclosure, the description is complete enough for an agent to select and invoke the tool correctly. First-page and continuation usage is documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the schema already explains that channel is required for the first page and continuation is for the next page. The main description adds no parameter-specific meaning beyond the pagination hint, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('list') and resource ('all videos from a YouTube channel'), and 'Paginated' signals the batching behavior. This clearly distinguishes it from sibling tools like get_channel_latest or get_playlist_videos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: pagated full-channel video retrieval, with a credit cost per page. The schema reinforces the first-page/continuation flow, but the description itself does not explicitly name alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_videosB
Paginated list of videos in a YouTube playlist. Costs 1 credit/page.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist | No | Playlist ID or URL (required for first page). | |
| continuation | No | Continuation token from previous response (for next page). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It usefully discloses pagination and credit cost per page, which is valuable context. However, it does not describe the response shape, error behavior, rate limits, or auth requirements beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the essential resource, behavior, and cost with no wasted words. The core function is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter paginated list tool with an output schema, the description is largely sufficient: it states the resource, pagination behavior, and cost. The main gap is lack of sibling differentiation, but the schema plus descriptive title cover most of what an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's mention of pagination aligns with the continuation parameter, but it does not add additional detail beyond what the schema already states about playlist being required for the first page and continuation being a token.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning a paginated list of videos in a YouTube playlist, making the resource and action specific. It does not explicitly name a sibling alternative, but the playlist scope is enough to distinguish it from channel- and search-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over get_channel_videos, search_youtube, or get_channel_latest. The pagination detail implies a multi-page workflow but the description does not explain when a continuation token should be used or provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptB
Fetch the transcript of a YouTube video.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube URL or 11-character video ID. | |
| languages | No | Language codes in priority order (default: ["en"]). | |
| preserve_formatting | No | Keep HTML formatting tags like <i> and <b>. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior, but it only says 'Fetch' and provides no detail about read-only behavior, transcript availability, language fallback, or error conditions. The agent is left to infer these traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is appropriately concise for a tool whose parameter and output schemas carry the detailed spec.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The parameter schema and output schema cover the mechanical details, so the description does not need to restate them. However, with no annotations, the description omits behavioral context such as transcript availability and language handling, making this only minimally complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description itself adds no parameter-level meaning. The languages parameter's default is described as ["en"] while the schema default is null, but this inconsistency lives in the schema, not the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('the transcript of a YouTube video'), making the tool's function immediately clear. It is easily distinguished from sibling tools like search_youtube, get_channel_videos, and get_playlist_videos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool over alternatives, nor any exclusions or prerequisites. The description only restates the operation without explaining scenarios like missing transcripts or how this relates to the other YouTube tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_artifactsA
List all artifacts in a NotebookLM notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes | ID of the notebook. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. The verb 'List' and scope 'all artifacts' imply a read-only, non-destructive operation, but the description does not explicitly address side effects, permissions, pagination, or limitations. It is adequately transparent for a simple listing tool but adds no behavioral detail beyond the operation itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. Every word contributes meaning, and the essential scope ('all artifacts') is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with one required parameter, a fully documented schema, and an output schema. The description, combined with the schema, provides everything an agent needs to know to invoke it correctly. Additional details like pagination or error behavior are not essential for such a straightforward listing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter notebook_id is already documented in the schema. The description does not add any additional meaning or usage detail about the parameter, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation (list) and resource (artifacts in a NotebookLM notebook). It is distinguishable from sibling tools like list_sources and generate_artifact because it names the artifact resource specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when you need to list existing artifacts for a notebook—but provides no explicit guidance about when not to use it or how it compares to alternatives like generate_artifact or download_artifact. The usage context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notebooksA
List all NotebookLM notebooks.
Returns: JSON array of notebooks with notebook_id, name, created_at, source_count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It states that the tool lists all notebooks and returns a JSON array with notebook_id, name, created_at, and source_count, giving the agent a concrete expectation of the result. It does not discuss pagination or error behavior, but these are less critical for a simple read-only enumeration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sections with no filler. The core purpose is front-loaded, and the return format is presented in a compact, scannable way. Every sentence adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description is complete: it names the resource, the scope, the return type, and the exact fields returned. An output schema exists for structured return values, so no further documentation of return semantics is required. An agent can invoke this tool correctly with no open questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so the schema itself is already complete. The description adds no parameter details, which is appropriate; per the baseline for zero-parameter tools, no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('NotebookLM notebooks'), and the scope ('all'), which fully distinguishes it from sibling tools like list_sources or create_notebook. The return fields further clarify that this is a high-level notebook enumeration tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: call this when you need all notebooks, not sources, transcripts, or artifacts. It does not explicitly name alternative tools or exclusions, but for a zero-parameter list operation the context is unambiguous enough that an agent will not confuse it with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesA
List all sources in a NotebookLM notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes | ID of the notebook. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. The verb 'List' reasonably implies a read-only operation and 'all sources' indicates unscoped retrieval, but the description does not address potential pagination, authorization, error behavior, or result limits. It is minimally transparent rather than richly informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that fronts the action and object immediately. Every word contributes meaning, with no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one required parameter, no enums, and an output schema, the description plus schema is sufficient to invoke the tool correctly. The only notable gap is lack of explicit guidance on when to use this tool versus sibling tools, but the simplicity of the operation makes that gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the only parameter, notebook_id, is already documented as 'ID of the notebook.' The description adds that the tool lists sources in a notebook, but it does not add any format, default, or usage detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'List,' with a clear resource, 'all sources,' and a clear scope, 'in a NotebookLM notebook.' This readily distinguishes it from sibling tools like list_notebooks or add_source because it names both the object type and the container.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when the agent needs to retrieve the sources attached to a particular notebook, but it does not explicitly state when to prefer this tool over alternatives or mention any exclusions. Sibling tools such as list_notebooks and add_source establish context, yet no direct comparison or routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_topicA
End-to-end research pipeline: search YouTube, create a NotebookLM notebook, add video sources, and optionally ask a question.
This tool orchestrates the full workflow:
Search YouTube for videos matching the query
Create a new NotebookLM notebook
Add each video as a YouTube source
Optionally ask a question against all sources
Requires both TRANSCRIPT_API_KEY (for search) and NotebookLM login.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Research topic to search YouTube for. | |
| question | No | Optional question to ask after adding sources. | |
| max_videos | No | Maximum number of videos to add as sources (default: 5). | |
| notebook_name | No | Name for the notebook (default: "Research: {query}"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It transparently enumerates the side effects: search, notebook creation, source addition, and optional question-asking. It also states the authentication prerequisites (TRANSCRIPT_API_KEY and NotebookLM login), which is valuable context beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a front-loaded summary, a numbered step list, and a final prerequisite note. Every sentence earns its place; there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a compound orchestration tool with four parameters, an output schema, and no annotations, this description is complete: it covers purpose, workflow, authentication requirements, and the optional final step. Nothing critical is missing for an agent to decide whether and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents all four parameters. The tool description restates query and question in prose but adds little semantic detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific, multi-step verb-resource relationship: an end-to-end pipeline that searches YouTube, creates a notebook, adds sources, and optionally asks a question. This clearly distinguishes it from the sibling primitive tools like search_youtube, create_notebook, add_source, and ask_notebook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines the scope of use—orchestrating the full research workflow—and explicitly lists the four steps it performs. It does not explicitly state when to prefer the individual sibling tools instead, but the compound-vs-primitive distinction is strongly implied by the step-by-step breakdown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_youtubeA
Search YouTube for videos or channels. Costs 1 TranscriptAPI credit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default: 20). | |
| query | Yes | Search query string. | |
| result_type | No | "video" or "channel" (default: "video"). | video |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses the cost ('Costs 1 TranscriptAPI credit'), which is a useful behavioral trait not present in annotations. However, with no annotations provided, the description carries the full burden and does not mention other relevant behaviors such as whether results are paginated, rate limits, or any access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that communicates purpose, result scope, and cost without any filler. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with complete parameter documentation and an output schema, the description conveys the essential purpose and an important cost signal. It does not discuss usage nuances relative to siblings, but that is a secondary gap given the tool's low complexity and existing schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents all parameters with descriptions, defaults, and the allowed result_type values. The description's mention of 'videos or channels' mirrors the schema's result_type documentation without adding substantial new meaning beyond what structured data already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') with a clear resource ('YouTube') and scope ('videos or channels'), which distinguishes it from sibling tools that retrieve specific channel or playlist content. This is immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use search_youtube versus the sibling tools like get_channel_videos, get_channel_latest, or get_playlist_videos. The description implies search is general-purpose but does not explain the tradeoffs or when a user should prefer a more targeted sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools are mostly distinct by resource and action, with clear separation between YouTube retrieval and NotebookLM management. The main ambiguity is between get_channel_latest and get_channel_videos, though descriptions clarify the convenience vs. paginated distinction. research_topic overlaps with the individual steps but is clearly positioned as an orchestrator.
All tool names use snake_case and generally follow a verb_noun pattern, which keeps the set predictable. Minor inconsistencies like get_channel_latest omitting a noun and mixing list_/get_ for similar operations prevent a perfect score.
At 15 tools, the server sits at the upper bound of a well-scoped set, but the count is justified by covering two integrated domains: YouTube retrieval and NotebookLM management. research_topic and get_channel_latest add some redundancy but still serve useful convenience purposes.
The core research workflow is covered end-to-end: search YouTube, create a notebook, add sources, ask questions, and generate/download artifacts. Missing delete/update operations for notebooks, sources, and artifacts are notable gaps but not critical for the stated pipeline purpose.
Maintenance
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
Transcribe YouTube via Whisper. Summaries, chapters, semantic-search across your corpus.
SubDownload exposes YouTube as an MCP-native data source. Connect via OAuth and your AI agent can summarize videos, fetch full transcripts (even for videos with no captions, via AI ASR), search across channels, and save everything into a private knowledge base. Works with Claude, ChatGPT, Cursor, and 40+ MCP clients. Free credits on signup, no card required.
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
Related MCP Servers
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables Claude to interact with YouTube data and functionality through the Claude Desktop application.111
- AlicenseNot gradedqualityCmaintenanceEnables querying Google NotebookLM notebooks directly from Claude Desktop (MCP) and Claude Code (CLI), providing citation-backed answers from Gemini.MIT
- FlicenseBqualityDmaintenanceExtracts YouTube transcripts and performs AI-powered video analysis for Claude Desktop, enabling transcript retrieval, quality analysis, and smart resource management.8
- FlicenseAqualityCmaintenanceProvides YouTube video transcripts (text and metadata) as MCP tools for AI hosts like Claude Code, enabling summarization, search, and Q&A without watching the video.2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/rubayatkhan/mcp-research-pipeline'
If you have feedback or need assistance with the MCP directory API, please join our Discord server