google-keep-mcp
Provides tools for searching, creating, updating, archiving, trashing, and deleting notes in Google Keep, as well as managing labels and colors.
Click on "Deploy 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., "@google-keep-mcp search for notes about project ideas"
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.
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 contentsearch_by_label- Search notes by label namefind- Alias forsearch_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 textset_note_color- Set the color of a note (12 colors available)archive_note- Archive a noteunarchive_note- Unarchive a noterestore_note- Restore a trashed note back to an active note
Delete Operations
delete_note- Mark a note for deletiondelete_archived_note- Permanently delete an archived note
Utility Operations
get_labels- Get all labels (with their usage count) for notesget_note_colors- Get available note colors and usage statistics
Related MCP server: wlater MCP Server
How to use
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"
}
}
}Add your credentials:
GOOGLE_EMAIL: Your Google account email addressGOOGLE_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-tokenand 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.
Update the version in
pyproject.tomland push tomain.Create a GitHub release with a tag matching the version, e.g.
v1.2.1:gh release create v1.2.1 --generate-notesThe 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 toolsarchive_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
Scored across 16 tools
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.
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.
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.
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
Related MCP Connectors
Create, search, and update notes in an xNotepad AI notebook, with semantic search and AI Q&A.
AI access to your aNotepad online notes: read, search, write, and organize via 22 tools.
Save, search and edit your private notes by talking to your AI assistant.
Google Keep MCP, read and edit your notes, lists, labels and collaborators. Connect with your Google
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables interaction with Google Keep notes through an MCP server, allowing users to search, create, update, and delete notes via natural language commands.23957 PyPI113MIT
- AlicenseNot gradedqualityDmaintenanceProvides secure, read-only access to Google Keep notes and lists, enabling AI assistants to search, retrieve, and view your Keep data without modification capabilities.3MIT
- AlicenseCqualityDmaintenanceEnables 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.146 npm1MIT
- AlicenseNot gradedqualityDmaintenanceEnables users to create, search, and retrieve Google Keep notes via natural language commands.ISC