Keep MCP
The Keep MCP server provides a comprehensive interface for managing Google Keep notes programmatically via the Model Context Protocol.
Search and Retrieval:
Find notes by text query with optional filters (labels, colors, pinned, archived, trashed status)
Retrieve a single note by its ID
Note Creation and Update:
Create text notes with title and content (automatically tagged with
keep-mcplabel)Create checklist notes (to-do/shopping lists)
Update an existing note's title and text
Checklist Management:
Add, update (text and checked state), and delete checklist items
Note State and Lifecycle:
Set note color (12 options: DEFAULT, RED, ORANGE, YELLOW, GREEN, TEAL, BLUE, CERULEAN, PURPLE, PINK, BROWN, GRAY)
Pin/unpin, archive/unarchive, trash/restore, or mark notes for deletion
Label Management:
List, create, and delete labels
Add or remove labels from notes
Collaborator Management:
List, add, and remove collaborators on a note
Media Management:
List media attachments for a note, including their links
Safety Controls:
By default, modification operations are restricted to notes with the
keep-mcplabelSet
UNSAFE_MODEto allow modifications to any note
Enables interaction with Google Keep notes, providing capabilities to search for notes, create new notes, update existing notes, and mark notes for deletion. Notes created through the integration are automatically labeled for tracking purposes.
Click on "Install 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 MCPfind my shopping list from yesterday"
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-mcp
MCP server for Google Keep
How to use
Add the MCP server to your MCP servers:
"mcpServers": {
"keep-mcp-pipx": {
"command": "pipx",
"args": [
"run",
"keep-mcp"
],
"env": {
"GOOGLE_EMAIL": "Your Google Email",
"GOOGLE_MASTER_TOKEN": "Your Google Master Token - see README.md"
}
}
}Or with uvx:
"mcpServers": {
"keep-mcp": {
"command": "uvx",
"args": [
"keep-mcp"
],
"env": {
"GOOGLE_EMAIL": "Your Google Email",
"GOOGLE_MASTER_TOKEN": "Your Google Master Token - see README.md"
}
}
}Add your credentials:
GOOGLE_EMAIL: Your Google account email addressGOOGLE_MASTER_TOKEN: Your Google account master token
Obtain a Google master token
keep-mcp uses gkeepapi, which connects to Google Keep through an unofficial private API. A Google master token has full access to your account. Treat it like a password and never commit or share it.
Use the browser-assisted token exchange documented by gpsoauth. Choose how you want to run the exchange:
Local Python: Follow
gpsoauth's alternative flow.Docker: Follow gkeepapi's "Obtaining a Master Token" instructions. This runs the same exchange without requiring a local Python installation.
Both options require the browser oauth_token described in the gpsoauth documentation.
Older instructions may ask for your Google password or an app password and call perform_master_login(). That flow is unreliable and can return BadAuthentication. Use the browser-assisted flow above instead.
Related MCP server: google-keep-mcp
Features
Query and read tools
find: Search notes (case-insensitive by default) with optional filters for labels, colors, pinned, archived, trashed, creation/update date ranges (ISO 8601, UTC), and a result limitget_note: Get a single note by ID
Creation and update tools
create_note: Create a new note with title and text (automatically adds keep-mcp label)create_list: Create a checklist noteupdate_note: Update a note's title and textadd_list_item: Add an item to a checklist noteupdate_list_item: Update checklist item text and checked statedelete_list_item: Delete a checklist item
Note state tools
set_note_color: Set a note color (valid values: DEFAULT, RED, ORANGE, YELLOW, GREEN, TEAL, BLUE, CERULEAN, PURPLE, PINK, BROWN, GRAY)pin_note: Pin or unpin a notearchive_note: Archive or unarchive a notetrash_note: Move a note to trashrestore_note: Restore a trashed/deleted notedelete_note: Mark a note for deletion
Labels, collaborators, and media tools
list_labels: List labelscreate_label: Create a labeldelete_label: Delete a labeladd_label_to_note: Add a label to a noteremove_label_from_note: Remove a label from a notelist_note_collaborators: List collaborator emails for a noteadd_note_collaborator: Add a collaborator email to a noteremove_note_collaborator: Remove a collaborator email from a notelist_note_media: List media blobs for a note (with media links)
By default, all destructive and modification operations are restricted to notes that have were created by the MCP server (i.e. have the keep-mcp label). Set UNSAFE_MODE to true to bypass this restriction.
"env": {
...
"UNSAFE_MODE": "true"
}Local development (uv + make)
If you prefer a JS-style workflow (npm i, npm start), use the included Makefile:
make install # like npm i
make start # like npm start
make test
make lintRun the real-account smoke test with credentials:
GOOGLE_EMAIL="you@example.com" \
GOOGLE_MASTER_TOKEN="..." \
make smokeEquivalent direct uv commands (without make):
UV_CACHE_DIR=/tmp/uv-cache uv venv --python 3.11 .venv
UV_CACHE_DIR=/tmp/uv-cache uv pip install --python .venv/bin/python -e .
UV_CACHE_DIR=/tmp/uv-cache uv run --no-sync --python .venv/bin/python -m serverTesting
Unit tests (default)
The project includes a lightweight unit test suite under tests/.
It validates:
note serialization shape for note and list objects (including labels, collaborators, media, and list items)
modification safety behavior (
keep-mcplabel requirement andUNSAFE_MODE=trueoverride)MCP tool behavior in
src/server/cli.pyusing mocked Keep client objects (tool happy paths and key error paths)
Run locally:
make testSmoke test against a real Keep account
For additional confidence, run a basic lifecycle smoke test against a dedicated test account:
GOOGLE_EMAIL="you@example.com" \
GOOGLE_MASTER_TOKEN="..." \
make smokeWhat it does:
create note
update note
pin/unpin
archive/unarchive
trash/restore
delete
This script is intended for manual verification and is not run in CI.
CI checks
GitHub Actions runs on every pull request and executes:
lint (
ruff check .)unit tests with coverage (
pytest -q --cov=src/server --cov-report=term-missing --cov-fail-under=70)bytecode sanity (
python -m compileall src)
Publishing
Automatic publish on merge to main (GitHub Actions)
This repo includes a release workflow at .github/workflows/release.yml that runs on every push to main (including merged PRs).
It will:
inspect commits since the last release tag (
vX.Y.Z)compute the next semantic version from Conventional Commit types
skip publishing when there are no releasable commit types
run lint and unit tests
build
dist/*publish to PyPI
create a GitHub release/tag
v<computed-version>with generated notes
Version bump rules:
major: commit subject with
!(example:feat!:orfix(api)!:) or commit body containingBREAKING CHANGEminor:
feat:patch:
fix:,perf:,revert:no release:
docs:,chore:,ci:,test:,refactor:(unless the commit is marked as breaking)
Required repository secret:
PYPI_API_TOKEN: a PyPI API token (recommended scope: this project only)
Manual publish
To publish manually to PyPI:
Update the version in
pyproject.tomlBuild the package:
pipx run buildUpload to PyPI:
pipx run twine upload --repository pypi dist/*
Run locally with MCP clients
This is useful when you want a client to run this server from your local checkout instead of PyPI.
Create a local virtualenv and install in editable mode:
cd /ABSOLUTE/PATH/TO/keep-mcp
make installAdd the server to your MCP client config.
config.toml clients (Codex, Goose, etc.)
[mcp_servers.keep_mcp]
command = "make"
args = ["-C", "/ABSOLUTE/PATH/TO/keep-mcp", "start"]
[mcp_servers.keep_mcp.env]
GOOGLE_EMAIL = "you@example.com"
GOOGLE_MASTER_TOKEN = "your-master-token"
UNSAFE_MODE = "false"JSON mcpServers clients (Claude Desktop, Cursor, Cline, etc.)
{
"mcpServers": {
"keep-mcp-local": {
"command": "make",
"args": ["-C", "/ABSOLUTE/PATH/TO/keep-mcp", "start"],
"env": {
"GOOGLE_EMAIL": "you@example.com",
"GOOGLE_MASTER_TOKEN": "your-master-token",
"UNSAFE_MODE": "false"
}
}
}
}Alternative (without make):
[mcp_servers.keep_mcp]
command = "uv"
args = [
"--directory", "/ABSOLUTE/PATH/TO/keep-mcp",
"run", "--no-sync", "--python", ".venv/bin/python",
"-m", "server"
]Notes:
Run
make installonce before starting from an MCP client.Only the repo root path is required (no absolute
/.venv/bin/pythonpath).Ensure
makeanduvare in yourPATH.Restart your MCP client after updating config files.
UNSAFE_MODEis optional; keep it"false"unless you explicitly want to modify non-keep-mcpnotes.
Troubleshooting
If you get "DeviceManagementRequiredOrSyncDisabled" check https://admin.google.com/ac/devices/settings/general and turn "Turn off mobile management (Unmanaged)"
Available Tools
23 toolsadd_label_to_noteC
Add a label to a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| label_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only states 'Add a label to a note,' implying a mutation, but provides no details on side effects, idempotency, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is concise, it is under-specified. It fails to provide necessary context, making it insufficient for effective tool selection and use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not explain return values or possible errors. It does not differentiate from sibling tools beyond the basic action, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no extra meaning to the parameters. The names 'note_id' and 'label_id' are somewhat self-explanatory, but the description does not clarify expected formats or sources.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Add) and the resource (label to a note), distinguishing it from siblings like remove_label_from_note. However, it could be more specific by indicating that the label must already exist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., create_label first). There is no indication of prerequisites or potential errors (e.g., label already attached, invalid IDs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_list_itemC
Add an item to a checklist note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| text | Yes | ||
| checked | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'add' (mutation) but does not disclose side effects, authorization needs, or error conditions, leaving significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff, efficiently conveying the core function. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (3 parameters, required output schema exists), the description is too sparse. Missing context about checklist-specific behavior, how to obtain note_id, and expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameters. It does not; it only names the tool's purpose. Parameter names (note_id, text, checked) are somewhat self-explanatory, but the description adds no additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add) and resource (item to a checklist note), distinguishing it from sibling tools like 'create_list' or 'update_list_item'. However, it does not explicitly mention that the note must be an existing checklist, which is a slight gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, prerequisites, or scenarios to avoid. Agents must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_note_collaboratorC
Add a collaborator email to a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully disclose behavior. It only says 'Add', implying mutation, but provides no details on idempotency, error conditions, or side effects like notifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence) and front-loaded, but it sacrifices necessary detail. It is efficient but not sufficiently informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and the presence of an output schema, the description still lacks important context such as error handling, duplicate behavior, and permissions, making it incomplete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds minimal semantics beyond parameter names. It does not explain the format of email or the nature of note_id (e.g., whether it's a UUID or title).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Add' and the resource 'collaborator email to a note', distinguishing it from siblings like remove_note_collaborator. However, it lacks explicit differentiation from other note-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_note_collaborators or remove_note_collaborator. Missing context about prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_noteC
Archive or unarchive a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| archived | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It only states the toggle behavior without explaining what archiving entails (e.g., visibility, searchability, or side effects). The threshold for transparency is not met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is efficient. However, it could be structured to include brief parameter hints without becoming verbose. The front-loading is adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of 2 parameters, no annotations, an output schema, and sibling tools with similar actions (trash_note, restore_note), the description is incomplete. It does not clarify how archiving differs from trashing or deleting, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no meaning to the parameters. It does not explain that `note_id` identifies the note or that `archived` toggles the state with a default of true. The agent gains no additional insight beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (archive or unarchive) and the resource (a note). The tool's name aligns with this, and it distinguishes from sibling tools like trash_note or delete_note by implying a reversible state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as trash_note, delete_note, or restore_note. The description lacks context for decision-making, leaving the agent to infer usage without explicit instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_labelC
Create a label.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the transparency burden. It only states the action 'Create' which implies a write operation, but offers no details on side effects, idempotency, or authorization needs. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (three words), front-loading the core action. However, it sacrifices necessary detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter with no schema comments, an output schema, and sibling tools that suggest labels are used with notes, the description is insufficient. It doesn't explain the label concept, return value, or integration points.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the sole parameter 'name'. Without any parameter documentation, the agent lacks context on what value to provide, e.g., format, uniqueness, or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a label.' clearly states the action and resource, but lacks specificity to differentiate from sibling tools like 'add_label_to_note'. It is clear enough to indicate a new label is being created.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives such as 'add_label_to_note' or 'list_labels'. The description does not mention prerequisites or typical workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listB
Create a new checklist note.
items should be objects like: {"text": "task", "checked": false}
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| items | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must convey behavioral traits. Only states 'create' and gives item format, omitting details like side effects, permissions, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose. The example adds value without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 2 parameters with no schema descriptions and no annotations. Description partially covers items but not title or output behavior. Output schema exists, so return values are covered, but overall completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but description adds meaningful structure for 'items' parameter with example {'text': 'task', 'checked': false}. This compensates for absent schema descriptions, though 'title' is not elaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Create a new checklist note.', specifying the action (create) and resource (checklist note). It distinguishes from siblings like 'create_note' (plain note) and 'add_list_item' (modifies existing list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'create_note' or 'add_list_item'. The description implies it's for new checklists but lacks context on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteC
Create a new note with title and text.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits, but it only states the basic action. It doesn't mention side effects, authentication needs, rate limits, or what happens with null parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence, which is concise but under-specified. It could be improved by adding necessary details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema but the description omits any mention of what is returned. Given the simplicity and lack of annotations, the description should at least note the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only names the parameters 'title' and 'text' without explaining their purpose, constraints, or behavior when null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new note with title and text, distinguishing it from update, delete, or list operations. However, it doesn't mention that both parameters are optional.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like update_note or archive_note, nor any prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_labelB
Delete a label by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| label_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It only states 'delete', which is already implied by the name. It does not disclose whether the deletion is permanent, what happens to associated notes, or any permissions needed. This is minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no superfluous words. It is front-loaded with the action and resource, achieving maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete-by-ID tool, the description captures the core action. However, it lacks details about return values (despite an output schema existing), side effects, and error conditions. With no annotations, more completeness would be expected for a top-tier score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'label_id' is documented in the schema but the description adds only the phrase 'by ID', which weakly connects to the parameter. With 0% schema description coverage, the description does not elaborate on the parameter's format, source, or constraints, providing marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'delete', the resource 'label', and the method 'by ID'. It distinguishes itself from sibling tools like 'remove_label_from_note' which remove associations rather than the label itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as 'remove_label_from_note' or 'update_label'. No preconditions or postconditions are mentioned, leaving the agent without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_list_itemC
Delete a checklist item.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| item_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Delete', implying mutation, but fails to disclose any behavioral traits such as whether the operation is irreversible, what happens to associated data, or authorization requirements. With no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), which is efficient, but it sacrifices necessary detail. It is not overly verbose, but borderline under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown), the description does not mention return values or error conditions. For a delete operation with sibling tools, more context about what the tool requires and returns is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage and the description does not explain what note_id or item_id represent. The parameter names hint at their roles, but no additional meaning is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Delete) and the resource (a checklist item). It is not a tautology and provides the basic purpose, though it lacks specificity to distinguish from sibling tools like add_list_item or update_list_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like add_list_item or update_list_item. There are no prerequisites or context about needed permissions or valid states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteC
Delete a note (mark for deletion).
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description must disclose behavior. It mentions 'mark for deletion' but does not clarify if deletion is reversible, what permissions are needed, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no fluff, but it is too sparse to be considered well-structured. It sacrifices necessary detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of multiple related sibling tools, the description is incomplete. It does not explain how this tool differs from 'trash_note' or 'archive_note', nor does it mention any output or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (note_id) with 0% coverage. The description adds no additional meaning or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'Delete' and resource 'note', but adds 'mark for deletion' which hints at soft delete. However, it does not distinguish from siblings like 'trash_note' or 'archive_note', causing potential confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., trash_note, archive_note, restore_note). The description lacks context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findB
Find notes using text and optional filters. labels should be label IDs. colors should be ColorValue strings (e.g. DEFAULT, RED, CERULEAN).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| labels | No | ||
| colors | No | ||
| pinned | No | ||
| archived | No | ||
| trashed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must fully disclose behavioral traits. It identifies the tool as a 'find' operation (likely read-only) but does not elaborate on side effects, required permissions, rate limits, or behavior when no matches are found. The output schema exists but is not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The first sentence states the purpose, the second adds critical format details for two parameters. It is efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description lacks essential behavioral context such as how the query parameter works (full-text search?), how filtering logic combines parameters, and whether results are paginated. The tool has 6 parameters and no annotations, so the description should provide more comprehensive guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 6 parameters with 0% description coverage. The description adds format guidance for 'labels' and 'colors' (e.g., label IDs, ColorValue strings) but leaves 'query', 'pinned', 'archived', 'trashed' unexplained. This provides minor additional value but is insufficient given the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find notes using text and optional filters', specifying the action (find) and resource (notes). It distinguishes the tool from siblings like get_note (single note retrieval) and list_labels, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides hints on parameter formats (e.g., 'labels should be label IDs'), but does not explicitly state when to use this tool over alternatives or when not to use it. Usage context is implied but not clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_noteC
Get a note by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description does not disclose any behaviors beyond name. No mention of error handling, authentication, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but too minimal for a tool with no other documentation. Could add value without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description does not need return details, but lacks any completion beyond basic purpose. Adequate but missing nuances.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet description adds no meaning to note_id parameter. No format, source, or constraints explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get' and resource 'note by ID' directly states the action. Distinguishes from siblings like create, update, delete, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings like find or list_note_media. No context on prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsA
List all labels.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the operation. No disclosure of ordering, pagination, permissions, or side effects beyond the basic read action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: one short sentence with no unnecessary words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, output schema present), the description is complete. It adequately describes the action and result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, schema coverage is 100%. The description adds value by confirming 'all labels', clarifying the unfiltered scope beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all labels' uses a specific verb ('list') and resource ('labels') with clear scope ('all'), distinguishing it from sibling tools like create_label or delete_label.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description does not mention exclusions or provide context for choosing list_labels over other similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_note_collaboratorsB
List collaborator emails for a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic action. It does not disclose behavioral traits like required permissions, response format, or whether it returns only emails. Minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loaded, and contains no filler. However, it may be too brief, bordering on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, an output schema exists (but not described), and no annotations, the description is incomplete. It does not explain what the output contains or provide any usage context. With siblings, more details would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description adds no meaning beyond the schema. 'for a note' implies the note_id parameter, but no format or context is provided. The description does not compensate for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists collaborator emails for a note, using a specific verb and resource. It distinguishes from sibling tools like add_note_collaborator and remove_note_collaborator by implying a read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing to see collaborators, but provides no explicit guidance on when to use versus alternatives or any exclusions. It is adequate but lacks explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_note_mediaB
List note media blobs and direct media links when available.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the burden. It only implies a read operation ('list') but does not disclose details like pagination, rate limits, or behavior when media is unavailable. The phrase 'when available' hints at conditional output but is too vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no waste. It efficiently states the core function, though it could be slightly more structured with separate notes for usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a simple one-parameter input and an output schema (presumably), the description minimally covers the necessary context. However, it lacks details like return format or error handling, which are partially mitigated by the output schema's existence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should add meaning to parameters. It does not explain the purpose or format of note_id beyond what the name implies. No additional context is provided for the sole parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'note media blobs and direct media links when available,' specifying the verb (list) and resource (note media). It distinguishes from sibling tools like get_note or list_labels by focusing on media assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool over others (e.g., get_note for full note content). No context about prerequisites or alternatives is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_noteC
Pin or unpin a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| pinned | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility for disclosing behavior. It states 'Pin or unpin' but does not explain consequences (e.g., visibility changes, ordering) or any side effects. The toggling behavior is implied by the 'pinned' parameter, but not explicitly described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks necessary information about parameters and behavior. It is under-specified rather than appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple toggle action but low schema coverage and presence of an output schema, the description should at least indicate what is returned or how pinning affects the note. It does not, leaving the tool incomplete in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions in input schema). The description does not provide any additional meaning for the 'note_id' or 'pinned' parameters. It fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Pin or unpin a note' clearly identifies the action (pin/unpin) and resource (note). It is specific and distinguishes from sibling tools like archive_note or trash_note, though it does not elaborate on what pinning means.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as archive_note or add_label_to_note. The description does not provide context or prerequisites for pinning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_label_from_noteC
Remove a label from a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| label_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, and description only says 'remove'. No disclosure of side effects (e.g., whether label is actually deleted from system), permissions needed, or if operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, which is concise but overly minimal. No structure or front-loading of important details beyond the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, description does not mention return values or success conditions. Also lacks context on when to use compared to sibling tools like 'delete_label' or 'remove_note_collaborator'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description adds no extra meaning beyond the schema fields. It does not explain how to obtain note_id or label_id, or validate formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it removes a label from a note, which is specific and distinct from sibling 'add_label_to_note'. However, it does not explicitly differentiate from other siblings like 'remove_note_collaborator'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it does not mention when to remove a label vs. delete it, or prerequisites like note existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_note_collaboratorC
Remove a collaborator email from a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It only says 'Remove' implying mutation, but no details on side effects, reversibility, or error handling are given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is too sparse to be fully informative, scoring average.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no parameter descriptions, the description is incomplete. An output schema exists but is not referenced, and return values or error behavior are not explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds no extra meaning to the two parameters beyond their names. It mentions 'collaborator email' but does not clarify format or validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (remove) and the resource (collaborator email from a note), distinguishing it from siblings like add_note_collaborator and list_note_collaborators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives, nor any prerequisites such as the note existence or collaborator association.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_noteB
Restore a trashed/deleted note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 only states the basic function without mentioning side effects, permissions, or state transitions (e.g., what happens if note is not trashed).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words, achieving maximum conciseness for a straightforward tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple (one parameter, one action), the description lacks output details (despite an output schema existing) and fails to convey any edge cases or behavioral nuance, making it minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not elaborate on the 'note_id' parameter beyond its type, missing context like expected format or source of the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restore') and the resource ('a trashed/deleted note'), using a specific verb-noun pair that distinguishes from siblings like 'trash_note' and 'delete_note'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no mention of prerequisites (e.g., note must be in trash), and no explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_note_colorA
Set a note color. Valid values: DEFAULT (white), RED, ORANGE, YELLOW, GREEN, TEAL, BLUE, CERULEAN (dark blue), PURPLE, PINK, BROWN, GRAY.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| color | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states action and valid values, omitting side effects, permissions, or error handling for invalid colors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second lists values. Extremely concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks usage context and behavioral details. Output schema exists but not leveraged. Adequate for simple mutation but not for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning for color param via valid values (schema only has type string), but does not clarify note_id format or origin. Schema coverage 0%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Set a note color' with specific verb and resource, and lists valid color values, distinguishing it from siblings like update_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides valid color values but no explicit when-to-use or alternatives among siblings. Agent may infer usage but lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trash_noteC
Move a note to trash.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behavioral traits like reversibility, permission requirements, or side effects. 'Move to trash' is vague and does not indicate whether the action is reversible or what happens to collaborators.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Appropriate for a simple parameterless (except ID) tool, but could be slightly more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of output schema and many sibling tools, the description is too sparse. No mention of return behavior, error conditions, or side effects on related data (e.g., labels, lists).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter note_id has 0% schema description coverage, and the description adds no meaning beyond its name. No hints on format or valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'move' and resource 'note to trash', distinguishing it from siblings like 'archive_note' and 'delete_note' by implying a soft delete action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use trash versus other similar operations (archive, delete, pin). Missing context about prerequisites or alternatives among the many note sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_list_itemB
Update checklist item text and/or checked state.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| item_id | Yes | ||
| text | No | ||
| checked | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It states 'update' implying mutation, but fails to disclose side effects, idempotency, permissions, or behavior on missing items. The agent has minimal insight into the tool's operational impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous words. It is front-loaded with the action and resource, and every word earns its place. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, zero schema descriptions, no annotations, and an output schema, the description omits return values, error handling, and usage context (e.g., authentication). It is insufficient for a complete understanding of the tool's behavior in a complex workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning by naming the two optional parameters that can be updated. However, it does not explain the note_id and item_id identifiers, assuming the agent understands their format or origin. The description provides marginal value over the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update' and the resource 'checklist item', specifying the modifiable attributes 'text and/or checked state'. It effectively distinguishes from sibling tools like add_list_item and delete_list_item by implying modification of existing items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prerequisites (e.g., item must exist), potential error conditions, or situations where this tool is preferable. The brevity leaves the agent without context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteC
Update a note's properties.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| title | No | ||
| text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only indicates mutation (update) but offers no details on side effects, idempotency, permissions, or whether it overwrites or merges. With no annotations, the description's minimal disclosure is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence, 4 words), but it sacrifices necessary detail. It could be more informative without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a simple tool and output schema, the description omits parameter usage, behavioral traits, and usage context. It is not complete enough for agents to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameters. It fails to add meaning beyond the raw schema, leaving agents without guidance on required note_id or optional title/text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update a note's properties' clearly states the verb (update) and resource (note), but does not specify which properties, relying on the schema. It distinguishes from siblings like create or delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as create_note, archive_note, or set_note_color. The description provides no context for decision-making.
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.
22 tool updates
v0.3.1- Added
add_label_to_note - Added
add_list_item - Added
add_note_collaborator - Added
archive_note - Added
create_label - Added
create_list - Changed
create_note4 fields changed- added
Input schema / properties / text / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / text / typeRemoved value: -"string" - added
Input schema / properties / title / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / title / typeRemoved value: -"string"
- Added
delete_label - Added
delete_list_item - Changed
find6 fields changed- added
Input schema / properties / archivedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "title": "Archived" +} - added
Input schema / properties / colorsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Colors" +} - added
Input schema / properties / labelsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Labels" +} - added
Input schema / properties / pinnedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pinned" +} - changed
Input schema / properties / query / titlePrevious value: -"query"New value: +"Query" - added
Input schema / properties / trashedAdded value: +{ + "default": false, + "title": "Trashed", + "type": "boolean" +}
- Added
get_note - Added
list_labels - Added
list_note_collaborators - Added
list_note_media - Added
pin_note - Added
remove_label_from_note - Added
remove_note_collaborator - Added
restore_note - Added
set_note_color - Added
trash_note - Added
update_list_item - Changed
update_note4 fields changed- added
Input schema / properties / text / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / text / typeRemoved value: -"string" - added
Input schema / properties / title / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / title / typeRemoved value: -"string"
4 tool updates
v1.0.0- First observed
create_note - First observed
delete_note - First observed
find - First observed
update_note
TDQS
Each tool has a clearly distinct purpose, covering notes, labels, checklist items, collaboration, and media. There is minimal overlap; for example, archive, trash, delete, and restore are all separate actions. An agent can reliably select the correct tool.
Most tools follow a consistent verb_noun pattern with snake_case (e.g., add_label_to_note, create_note). Minor inconsistency: 'find' is a bare verb instead of 'find_notes', and 'create_list' creates a checklist note rather than using 'create_checklist'. Overall, the pattern is predictable.
23 tools is slightly above the typical 3-15 range but reasonable for a full-featured note-taking server. Each tool captures a specific operation, and the count is not overwhelming for the domain.
CRUD operations are covered for notes, labels, and checklist items. However, there is no tool to list all notes (only find with text search), and no explicit tool to unarchive or unpin (toggle behavior), which could cause agent failures if not inferred. Notable gaps exist.
Maintenance
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
Google Keep MCP, read and edit your notes, lists, labels and collaborators. Connect with your Google
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Related MCP Servers
- 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.14171MIT
- FlicenseAqualityDmaintenanceEnables AI-powered management of Google Keep notes, including search, create, update, delete, archive, and label operations.1610-
- FlicenseNot gradedqualityDmaintenanceEnables users to create, search, and retrieve Google Keep notes via natural language commands.-
- FlicenseBqualityDmaintenanceA Model Context Protocol server that connects Google Keep to Claude, enabling full note management capabilities including search, CRUD, checklists, labels, and more.20-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/feuerdev/keep-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server