Skip to main content
Glama

notetaker-mcp

An MCP server that lets Claude fetch transcripts from your enrolled learn.deeplearning.ai short courses so it can summarize them and hand the notes off to another tool (Notion, Obsidian, a file — via a second MCP server or a follow-up Claude action).

Status: working v1. Personal use, unofficial, not affiliated with DeepLearning.AI.

Tools it exposes

Tool

What it does

list_enrolled_courses

Every course you're enrolled in; specializations flattened into their child courses.

list_lessons

Lessons for one course, grouped by module in playback order.

get_lesson_transcript

Full transcript for one video lesson (plain or timestamped format).

get_lesson_frame

Screenshot a single video frame at a chosen timestamp (low/360p by default, high/full HD optional). Optional save_path writes JPEG to disk. Requires ffmpeg.

get_lesson_slides

Auto-detect scene changes and return one still per slide. Optional save_dir writes JPEGs to disk with absolute paths in the response. min_gap_seconds dedupes near-duplicates. include_images=false returns just timestamps + paths for building a chapter index cheaply. Requires ffmpeg.

Claude does the summarizing. A separate MCP (e.g. the official Notion MCP) does the note-saving. This server intentionally does one thing: get transcript data out of deeplearning.ai.

Related MCP server: Canvas LMS MCP Server

How auth works

  1. One-time: notetaker-mcp login opens your real installed Chrome (isolated profile, no shared cookies) at learn.deeplearning.ai/login. You sign in with Google (or whatever you use). Playwright saves the browser session (cookies + localStorage) to ~/.notetaker-mcp/session.json with 0600 perms via atomic replace.

  2. Every call after that: the server loads that session and hits the same internal tRPC endpoints the deeplearning.ai frontend uses. Silent, no browser window.

  3. When the session expires (typically weeks): tools raise a clear Session expired. Run: notetaker-mcp login error. Re-run the login command; the persistent Chrome profile means Google won't re-challenge you.

No password ever touches disk — only the session cookies.

Requirements

  • macOS or Linux (Windows probably fine, untested).

  • Python 3.10+ (uv will fetch its own if you don't have one).

  • Google Chrome installed. Google's OAuth flow refuses Playwright's bundled Chromium, so we drive the real Chrome instead.

  • uv: brew install uv.

  • ffmpeg — needed for get_lesson_frame and get_lesson_slides only. Install with brew install ffmpeg. The transcript tools work without it.

Install

git clone https://github.com/sibtihaj/notetaker-mcp.git
cd notetaker-mcp
uv sync
uv run playwright install chromium

The Chromium install is only used as a fallback if Chrome isn't found.

Sign in

uv run notetaker-mcp login

A Chrome window opens. Sign in, wait for your dashboard to load, then press Enter in the terminal. You should see Saved session (N deeplearning.ai cookies) where N is around 20.

If Google somehow still blocks you, wipe the profile and try again:

uv run notetaker-mcp reset-profile
uv run notetaker-mcp login

Wire it into Claude Code

From an interactive Claude Code terminal session:

claude mcp add notetaker -- uv --directory /Users/syedhaque/Desktop/personal-notetaker-MCP run notetaker-mcp serve

Adjust the absolute path if you cloned somewhere else. Confirm it's registered:

claude mcp list

Then in Claude:

List my enrolled deeplearning.ai courses.

Show me the lessons for Agentic AI.

Get the transcript for the "Welcome!" lesson and summarize it as 5 bullet takeaways. Save the summary as a new page in my Notion "Course Notes" DB.

The last step uses whichever Notion MCP you have installed. This server has no dependency on Notion — it only produces transcripts.

Running the server directly

Rarely useful outside Claude Code, but handy for debugging:

uv run notetaker-mcp serve

Speaks MCP JSON-RPC over stdio. Send it an initialize message + tools/list to smoke test.

Reverse-engineering notes

If deeplearning.ai changes their API and something breaks, the endpoint reference and the probe scripts used to discover them are in docs/api-notes.md and scripts/. Re-run uv run python scripts/probe.py <course-url> against your session to see what endpoints are actually being called now.

Caveats

  • Unofficial scraper. If deeplearning.ai reworks their platform, tools will break until updated. Fine for personal use; do not distribute or run at scale.

  • Short courses only (learn.deeplearning.ai). Coursera-hosted specializations are a different backend and are not supported.

  • Session file is sensitive. It's equivalent to your logged-in cookies. Protect it the same way.

License

MIT

Available Tools

6 tools
get_lesson_frameA

Screenshot a single video frame from a lesson at the given timestamp.

Args: course_slug: from list_enrolled_courses. lesson_slug: from list_lessons (the short id like "pu5xbv"). timestamp_seconds: where in the video to grab the frame. quality: "low" 640x360 (default, fast); "high" full HD (slower). save_path: if set, write the JPEG to this path ( and $VARS expanded; parent dirs auto-created) so downstream tools can reference it. The absolute path is included in the response. include_image: default True. Set False to skip the inline image (useful with save_path when the caller only needs the file).

Returns a JSON summary text block, plus a caption + inline image (unless include_image=False). Requires ffmpeg on PATH.

ParametersJSON Schema
NameRequiredDescriptionDefault
qualityNolow
save_pathNo
course_slugYes
lesson_slugYes
include_imageNo
timestamp_secondsYes

TDQS

A4.8/5.0
Behavior5/5

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 covers the write side effect to save_path (including ~ and $VAR expansion, parent dir creation, and absolute path in response), the conditional inline image via include_image, the ffmpeg dependency, and the return shape involving JSON summary, caption, and inline image.

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 one-sentence summary is front-loaded, followed by a compact Args block where each line adds a distinct detail. No sentence is wasted; the return behavior and external dependency are stated in two short sentences at the end.

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

Completeness5/5

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

Despite having no output schema and no annotations, the description is complete for a 6-parameter tool: it documents every parameter, prerequisites from sibling tools, return format, optional image inclusion, file path behavior, and the ffmpeg requirement. An agent has enough information to invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully explain every parameter, and it does. Each of the six parameters gets meaningful guidance: provenance for slugs, timestamp meaning, quality resolution/speed, save_path side effects, and include_image behavior including its default.

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 opens with a specific verb and resource: 'Screenshot a single video frame from a lesson at the given timestamp.' This clearly distinguishes the tool from sibling tools such as transcripts and slides, which serve different resources and purposes.

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

Usage Guidelines4/5

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

The description gives clear usage context: which slugs come from which sibling tools, the quality/speed tradeoff, and the save_path/include_image usage pattern. It does not explicitly state when to prefer this over get_lesson_transcript or get_lesson_slides, but the purpose and dependencies are clear enough to guide selection.

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

get_lesson_slidesA

Auto-detect slide changes in a lesson video and return one frame per slide.

Args: course_slug: from list_enrolled_courses. lesson_slug: from list_lessons. threshold: 0..1 scene-change sensitivity. 0.3 catches slide changes; raise to 0.5+ to only cut on very distinct visuals. max_frames: cap total frames returned. Prevents very long lectures from swamping the response. min_gap_seconds: skip candidates that fall within this many seconds of the previously kept frame — suppresses near-duplicates from small on-camera movements while the slide hasn't changed. 0 disables the dedup. save_dir: if set, write each JPEG to this directory (created if missing). Filenames are "{course_slug}--{lesson_slug}--{index:03d}-{seconds}s.jpg". Absolute saved paths are included in the JSON summary so downstream tools can reference them. include_images: default True. Set False to get only timestamps + saved paths (structured data), skipping inline image content — useful for building a chapter index without image tokens.

Returns a JSON summary block first (course/lesson/frame list with timestamps and saved paths), then per-frame caption + inline image unless include_images=False. Requires ffmpeg.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_dirNo
thresholdNo
max_framesNo
course_slugYes
lesson_slugYes
include_imagesNo
min_gap_secondsNo

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly. It discloses return structure, side effects (writing JPEGs to save_dir), parameter effects (threshold, min_gap_seconds dedup), and the ffmpeg dependency. It also explains include_images behavior for token-conscious use.

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?

Though lengthy, the structure is efficient: a one-sentence summary, an Args list with line-per-parameter detail, and a crisp description of return format and dependencies. Every sentence earns its place, and the most important 'auto-detect' behavior is front-loaded.

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

Completeness5/5

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

The description is complete for a tool with no output schema and no annotations. It explains the return order (JSON summary then caption+image), how to disable images, file side effects, and the external ffmpeg requirement. Nothing essential for calling the tool correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It explains every parameter, including tuning guidance for threshold, what max_frames caps, how min_gap_seconds suppresses duplicates, filename pattern for save_dir, and the purpose of include_images. This exceeds what the schema alone provides.

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 opening sentence, 'Auto-detect slide changes in a lesson video and return one frame per slide,' states a specific verb and resource. It clearly differentiates from sibling tools like get_lesson_frame by focusing on automatic detection across an entire lesson rather than a single frame.

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 its use case ('Auto-detect slide changes') and references list_enrolled_courses and list_lessons for slugs, but it never explicitly states when to use this tool versus get_lesson_frame or get_lesson_transcript. There are no exclusions or alternative routing.

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

get_lesson_transcriptA

Fetch the full transcript for one video lesson.

Args: course_slug: from list_enrolled_courses. lesson_slug: from list_lessons (the short lesson id like "pu5xbv"). format: "plain" gives one flowing text block; "timestamped" gives lines prefixed with [M:SS] markers.

Returns {course_name, lesson_name, duration_seconds, transcript}. Only video lessons have transcripts; other lesson types raise an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoplain
course_slugYes
lesson_slugYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full transparency burden. It discloses the error behavior for non-video lessons, explains the format parameter's two modes, and states the exact return shape. It does not explicitly mention whether the operation is read-only, but the verb 'fetch' strongly implies it, and no hidden side effects are suggested.

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 compact and well-structured: a one-sentence purpose, a concise args list with practical guidance, and a return/error note. Every sentence adds useful information and nothing is redundant.

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

Completeness5/5

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

For a tool with no annotations and no output schema, the description covers all essential aspects: what it does, how to populate each parameter, what the return object contains, and when it will fail. No critical information needed to call it correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It explains the provenance of course_slug and lesson_slug, gives an example format for lesson_slug, and details the two enum values for format with behavioral descriptions. This goes far beyond the bare string/enum schema.

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 opens with 'Fetch the full transcript for one video lesson,' which is a specific verb and resource. It clearly distinguishes itself from sibling tools like get_lesson_frame and get_lesson_slides by focusing solely on transcripts, and further clarifies that only video lessons are supported.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool: for video lesson transcripts. It explicitly warns that 'other lesson types raise an error,' giving a when-not condition. It also specifies the source of each slug (from list_enrolled_courses and list_lessons), though it does not explicitly name alternative tools for non-video content.

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

list_enrolled_coursesA

List every course you're enrolled in on learn.deeplearning.ai.

Specializations are flattened into their constituent courses. Each item has slug, name, type ("course"|"short_course"), progress_percent, and (for courses inside a specialization) the parent specialization info.

Use the returned slug when calling list_lessons or get_lesson_transcript.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description must disclose behavioral traits. It clearly states that specializations are flattened into constituent courses, and enumerates the fields in each item (slug, name, type, progress_percent, parent info). This gives the agent a good sense of the output structure and the flattening behavior. However, it does not mention whether there are any limits (e.g., number of courses) or whether the list is sorted or filtered; these minor gaps prevent a perfect score.

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 compact and well-structured: the opening sentence states the purpose, the second sentence explains a key behavior (flattening), the third lists the output fields, and the final sentence gives a usage tip. Every sentence adds value, and there is no redundancy or fluff. It is front-loaded with the core purpose, making it easy to scan.

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

Completeness5/5

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

For a no-parameter list tool with an output schema, the description covers all essential aspects: what it does, how the data is shaped, and how to use the results with other tools. The output schema likely formalizes the structure, so the description adds narrative context without repeating schema details. No critical information is missing.

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

Parameters4/5

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

The tool has zero parameters, so the schema is trivially complete (coverage 100%). The baseline for zero parameters is 4, and the description correctly adds no parameter-specific details because there are none. It does mention the output fields, which aids in interpreting what the tool returns but does not affect parameter semantics. A score of 4 reflects the baseline appropriateness.

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 states a precise verb and resource: 'List every course you're enrolled in on learn.deeplearning.ai.' It clearly defines the scope (courses, not lessons) and even details the flattening of specializations, making it unambiguous. While it doesn't name sibling tools explicitly, the distinct purpose is evident and no confusion arises among the listed siblings (list_lessons, get_lesson_transcript, etc.).

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

Usage Guidelines4/5

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

The description gives practical usage guidance by instructing the agent to use the returned `slug` for subsequent calls to `list_lessons` or `get_lesson_transcript`. This effectively communicates how the output feeds into other tools. It does not explicitly state when to avoid this tool, but since it is the only course-listing tool among siblings, that is not a critical omission. The guidance is clear and actionable.

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

list_lessonsA

List lessons for one course, grouped by module in playback order.

Args: course_slug: from list_enrolled_courses, e.g. "agentic-ai".

Returns a dict with course_name, total_duration_seconds, and modules — each module has a name and a lessons array of {slug, index, name, type, video_id, duration_seconds}. Pass the lesson slug (not the numeric video_id) to get_lesson_transcript.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_slugYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses grouping by module, playback ordering, the aggregate duration field, and a concrete pitfall — pass the slug, not the numeric video_id — when calling get_lesson_transcript. It does not cover error behavior or state read-only status in so many words, but the verb 'list' and the read-style tool family make side effects implausible.

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?

Four sentences with zero waste: purpose, parameter guidance, return contract, and a downstream warning each earn their place. The return-structure detail is justified because no output schema exists, and the slug-vs-video_id warning prevents a realistic invocation error.

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

Completeness4/5

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

For a single-parameter read tool with no annotations and no output schema, the description covers the input source and format, the full return dict shape, ordering, grouping, and downstream routing. Minor gaps remain — the possible values of the lesson 'type' field and behavior on an invalid course_slug — but nothing an agent needs to make the call correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%; the schema only labels the property 'Course Slug.' The description compensates by giving the parameter's source ('from list_enrolled_courses') and a concrete format example ('agentic-ai'), which is exactly the semantics an agent needs to fill the argument correctly.

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 first sentence names a specific verb and resource — 'List lessons for one course' — and adds a distinguishing scope: 'grouped by module in playback order.' This clearly differentiates it from sibling list_enrolled_courses, which operates at the course level, and from the get_* lesson tools that fetch individual artifacts.

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

Usage Guidelines4/5

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

The Args section anchors the tool in a workflow: 'course_slug: from list_enrolled_courses, e.g. agentic-ai' implies the prerequisite call, and the closing sentence routes the agent forward to get_lesson_transcript with the correct identifier. However, it never explicitly states when not to use this tool or contrasts it with siblings like get_lesson_frame or get_lesson_slides.

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

pingA

Health check.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. 'Health check' implies a non-mutating, low-risk operation, but it does not explicitly state that there are no side effects, what exactly is checked, or any authentication expectations. The output schema handles return-shape details, so this minimal disclosure is acceptable but not rich.

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 only two words and contains no filler or repetition. It is front-loaded and appropriately sized for a simple, parameterless health-check tool, though it could be slightly more structured with a full sentence.

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 no parameters, an output schema, and low complexity, the description is largely sufficient. Still, it does not explicitly address when to call this tool, what a successful or failed health check means, or whether any setup is required, so there is a small but real gap.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing to document. Per the baseline for zero-parameter tools, the description does not need to add parameter-level meaning, and none is missing.

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 'Health check' clearly conveys that this tool is a liveness or connectivity probe, even though it lacks a formal verb. It is naturally distinct from the sibling content-retrieval tools, so an agent can infer its role without opening the schema.

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 purpose implies the usage context: call this tool to verify that the service/API is reachable or healthy. However, there is no explicit statement of when to prefer it over alternatives or any exclusion criteria, leaving some inference to the agent.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct function: enrolling data, lesson structure, transcript text, a single video frame, slide extraction, and health checking. The only adjacent pair is get_lesson_frame and get_lesson_slides, but one is explicitly a single timestamped frame while the other detects multiple slide boundaries, so the separation is clear.

Naming Consistency5/5

The core tools consistently follow a verb_noun pattern: list_enrolled_courses, list_lessons, get_lesson_transcript, get_lesson_frame, get_lesson_slides. ping is a standard exception for health checks and doesn't create confusion.

Tool Count5/5

Six tools is a well-scoped set for a read-only course-content access server. Each one serves a necessary step in traversing courses → lessons → transcript/frames/slides without redundancy.

Completeness4/5

The core workflow of listing courses, exploring lessons, and retrieving transcripts or visual content is fully represented. There is no note-creation or course-search capability, but the server appears focused on content extraction rather than note storage, so this is a minor rather than critical gap.

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

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/sibtihaj/notetaker-mcp'

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