Skip to main content
Glama
twanlass

Granola MCP Server

by twanlass

Granola MCP Server

An MCP (Model Context Protocol) server that provides tools for accessing Granola meeting transcripts and AI-generated notes.

Requirements

  • Node.js 20+

  • Granola desktop app installed and logged in

Related MCP server: Granola MCP Server

Installation

git clone https://github.com/twanlass/granola-mcp.git
cd granola-mcp
npm install
npm run build

Claude Desktop Configuration

Add this to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "granola": {
      "command": "node",
      "args": ["/path/to/granola-mcp/dist/index.js"]
    }
  }
}

Replace /path/to/granola-mcp with the actual path to this repository.

Claude Code Configuration

Run this command to add the MCP server to Claude Code:

claude mcp add granola node /path/to/granola-mcp/dist/index.js

Available Tools

Tool

Description

get_recent_documents

List recent meeting documents

get_document

Get AI notes (default) or transcript for a document

search_documents

Search documents by title

Options

get_document returns AI-generated notes by default. Pass transcript: true to get the raw transcript instead.

How Granola Credentials Work

The server reads credentials from Granola's config file at:

~/Library/Application Support/Granola/supabase.json

This file is created automatically when you log into the Granola desktop app. No additional configuration is required.

Available Tools

3 tools
get_documentA

Get the content for a specific Granola document. Returns AI-generated notes by default, or raw transcript if requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
transcriptNoIf true, return raw transcript instead of AI notes (default: false)
document_idYesThe ID of the document to fetch

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It does disclose the default behavior (AI-generated notes) and the transcript option, which adds value. However, it does not mention error cases, permissions, or return format details, leaving some gaps.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that clearly states the action, resource, and key options. Every word earns its place, with zero fluff.

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 simple two-parameter retrieval tool, the description is reasonably complete. It explains the purpose and the key behavioral choice, though it does not explicitly note the read-only nature or what happens when a document is not found.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description references the transcript parameter ('raw transcript if requested') but adds no meaning beyond the schema's existing descriptions of document_id and transcript.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'Get the content for a specific Granola document.' This distinguishes it from siblings like get_recent_documents (list) and search_documents (find).

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 phrase 'specific Granola document' implies the user must already have a document ID, making the context clear. However, it does not explicitly state when to use this over get_recent_documents or search_documents, nor provide exclusions.

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

get_recent_documentsB

Get a list of recent Granola meeting documents

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of documents to fetch (default: 20)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It states the tool 'gets' a list, implying a read-only operation, but provides no details about ordering, pagination, authentication, or potential errors. This is minimal disclosure and leaves significant ambiguity for an agent.

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

Conciseness5/5

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

The description is a single, clear sentence with no redundancy or filler. It effectively communicates the tool's purpose while remaining concise, making it easy for an agent to parse.

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?

The tool is simple (one optional parameter, no output schema), so the description covers the essential purpose. However, it lacks any indication of return format, ordering, or disambiguation from sibling tools, which a fuller description could provide. It is minimally viable but has clear gaps.

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

Parameters3/5

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

The input schema provides a 100% description coverage for the only parameter (limit), so the baseline is 3. The description adds no additional parameter semantics, but that is acceptable given the schema already documents the parameter fully.

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 uses a specific verb ('Get') and a specific resource ('recent Granola meeting documents'), clearly distinguishing it from siblings like get_document (which likely fetches a single document) and search_documents (which searches). The scope is clear and unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention use cases, prerequisites, or scenarios where search_documents or get_document would be more appropriate. The description is purely functional with no contextual advice.

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

search_documentsA

Search Granola documents by title pattern

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (default: 20)
queryYesText to search for in document titles

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It only states the search scope (title pattern) without describing case sensitivity, match behavior, ordering, pagination, or return format. The schema covers the limit default, but the description lacks detail on result behavior.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that directly states the tool's purpose without wasted words. It is appropriately sized for the simple search functionality.

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?

The tool is simple and the schema documents parameters, but without annotations or an output schema, the description must provide more behavioral context. It covers the search scope but omits details like result structure, auth requirements, or whether it is a read-only operation. The description is adequate but leaves gaps given the absence of other structured metadata.

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

Parameters3/5

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

Schema description coverage is 100%, with both query and limit described. The description adds the phrase 'by title pattern', which aligns with the schema's query description ('Text to search for in document titles'). No additional parameter nuance beyond what the schema already provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: searching Granola documents by title pattern. The verb 'search' is specific, and the resource 'Granola documents' is unambiguous. It distinguishes from sibling tools like get_recent_documents and get_document by the search-by-title pattern scope.

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 implies usage: when you need to find documents by title pattern rather than retrieving recent or a specific document. While not explicitly stating 'when not to use' or naming alternatives, the scope ('by title pattern') and sibling tool names provide clear context for selection.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv1.0.0
    • First observedget_document
    • First observedget_recent_documents
    • First observedsearch_documents

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: listing recent documents, retrieving a specific document's content, and searching by title. There is no overlap or ambiguity between them.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern ('get_' and 'search_'). Minor deviation exists between singular 'document' and plural 'documents', but overall naming is predictable and readable.

Tool Count5/5

With only 3 tools, the server is well-scoped for its purpose of accessing meeting documents. Each tool earns its place and the count is appropriate for a focused read-only domain.

Completeness4/5

The server covers listing, retrieval, and search, which are the core read operations for meeting documents. While update/delete are absent, they are likely outside the intended scope, so the surface feels complete for its purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Provides access to Granola notes, meeting transcripts, calendar events, and document panels through the Granola API, enabling search and retrieval of meeting-related content.
    7
    5
    -
  • A
    license
    A
    quality
    C
    maintenance
    Integrates local Granola.ai meeting intelligence with Claude Desktop to enable searching and analyzing meeting transcripts, notes, and summaries. Users can perform natural language queries to retrieve meeting details, analyze participant patterns, and access full speaker-identified conversations.
    5
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Integrates Granola.ai meeting intelligence with MCP clients to provide direct access to meeting notes, transcripts, and workspace organization. It allows users to search and retrieve meeting content through natural language by leveraging existing Granola credentials.
    7
    4
    MIT

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/twanlass/granola-mcp'

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