keepsake-mcp
This server provides an MCP interface to the Keepsake personal CRM, allowing AI assistants to manage relationships through natural language. You can:
Contacts: List, search, create, update, delete, and get contacts with stats and recent interactions; view a unified chronological timeline of all related items.
Companies: List, search, create, update, and delete (soft or permanently) companies; view linked contacts and tags.
Interactions (Entries): Log interactions like calls, emails, meetings, and more; list with type and date filters; update and delete entries; link to contacts and tags.
Tasks: Create, update, delete, complete, uncomplete, and snooze tasks; filter by status, date, or date type; get today's (overdue + due today + ASAP) or only overdue tasks; support recurring tasks with automatic next-occurrence and priority.
Notes (QuickNotes): Create, list (by pinned/archived), update, delete (soft or permanently), pin, archive, and restore notes; link to contacts, tasks, and other notes.
Daily Journal: List entries by date range, get a specific day, or upsert a day's entry.
Tags: Create, list, update, delete, and get tags; link/unlink tags to any entity (contacts, entries, tasks, notes, companies); retrieve all items linked to a tag.
Task Headers: Create, list, update, and delete sections for organizing tasks.
Inter-entity Linking: Link and unlink contacts to notes/entries/tasks, notes to tasks, and notes to other notes.
Utilities: Perform a global accent-insensitive search across all data types; sync data via changelog of modified items since a timestamp; access best-practice agent instructions.
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., "@keepsake-mcpShow me my last interaction with John."
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.
keepsake-mcp
MCP server for Keepsake — the personal CRM that helps you nurture your relationships.
Connect your AI assistant (Claude, Cursor, or any MCP-compatible client) to your Keepsake data: contacts, interactions, tasks, notes, daily intentions, companies, and tags.
Why
Your AI assistant becomes a personal relationship manager. Ask it to:
"Who did I last talk to at Acme Corp?"
"Add a note that I ran into Sarah at the conference"
"What tasks are overdue?"
"Show me everything related to the #house-project tag"
"Create a follow-up task for my meeting with John next week"
Related MCP server: Unofficial Dex CRM MCP Server
Quick start
1. Get your API key
Sign up at keepsake.place, then go to Account > API Keys to generate one.
2. Choose your connection method
Option A: Remote (HTTP) — recommended
No installation required. Works with Claude iOS, Claude web, Claude Desktop Connectors, and any MCP client that supports Streamable HTTP.
Endpoint: https://app.keepsake.place/api/mcp
Authentication: Pass your API key as a Bearer token in the Authorization header.
Claude Desktop (Connectors):
Add a remote MCP server in Claude Desktop settings with:
URL:
https://app.keepsake.place/api/mcpAuthentication: Bearer token with your
ksk_API key
Any MCP client (Streamable HTTP):
{
"mcpServers": {
"keepsake": {
"type": "streamable-http",
"url": "https://app.keepsake.place/api/mcp",
"headers": {
"Authorization": "Bearer ksk_YOUR_API_KEY"
}
}
}
}Option B: Local (stdio)
Runs locally via npx. Useful for Claude Code, Cursor, and local development.
Claude Desktop:
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"keepsake": {
"command": "npx",
"args": ["-y", "keepsake-mcp"],
"env": {
"KEEPSAKE_API_KEY": "ksk_YOUR_API_KEY"
}
}
}
}Claude Code:
claude mcp add keepsake -- npx -y keepsake-mcpThen set KEEPSAKE_API_KEY in your environment.
Cursor:
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"keepsake": {
"command": "npx",
"args": ["-y", "keepsake-mcp"],
"env": {
"KEEPSAKE_API_KEY": "ksk_YOUR_API_KEY"
}
}
}
}Server instructions
On connection, the server sends MCP instructions — injected into the client's system
prompt. It is the only channel that reaches an agent before it goes looking for a
capability, so it stays short and points at the rest: call get_agent_instructions for
the full doctrine, and put editorial remarks in a note's margin (create_note_comment)
rather than in the chat, which disappears.
Prompts (1)
Prompt | Arguments | Description |
|
| Act as the editor of a note: read it, judge form and substance, leave anchored remarks in the margin, never rewrite the text |
Available tools (71)
Contacts
Tool | Description |
| List all contacts with pagination and sorting |
| Get a contact with recent interactions, tags, and stats |
| Create a new contact |
| Update contact fields |
| Permanently delete a contact |
| Accent-insensitive search by name, email, company |
| Unified chronological feed of all items for a contact |
Companies
Tool | Description |
| List all companies |
| Get company with linked contacts and tags |
| Create a new company |
| Update company fields |
| Soft-delete (or permanent delete) a company |
| Accent-insensitive company search |
Entries (Interactions)
Tool | Description |
| List interactions (calls, emails, meetings, etc.) |
| Log a new interaction — supports |
| Update an interaction |
| Delete an interaction |
Tasks
Tool | Description |
| List tasks with status/date filters |
| Create a task — supports |
| Update task fields |
| Delete a task |
| Mark as completed (auto-creates next occurrence for recurring tasks) |
| Mark as pending again |
| Reschedule to a new date |
| Today's tasks: overdue + due today + ASAP |
| Only overdue tasks |
QuickNotes
Tool | Description |
| List notes (filter by pinned/archived) |
| Get one note by ID with its tags, contacts, tasks and linked notes |
| Create a note — supports |
| Update note content |
| Soft-delete (or permanent) |
| Pin to top |
| Archive a note |
| Restore a deleted/archived note |
Note comments (marginalia)
Material kept alongside a note without entering its text — an idea, a reference, an excerpt pasted to rewrite a passage later. Anchored to a passage by quoting it, or to the whole note. Never published, and temporary by design: anything worth keeping becomes a note or a linked task.
Tool | Description |
| List the marginalia attached to a note |
| Attach a marginalia to a passage (pass |
| Edit the content of a marginalia |
| Permanently delete a marginalia |
Days (intention or question of the day)
Tool | Description |
| List days with their intention or question of the day, by date range |
| Get a day and its intention or question (field |
| Set a day's intention or question — one short line, not a journal (upsert) |
Day blocks (Day-view timeline)
Tool | Description |
| List a day's time blocks, in timeline order |
| Create a block, auto-placed first-fit (or pinned via anchor_time) |
| Update a block (title, duration, anchor, note, done) |
| Delete a block and prune its timeline ref |
Tags
Tool | Description |
| List tags (lightweight — ordering arrays omitted), with optional name search ( |
| Get a tag by ID with all properties, including |
| Create a new tag |
| Update a tag (name, description, color, icon, view mode, favorite) |
| Permanently delete a tag and all its links |
| Get items linked to a tag — filter by |
| Link any entity to a tag |
| Remove a tag link |
Task Headers (Sections)
Tool | Description |
| List all task headers (section separators) |
| Get a task header by ID |
| Create a task header (section) |
| Update a task header (name, description, collapsed) |
| Permanently delete a task header |
Contact Links
Tool | Description |
| Link a contact to a note |
| Remove a contact link from a note |
| Link a contact to an entry |
| Remove a contact link from an entry |
| Link a contact to a task |
| Remove a contact link from a task |
| Link a note to a task (non-destructive, the note survives) |
| Remove a note link from a task |
| Link two notes together (symmetric, non-destructive) |
| Remove the manual link between two notes |
Utilities
Tool | Description |
| Global search across all data types |
| Items modified since a timestamp (for sync) |
| Best practices for AI agents |
Tool annotations
All tools include MCP safety annotations:
Read-only tools (
list_*,get_*,search_*): markedreadOnlyHint: trueCreate tools: marked
destructiveHint: falseUpdate tools: marked
destructiveHint: false, idempotentHint: trueDelete tools: marked
destructiveHint: true, idempotentHint: true
Activity tracking
Every write operation (create, update, delete) performed through the API is recorded in an Activity Feed visible to the user inside Keepsake. Each action shows the entity type, a content preview, and which API key was used.
This means your user can see everything you do. Be transparent and precise. If you make a mistake, let the user know so they can verify in the activity feed.
Call get_agent_instructions at the start of each session for the full best practices guide.
Environment variables
Variable | Required | Description |
| Yes | Your API key (starts with |
| No | Custom API URL (default: |
Rate limits
60 requests per minute per API key. Rate limit headers are included in responses.
API documentation
Full REST API docs: keepsake.place/api
Privacy
Keepsake MCP server only communicates with the Keepsake API (app.keepsake.place). It does not send data to any third-party service. Your data stays between your MCP client and your Keepsake account.
All API calls are authenticated with your personal API key and scoped to your account via Row Level Security. No other user's data is accessible.
See our privacy policy at keepsake.place/privacy.
License
MIT
Available Tools
62 toolsarchive_noteAIdempotent
Transform a QuickNote into a permanent Note (archive it). Notes appear on contact pages, tag pages, and the Notes section.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. The description adds context: the note becomes permanent and appears on pages. It does not contradict annotations and provides useful behavioral insight beyond the schema.
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, front-loaded with the core action. No extraneous information. Every word 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?
For a simple single-parameter tool, the description explains the transformation and outcome adequately. However, it does not address potential edge cases (e.g., archiving an already permanent note) despite the idempotent hint. Still largely 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 has 100% coverage for the single parameter 'id' (Note UUID). The description does not add additional parameter meaning beyond what the schema states. Baseline 3 is appropriate.
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 verb 'Transform' and resource 'QuickNote into a permanent Note'. It explains the archival effect ('archive it') and notes the visibility on contact/tag pages. This distinguishes it from siblings like delete_note (destructive), restore_note (reverse), and pin_note (different 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?
Implies usage for archiving QuickNotes, but lacks explicit when-not-to-use or alternative comparisons. No mention of prerequisites or cases where other tools (e.g., restore_note) are more appropriate. Still, it gives enough context for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskAIdempotent
Mark a task as completed. If the task is recurring, this automatically creates the next occurrence.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds an important behavioral trait: automatic creation of next occurrence for recurring tasks. This is beyond what annotations provide.
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 two concise clauses, front-loading the main action. No wasted words.
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, the description covers the main purpose and recurring behavior. However, it omits what happens if the task is already completed and does not describe the return value. Still reasonably complete for a one-parameter tool.
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 100% schema coverage, the baseline is 3. The description does not add parameter-specific information beyond what the schema already provides ('Task UUID').
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 ('Mark') and resource ('task as completed') and adds a special behavior for recurring tasks. It clearly distinguishes from sibling tools like uncomplete_task, snooze_task, and delete_task.
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?
While the purpose is clear, the description does not provide explicit guidance on when to use this tool versus alternatives (e.g., uncomplete_task, update_task), nor does it mention prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_companyB
Create a new company/organization. Only 'name' is required.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Company name | |
| No | Email address | ||
| notes | No | Notes about the company | |
| phone | No | Phone number | |
| address | No | Address | |
| website | No | Website URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states 'create' which implies mutation. Annotations declare destructiveHint=false, but no additional behavioral traits disclosed (e.g., required permissions, duplicate handling, side effects). Minimal value added beyond annotations.
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, front-loaded with the purpose and a key constraint. No wasted words.
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 creation tool with 6 string parameters and no output schema, the description is mostly adequate. Missing what the tool returns (e.g., the created company object), but the lack of output schema reduces expectation.
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 100% with descriptions for each parameter. The description reinforces that only 'name' is required, but adds no deeper meaning like format, constraints, or relation to other fields.
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 'Create a new company/organization' with the resource type. This distinguishes it from siblings like list_companies, get_company, update_company, and delete_company.
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. Does not mention any prerequisites, scenarios where creation is appropriate, or when to prefer update/delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactA
Create a new contact. first_name is required. last_name is optional (useful for contacts where you only know the first name).
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address | ||
| notes | No | Notes about the contact | |
| phone | No | Phone number | |
| company | No | Company name | |
| birthday | No | Birthday as ISO date string (YYYY-MM-DD), e.g. '1980-02-14' | |
| last_name | No | Last name (optional) | |
| first_name | Yes | First name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive and non-idempotent behavior. The description adds the nuance about optional fields but does not disclose side effects, duplicate handling, or auth requirements. With annotations covering the safety profile, this is adequate but not exceptional.
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, no fluff. The most critical information (required field, optional behavior) is 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?
For a 7-parameter tool with full schema descriptions and no output schema, the description highlights key usage patterns. It could mention return value or error cases, but the schema covers the other parameters. It's reasonably 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 100%, so baseline is 3. The description adds value by reinforcing first_name as required and explaining the optional use of last_name, which goes beyond the schema's simple 'optional' label.
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 new contact' clearly states the action (create) and resource (contact). It distinguishes from siblings like update_contact and delete_contact by its verb and focus on creation.
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?
It explicitly states that first_name is required and last_name is optional, with a practical use case ('useful for contacts where you only know the first name'). However, it does not provide when-not-to-use or compare to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_entryA
An ENTRY is a dated interaction log tied to contacts. Records something that happened (call, meeting, email…) on a specific date.
Create a new interaction entry. Content supports #tag# and [[tag]] syntax for automatic tag linking.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date (YYYY-MM-DD) | |
| type | Yes | Entry type | |
| content | No | Entry content (supports #tag# and [[tag]]) | |
| tag_ids | No | Array of tag UUIDs to link | |
| contact_ids | No | Array of contact UUIDs to associate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the tool's write nature ('Create') and adds information about tag syntax support, which goes beyond the annotations (which show no destructive or idempotent hints). However, it does not mention the return value or other behavioral details.
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 concise with two sentences: one defining the concept and one stating the action. No unnecessary information.
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 output schema and 5 parameters, the description adequately explains the purpose and basic usage. However, it lacks information about return values or detailed side effects.
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 100%, so baseline is 3. The description reiterates the tag syntax already mentioned in the schema for the 'content' parameter, but does not add significant new meaning for other parameters.
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 defines what an ENTRY is and states the verb 'Create'. It distinguishes the tool from siblings like 'update_entry' and 'delete_entry'.
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 clear context for when to use this tool (creating new interaction entries) but does not explicitly mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteA
Create a new QuickNote in the Inbox. QuickNotes are temporary captures — use archive_note to transform one into a permanent Note.
Content supports #tag# and [[tag]] for automatic tag linking.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Note content (supports #tag# and [[tag]]) | |
| is_pinned | No | Pin the note (default: false) | |
| contact_ids | No | Array of contact UUIDs to associate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare no destructive or idempotent behavior. The description adds the key behavioral trait that the note is temporary and can be archived, which goes beyond annotations. No contradiction.
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 in the first paragraph and a brief second paragraph, front-loading the core action. Every sentence adds value without waste.
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 3 parameters, no output schema, and annotations present, the description covers the purpose, temporary nature, tagging, and workflow. Missing return value info is acceptable due to no output schema. It is reasonably 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 coverage is 100%, so baseline is 3. The description mentions tagging syntax for content, which is already in the schema. It does not add substantial new meaning to the parameters beyond what the schema provides.
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 'Create' and the resource 'QuickNote in the Inbox', distinguishing it from siblings like archive_note which transforms it into a permanent Note. It specifies a specific verb and resource with scope.
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 clear context for use: creating temporary QuickNotes. It mentions when to use archive_note for permanent notes, but does not explicitly list alternatives among sibling tools that also create entities (e.g., create_entry).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tagA
A TAG is a thematic grouping space. Syntax: #name# or [[name]]. Groups notes, entries, tasks, and contacts.
Create a new tag. If a tag with the same name already exists, returns the existing tag.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tag name | |
| description | No | Tag description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=false and destructiveHint=false, but the description adds crucial context: creating is not destructive, and if the tag exists, it returns the existing one. This clarifies safety and non-destructive behavior beyond annotations.
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 concise but includes a brief introduction about tags that could be separated. It is front-loaded with the key behavior and functional, though slightly verbose for an expert agent.
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 create tool with no output schema, the description covers idempotency and basic behavior. It lacks explicit mention of return value or uniqueness constraints beyond the existence check, but is largely complete for the tool's complexity.
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 100% with descriptions for both name and description. The description does not elaborate on parameter usage beyond the schema, so it adds minimal extra meaning. Baseline 3 is appropriate.
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 'Create a new tag' and explains what a tag is, distinguishing it from sibling tools like list_tags, get_tag, etc. It also mentions idempotent behavior when name exists, making the purpose very specific.
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?
It describes when to use (create a tag) and hints at a get-or-create pattern, but does not explicitly state when not to use or suggest alternatives like update_tag or get_tag. The guidance is implicit and lacks explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
A TASK is an action item to accomplish. Can have due date, recurrence, priority, linked to contacts and tags.
Create a new task. Title supports #tag# and [[tag]] for automatic tag linking.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Due date (YYYY-MM-DD) | |
| title | Yes | Task title (supports #tag# and [[tag]]) | |
| tag_ids | No | Array of tag UUIDs to link | |
| priority | No | Priority level | |
| date_type | No | Date type: specific (has a due date, default), asap (do as soon as possible, no date needed), one_day (someday/no rush, no date needed) | |
| contact_ids | No | Array of contact UUIDs to associate | |
| description | No | Task description | |
| recurrence_type | No | Recurrence pattern | |
| recurrence_interval | No | Recurrence interval (e.g., every N days) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=false and idempotentHint=false. The description adds no additional behavioral traits beyond listing features. It does not mention side effects, authentication, rate limits, or default behaviors (e.g., default date_type).
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 wasted words. It front-loads the definition and then states the action. Efficient and clear.
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 9 parameters and no output schema, the description gives a high-level overview but lacks details on recurrence behavior, date type defaults, and return value. The schema fills in parameter details, but the description could be more complete for a complex creation tool.
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 100%, so the schema documents all parameters adequately. The description briefly mentions title tag syntax and general capabilities but adds no significant new per-parameter meaning. Baseline of 3 is appropriate.
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 'Create a new task' and explains what a TASK is, providing a summary of capabilities (due date, recurrence, priority, linking). This distinguishes it from sibling tools like list_tasks, update_task, 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?
The description does not explicitly state when to use this tool versus alternatives or provide exclusion guidelines. However, the name and context imply creation, and the description lists features, which gives some guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_task_headerA
Create a new task header (section separator). Add it to a tag's items_order to position it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Header name | |
| collapsed | No | Whether the section is collapsed (default false) | |
| description | No | Optional description below the header |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=false annotation, the description reveals that the created header must be manually positioned via a tag's items_order, indicating it's not automatically visible. This adds important behavioral context missing from annotations.
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 with no wasted words. The first sentence states the purpose, the second adds a critical usage detail. Front-loaded and efficient.
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 details about the return value (no output schema) and does not explain the full workflow of linking the header to a tag. However, it does provide a key next step (add to items_order) which partially compensates.
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 100% and the description does not add meaning beyond what the input schema already provides for each parameter (name, collapsed, description). Baseline 3 is appropriate.
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 the tool creates a task header (section separator), distinguishing it from regular tasks. The sibling tool list includes create_task, so the description effectively differentiates by specifying 'section separator' and the need to add to a tag's items_order.
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?
Implies usage by stating 'Add it to a tag's items_order to position it,' but does not explicitly state when to use this tool versus alternatives like create_task. No exclusions or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_companyADestructiveIdempotent
Soft-delete a company. Use permanent=true for hard delete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Company UUID | |
| permanent | No | Hard delete (default: false, soft delete) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds value by explaining that the default is a soft delete (reversible) and that permanent=true triggers a hard delete. This provides behavioral context beyond the annotations, clarifying the reversible nature.
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. It is front-loaded and efficiently communicates the core behavior and key parameter 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?
For a simple delete tool with 2 parameters and annotations present, the description covers the essential behavior and parameter meaning. However, it does not describe the return value or side effects (e.g., what happens to related data), which is a gap given the absence of an output schema.
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 covers 100% of parameters with descriptions. The tool description does not add significant extra meaning beyond what the schema already provides (e.g., id is a UUID, permanent boolean with default). Baseline of 3 is appropriate given high schema coverage.
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 deletes a company with two modes (soft and hard). The verb 'delete' and resource 'company' are specific. However, it does not explicitly differentiate from other sibling delete tools like delete_contact or delete_entry, which could be improved for disambiguation.
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 some usage guidance by indicating the permanent parameter for hard delete versus soft delete by default. However, it lacks explicit context on when to use this tool versus alternatives (e.g., search and then delete) and does not mention prerequisites or when soft vs hard delete is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contactADestructiveIdempotent
Permanently delete a contact and all associated data.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds context about cascading deletion ('all associated data') which is beyond annotations. No contradiction.
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, perfectly concise, front-loaded with action and scope. No unnecessary words.
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 tool with one param and no output schema, the description provides essential purpose, permanence, and cascading effect. Could add idempotency note but annotations cover it.
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 100% with a clear description for 'id'. The tool description adds no additional param info. Baseline 3 is appropriate.
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 specific verb 'delete' and resource 'contact', and clarifies permanent deletion and cascading data removal. It clearly distinguishes from sibling tools like update_contact or unlink_*.
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 the tool is for permanent removal of contacts but does not explicitly state when to use it versus alternatives like unlink_* or archive. No exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entryADestructiveIdempotent
Delete an interaction entry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entry UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true, which cover the core behavior. The description adds no further behavioral context, such as reversibility or cascade effects, but does not contradict the annotations.
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 an efficiently concise single sentence that front-loads the core purpose. There is no extraneous information.
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 simplicity of the tool (one required parameter, no output schema), the description is mostly complete. However, it could mention idempotent behavior or what happens if the entry does not exist, which is not addressed.
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 100% schema coverage, the schema already documents the required 'id' parameter. The description adds no additional meaning or usage details beyond what the schema provides, so baseline score of 3 is appropriate.
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 'Delete an interaction entry' clearly states the action (delete) and the resource (interaction entry). It is distinct from sibling tools like delete_contact or delete_task, which operate on different entities.
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 update_entry or archive functionalities. There is no mention of prerequisites, side effects, or scenarios that would make this tool inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteADestructiveIdempotent
Soft-delete a QuickNote or Note. Use permanent=true for hard delete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note UUID | |
| permanent | No | Hard delete (default: false, soft delete) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations which mark the tool as destructive and idempotent, the description adds the nuance of two delete modes (soft and hard). This clarifies the tool's behavior beyond what the annotations alone provide, though it doesn't cover potential cascading effects or restoration options.
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 with no wasted words. The main action is front-loaded and the parameter usage is concisely explained. Perfectly structured for quick comprehension.
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 tool with no output schema, the description covers the essential behavioral aspects. However, it could mention related operations like restore_note for soft-deleted items, but this is not critical given the annotations and schema richness.
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 100% coverage with descriptions for both parameters. The description adds meaning by explaining the role of 'permanent' and its default, providing practical guidance for the agent's usage.
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 (soft-delete) and the resource (QuickNote or Note), and distinguishes between soft and hard delete. It is specific and differentiates from sibling tools like archive_note or 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?
The description provides explicit usage guidance for the 'permanent' parameter ('Use permanent=true for hard delete'), but lacks explicit context on when to choose soft vs hard delete or comparisons to alternative tools. Despite this, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tagADestructiveIdempotent
Permanently delete a tag and all its links to contacts, entries, tasks, notes, and companies.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint and idempotentHint. The description adds value by specifying the scope of destruction (all links to contacts, entries, tasks, notes, and companies) and confirming permanence, which goes beyond the raw annotations.
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 that front-loads the key action 'Permanently delete'. Every word contributes, with no superfluous information.
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, single-parameter tool with no output schema and clear annotations, the description covers the essential behavior (permanent deletion of tag and all links). No additional context is needed for effective use.
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 single parameter 'id' is described in the schema as 'Tag UUID'. The description does not add additional meaning beyond what the schema already provides. With 100% schema coverage, a baseline of 3 is appropriate.
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 the tool permanently deletes a tag and all its links, using a specific verb and resource. It is easily distinguishable from sibling tools like unlink_tag which only remove links without deleting the tag.
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 implicitly indicates when to use this tool (when a tag and all its associations should be permanently removed) but does not explicitly contrast with alternatives like unlink_tag for link removal only. However, the permanent nature is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskBDestructiveIdempotent
Delete a task.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not contradict the annotations (destructiveHint: true, idempotentHint: true) and aligns with the implied behavior. However, it adds no new behavioral context beyond what the annotations already provide, such as confirming irreversibility or success/failure outcomes.
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 at three words, with no wasted language. It is front-loaded and efficient, though slightly under-specified for completeness.
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 nature of a delete operation and the presence of annotations, the description is minimally adequate. However, it lacks context about cascading effects, error handling, or return behavior, which could be helpful for a complete understanding.
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 100% schema description coverage, the schema already documents the 'id' parameter as a required UUID. The description adds no additional semantic value, so the baseline score of 3 is appropriate.
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 'Delete a task.' clearly states the verb and resource, distinguishing it from other delete tools by specifying 'task' as the target. However, it is minimal and lacks additional context that would make it exceptional.
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 complete_task or snooze_task. There is no explanation of prerequisites or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_task_headerBDestructiveIdempotent
Permanently delete a task header.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task header UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. Description adds 'Permanently' which aligns with destructive behavior but does not disclose additional traits like cascading effects or required permissions.
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 single sentence with no unnecessary words, appropriate for a simple 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?
Given tool simplicity and presence of annotations/schema, the description is minimally adequate but lacks any explanation of consequences or prerequisites.
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 100%; description adds no extra meaning beyond the schema's description of the 'id' parameter as a UUID.
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 the action (delete) and the resource (task header), distinguishing it from siblings like delete_task which deletes a different entity.
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 (e.g., when to delete a task header vs. deleting a task). No context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_instructionsARead-only
Get best practices and instructions for being an effective Keepsake AI agent. Call this at the start of each session to refresh your instructions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and description adds that it refreshes instructions. No contradictions or hidden behaviors. Fully transparent.
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, front-loaded with purpose and usage. No wasted words.
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 parameters and no output schema, the description adequately explains what the tool returns and when to use it. Complete for its simplicity.
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, so baseline 4 applies. Description adds no parameter info, which is appropriate.
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 retrieves best practices and instructions for the agent, with a specific verb 'get' and resource 'instructions'. It is distinct from sibling tools which are all about data manipulation.
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?
Explicitly says 'Call this at the start of each session to refresh your instructions', providing clear when-to-use guidance. No need for alternatives given the unique purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changelogARead-only
Get all items modified since a given timestamp, across all entity types. Perfect for 'heartbeat' checks to see what changed since your last visit. Returns server_time to use as 'since' for the next call.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by entity type (default: all) | |
| limit | No | Max items per entity type (default 50, max 100) | |
| since | Yes | ISO timestamp — only items modified after this time are returned (e.g. 2026-02-11T10:00:00Z) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and description aligns by stating read operation. Description adds behavioral detail: returns server_time for polling and works across all entity types, which is not in annotations.
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, front-loaded with purpose, no filler. Every sentence provides essential information.
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?
No output schema exists, but description partially explains return value (server_time). For a changelog tool, it is adequately complete; could optionally mention that items are returned.
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 100%, but description adds value by explaining the 'since' parameter usage pattern (use returned server_time for next call). No additional info for 'type' or 'limit', but they are well-described in 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 tool retrieves modified items across all entity types since a timestamp, with a verb ('Get') and resource ('items modified'). It distinguishes from sibling tools that are entity-specific.
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 clear usage context: 'heartbeat checks' and a pattern for using returned server_time for subsequent calls. No explicit when-not-to-use, but context is sufficient for this simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companyARead-only
Get a single company by ID, including linked contacts (with roles) and tags.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Company UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds value by specifying that linked contacts (with roles) and tags are included in the response. No contradictions, but no info on potential errors or rate limits.
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, efficient and front-loaded with the core action. No wasted words.
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 no output schema, description adequately explains return value (linked contacts and tags). Could mention other typical fields, but sufficient for a simple get operation.
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?
Only one parameter (id) with 100% schema description coverage. Description adds no extra meaning beyond the schema's 'Company UUID'.
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 explicitly states 'Get a single company by ID' with additional details on included data (contacts, roles, tags). Clearly distinguishes from sibling tools like list_companies and search_companies.
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 when-to-use or when-not-to-use guidance. While it's implied for retrieving a specific company by ID, it doesn't contrast with alternatives like list_companies or search_companies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactARead-only
Get a single contact by ID, including recent entries (interactions), tags, last_interaction_date, and total_entries count.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact UUID | |
| entries_limit | No | Max entries to return (default 10, -1 for all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by specifying what fields are returned and the behavior of entries_limit (default 10, -1 for all). No contradictions with annotations.
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, front-loaded with purpose, no wasted words. Efficient and clear.
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 2 simple parameters, full schema coverage, and description covering return fields, the tool definition is complete for a read-only get-by-ID operation.
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?
Both parameters are fully documented in the schema; the description clarifies the entries_limit parameter's default and special value (-1), adding meaning 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 tool retrieves a single contact by ID and lists included fields (recent entries, tags, etc.), effectively distinguishing it from siblings like list_contacts or search_contacts.
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?
Usage is implied by the description (use when you need a single contact by ID), but no explicit when-to-use, when-not-to-use, or alternatives are provided despite a large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contact_timelineARead-only
Get a unified, chronological feed of ALL items related to a contact — entries, tasks, and notes — sorted by date (most recent first). Much more efficient than fetching entries, tasks, and notes separately.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact UUID | |
| to | No | End date filter (YYYY-MM-DD) | |
| from | No | Start date filter (YYYY-MM-DD) | |
| type | No | Filter by item type (default: all) | |
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds chronological ordering and that it returns all item types. No further behavioral details (e.g., pagination limits, response structure) beyond what annotations cover.
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, front-loaded with key info, no unnecessary words.
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?
Complexity is moderate with 6 parameters and no output schema. Description explains the combined nature but lacks details on response format. Adequate but not 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 descriptions cover all 6 parameters (100% coverage). Description adds only the sorting behavior, not significant parameter meaning beyond 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?
Description explicitly states the verb ('get'), resource ('chronological feed of ALL items related to a contact'), and distinguishes from fetching items separately. It also specifies sort order (most recent first).
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?
Indicates it's more efficient than separate fetches, providing a clear when-to-use context. However, it doesn't explicitly state when not to use or enumerate alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dayARead-only
Get a specific day's journal summary by date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description aligns as a read operation. The description adds minimal context beyond stating the retrieval criterion; it does not elaborate on further behavioral aspects like permissions or rate limits.
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 of 8 words with no redundancy. Every word 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?
For a simple tool with one parameter and no output schema, the description covers the essential purpose and parameter usage. It could possibly mention what a journal summary typically contains, but is sufficiently complete for its complexity.
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 100% schema coverage, the parameter 'date' is already well-described in the schema as 'Date (YYYY-MM-DD)'. The description adds context about the return value (journal summary) but not about the parameter itself. Baseline 3 is appropriate.
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 'Get' and the resource 'a specific day's journal summary' with the retrieval criterion 'by date'. This is specific and distinguishes it from sibling tools like list_days (which likely enumerates days) and update_day.
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 the tool is for retrieving a single day's summary, but does not explicitly state when to use this versus alternatives like list_days. No usage context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagARead-only
Get a single tag by ID with all its properties (name, description, color, icon, view mode, favorite status).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by specifying the returned properties. No contradictions. Additional context beyond annotations is present.
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 concise sentence front-loads the action and result with no wasted words. Perfectly 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 no output schema, the description explains the return properties. It could mention response format or error handling, but for a simple get-by-id tool it is nearly 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 coverage is 100% and the parameter is already well-documented with type, format, and description. The description adds no extra meaning beyond what the schema provides.
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 explicitly states the action ('Get a single tag by ID') and lists the properties returned, making the tool's purpose clear and distinguishing it from siblings like list_tags and get_tag_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?
The description implies use when a specific tag ID is known and full details are needed, but it does not provide explicit when-not-to-use or alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tag_itemsARead-only
Get all items linked to a specific tag: contacts, entries, tasks, notes, and companies with counts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnlyHint=true, so the description does not need to reiterate the read-only nature. The description goes beyond annotations by specifying that it returns items 'with counts', adding useful behavioral context. However, it does not disclose if results are paginated or ordered, which is acceptable for a simple read operation.
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 that directly states the tool's action and what it returns. Every word is informative, with no redundancy or filler. It is perfectly front-loaded and efficient.
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 (one required parameter, read-only, no output schema), the description is nearly complete. It lists all item types and mentions counts. The only gap is that it does not explain the return format or whether counts are separate, but this is not critical for a straightforward list retrieval tool.
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 100% for the single parameter 'id', which is described as 'Tag UUID'. The tool description adds no additional meaning beyond this, so baseline score of 3 is appropriate. No further parameter details are needed.
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 'Get' and identifies the resource as 'all items linked to a specific tag', listing the item types (contacts, entries, tasks, notes, companies) and mentioning counts. This clearly distinguishes it from sibling tools like get_tag (which likely returns tag metadata) and list_tags (which lists tags without 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?
The description provides no explicit guidance on when to use this tool versus alternatives such as search or specific list tools. While it is clear that this tool retrieves all item types for a tag, it does not mention when it is inappropriate to use (e.g., when only a specific item type is needed) or any prerequisites. The usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_headerARead-only
Get a single task header by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task header UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's a safe read. The description adds no additional behavioral context (e.g., response details, limits).
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, efficient sentence with no unnecessary words. It is perfectly sized for this simple 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?
Given the simplicity (1 parameter, no output schema, readOnlyHint annotation), the description is mostly complete. However, it could mention that the response is the full task header object, but this is inferable from the tool name.
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 100% with 'id' described as 'Task header UUID'. The description's 'by ID' adds no extra meaning beyond the schema, so baseline 3 is appropriate.
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' and the resource 'task header' with the method 'by ID'. It is specific and distinguishes from sibling tools like list_task_headers or create_task_header.
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 implicitly indicates usage when you have a specific task header ID, but it lacks explicit guidance on when to use this tool versus alternatives, or any preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasks_overdueARead-only
Get only overdue tasks (pending tasks with a due date before today). Sorted by date ascending (oldest first).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false. Description adds sorting order and exact definition of overdue, which provides valuable behavioral context beyond annotations.
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 no wasted words. Front-loaded with the core action and provides key details immediately.
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 output schema and no parameters, the description adequately explains what the tool returns and in what order. Could mention pagination or limits, but for a simple filtered list tool it is sufficiently 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?
No parameters in schema (zero params, 100% coverage). Description adds meaning by defining what overdue tasks are and how they are sorted, which is sufficient since there are no param details needed.
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 uses specific verb 'Get' and resource 'overdue tasks', defines 'overdue' as pending tasks with due date before today, and states sorting order. This clearly distinguishes from sibling tools like get_tasks_today and list_tasks.
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. While the name implies use for overdue tasks, no exclusions or alternative tool names are given. Agent must infer from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasks_todayARead-only
Get all tasks for today: overdue tasks + tasks due today + ASAP tasks. Each task has a 'category' field ('overdue', 'today', or 'asap'). Includes counts per category.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's burden is low. It adds that each task has a 'category' field and counts per category. No further behavioral details (e.g., sorting, limits) are provided, but it suffices for a read-only operation.
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 clearly states purpose and components, second adds details. No unnecessary words, front-loaded with the core 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?
For a zero-parameter, read-only tool with no output schema, the description fully explains what the tool returns and how the output is structured. It is complete enough for an agent to understand its value and usage.
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?
There are no parameters, so the baseline is 4. The description adds value by explaining the output structure (category field and counts), exceeding the baseline by compensating for the lack of an output 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 tool retrieves tasks for today, specifying three categories (overdue, due today, ASAP) with a 'category' field and counts. It distinguishes from sibling tools like 'get_tasks_overdue' which only gets overdue tasks.
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 explains the scope (all tasks for today) and the categories returned, which implies usage for a daily overview. However, it does not explicitly mention when to use this instead of siblings like 'list_tasks' or 'get_tasks_overdue', though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_entry_contactBIdempotent
Link an existing contact to an entry.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | Entry UUID | |
| contact_id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds no extra behavioral context beyond what annotations provide. It does not contradict annotations.
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. It is efficiently concise, though 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?
For a simple link operation with 2 UUID parameters and no output schema, the description is minimally adequate. However, it lacks detail on the nature of the relationship (e.g., bidirectional, unique) and does not leverage the presence of sibling unlink tools to provide 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 100% and each parameter has a description ('Entry UUID', 'Contact UUID'). The description adds no further semantic meaning 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 uses a specific verb 'Link' and resources 'contact' and 'entry', clearly distinguishing it from siblings like unlink_entry_contact and link_task_contact. It leaves no ambiguity about the tool's primary function.
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 (e.g., link_task_contact) or prerequisites (e.g., existence of contact/entry). The description does not mention context such as whether the link is many-to-many or any restrictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_note_contactAIdempotent
Link an existing contact to a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Note UUID | |
| contact_id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the description does not need to repeat these. The description adds no further behavioral context (e.g., what happens if the note or contact doesn't exist, or if the link already exists). It is adequate but does not enhance beyond annotations.
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 an extremely concise single sentence of seven words. It front-loads the action and resources with no redundancy or unnecessary detail. Every word is essential.
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 simplicity of the tool (two UUID parameters, no output schema, straightforward operation), the description is complete enough. It clearly states what the tool does, and combined with the schema and annotations, no additional context 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?
Schema description coverage is 100%, with both parameters having descriptions ('Note UUID', 'Contact UUID'). The description adds no additional meaning beyond the schema. Baseline 3 is appropriate as the schema already documents the parameters sufficiently.
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 'Link an existing contact to a note' uses a specific verb ('link') and clearly identifies both resources (contact and note). It distinguishes from sibling tools like 'unlink_note_contact' and 'link_entry_contact', making the tool's 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 implies the tool is used when you want to associate an existing contact with a note, but it does not explicitly state when to use it versus alternatives (e.g., link_entry_contact) or when not to use it. The sibling list suggests use for notes, but no exclusionary guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_notesAIdempotent
Link two notes together (knowledge base, N-N, non-destructive). The link is symmetric: both notes list each other in their linked-notes section. Use this to connect related ideas — e.g. a note that made you think of another one. Notes can also be linked inline by writing label in a note's content.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | First note UUID | |
| target_note_id | Yes | Second note UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds detail beyond annotations: symmetric linking, non-destructive, knowledge base N-N. No contradictions with annotations.
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, front-loaded with purpose, effectively conveying key details.
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?
Adequately explains the effect (symmetric linking) for a simple action, though no output schema exists.
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 covers both parameters with descriptions; description adds no additional parameter meaning beyond 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?
Clearly states verb 'link' and resource 'notes', specifies symmetric N-N relationship, and distinguishes from siblings like unlink_notes or link_note_contact.
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 explicit guidance to connect related ideas and mentions an alternative (inline linking), but lacks a when-not context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_tagAIdempotent
Link an entity (contact, entry, task, note, or company) to a tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag UUID | |
| entity_id | Yes | UUID of the entity to link | |
| entity_type | Yes | Type of entity to link |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the description does not need to reiterate safety. It adds no extra behavioral context beyond the link action, which is sufficient for a non-destructive operation.
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 that conveys the essential function without any extraneous information.
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 linking tool with full parameter coverage and annotations indicating idempotence and non-destructiveness, the description is mostly complete. It could mention idempotency or error behavior, but annotations fill 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 coverage is 100%, with each parameter described. The description does not add meaning beyond the schema, so baseline score of 3 is appropriate.
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 'Link' and the resources 'entity (contact, entry, task, note, or company)' and 'tag', effectively distinguishing it from sibling tools that link specific entity pairs.
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 for associating any entity type with a tag, but lacks explicit when-to-use or when-not-to-use guidance, especially given numerous sibling link/unlink tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_task_contactAIdempotent
Link an existing contact to a task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task UUID | |
| contact_id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the description does not need to restate these. The description adds no additional behavioral context (e.g., error behavior, return value), but also does not contradict annotations. This is adequate given the annotation coverage.
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, front-loaded sentence with no unnecessary words. Every word adds value: 'Link', 'existing', 'contact', 'task'.
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 parameter set (2 UUIDs), no output schema, and annotations providing safety guarantees, the description is mostly complete. It explicitly says 'existing', which hints at preconditions. However, it could be slightly more explicit about behavior when the link already exists (though idempotentHint implies it's safe).
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 100%, with each parameter having a clear description ('Task UUID', 'Contact UUID'). The tool description does not add further meaning beyond the schema, which meets the baseline expectation for high coverage.
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 ('Link'), the resources ('contact', 'task'), and specifies that they are 'existing'. This distinguishes it from sibling tools like 'unlink_task_contact' and provides a precise purpose.
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 guidance is provided. The description does not mention when to use this tool, when not to use it, or any alternatives (e.g., linking via other tools). The decision to use this tool is left entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_task_noteAIdempotent
Link an existing note to a task (non-destructive, N-N). The note stays in the inbox/notes list and the task keeps a live link back to it — use this instead of deleting a note after creating a task from it. The note shows its linked tasks; the task shows the source note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Note UUID | |
| task_id | Yes | Task UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations: it clarifies non-destructiveness, many-to-many cardinality, and bidirectional visibility (note shows linked tasks, task shows source note). Annotations already indicate idempotentHint=true and destructiveHint=false, but the description enriches agent understanding of the resulting relationships.
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?
Three sentences with zero waste: first sentence states action and nature, second gives usage guidance, third explains effects. Information is front-loaded and efficiently delivered.
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 description fully covers the tool's behavior for a simple linking operation. It explains the side effects (note stays in inbox, task gets live link, bidirectional display) without needing an output schema. No gaps remain.
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 100% with clear descriptions ('Note UUID', 'Task UUID'). The tool description adds no further parameter meaning beyond what the schema provides. Baseline score of 3 is appropriate given full schema coverage.
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 ('Link'), the resources ('existing note to a task'), and the nature ('non-destructive, N-N'). It distinguishes this tool from siblings like 'unlink_task_note' by explaining that it creates a many-to-many relationship rather than destroying the 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?
The description provides a clear use case: 'use this instead of deleting a note after creating a task from it.' It implicitly advises against using this tool when a permanent deletion or moving the note is intended, but does not explicitly list alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_companiesARead-only
List all companies/organizations in the user's Keepsake CRM. Supports pagination and sorting.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field: name, created_at, updated_at | |
| limit | No | Max results (default 20) | |
| order | No | Sort order | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds pagination and sorting features, aligning with read-only nature. No contradictions.
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 succinct sentences, front-loaded with purpose, no unnecessary words. Efficiently communicates key features.
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?
No output schema; description does not specify return format, but for a list tool the return is implied. Adequate given low complexity and rich input schema.
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 100% with descriptions for all 4 parameters. The description repeats 'supports pagination and sorting' which adds no extra detail beyond 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?
Clearly states the action (list), resource (companies/organizations), and scope (user's Keepsake CRM). Distinguishes from siblings like get_company (single) or search_companies.
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?
Implies usage for general listing of all companies, but no explicit guidance on when to use vs. search or other siblings. Lacks exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsARead-only
List all contacts in the user's Keepsake CRM. Supports pagination, sorting, and optional last_interaction_date enrichment.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field: last_name, first_name, created_at | |
| limit | No | Max results (default 20) | |
| order | No | Sort order | |
| offset | No | Pagination offset | |
| include_last_interaction | No | Include last_interaction_date for each contact (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description aligns with read-only behavior. It adds value by disclosing support for pagination, sorting, and last_interaction_date enrichment, providing useful context beyond the annotations.
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 effectively communicate the tool's purpose and features with no unnecessary words or repetition. Front-loaded with the core action and then supporting details.
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?
No output schema is provided, and the description fails to describe the return format, such as the structure of contact objects or pagination metadata. This is a significant omission for a list tool that would help the agent interpret 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?
Schema coverage is 100%, so parameters are already well-documented. The description summarizes pagination, sorting, and enrichment but does not add new semantic details beyond what the schema provides, meeting the baseline.
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 all contacts in the user's Keepsake CRM, with explicit mentions of pagination, sorting, and optional enrichment. This distinguishes it from sibling tools like get_contact (single) and search_contacts (filtered search).
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 does not explicitly guide when to use this tool versus alternatives like search_contacts. While it implies a full list retrieval, it lacks direct exclusion criteria or context for selecting among similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_daysARead-only
List daily journal summaries. Filter by date range.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date (YYYY-MM-DD) | |
| from | No | Start date (YYYY-MM-DD) | |
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds no additional behavioral context. It does not mention any traits like data freshness, authentication requirements, or how summaries are generated. The value beyond annotations is minimal.
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 no superfluous words. Front-loaded with the main action and immediately provides the key filter. Every word 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 simple read-only tool with fully documented parameters, the description is nearly complete. It lacks explicit mention of pagination (limit/offset) and return format, but these are covered by the schema. Without an output schema, the hint 'summaries' gives a useful idea of the return.
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 100% with all four parameters described. The description reinforces the date-range filtering but does not add new semantics beyond what the schema provides. Baseline 3 is appropriate.
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 'List' and the resource 'daily journal summaries', along with a key filtering capability 'Filter by date range'. This distinguishes it from the sibling tool 'get_day' which targets a single day.
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 for listing summaries over a date range but does not provide explicit guidance on when to use this tool versus alternatives like 'get_day' for single-day retrieval or 'search' for broader search. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entriesARead-only
List interaction entries (calls, emails, meetings, events, etc.). Supports filtering by type, contact, and date range.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date (YYYY-MM-DD) | |
| from | No | Start date (YYYY-MM-DD) | |
| type | No | Filter by entry type | |
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset | |
| contact_id | No | Filter by associated contact ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description doesn't need to repeat safety. Description adds filtering capabilities but fails to mention pagination behavior (limit/offset), ordering, or default return size. Partial disclosure beyond annotations.
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 no redundancy. Front-loaded with the main action and key filtering capabilities. Every sentence adds value.
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 6 parameters and no output schema, the description omits details like pagination defaults, ordering, and return structure. Agent lacks context on how results are presented, which is critical for a list tool.
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 100% with good per-parameter descriptions. The description reinforces that filtering is by type, contact, and date range, but doesn't add significant new meaning beyond the schema. Baseline 3 is appropriate.
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 'List interaction entries' with examples (calls, emails, etc.), specifying the resource and action. It distinguishes from sibling list tools (e.g., list_contacts, list_tasks) by focusing on interactions.
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?
Description mentions filtering by type, contact, and date range, implying typical list usage. However, no explicit guidance on when not to use this tool or alternatives; but siblings lack another list entries tool, so it's reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesARead-only
List notes. QuickNotes (inbox, not yet archived) and Notes (archived, permanent). Filter by pinned or archived status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset | |
| pinned | No | Filter pinned notes only | |
| archived | No | Filter by status: true = Notes (archived/permanent), false = QuickNotes (inbox) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by explaining the two note categories and how filtering by archived status differentiates them. No contradiction; transparency is good but not exhaustive.
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, no fluff, front-loaded with the verb 'List notes'. Every sentence serves a purpose, achieving maximum 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?
Covers the key filtering dimensions and note types. Minor gaps: no mention of pagination (limit/offset) or the default behavior when no filters are applied. Still fairly complete for a list tool.
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 100%, and the description does not add meaningful additional meaning beyond the schema's parameter descriptions. The archived filtering is already well-described in 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 'List notes' and distinguishes between QuickNotes and Notes (archived/permanent), which is the core purpose. It also specifies filtering by pinned or archived status, making it distinct from other 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?
The description mentions filtering options but does not provide explicit guidance on when to use this tool versus sibling tools like search or get_contact_timeline. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsBRead-only
List all tags. Tags organize contacts, entries, tasks, notes, and companies.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50) | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds no further behavioral details (e.g., rate limits, whether tags are sorted, or the effect of pagination). It is adequate but does not enhance beyond annotations.
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 short sentences, front-loaded with the action. It is efficient and contains no unnecessary words, though the purpose is straightforward.
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 no output schema, the description should explain what the return data looks like (e.g., list of tag objects with properties). The current description only states the purpose of tags, not what the tool returns, leaving a gap in completeness for agent decision-making.
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 100% with descriptions for both limit and offset parameters. The description adds no additional context for the parameters, staying at the baseline. No improvement or harm.
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 'List all tags' with a brief explanation of what tags are used for. However, it does not explicitly differentiate from sibling tools like get_tag or search-like operations, so it's clear but not fully distinguishing.
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 (e.g., get_tag for a single tag, or a filtered search). It lacks any context for selecting this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_headersARead-only
List all task headers (section separators used to group tasks on tag pages and day views).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50) | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's safe. The description adds that it lists 'all' task headers, but does not disclose whether results are paginated, ordered, or scoped to specific tag pages or day views. Minimal behavioral context beyond annotations.
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 that front-loads the core purpose with no unnecessary words. Every part of the sentence adds value.
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 list tool with read-only annotations and full schema coverage, the description covers the essential purpose. However, it lacks details about output format or any constraints beyond pagination. Sibling tools provide sufficient contrast to infer usage.
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 100%, so the parameters (limit, offset) are fully documented in the schema. The description adds no additional meaning or usage hints for these parameters.
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 'list' and the resource 'task headers', and explains what task headers are (section separators for grouping tasks). This distinguishes it from sibling tools like get_task_header, create_task_header, etc., which have different verbs.
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 explicit guidance on when to use this tool versus alternatives like get_task_header or list_tasks. While the name implies listing all headers, the description does not specify scope or context (e.g., global list vs per-tag).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksBRead-only
List tasks. Filter by status (pending/completed), date_type, or specific date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Filter by specific date (YYYY-MM-DD) | |
| limit | No | Max results (default 20) | |
| offset | No | Pagination offset | |
| status | No | Filter by status | |
| date_type | No | Filter by date type: specific (has a due date), asap (do as soon as possible), one_day (someday/no rush) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is clear. The description adds filtering details but does not disclose behavioral aspects like pagination behavior, result ordering, or that it returns a list of tasks.
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 and front-loaded with the core action 'List tasks.' No wasted words, but could be slightly more structured to separate the action from filter options.
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 5 parameters and no output schema, the description provides basic filtering context but omits important details like pagination (limit/offset), default behavior, and relationship to sibling tools. Adequate but not comprehensive.
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 100%, baseline is 3. Description adds minimal value by mentioning specific filters like 'status (pending/completed)' and 'date_type', but does not fully explain all parameter behaviors (e.g., limit, offset, date_type enum variants).
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 'List tasks' and mentions filtering options, serving as a clear verb+resource purpose. However, it does not differentiate from sibling tools like get_tasks_today or get_tasks_overdue, which are more specialized.
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. The description only lists filter options without any context about when it is appropriate to use list_tasks instead of other task-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_noteAIdempotent
Pin a QuickNote or Note so it appears at the top of the Inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds the behavioral effect of pinning (appears at top) but does not elaborate on reversibility, permissions, or side effects. Minimal additional transparency beyond annotations.
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 sentence, front-loaded with verb and resource, no redundant information. every word is necessary and 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 tool's simplicity (one parameter, no output schema, adequate annotations), the description is complete for an agent to understand the tool's purpose and effect. No missing 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?
With 100% schema coverage, the schema already documents the single parameter 'id' as a UUID note identifier. The description adds no further semantics about the parameter beyond implying it refers to a note to pin.
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 'pin' and resource 'QuickNote or Note', clearly stating the effect 'appears at the top of the Inbox'. This distinguishes it from sibling tools like archive_note or 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 explicit guidance on when to use this tool vs alternatives, nor any conditions or exclusions. The purpose implies use when wanting to bring a note to the top, but lacks when-not or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_noteAIdempotent
Restore a Note back to a QuickNote in the Inbox (unarchive), or restore a deleted note from trash.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context by explaining the two restoration paths, but annotations already provide idempotentHint=true and destructiveHint=false, covering safety. The description does not contradict or significantly extend beyond the annotations.
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 that is concise and front-loaded. No wasted words, but could benefit from structured breakdown for clarity.
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 (one required param, no output schema, annotations present), the description covers the core use cases adequately. It is reasonably complete for an agent to understand when to invoke it.
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 100% schema coverage, the description adds no additional meaning beyond what the schema already provides for the 'id' parameter. Baseline score of 3 is appropriate.
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 restores notes, specifying two distinct scenarios: unarchiving (back to QuickNote in Inbox) and restoring from trash. It effectively distinguishes this tool from related siblings like archive_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?
The description implies when to use this tool (to undo an archive or trash operation), but does not explicitly state when not to use it or mention alternatives. However, the context of sibling tools makes the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-only
Search across all Keepsake data — contacts, entries, tasks, notes, and companies. Search is accent-insensitive (e.g., 'berenice' finds 'Bérénice').
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query | |
| type | No | Limit search to a specific entity type (default: all) | |
| limit | No | Max results per type (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is clear. The description adds value by disclosing accent-insensitivity, a behavioral trait not captured in annotations. It does not contradict annotations.
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 with no wasted words. The first sentence covers purpose and scope, the second adds a key behavioral detail. Perfectly front-loaded and concise.
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 read-only search tool with no output schema, the description adequately covers scope and a notable behavior (accent-insensitivity). However, it does not mention result grouping or pagination, which would be helpful for completeness. Nonetheless, it is sufficient for basic use.
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 100% with clear descriptions for q, type, and limit. The description does not add additional parameter-level meaning beyond what the schema already provides. Accent-insensitivity is a general behavior, not parameter-specific.
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 explicitly states the tool searches across all Keepsake data (contacts, entries, tasks, notes, companies), which clearly differentiates it from sibling tools like search_contacts and search_companies that are single-type. The verb 'search' and resource scope are specific and 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?
No explicit guidance is given on when to use this tool versus the type-specific search tools (e.g., search_contacts, search_companies). The description implies it covers all types, but does not state alternatives or provide conditions for preferring one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesARead-only
Search companies by name, email, website, or address. Search is accent-insensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. The description adds that search is accent-insensitive, which is useful behavioral context beyond what annotations convey. No contradictions.
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, front-loaded with the core action and resources. Every sentence adds value, no fluff.
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 single-parameter search tool with no output schema or nested objects, the description provides adequate context: what it searches, how it matches, and behavioral detail (accent-insensitive). Complete for its complexity.
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 100% with one parameter 'q' described as 'Search query'. The description adds that 'q' can match against name, email, website, or address, significantly enhancing semantic understanding beyond the generic schema description.
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 'search', the resource 'companies', and the searchable fields (name, email, website, address). It distinguishes from sibling tools like 'search_contacts' which search contacts.
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 for searching companies but does not explicitly state when to use or not use this tool versus alternatives like 'list_companies' or 'get_company'. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsARead-only
Search contacts by name, email, company, etc. Search is accent-insensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds 'accent-insensitive' behavior, providing some extra context, but does not address other behavioral traits like authentication or rate limits.
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, front-loaded with purpose and a key detail (accent-insensitivity), with no extraneous words.
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 search tool with no output schema, the description covers searchable fields and sensitivity. Lacks pagination or limit info, but is adequate for simple use.
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 100% coverage with parameter 'q' described as 'Search query'. Description adds meaning by listing searchable fields (name, email, company), enhancing understanding 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 it searches contacts by multiple fields (name, email, company, etc.) and distinguishes itself from generic 'search' and 'search_companies' siblings by specifying the resource and searchable attributes.
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 for searching contacts but does not explicitly state when to use this tool instead of alternatives like 'search' or 'search_companies', nor provides exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snooze_taskBIdempotent
Reschedule a task to a new date.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task UUID | |
| date | Yes | New date (YYYY-MM-DD) | |
| date_type | No | New date type: specific (has a due date, default), asap (do as soon as possible), one_day (someday/no rush) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds no extra behavioral context beyond that.
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, concise and to the point. No unnecessary words, though it could benefit from a bit more detail without being overly long.
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 tool with 3 parameters and existing annotations, the description is adequate. It covers the core action. However, it could mention that the tool is idempotent (though annotation covers that).
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 100%, so the description does not add meaning beyond what the schema already provides. Baseline 3 is appropriate.
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 reschedules a task to a new date. It uses a specific verb and resource, differentiating it from sibling tools like update_task which may modify other fields.
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_task. The description does not provide context about typical use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uncomplete_taskAIdempotent
Mark a completed task as pending again.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false, which the description does not contradict. The description adds that the action 'marks as pending' but does not disclose additional behavioral traits such as whether the task must already be completed or error handling. The description adds minimal value beyond annotations.
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 that immediately conveys the tool's purpose. There is no extraneous information, and the structure is front-loaded and efficient.
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 (one parameter, no output schema, annotations covering safety), the description is largely complete. It adequately describes the action but could benefit from mentioning potential error conditions or prerequisites (e.g., task must be completed). For a straightforward state-change tool, it is nearly 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?
The schema has 100% description coverage with a single parameter 'id' described as 'Task UUID', so the description does not need to add further details. The description provides no additional parameter semantics, meeting the baseline expectation for high schema coverage.
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 name 'uncomplete_task' and description 'Mark a completed task as pending again' clearly indicate a specific verb-resource action: reversing the completion status of a task. This distinguishes it from siblings like 'complete_task', 'snooze_task', and 'update_task'.
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 does not explicitly state when to use this tool versus alternatives. The usage is implied by the name and context (inverse of complete_task), but no direct guidance or exclusion criteria are provided, leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_entry_contactADestructiveIdempotent
Remove the link between a contact and an entry.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | Entry UUID | |
| contact_id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true. The description simply restates the operation without adding behavioral nuance (e.g., side effects, permissions). It neither contradicts nor enriches the annotations.
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 that efficiently conveys the tool's purpose with no redundant or missing words.
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 operation with two well-documented parameters and no output schema, the description is sufficient. It could optionally mention idempotency or that it reverses 'link_entry_contact', but overall it is 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 coverage is 100% and both parameters have clear descriptions ('Entry UUID', 'Contact UUID'). The description adds no additional meaning or formatting guidance 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 ('Remove the link') and the resources ('contact' and 'entry'), distinguishing it from sibling tools like 'link_entry_contact' and 'unlink_note_contact'.
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 when to use (to unlink a contact from an entry) but provides no explicit guidance on when not to use it or alternatives. Given the clear name and sibling context, it is adequate but not proactive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_note_contactADestructiveIdempotent
Remove the link between a contact and a note.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Note UUID | |
| contact_id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the title and adds no behavioral details beyond the annotations (destructiveHint, idempotentHint). It does not clarify effects like error handling for already-unlinked pairs.
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 sentence with no unnecessary words. Perfectly 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?
For a simple two-parameter tool with no output schema, the description is sufficient. However, it could mention what happens if the link does not exist (implied by idempotentHint but not stated).
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 100% with clear parameter descriptions ('Note UUID', 'Contact UUID'). The tool description adds no extra meaning, so baseline 3 is appropriate.
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 (link between contact and note), distinguishing it from sibling unlink tools for other entity types.
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 explicit guidance on when to use this tool versus alternatives like unlink_entry_contact or unlink_task_contact. Usage is implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_notesADestructiveIdempotent
Remove the manual link between two notes (both notes survive). Links derived from inline label markdown in a note's content are preserved — edit the content to remove those.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | First note UUID | |
| target_note_id | Yes | Second note UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds value by specifying that notes themselves survive and that only manual links are affected, while inline links require content editing.
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 efficient sentences that front-load the core action and key constraints with no wasted words.
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 tool with no output schema, the description adequately covers purpose, effect on data, and edge case of inline links, though a brief mention of expected confirmation or error behavior would further enhance completeness.
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 100% with clear UUID descriptions. The description does not add additional parameter meaning beyond what the schema provides, so baseline 3 is appropriate.
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 'Remove the manual link between two notes (both notes survive)' and distinguishes from inline links, providing a specific verb and resource with important scope clarification.
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?
Explicitly explains when to use this tool (remove manual link) and what not to use it for (inline links preserved), with a clear alternative: edit content to remove inline links.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_tagADestructiveIdempotent
Remove the link between an entity and a tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag UUID | |
| entity_id | Yes | UUID of the entity to unlink | |
| entity_type | Yes | Type of entity to unlink |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms the destructive nature (removing a link) which aligns with the `destructiveHint: true` annotation. It does not add information beyond the annotation about idempotency (`idempotentHint: true`) or other behavioral traits like side effects or authorization needs.
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 wasted words. It is direct and front-loaded, quickly conveying the tool's purpose.
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 tool with full schema coverage and relevant annotations (destructive, idempotent), the description adequately covers the operation. It does not explain return values, but no output schema exists, and the annotations fill in behavioral context. Minor improvement could be mentioning idempotency or error cases.
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 100% with clear descriptions for all three parameters (id, entity_id, entity_type). The description adds no additional semantic value beyond what the schema already provides, so a baseline score of 3 is appropriate.
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 the specific verb 'Remove' and clearly identifies the resource as 'the link between an entity and a tag.' It effectively distinguishes from sibling tools like 'unlink_note_contact' or 'link_tag' by focusing on tag-entity relationships.
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 such as 'link_tag' or other unlink tools. There are no explicit conditions, prerequisites, or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_task_contactADestructiveIdempotent
Remove the link between a contact and a task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task UUID | |
| contact_id | Yes | Contact UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint and destructiveHint. The description confirms the destructive nature but adds no new behavioral details beyond the annotation hints.
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, front-loaded sentence that efficiently conveys the tool's purpose with no unnecessary words.
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, idempotent operation with fully documented parameters, the description is complete enough to understand the tool's functionality.
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 100% coverage with descriptions, so baseline 3 applies; the description adds no extra parameter information.
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 ('Remove') and resource ('link between a contact and a task'), clearly distinguishing it from sibling tools like 'link_task_contact' or 'unlink_note_contact'.
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 when-to-use or when-not-to-use guidance is provided; the purpose is clear from the name and description, but given many sibling tools, additional context would help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_task_noteADestructiveIdempotent
Remove the link between a note and a task. Both the task and the note survive.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Note UUID | |
| task_id | Yes | Task UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and idempotentHint=true. The description adds value by clarifying that the task and note themselves survive, providing context beyond the annotations. No contradiction detected.
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, compact sentence that conveys the core functionality and key behavioral insight without any extraneous words. Highly efficient.
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 tool with two fully-documented parameters and annotations covering destructive/idempotent behavior, this short description is complete. It tells the agent exactly what the tool does and what remains unaffected.
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 100%, with each parameter described as a UUID. The description does not add any additional meaning or usage details beyond what the schema provides, so a baseline score of 3 is appropriate.
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 the link'), the resources involved ('note and task'), and explicitly notes that both entities survive, distinguishing it from deletion tools and siblings like 'link_task_note' or 'unlink_note_contact'.
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 unlinking a note from a task, but lacks explicit guidance on when not to use it or mention of alternatives (e.g., other unlinking tools). No 'when to use' or 'context' cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_companyAIdempotent
Update an existing company. Only send the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Company UUID | |
| name | No | Company name | |
| No | Email address | ||
| notes | No | Notes about the company | |
| phone | No | Phone number | |
| address | No | Address | |
| website | No | Website URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Only send the fields you want to change' which is consistent with idempotentHint=true and destructiveHint=false annotations. It does not elaborate on authentication, rate limits, or other behavioral traits beyond what annotations already convey.
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: two sentences with no unnecessary words. It front-loads the action and the partial update guidance, earning each sentence's 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 7 parameters (1 required) and no output schema, the description is minimal but sufficient for an update operation. It could mention response behavior or idempotency, but annotations cover safety sufficiently, so overall complete enough.
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 100%, so the schema already documents each parameter. The description adds the partial update semantics, which is valuable. However, it does not emphasize the required id field, though it is implied.
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 'Update' and the resource 'an existing company', which distinguishes it from siblings like create_company and delete_company. It is specific and leaves no ambiguity about the tool's function.
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 phrase 'Only send the fields you want to change' implies a partial update (PATCH-like) and guides the agent to send only changed fields. However, it does not explicitly mention when not to use this tool or provide alternatives among many sibling tools for other resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactAIdempotent
Update an existing contact. Only send the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact UUID | |
| No | Email address | ||
| notes | No | Notes about the contact | |
| phone | No | Phone number | |
| company | No | Company name | |
| birthday | No | Birthday as ISO date string (YYYY-MM-DD), e.g. '1980-02-14'. Set to null to clear. | |
| last_name | No | Last name | |
| first_name | No | First name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds 'update' but does not provide new behavioral details beyond the annotations. No contradiction.
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: two sentences with no wasted words. The first sentence states the action, the second adds crucial partial update guidance.
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 8 parameters, the description efficiently covers the key usage pattern. No output schema exists, but for a simple update with idempotent hint, the description is adequate. Could optionally mention return value, but not necessary.
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 100%, so parameters are well-documented in the schema. The description adds a high-level usage note ('Only send the fields you want to change') but no parameter-specific meaning 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 it updates an existing contact, distinguishing it from create_contact and delete_contact. The verb 'update' and resource 'contact' are specific.
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 gives explicit usage guidance: 'Only send the fields you want to change', indicating partial updates. However, it does not explicitly state when not to use (e.g., for new contacts use create_contact), but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dayAIdempotent
Create or update a daily journal summary. If a day entry already exists for this date, it will be updated (upsert).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date (YYYY-MM-DD) | |
| note | Yes | Journal content for the day |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and destructiveHint=false, which the description reinforces by stating 'upsert' behavior. This consistency adds clarity, though no further behavioral details (e.g., output, side effects) 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?
Description is two sentences with no unnecessary words. Every part adds information: action, resource, upsert condition. Perfectly 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?
For a simple tool with 2 parameters, 100% schema coverage, and clear annotations, the description is complete. It explains the key behavior (upsert) and leaves no ambiguity.
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?
Input schema covers both parameters with descriptions (date format, note content). The description does not add additional meaning beyond the schema, so baseline score of 3 is appropriate.
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?
Title and description clearly state the tool creates or updates a daily journal summary, with specific verb ('create or update') and resource ('daily journal summary'). The upsert behavior is explicitly mentioned, distinguishing it from separate create/update 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?
The description explains the tool's function but does not provide explicit guidance on when to use it versus siblings like 'create_entry' or 'update_entry'. It lacks when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_entryAIdempotent
Update an existing entry. Only send fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entry UUID | |
| date | No | Date (YYYY-MM-DD) | |
| type | No | Entry type | |
| content | No | Entry content (supports #tag# and [[tag]]) | |
| tag_ids | No | Replace associated tags | |
| contact_ids | No | Replace associated contacts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. Description adds no new behavioral details beyond the implied update operation.
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 of 9 words, concise and front-loaded with no superfluous content.
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?
Adequate for a simple update tool with complete schema descriptions and annotations. Lacks mention of return value but not critical for selection.
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 100%, so parameters are already well-described. Description adds a usage tip but no additional semantic meaning beyond 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?
Description clearly states 'Update an existing entry' with specific verb and resource. Distinguishes from sibling tools like create_entry and delete_entry.
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 explicit usage tip 'Only send fields you want to change', indicating partial updates are allowed. Clear context but no exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteAIdempotent
Update an existing QuickNote or Note.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note UUID | |
| content | No | Updated content | |
| tag_ids | No | Replace associated tags | |
| contact_ids | No | Replace associated contacts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint and destructiveHint, so description does not need to add safety info. No extra behavioral context beyond 'update'.
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 waste, 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?
Minimal but adequate for a simple update tool with well-described schema and annotations. Could mention replacement semantics for arrays, but not required.
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 100% with clear parameter descriptions. Description adds no value beyond schema, but baseline is 3 due to high coverage.
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 verb 'update' and resource 'existing QuickNote or Note', distinguishing from create/delete/siblings.
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 like update_contact or update_entry. Context of 'QuickNote' vs 'Note' not explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tagAIdempotent
Update an existing tag. Only send the fields you want to change. Supports name, description, color, icon, view mode, and favorite status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Tag UUID | |
| icon | No | Tag icon (emoji or icon name) | |
| name | No | Tag name | |
| color | No | Tag color (e.g. 'blue', 'red', 'green') | |
| view_mode | No | View mode for the tag page | |
| description | No | Tag description | |
| is_favorite | No | Whether the tag is a favorite |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, indicating safe, idempotent behavior. The description adds that it supports partial updates and lists fields, but doesn't disclose additional behavioral traits beyond what annotations and schema already provide.
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 with two sentences. The first sentence states the action, and the second explains the usage and lists fields. No unnecessary words.
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 and the rich schema (100% parameter coverage, no output schema needed), the description covers the essential details. It explains the partial update behavior and the fields. No missing critical information, though it omits any mention of return values or error states.
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 100% with all parameters described. The description adds value by emphasizing the partial update pattern ('only send the fields you want to change'), which is not explicitly stated in the schema. It also lists the supported fields, reinforcing their 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 explicitly states 'Update an existing tag' with a specific verb (Update) and resource (tag). It lists the modifiable fields, clearly distinguishing it from sibling tools like create_tag or delete_tag.
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 clear guidance on usage: 'Only send the fields you want to change.' It implies a partial update pattern but does not explicitly state when not to use it or compare to alternatives. However, given sibling tools, it's the only update tool for tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskAIdempotent
Update an existing task. Only send fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task UUID | |
| date | No | Due date (YYYY-MM-DD) | |
| title | No | Task title | |
| tag_ids | No | Replace associated tags | |
| priority | No | Priority level | |
| date_type | No | Date type: specific (has a due date), asap (do as soon as possible), one_day (someday/no rush) | |
| contact_ids | No | Replace associated contacts | |
| description | No | Task description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false. The description adds the partial update behavior but does not disclose array replacement semantics (e.g., tag_ids replaces all tags) or any side effects. Value added beyond annotations is moderate.
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 with no superfluous information. The description is concise and front-loaded, effectively conveying the core action and key usage hint.
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 tool with 8 parameters and no output schema, the description is minimal but covers the essential partial update semantics. It lacks details on array replacement behavior or enum constraints, which could help the agent avoid errors. Adequate but not thorough.
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 100%, so the schema fully describes each parameter. The description does not add any extra meaning or context beyond what is already in the schema, hence baseline score of 3.
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 (update) and resource (task), and hints at partial update behavior. However, it does not explicitly distinguish from sibling tools like complete_task or snooze_task, which also modify task state.
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 phrase 'Only send fields you want to change' provides partial update guidance, but there is no explicit when-to-use, when-not-to-use, or alternative tool reference. Usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_task_headerAIdempotent
Update a task header. Only send the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task header UUID | |
| name | No | Header name | |
| collapsed | No | Whether the section is collapsed | |
| description | No | Description below the header |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the partial update hint, which is not in annotations. Annotations already declare idempotentHint=true and destructiveHint=false, so the description complements this without contradiction. No further behavioral details (e.g., auth, rate limits) 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 a single sentence that immediately conveys the tool's purpose. Every word is necessary, and there is no filler content.
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 purpose is clear, the description lacks information about return values (no output schema), prerequisites (e.g., header must exist), and potential side effects beyond annotations. Given the tool's simplicity, it is minimally adequate but not comprehensive.
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 100%, so all parameters are documented. The description reinforces partial update semantics ('only send fields you want to change'), but adds no new details about individual parameters 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 'Update a task header,' specifying the action and resource. This distinguishes it from sibling tools like update_task (which updates a task) and create_task_header/delete_task_header.
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 includes 'Only send the fields you want to change,' which implies partial update usage. However, it does not provide explicit guidance on when to use this tool versus alternatives like update_task or when not to use it.
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.
62 tool updates
v1.4.0- First observed
archive_note - First observed
complete_task - First observed
create_company - First observed
create_contact - First observed
create_entry - First observed
create_note - First observed
create_tag - First observed
create_task - First observed
create_task_header - First observed
delete_company - First observed
delete_contact - First observed
delete_entry - First observed
delete_note - First observed
delete_tag - First observed
delete_task - First observed
delete_task_header - First observed
get_agent_instructions - First observed
get_changelog - First observed
get_company - First observed
get_contact - First observed
get_contact_timeline - First observed
get_day - First observed
get_tag - First observed
get_tag_items - First observed
get_task_header - First observed
get_tasks_overdue - First observed
get_tasks_today - First observed
link_entry_contact - First observed
link_note_contact - First observed
link_notes - First observed
link_tag - First observed
link_task_contact - First observed
link_task_note - First observed
list_companies - First observed
list_contacts - First observed
list_days - First observed
list_entries - First observed
list_notes - First observed
list_tags - First observed
list_task_headers - First observed
list_tasks - First observed
pin_note - First observed
restore_note - First observed
search - First observed
search_companies - First observed
search_contacts - First observed
snooze_task - First observed
uncomplete_task - First observed
unlink_entry_contact - First observed
unlink_note_contact - First observed
unlink_notes - First observed
unlink_tag - First observed
unlink_task_contact - First observed
unlink_task_note - First observed
update_company - First observed
update_contact - First observed
update_day - First observed
update_entry - First observed
update_note - First observed
update_tag - First observed
update_task - First observed
update_task_header
TDQS
Each tool has a uniquely defined purpose, targeting specific entity types and actions (e.g., link_note_contact vs link_entry_contact). Even with 62 tools, the descriptions clearly differentiate them, making it easy for an agent to select the correct one.
Tool names follow a consistent verb_noun pattern (e.g., create_contact, list_contacts, update_task). The few multi-word nouns (e.g., get_contact_timeline) still adhere to the pattern. No mixing of conventions like camelCase or inconsistent verb prefixes.
With 62 tools, the server is far above the typical well-scoped range of 3-15. While each tool may have a distinct role, the sheer number could overwhelm an agent, and many linking operations could be consolidated into a single parameterized tool.
The tool surface covers full CRUD for all major entities (contacts, companies, entries, tasks, notes, tags, days, task headers), plus relational linking, search, changelog, and agent instructions. There are no obvious gaps in the domain's lifecycle.
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
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
MCP server for LeadDelta — manage LinkedIn connections and CRM data via AI assistants.
Persistent personal memory for AI assistants — save, search, and recall across every MCP client.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceAn MCP server enabling AI assistants to store, retrieve, and manage contextual information across conversations with features like persistent memory, advanced search, tagging, and privacy controls.-
- FlicenseAqualityDmaintenanceAn MCP server that integrates the Dex personal CRM API with AI assistants to manage contacts, groups, tags, and reminders through 27 specialized tools. It enables users to perform unified searches and execute full CRUD operations on their CRM data via natural language.28-
- FlicenseNot gradedqualityDmaintenanceA MCP server that provides persistent memory for AI assistants, storing personal information, relationships, and observations to enable personalized and contextual conversations.4-
- AlicenseNot gradedqualityDmaintenanceA personal AI assistant server that provides MCP tools for notes, files, reminders, memory, shell, browser, and 30+ SaaS integrations, enabling AI clients to access and manage your data across sessions.3,953MIT
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/nicolascroce/keepsake-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server