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 "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 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
See CONTRIBUTING.md for contribution guidelines and required visual evidence.
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: 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)download_media: Download a note's media (images, drawings, audio) to a local directory through the authenticated session (the raw media links answer 403 to plain HTTP clients)
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?
There are no annotations, so the description must carry the burden of behavioral disclosure. It only states the mutation itself and says nothing about side effects, idempotency, whether duplicate labels are rejected, or what happens if the note or label does not exist.
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, front-loaded sentence with no filler. It is concise, though slightly terse; it provides the core operation but sacrifices useful context 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?
While the tool is simple, the absence of annotations and parameter descriptions leaves important context missing, such as preconditions and behavior on duplicate labels. The output schema may cover return values, but the description does not make the tool complete enough 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?
The input schema has 0% description coverage, and the description adds no clarification beyond the parameter names. It does not explain that note_id must reference an existing note, that label_id must reference an existing label, or how those IDs should be obtained.
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 a specific verb and resource: adding a label to a note. It is immediately understandable and distinguishable from the remove_label_from_note sibling by the opposite direction of action, though it does not explicitly name or contrast any sibling.
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 given about when to use this tool versus related tools like create_label, list_labels, or remove_label_from_note. There are also no stated prerequisites, such as the note and label already existing or how to obtain their 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?
With no annotations, the description must carry the behavioral disclosure burden. It states a mutation occurs, but does not explain append behavior, whether checked defaults to false, failure modes, permissions, or reversibility.
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 clear, front-loaded sentence with no filler. It is appropriately concise, though it sacrifices useful detail.
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 mutation tool with no annotations and zero schema descriptions, the description is incomplete. It omits prerequisites such as the note being a checklist, behavior when the note does not exist, and the role of the checked parameter. The output schema covers return values, so that is not the gap.
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 needs to compensate. It provides only a slight relational hint that an item is added to a checklist note, but it does not explain the meaning of note_id, text, or checked beyond their names.
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 uses a specific verb and resource: 'Add an item to a checklist note.' It clearly identifies the operation and distinguishes it from sibling tools like update_list_item and delete_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 given about when to use this tool versus alternatives such as update_list_item, delete_list_item, or create_list. There are no preconditions, exclusions, or context cues to help the agent choose this tool correctly.
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 carries the full burden. It discloses the core toggle behavior but does not explain the effects of archiving (e.g., visibility, retrieval, reversibility beyond the unarchive option), permissions, or any side effects. There is no contradiction with annotations because none exist.
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 filler. It is appropriately concise for a simple two-parameter tool, though its brevity prevents it from providing richer routing or usage context.
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 core call is fully specified: note_id and archived are inferable, and an output schema exists, so return-value documentation is not required. The main gap is situational context—how archiving relates to trashing, deleting, or restoring notes—which matters given the large sibling set.
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 must compensate. 'Archive or unarchive' maps usefully to the archived boolean parameter and identifies note_id as the target, but it does not explicitly document the default true value or the archived=false -> unarchive mapping. Some semantics are left to inference.
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 a specific action ('Archive or unarchive') and a clear resource ('a note'). It distinguishes this tool from deletion, trashing, and pinning, though it does not explicitly contrast it with sibling tools like restore_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 is provided about when to use this tool instead of alternatives like trash_note, delete_note, or restore_note. The description relies entirely on the tool name and user inference, with no exclusions, prerequisites, or decision context.
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_noteB
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. Description only states it retrieves a note, implying a read operation. No disclosure of error conditions, idempotency, or side effects. Minimal behavioral insight.
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) and front-loaded with the action and resource.
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 complexity is low with one parameter. An output schema exists. The description is adequate for a simple retrieval but lacks context on authentication, error handling, or what a note entails.
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%. The description adds 'by ID' which connects the parameter to the tool's purpose, but does not explain the note_id format, scope, 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 clearly states the action ('Get'), the resource ('note'), and the method ('by ID'). It is specific and distinguishes from list 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 siblings like 'list_notes' or 'get_note_comment'. No context for prerequisites or exclusions.
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?
With no annotations, the description carries the full burden for behavioral disclosure, but it only restates the core action. It does not mention idempotency, effect on note ordering/visibility, behavior on archived or trashed notes, invalid note_id handling, or what response is returned. No contradiction with annotations because none are provided.
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 six words and fully front-loaded. There is no filler, and for a simple two-parameter toggle the size is appropriate; all other gaps are issues of content rather than structure.
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 low complexity and presence of an output schema, the description does not need to explain return values. It is minimally viable: an agent can infer the basic call from the name, schema, and short description. However, missing behavioral details and usage routing keep it from being fully 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% and the description adds no explicit parameter meaning beyond the phrase 'Pin or unpin'. It does not clarify that pinned=false means unpin or explain note_id format/constraints. The schema's titles and default for pinned provide some self-evident meaning, keeping this above 1, but the description does not compensate for the missing documentation.
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 a specific action ('Pin or unpin') and resource ('a note'), making the tool's purpose immediately clear. It is not a tautology and the operation is distinct enough from siblings like archive_note and trash_note that an agent can identify it, though it does not explicitly contrast with 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?
No when-to-use guidance, preconditions, or alternatives are provided. The description gives no indication of when pinning is appropriate or how this differs from update_note or other note operations. Usage context must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_label_from_noteA
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?
With no annotations, the description must disclose behavior on its own. It accurately states the core mutating action, but it does not clarify whether the label is merely disassociated from the note or deleted, nor what happens if the label is not already attached. This is a minimal but not misleading 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?
A single, clear, front-loaded sentence contains exactly the necessary information with no filler. It earns its place efficiently.
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 two-parameter tool with an output schema, the description covers the basic operation but lacks guidance on edge cases, side effects, and alternative tool selection. It is adequate for straightforward use but not richly contextual.
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 enumerate or explain note_id and label_id explicitly. However, the phrase 'from a note' plus the parameter names makes the roles of the two IDs clear enough for a simple operation.
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 a specific verb ('Remove') and a specific resource ('a label from a note'). It is immediately distinguishable from sibling tools like add_label_to_note and delete_label, so the agent knows exactly what this tool does.
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 about when to use this tool versus alternatives such as delete_label or add_label_to_note. The intended use is inferable from the name, but the description does not explicitly state when-not or mention any prerequisites or edge conditions.
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.
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
Scored across 23 tools
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
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.
Read and write your Caliu notes from any MCP client: search, create, tag, remind, attach files.
Notes, files, GitHub, and Drive through one MCP connection.
Related MCP Servers
- 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-
- FlicenseAqualityCmaintenanceMCP server for Google Keep that enables managing notes, checklists, and labels through tools like search, create, update, and delete.18-