Keep Context
Provides read-only access to a connected Google Keep account, enabling search and retrieval of notes, labels, recent notes, and tasks/checklists from Google Keep.
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., "@Keep Contextsearch my notes for weekend trip"
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.
Keep Context
Your Google Keep notes. One conversation.
Website · Get started · Authentication guide · Verification
Search and read your Google Keep notes in ChatGPT. One account per server, five read-only tools, no database or paid AI API required.
Keep Context reads from your connected Google Keep account and refreshes an in-memory snapshot as needed. New notes become available on the next request after the one-minute refresh interval. It never writes a notes database.
Ask things like “What did I write about my garden?”, “Search my notes for weekend trip”, or “What do I still need to do?”
Quick start
Install uv and Python 3.11 or newer. From a terminal:
git clone https://github.com/spidey889/keep-context.git
cd keep-context
uv sync --locked
uv run keep-context connect
uv run keep-context doctorconnect walks you through one manual Google sign-in and asks for a hidden token input. It verifies Keep access, saves setup progress in the OS vault, and asks you to choose a separate password for connecting ChatGPT. Invalid passwords retry in place. If interrupted during that step, rerun the same command to resume without another browser sign-in. Never paste Google tokens into ChatGPT. See authentication instructions.
To expose a temporary HTTPS endpoint, install cloudflared (Windows: winget install -e --id Cloudflare.cloudflared), then run:
uv run keep-context serve --tunnelCopy the printed https://…/mcp URL into ChatGPT's Plugins → Add custom MCP server. Select OAuth and dynamic client registration (DCR) when offered. Leave static client credentials empty. Approve access using the separate connection password from setup. Install the plugin, select it with @ in a new chat, and ask about your notes. Account/workspace policies may control whether custom plugins are available. Current OpenAI instructions.
Keep the terminal running. Ctrl+C stops the server and its tunnel. The temporary URL changes on each restart, so recreate the ChatGPT connection then. For daily use, point a stable HTTPS proxy/tunnel at loopback port 8000 and run:
uv run keep-context serve --public-url https://keep.example.comWith a stable URL, encrypted OAuth state preserves connections across restarts. See ChatGPT and deployment details.
Related MCP server: wlater MCP Server
Try it without a Google account
uv run keep-context doctor --demo
uv run keep-context serve --demo --tunnelThe demo uses two sample notes and the deliberately public connection password demo-only-no-google-account. It never loads Google credentials. Omit --demo for your account.
For local MCP clients such as Codex or Claude Desktop:
uv run keep-context serve --transport stdioSee stdio configuration. ChatGPT's web connection uses HTTP rather than stdio.
Tools
Tool | What it returns |
| Ranked matches across titles, bodies and checklist items, with excerpts, labels, timestamps and source URLs. |
| Full note text, labels, timestamps, and every checklist item with its checked state and parent ID. |
| Recently modified notes, newest first. |
| All configured label names and note counts, including unused labels. |
| Unchecked checklist/Markdown items plus likely tasks detected from English TODO wording. |
Lists support limit and offset; follow next_offset until it is null. Search includes archived notes by default; recent notes and tasks exclude them unless requested. Trashed notes are always excluded. Labels match exact names without case sensitivity. Search uses all supplied keywords, with title matches ranked first. fetch does not truncate note text. Data refreshes on the next call after the 60-second cache expires; doctor makes a fresh connection.
Why authentication has a manual step
Google's official Keep API is intended for enterprise/domain-wide access, not a consumer OAuth connect flow. This project uses the maintained gkeepapi and gpsoauth libraries for consumer accounts. Their authentication requires a Google master token; it cannot safely be replaced with an ordinary OAuth button. ChatGPT connects to this server using separate, scoped MCP OAuth tokens. Research and alternatives.
Privacy and limits
Google master tokens have broad account access. They remain in your OS credential vault, or explicit deployment secrets; the server never returns them through MCP.
No note cache is written to disk. OAuth clients/tokens are stored encrypted in ignored
.keep-context/oauth.enc, with encryption derived from the Google master token. HTTP access logs and upstream debug logging are disabled.No tools can write notes. A network guard rejects node/label mutation payloads even if future code accidentally edits a gkeepapi object.
Notes read by ChatGPT are shared with ChatGPT. The server is for one trusted owner, not shared multi-user hosting.
Access is unofficial and can break if Google changes its private API or blocks authentication. Checklist extraction is exact; English prose task detection is heuristic. Search is keyword-based, not semantic. Images, drawings, audio and reminders are not transcribed or fetched.
Develop and verify
uv sync --locked
uv run ruff check .
uv run ruff format --check .
uv run pytest -q
uv buildTests exercise the real gkeepapi parser with mocked Google responses, OAuth/PKCE, secrets redaction, and real stdio and TCP HTTP server processes using the official MCP client. No Google account or browser automation is required. Verification report, current behavior, change history.
Optional live HTTPS smoke (demo data only, requires cloudflared): uv run python scripts/smoke_https.py.
Website
The minimal project site lives in site/. It uses plain HTML/CSS and a local SVG, with no JavaScript, tracking or external font requests. GitHub Actions publishes only this folder to GitHub Pages, on changes to the site or its publishing workflow. The site explains setup; each user's authenticated MCP server runs separately.
To preview locally, run python -m http.server 8080 --directory site and open http://localhost:8080. Changes to server code do not redeploy the site. The live website is independent of your temporary MCP tunnel.
MIT licensed. Dependencies retain their respective licenses.
This server cannot be deployed
Maintenance
Related MCP Connectors
Google Keep MCP, read and edit your notes, lists, labels and collaborators. Connect with your Google
- aNotepadOAuthcom.anotepad
AI access to your aNotepad online notes: read, search, write, and organize via 22 tools.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables interaction with Google Keep notes through an MCP server, allowing users to search, create, update, and delete notes via natural language commands.23104MIT
- 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
- FlicenseAqualityDmaintenanceEnables AI-powered management of Google Keep notes, including search, create, update, delete, archive, and label operations.1624 PyPI11-
- AlicenseAqualityCmaintenanceEnables Claude or Cursor to read Google Keep notes and checklists, add items, and check or uncheck them via MCP over HTTP with OAuth.7MIT