Skip to main content
Glama
google-keep-mcp
by davenicoll

google-keep-mcp

An MCP server for Google Keep. Apply the power of AI to organize, update, or just export your Keep notes.

Features

Search/List Operations

  • search_by_keyword - Search notes by keyword against title and text content

  • search_by_label - Search notes by label name

  • find - Alias for search_by_keyword (backwards compatible)

  • get_pinned_notes - Get pinned notes (with optional search)

  • get_archived_notes - Get archived notes (with optional search)

  • get_trashed_notes - Get trashed notes (with optional search)

All search/list operations return notes with created, updated, and edited ISO 8601 timestamps.

Add Operations

  • create_note - Create a new note with title and text

Update Operations

  • update_note - Update a note's title and text

  • set_note_color - Set the color of a note (12 colors available)

  • archive_note - Archive a note

  • unarchive_note - Unarchive a note

  • restore_note - Restore a trashed note back to an active note

Delete Operations

  • delete_note - Mark a note for deletion

  • delete_archived_note - Permanently delete an archived note

Utility Operations

  • get_labels - Get all labels (with their usage count) for notes

  • get_note_colors - Get available note colors and usage statistics

Related MCP server: wlater MCP Server

How to use

  1. Add the MCP server to your MCP servers:

  "mcpServers": {
    "google-keep-mcp": {
      "command": "pipx",
      "args": [
        "run",
        "google-keep-mcp"
      ],
      "env": {
        "GOOGLE_EMAIL": "Your Google Email",
        "GOOGLE_MASTER_TOKEN": "Your Google Master Token"
      }
    }
  }
  1. Add your credentials:

  • GOOGLE_EMAIL: Your Google account email address

  • GOOGLE_MASTER_TOKEN: Your Google account master token

Will you will need to create a master token (unless you have a Google Enterprise account, and can access the Google Keep API directly). Follow these steps:

  • Goto https://myaccount.google.com/apppasswords and create an app password

  • Run this docker command docker run --rm -it breph/ha-google-home_get-token and enter your gmail address and app password (make sure it doesn't have a space at the end)

  • Obtain your master token. Be careful with this token, it has access to everything in your Google account.

Publishing

Releases publish to PyPI automatically via GitHub Actions (.github/workflows/publish.yml) using PyPI Trusted Publishing, so no API token is stored anywhere.

  1. Update the version in pyproject.toml and push to main.

  2. Create a GitHub release with a tag matching the version, e.g. v1.2.1:

    gh release create v1.2.1 --generate-notes
  3. The workflow checks the tag matches the version, builds, smoke-tests the wheel and publishes.

One-time setup on pypi.org: project google-keep-mcp → Publishing → add a GitHub publisher with owner davenicoll, repository google-keep-mcp, workflow publish.yml, environment pypi.

Available Tools

16 tools
archive_noteA
Archive an active note.

Args:
    note_id (str): The ID of the note to archive
    
Returns:
    str: Success message
    
Raises:
    ValueError: If the note doesn't exist, is already archived, or cannot be modified

Inputs: note_id (required). Returns: result

create_noteC
Create a new note with title and text.

Args:
    title (str, optional): The title of the note
    text (str, optional): The content of the note
    
Returns:
    str: JSON string containing the created note's data

Inputs: text, title. Returns: result

delete_archived_noteB
Permanently delete an archived note (moves to trash).

Args:
    note_id (str): The ID of the archived note to delete
    
Returns:
    str: Success message
    
Raises:
    ValueError: If the note doesn't exist, is not archived, or cannot be modified

Inputs: note_id (required). Returns: result

delete_noteC
Delete a note (mark for deletion).

Args:
    note_id (str): The ID of the note to delete
    
Returns:
    str: Success message
    
Raises:
    ValueError: If the note doesn't exist or cannot be modified

Inputs: note_id (required). Returns: result

findA
Find notes based on a search query. Alias for search_by_keyword.

Args:
    query (str, optional): A string to match against the title and text
    include_archived (bool, optional): Include archived notes in results (default: True)
    include_trashed (bool, optional): Include trashed notes in results (default: False)
    
Returns:
    str: JSON string containing the matching notes

Inputs: query, include_trashed, include_archived. Returns: result

get_archived_notesB
Get only archived notes.

Args:
    query (str, optional): A string to match against the title and text
    
Returns:
    str: JSON string containing archived notes

Inputs: query. Returns: result

get_labelsA
Analyze all labels across notes and return counts for label management.

Args:
    include_archived (bool, optional): Include archived notes in analysis (default: True)
    include_trashed (bool, optional): Include trashed notes in analysis (default: False)
    
Returns:
    str: JSON string containing label analysis with counts, sorted by usage

Inputs: include_trashed, include_archived. Returns: result

get_note_colorsA
Get available note colors and their current usage statistics.

Returns:
    str: JSON string containing available colors and usage statistics

Inputs: no named parameters. Returns: result

get_pinned_notesA
Get only pinned notes (active, non-archived, non-trashed).

Args:
    query (str, optional): A string to match against the title and text
    
Returns:
    str: JSON string containing pinned notes

Inputs: query. Returns: result

get_trashed_notesA
Get only trashed notes.

Args:
    query (str, optional): A string to match against the title and text
    
Returns:
    str: JSON string containing trashed notes

Inputs: query. Returns: result

restore_noteA
Restore a trashed note back to active notes.

Args:
    note_id (str): The ID of the trashed note to restore
    
Returns:
    str: Success message
    
Raises:
    ValueError: If the note doesn't exist, is not trashed, or cannot be modified

Inputs: note_id (required). Returns: result

search_by_keywordA
Search notes by keyword against title and text content.

Args:
    query (str, optional): A string to match against the title and text
    include_archived (bool, optional): Include archived notes in results (default: True)
    include_trashed (bool, optional): Include trashed notes in results (default: False)
    
Returns:
    str: JSON string containing the matching notes with their id, title, text, pinned status, color, labels and timestamps

Inputs: query, include_trashed, include_archived. Returns: result

search_by_labelA
Search notes by label name.

Args:
    label_name (str): The label name to filter by (case-insensitive)
    include_archived (bool, optional): Include archived notes in results (default: True)
    include_trashed (bool, optional): Include trashed notes in results (default: False)
    
Returns:
    str: JSON string containing the matching notes with their id, title, text, pinned status, color, labels and timestamps

Inputs: label_name (required), include_trashed, include_archived. Returns: result

set_note_colorA
Set the color of a note.

Args:
    note_id (str): The ID of the note to update
    color (str): The color to set. Valid values: WHITE, RED, ORANGE, YELLOW, GREEN, TEAL, BLUE, CERULEAN, PURPLE, PINK, BROWN, GRAY
    
Returns:
    str: Success message
    
Raises:
    ValueError: If the note doesn't exist, color is invalid, or note cannot be modified

Inputs: color (required), note_id (required). Returns: result

unarchive_noteA
Unarchive a note (move it back to active notes).

Args:
    note_id (str): The ID of the archived note to unarchive
    
Returns:
    str: Success message
    
Raises:
    ValueError: If the note doesn't exist, is not archived, or cannot be modified

Inputs: note_id (required). Returns: result

update_noteA
Update a note's properties.

Args:
    note_id (str): The ID of the note to update
    title (str, optional): New title for the note
    text (str, optional): New text content for the note
    
Returns:
    str: JSON string containing the updated note's data
    
Raises:
    ValueError: If the note doesn't exist or cannot be modified

Inputs: note_id (required), text, title. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 16 tools

    Disambiguation4/5

    Most tools target distinct operations, but 'find' is an exact alias for 'search_by_keyword', creating redundancy. 'delete_note' and 'delete_archived_note' could also cause confusion since both move notes to trash, though the latter requires archived status.

    Naming Consistency4/5

    Tools predominantly use verb_noun or get_noun in snake_case (e.g., create_note, get_archived_notes). The exception is 'find', which breaks the pattern. Otherwise, naming is consistent and predictable.

    Tool Count5/5

    16 tools is appropriate for a note-taking server. It provides a solid range of operations without being overwhelming, covering creation, updates, deletions, archiving, trashing, searching, and customization.

    Completeness3/5

    The set covers basic CRUD and status management, but lacks tools for pinning/unpinning notes or assigning labels to notes. The 'get_labels' tool only analyzes usage, not modification. These are notable gaps for a full note management system.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      Enables interaction with Google Keep notes through an MCP server, allowing users to search, create, update, and delete notes via natural language commands.
      23
      957 PyPI
      113
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides secure, read-only access to Google Keep notes and lists, enabling AI assistants to search, retrieve, and view your Keep data without modification capabilities.
      3
      MIT
    • A
      license
      C
      quality
      D
      maintenance
      Enables users to manage their notes on NotesKeep directly through Claude Code or other MCP clients. It supports creating, updating, and organizing both text and checklist notes using natural language commands.
      14
      6 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables users to create, search, and retrieve Google Keep notes via natural language commands.
      ISC