Skip to main content
Glama
MAG-Cie

MCP for Microsoft To Do

by MAG-Cie

mcp-microsoft-todo

πŸ‡«πŸ‡· Version franΓ§aise : README.fr.md

MCP server to drive Microsoft To Do from Claude Code, Claude Desktop, or any MCP-compatible client.

Works with any Microsoft account: personal (outlook.com, hotmail.com, live.com), Office 365 personal or business, Microsoft 365. Zero Azure setup required on the user side β€” just sign in via device code flow.

npm license


πŸ— Built and maintained by MAG&Cie

This MCP server is open-source and free to use. It's also a showcase of our CrΓ©ation de MCP offering at MAG&Cie β€” we build custom MCP connectors for businesses that want to plug AI into their internal tools (CRM, ERP, custom APIs, internal databases).

If you'd like the same kind of connector for your tools β€” drop us a line at www.mag-cie.com/creation-mcp.


Related MCP server: microsoft-todo-mcp-server-self-hosted

πŸš€ End-user installation

Prerequisites (all clients)

  • Node.js 20+ (nodejs.org)

  • A Microsoft account (free or paid)

No Azure account required, no App Registration to create, nothing to compile.


🟦 Claude Code (CLI)

Install (one command):

claude mcp add --transport stdio microsoft-todo -- npx -y @mag-cie/mcp-microsoft-todo

If you have a personal Microsoft account (outlook.com, hotmail.com, live.com, msn.com, Office 365 personal), add MS_TENANT=consumers:

claude mcp add --transport stdio microsoft-todo --env MS_TENANT=consumers -- npx -y @mag-cie/mcp-microsoft-todo

Verify it's wired up:

claude mcp list

First use β€” recommended: pre-auth in a terminal first to avoid the "stuck on first MCP call" issue (where the device code is printed to MCP stderr but Claude Code doesn't surface it):

# macOS / Linux
MS_TENANT=consumers npx -y @mag-cie/mcp-microsoft-todo@latest --auth
# Windows PowerShell
$env:MS_TENANT="consumers"; npx -y @mag-cie/mcp-microsoft-todo@latest --auth

You'll see:

To sign in, use a web browser to open the page https://www.microsoft.com/link and enter the code XXXXXXXXX

Visit the URL, enter the code, sign in. The token is cached in ~/.mcp-microsoft-todo/token-cache.json and refreshed automatically β€” you'll never have to do this again. Now go to Claude Code and any prompt that calls a tool will work instantly.

Skip the pre-auth step if you're feeling lucky β€” the MCP will trigger the device code flow on first call too. The code goes to the Claude Code MCP log file (look in %USERPROFILE%\.claude\logs\ on Windows or ~/.claude/logs/ elsewhere).

Update to the latest version:

claude mcp remove microsoft-todo
claude mcp add --transport stdio microsoft-todo -- npx -y @mag-cie/mcp-microsoft-todo@latest

The -y flag of npx auto-accepts the download. Without @latest, npx may serve a stale cached version.

Uninstall:

claude mcp remove microsoft-todo
# Purge the token cache:
rm -rf ~/.mcp-microsoft-todo

πŸŸͺ Claude Desktop (app)

1. Locate the config file:

OS

Path

Windows

%APPDATA%\Claude\claude_desktop_config.json

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

On Windows, you can open it directly with:

notepad $env:APPDATA\Claude\claude_desktop_config.json

If the file doesn't exist, create it with an empty JSON object {} then edit.

2. Add the config:

{
  "mcpServers": {
    "microsoft-todo": {
      "command": "npx",
      "args": ["-y", "@mag-cie/mcp-microsoft-todo"]
    }
  }
}

For a personal Microsoft account, add env:

{
  "mcpServers": {
    "microsoft-todo": {
      "command": "npx",
      "args": ["-y", "@mag-cie/mcp-microsoft-todo"],
      "env": { "MS_TENANT": "consumers" }
    }
  }
}

To localize the compact-format strings (optional, see Localization):

{
  "env": { "MS_TENANT": "consumers", "MCP_LOCALE": "fr" }
}

3. Restart Claude Desktop COMPLETELY (not just close the window):

  • Windows: right-click systray icon β†’ Quit, then relaunch

  • macOS: ⌘+Q then relaunch

4. Verify it's wired up:

In Claude Desktop, look at the πŸ”Œ plug or πŸ”§ tools icon at the bottom right of the input area β€” you should see microsoft-todo listed.

5. First auth β€” recommended pre-auth in a terminal:

# macOS / Linux
MS_TENANT=consumers npx -y @mag-cie/mcp-microsoft-todo@latest --auth
# Windows PowerShell
$env:MS_TENANT="consumers"; npx -y @mag-cie/mcp-microsoft-todo@latest --auth

You'll see the device code immediately in the terminal. Visit the URL, enter the code, sign in. Token cached. Now Claude Desktop will reuse this cache β€” no need to fish in the logs.

Without --auth, the device code goes to the Claude Desktop MCP log file:

  • Windows: %APPDATA%\Claude\logs\mcp-server-microsoft-todo.log

  • macOS: ~/Library/Logs/Claude/mcp-server-microsoft-todo.log

Update: edit the version in args (@mag-cie/mcp-microsoft-todo@latest), restart Claude Desktop. Or let npx do its thing (npx cache ~24h).


🟧 Cursor / Continue / other stdio MCP clients

Any MCP client that supports the stdio transport works the same way. Generic format:

command: npx
args: -y @mag-cie/mcp-microsoft-todo
env: MS_TENANT=consumers (if personal account)

Adapt to the client's config format (often JSON or TOML similar to Claude Desktop).


πŸ’‘ Example prompts

Once installed, just ask Claude in natural language. Sample prompts that exercise the main tools:

Prompt

Tool(s)

"Show me all my To Do lists"

list_task_lists

"What do I have to do today?"

summarize_today

"Show me my overdue tasks"

list_overdue_tasks

"List tasks tagged 'work'"

list_tasks_by_category

"Find any task containing 'invoice'"

search_tasks

"Add a daily recurring 'Workout' task"

create_task (with recurrence)

"Mark these 5 tasks as done"

batch_complete_tasks

"Move 'Buy bread' from Personal to Shopping"

move_task

"Add a 'recipe' subtask to the cake task"

create_checklist_item

"Tag all my Magaria tasks as 'urgent'"

bulk_update_categories

"Export my work tasks as iCalendar"

export_tasks_ics

"Attach a project_id metadata to this task"

set_extension


πŸ†˜ Auth troubleshooting

Symptom

Solution

"This page isn't right" page after sign-in

Add MS_TENANT=consumers (personal accounts only)

Browser opens with the wrong Microsoft account

Use an InPrivate/Incognito window for the sign-in

invalid_scope or Tasks.ReadWrite.Shared error

Purge the token cache and re-auth: rm -rf ~/.mcp-microsoft-todo

Node.js not found or npx not found

Install Node 20+ from nodejs.org. On Windows, verify it's in PATH (relaunch your terminal after install)

Token expired, refresh fails

Purge the cache and re-auth

Device code never appears

Verify the server is spawning β€” Claude Code: claude mcp list; Claude Desktop: tools icon at the bottom. If absent, check the npx PATH in the config

MS_CLIENT_ID not configured

You're using a dev fork β€” export MS_CLIENT_ID or use the official npm version


πŸ›  Available tools (28)

Safety column legend: read = read-only, write = mutates state (non-idempotent create), update = idempotent mutation (safe to retry), delete = destructive (data loss). See Safety annotations below for details.

Lists & tasks

Tool

Safety

Description

list_task_lists

read

All your To Do lists

list_tasks

read

Tasks of a list (OData filter, $orderby, paginate)

get_task

read

Detail of a task by ID

create_task

write

Create a task (title, body, importance, due date, categories, recurrence, reminder)

update_task

update

Update title, status, due date, recurrence, reminder…

complete_task

update

Mark as completed

delete_task

delete

Delete permanently

move_task

delete

Move a task from one list to another (source task is deleted)

search_tasks

read

Cross-list search by title

summarize_today

read

Summary of tasks due today + overdue

list_all_tasks

read

Every task across every list in one round-trip (uses Graph $batch)

Batch operations (saves API calls)

Tool

Safety

Description

batch_create_tasks

write

Create up to 100 tasks in a single Graph $batch HTTP call

batch_complete_tasks

update

Mark up to 100 tasks as completed in one call

batch_delete_tasks

delete

Delete up to 100 tasks in one call

Sub-tasks (checklist items)

Tool

Safety

Description

list_checklist_items

read

Sub-items of a task

create_checklist_item

write

Add a sub-item

update_checklist_item

update

Rename / check / uncheck

delete_checklist_item

delete

Delete a sub-item

Linked resources (external URLs attached to a task)

Tool

Safety

Description

list_linked_resources

read

List the linked resources of a task

create_linked_resource

write

Attach a URL or external reference

delete_linked_resource

delete

Delete a linked resource

Open extensions (custom JSON metadata)

Tool

Safety

Description

list_extensions

read

List the open extensions of a task

set_extension

update

Upsert: create or update an extension (project_id, external_ref, etc.)

delete_extension

delete

Delete an extension

Cross-list helpers

Tool

Safety

Description

list_overdue_tasks

read

All overdue tasks, aggregated across all lists

list_tasks_by_category

read

All tasks with a given category, cross-lists

bulk_update_categories

update

Add/remove categories on many tasks in 2 batch phases

Export

Tool

Safety

Description

export_tasks_ics

read

iCalendar export (VTODO + RRULE + VALARM) for import into Google Cal / Apple Cal / Outlook / Thunderbird

Output format

By default, tools return a compact text format (one line per item) to save LLM tokens. Legend:

  • [!] high importance, [?] low (nothing if normal)

  • [v] completed, [>] in progress, [w] waiting, [d] deferred (nothing if not started)

  • due:, rem:, rec:, cat:, body: fields shown only when populated

To get the full Graph JSON, pass verbose: true to any read tool.


πŸ” Safety annotations

Every tool exposed by this server carries the MCP tool annotations defined by the Model Context Protocol spec (2025-06-18):

Annotation

Meaning

readOnlyHint

The tool only fetches data; running it has no side effects on Microsoft Graph

destructiveHint

The tool deletes data or otherwise causes data loss that cannot be undone

idempotentHint

Running the tool repeatedly with the same arguments yields the same end state (safe to retry)

openWorldHint

The tool talks to an external system (Microsoft Graph) β€” always true here

title

Human-readable display name for MCP clients

These hints are advisory β€” the server itself enforces nothing β€” but MCP clients (Claude Code, Claude Desktop, Cursor, …) can use them to:

  • Auto-approve readOnlyHint: true calls without prompting (faster UX for read-heavy workflows)

  • Show a confirmation dialog before destructiveHint: true calls (e.g. delete_task, batch_delete_tasks, move_task)

  • Retry on transient failures only when idempotentHint: true

  • Display the friendly title instead of the snake_case name

The full mapping is in src/index.ts (ANNOTATIONS constant). Summary by safety class (see also the per-tool Safety column above):

  • read (15 tools): all list_*, get_*, search_*, summarize_*, export_* β€” readOnlyHint: true

  • write (4 tools): create_*, batch_create_tasks β€” destructiveHint: false, idempotentHint: false

  • update (5 tools): update_*, complete_*, set_extension, bulk_update_categories, batch_complete_tasks β€” destructiveHint: false, idempotentHint: true

  • delete (5 tools): delete_*, batch_delete_tasks, move_task β€” destructiveHint: true, idempotentHint: true

move_task is classified as delete because it deletes the source task (a new task is created in the target list with a different id).


🌍 Localization

The MCP works in any language out of the box β€” Claude reads the data the server returns and replies to the user in whatever language they prompted in. Try "List my tasks", "Liste mes tΓ’ches", "Zeig meine Aufgaben", "ζˆ‘ηš„δ»»εŠ‘" β€” all work.

Optionally, you can localize the compact-format short labels returned by the server itself (No tasks., Due today:, Overdue:, Task X deleted., etc.) β€” this is a marginal improvement (saves a few tokens, slightly cleaner LLM context). Set MCP_LOCALE in your env:

Locale

Code

English (default)

en

FranΓ§ais

fr

EspaΓ±ol

es

Deutsch

de

Resolution order: MCP_LOCALE β†’ LC_ALL β†’ LANG β†’ fallback en. Only the first 2 chars are inspected (so fr_FR.UTF-8 works). Unsupported locale β†’ falls back to en.

{
  "mcpServers": {
    "microsoft-todo": {
      "command": "npx",
      "args": ["-y", "@mag-cie/mcp-microsoft-todo"],
      "env": { "MCP_LOCALE": "fr" }
    }
  }
}

πŸ”’ Security & privacy

  • The Microsoft token is stored only on your machine in ~/.mcp-microsoft-todo/token-cache.json

  • No data transits through MAG&Cie servers

  • Revoke access at any time at https://account.live.com/consent/Manage

  • To purge the local token: rm -rf ~/.mcp-microsoft-todo

Graph permissions requested: Tasks.ReadWrite, Tasks.ReadWrite.Shared, offline_access.


πŸ§‘β€πŸ’» Developer setup (fork / contribution)

If you fork or want to develop locally with your own Azure AD App Registration:

1. Azure AD App Registration (maintainer/fork side only)

  1. https://portal.azure.com β†’ Microsoft Entra ID β†’ App registrations β†’ New registration

  2. Name: mcp-microsoft-todo (free choice)

  3. Supported account types: Accounts in any organizational directory and personal Microsoft accounts

  4. Redirect URI: leave empty

  5. Register

  6. Note the Application (client) ID

  7. Authentication tab β†’ Allow public client flows: Yes

  8. Authentication tab β†’ Add a platform β†’ Mobile and desktop applications β†’ check https://login.microsoftonline.com/common/oauth2/nativeclient

  9. API permissions tab β†’ Add a permission β†’ Microsoft Graph β†’ Delegated β†’ add Tasks.ReadWrite, Tasks.ReadWrite.Shared, and offline_access. Grant admin consent if on a corporate tenant.

2. Build and local auth

git clone https://github.com/MAG-Cie/mcp-microsoft-todo
cd mcp-microsoft-todo
npm install
npm run build
export MS_CLIENT_ID="<your-client-id>"   # PowerShell: $env:MS_CLIENT_ID="..."
export MS_TENANT="common"
npm run auth

The token cache will be written to ~/.mcp-microsoft-todo/token-cache.json.

3. Wire up Claude Code (local build)

# Windows PowerShell
$env:MS_CLIENT_ID="<your-client-id>"
claude mcp add --transport stdio microsoft-todo -- node "C:\path\to\mcp-microsoft-todo\dist\index.js"
# macOS / Linux
export MS_CLIENT_ID="<your-client-id>"
claude mcp add --transport stdio microsoft-todo -- node /path/to/mcp-microsoft-todo/dist/index.js

⚠️ Env vars must be visible at spawn time. On Windows with fnm, verify the PowerShell session that launches claude has MS_CLIENT_ID exported.

4. Run tests

npm test           # one-shot
npm run test:watch # watch mode

⬆️ Upgrading from earlier versions

From

To

Action required

0.x

0.4.0+

Re-auth required: token cache lacks the new Tasks.ReadWrite.Shared scope. Run rm -rf ~/.mcp-microsoft-todo then trigger any tool to re-auth via device code.

0.x

0.5.0+

No breaking change β€” new tools added. Token compatible.

any

1.0.0+

Stable API marker. Future minor versions guarantee no breaking change to tool names, args, or return formats (compact + verbose).


πŸ—Ί Roadmap

  • v0.1 β€” stdio + 6 CRUD tools

  • v0.2 β€” distributable npm package, baked-in client ID

  • v0.3 β€” recurrence + reminders + checklists + linkedResources + search + move + summarize_today + retry/error robustness + vitest tests + compact format (verbose opt-in)

  • v0.4 β€” auto pagination + $batch operations + Tasks.ReadWrite.Shared scope (read shared lists)

  • v0.5 β€” open extensions + cross-list helpers (overdue, by category, bulk update) + iCalendar export

  • v1.0 β€” stable milestone: GitHub Actions CI + extended tests + snapshot tests + README polish

Possible future versions:

  • v1.1 β€” file attachments (Graph beta)

  • v1.2 β€” auto-pagination follow-on for summarize_today / search_tasks / list_overdue_tasks

  • v2.0 β€” remote HTTP/SSE transport for Claude.ai custom connectors (multi-user OAuth)


πŸ“„ License

MIT β€” Β© MAG&Cie

Available Tools

28 tools
batch_complete_tasksA
Idempotent

Mark several tasks as completed in a single $batch HTTP call (up to 100 items).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint and destructiveHint. The description adds the batch call nature and size limit, but does not disclose error behavior or state changes beyond 'completed'. With annotations present, the added value 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded, but could include minimal parameter hints without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch mutation tool with no output schema, the description covers the limit and call type but omits error handling, idempotency details (though annotations cover it), and return format information, leaving some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 50% description coverage, with 'items' parameter lacking any description. The description does not explain the 'items' or 'verbose' parameters, missing a chance to clarify the required list_id/task_id fields or the output format toggle.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Mark' and resource 'tasks', and clearly states 'several tasks' and 'batch HTTP call', distinguishing it from the sibling 'complete_task' for single tasks and other batch siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for batch operations with a 100-item limit, but does not explicitly state when to use it vs the single-task sibling 'complete_task' or when not to use it. No alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_create_tasksA

Create several tasks in a single HTTP call via Microsoft Graph $batch (up to 100 items, auto-chunked by 20). Returns: status + result OR error per item, in order. More efficient than N create_task calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations show readOnlyHint=false and destructiveHint=false, indicating creation. Description adds return format (status/result/error per item in order) and auto-chunking. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with main action, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core issues: what, limits, return format, efficiency. Lacks details on per-item error structure, but sufficient for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers verbose parameter with description. Description adds meaning by explaining return structure related to verbose. Items parameter not detailed in schema but description clarifies batch behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it creates tasks in batch via Graph $batch, with limit 100 and auto-chunking. Distinguishes from create_task by highlighting efficiency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says more efficient than multiple create_task calls, implying use for multiple tasks. Also specifies constraints (100 items, chunked by 20). Lacks explicit when-not-to-use, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_delete_tasksB
DestructiveIdempotent

Delete several tasks in a single $batch HTTP call (up to 100 items).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Only mentions batch HTTP call and limit; does not add behavioral info beyond annotations (destructive, idempotent).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for simple tool but missing parameter guidance and behavioral nuance; output schema absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No description of parameters; schema has 50% coverage, but description fails to clarify required 'items' structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'delete', resource 'tasks', and constraint 'batch up to 100 items' differentiate from siblings like 'delete_task'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly suggests use for bulk deletion; lacks explicit when-not-to-use but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_update_categoriesA
Idempotent

Add/remove categories on several tasks in one operation. 2-phase batch: GET to read existing categories, then PATCH with the updated set. Per-item errors, no global fail.

ParametersJSON Schema
NameRequiredDescriptionDefault
refsYes
addNo
removeNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the 2-phase batch process (GET then PATCH) and partial error handling ('Per-item errors, no global fail'), adding significant behavioral context beyond the annotations. Annotations only indicate idempotency and non-destructive nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The first sentence states the purpose, and the second adds critical process and error details. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (batch, 2-phase, error handling, no output schema), the description covers the process and error behavior. It also mentions the verbose flag for output format. Missing minor details like idempotency implications or ordering, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only 'verbose' has a description). The description mentions 'add' and 'remove' categories but does not clarify the structure of 'refs' (list_id, task_id) or how add/remove interact. The low coverage demands more detailed parameter explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Add/remove categories) on multiple tasks ('several tasks in one operation'), which distinguishes it from siblings like 'update_task' (single task) or 'list_tasks_by_category' (read-only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for bulk category updates but does not explicitly state when to use versus alternatives or when not to use. It provides context ('add/remove categories on several tasks') but lacks exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

complete_taskC
Idempotent

Shortcut to mark a task as completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=true and readOnlyHint=false, but the description adds no behavioral context beyond 'mark as completed'. No mention of success/failure, side effects, or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise but under-specified. Could include additional context without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and lack of output schema, the description should mention return value, error conditions, or prerequisites. It does not, leaving the agent inadequately informed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description does not mention any parameters. Schema description coverage is low (33%), and required parameters list_id and task_id lack descriptions. The verbose parameter is described in schema, but the description adds no value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description 'Shortcut to mark a task as completed' clearly indicates the tool's purpose of completing a task. However, 'shortcut' is vague and does not specify that it sets task status to completed, nor does it differentiate from similar tools like update_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., update_task, batch_complete_tasks). The description does not mention context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_checklist_itemB

Add a sub-item (checklist) to a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
display_nameYes
is_checkedNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only, not destructive, and not idempotent. The description adds no extra behavioral context (e.g., does creation affect task state, any side effects). Adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. However, it is somewhat under-specified, barely above a tautology.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 5 parameters (3 required), the description is too sparse. It does not clarify the return format beyond the verbose parameter hint, nor does it explain ordering, error conditions, or relationship to the parent task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (just verbose). The description does not elaborate on parameters like list_id, task_id, display_name, or is_checked, failing to add meaning beyond the schema for the majority of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Add' and the resource 'a sub-item (checklist) to a task,' explicitly differentiating it from siblings like create_task and update_checklist_item.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for adding a checklist item but provides no guidance on when to use this tool versus alternatives like delete_checklist_item or batch creation tools. No explicit context or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_linked_resourceC

Attach a linked resource (URL or external ref) to a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
web_urlNo
application_nameNo
display_nameNo
external_idNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds minimal context beyond stating the action, but does not contradict annotations. It does not disclose side effects, auth needs, or rate limits, which are partially covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that gets straight to the point. It is concise and front-loaded, but might benefit from slightly more detail without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters (2 required), no output schema, and a minimal description, the agent lacks sufficient context to understand the full operation, especially parameter roles and expected return format. The description is too sparse for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 14% (only 'verbose' described). The description does not mention any parameters, leaving the agent with no added meaning for the six undocumented parameters. This is a significant gap given the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Attach a linked resource') and target ('to a task'), with an additional hint about resource type (URL or external ref). However, it does not differentiate from sibling tools like list_linked_resources or delete_linked_resource, which would benefit from explicit alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, nor does it mention any prerequisites or context for usage. The agent is left without information about scenarios where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_taskC

Create a new task in a To Do list. Supports recurrence and reminder.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
titleYes
bodyNo
importanceNo
due_dateNoISO 8601
time_zoneNo
categoriesNo
recurrenceNoMicrosoft Graph patternedRecurrence. Combines pattern (type, interval, ...) and range (type, startDate, ...).
is_reminder_onNo
reminder_date_timeNoISO 8601
reminder_time_zoneNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read, non-destructive write (readOnlyHint=false, destructiveHint=false). The description adds that the tool 'Supports recurrence and reminder,' but does not elaborate on behavioral traits like whether recurrence creates instances, or if reminder sets an alert. This is acceptable but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that delivers the core purpose and two notable features. It is front-loaded with the primary action. However, it lacks any structural elements (e.g., bullet points) that could improve scannability for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (12 parameters, nested objects, no output schema), the description is incomplete. It does not explain return values (except via verbose parameter), error scenarios, or prerequisites like existing list. The openWorldHint suggests unknown side effects, but the description adds no clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 33% schema description coverage, the description should compensate. It mentions recurrence and reminder, but fails to explain key parameters like list_id, title, importance, categories, or time_zone. The schema already describes recurrence in detail, but the overall parameter context is insufficient for effective invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new task in a To Do list,' providing a specific verb and resource. It also mentions support for recurrence and reminder, which hints at additional capabilities. However, it does not explicitly differentiate from sibling tools like 'batch_create_tasks' or 'update_task', which could help the agent choose the right tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., batch_create_tasks for multiple tasks, update_task for modifications). The description implies use for single task creation, but fails to provide context on when not to use it or mention prerequisites like an existing list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_checklist_itemC
DestructiveIdempotent

Delete a sub-item.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
item_idYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds no additional behavioral context (e.g., effect on related entities, error handling). It does not contradict annotations, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, but it sacrifices necessary detail for brevity. It could be slightly longer to include behavioral notes without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive nature (destructiveHint=true) and lack of output schema, the description should clarify what happens upon deletion (e.g., success behavior, persistence, return value). It omits critical context for safe use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation for the three required parameters (list_id, task_id, item_id). Without clarification, the agent must infer meanings from parameter names alone, which may be insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete a sub-item' uses a specific verb and resource, clearly indicating the action. It is distinguishable from sibling tools like delete_task and create_checklist_item, though it could explicitly name 'checklist item' instead of 'sub-item'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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., delete_task, batch_delete_tasks). No prerequisites or context for usage are provided, leaving the agent without decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_extensionA
DestructiveIdempotent

Delete an open extension from a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
extension_nameYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint and idempotentHint. Description adds 'open extension' specifier but no additional 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, direct, no redundancy. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing context: no guidance on how list_id or task_id are used, no return behavior, no error cases. For a destructive tool, description is incomplete without parameter details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and description does not explain parameters (list_id, task_id, extension_name). Only mentions 'open extension' implicitly tying to extension_name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it deletes an open extension from a task, effectively distinguishing from sibling tools like set_extension and list_extensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 (e.g., delete_task). The purpose is implied but no when-not-to-use or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_linked_resourceC
DestructiveIdempotent

Delete a linked resource from a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
resource_idYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint and idempotentHint. Description adds no additional behavioral context, such as error handling, side effects, or what happens if resource does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise and front-loaded, but sacrifices necessary detail. Could be considered too terse for the information needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 undocumented parameters, a destructive action, and no output schema, the description is far from complete. Lacks context on usage, results, and error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet description does not explain the meaning of list_id, task_id, or resource_id. Parameters are completely opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Delete' and the resource 'linked resource from a task', which is specific and distinguishes it from sibling tools like delete_checklist_item.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No information about when to use this tool vs alternatives, no prerequisites or conditions mentioned. Siblings like create_linked_resource exist but no guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_taskC
DestructiveIdempotent

Delete a task permanently.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true and idempotentHint=true, which the description's mention of 'permanently' aligns with but does not significantly extend. The description adds minimal behavioral context beyond what annotations offer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence), which is concise but arguably too minimal. It front-loads the core action but omits useful details about preconditions or results, implying a trade-off between brevity and informativeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema and 0% parameter description coverage, the description alone provides insufficient context. Important aspects like success/error behavior, idempotency implications, and required permissions are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has two required parameters (list_id, task_id) with 0% description coverage. The description does not clarify what these parameters represent or their expected format/values, failing to compensate for the schema deficiency.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('a task'), with the qualifier 'permanently' indicating irreversibility. This is specific and distinct from sibling tools like 'complete_task' or 'move_task', though it does not explicitly differentiate from 'batch_delete_tasks'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 vs. alternatives like 'batch_delete_tasks' or 'complete_task'. No when-to-use or when-not-to-use context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_tasks_icsA
Read-only

Export tasks to iCalendar format (text/calendar VTODO) for import into Google Calendar, Apple Calendar, Outlook, Thunderbird, etc. Recurrence converted to RRULE when possible. Reminder converted to VALARM.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idsNo
include_completedNo
top_per_listNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, and the description adds behavioral details like conversion of recurrence to RRULE and reminders to VALARM. No contradictions; the description enhances 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences efficiently cover the tool's core functionality and important details (format, target apps, conversion specifics). No redundant information; well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite clear purpose, the description lacks parameter descriptions and output format details. With no output schema and 3 undocumented parameters, the tool definition is incomplete for an AI agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet the description provides no explanation of the three parameters (list_ids, include_completed, top_per_list). The AI agent must infer their meaning from names alone, which is insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports tasks to iCalendar format, specifying the MIME type and target applications. It includes details about conversion of recurrence and reminders, making its purpose distinct from sibling tools which focus on CRUD operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for exporting tasks to calendar apps but does not explicitly state when to use or avoid this tool. Since there are no sibling export tools, differentiation is not required, but guidance on parameter use is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskC
Read-only

Fetch a task's detail by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with annotations (readOnlyHint=true) but adds no additional behavioral details, such as error handling, authentication needs, or the impact of the verbose parameter. Annotations already cover basic safety aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise but omits important details. It is not verbose, but it sacrifices clarity for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does not explain what the fetched 'detail' includes, lacks output schema, and fails to differentiate from sibling tools. Given the complexity and no output schema, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (33%), and the description does not clarify the purpose of list_id, task_id, or verbose. The phrase 'by ID' is ambiguous and fails to specify which parameter corresponds to the task ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('fetch'), the resource ('task detail'), and the method ('by ID'), which is sufficient for basic understanding. However, it does not explicitly mention the need for both list_id and task_id, which are required parameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 list_tasks or search_tasks. The description lacks any indication of appropriate contexts or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_all_tasksA
Read-only

Fetch every active task across every list in a single round-trip (uses Graph $batch internally). Use this for the question "what are all my tasks?" instead of NΓ—list_tasks calls. Optional filter is an OData filter applied per list (e.g. "importance eq 'high'"). By default status ne 'completed' is appended unless include_completed is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNo
top_per_listNo
include_completedNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses internal use of Graph $batch, default exclusion of completed tasks, and conditional inclusion. Annotations already indicate read-only and open-world; description adds significant 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundancy. First sentence states purpose and internal detail, second provides usage guidance and parameter behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main purpose, filter usage, and default behavior. However, misses explanation of top_per_list and output format (no output schema), and does not address when to use versus other list/search siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Describes filter as OData and default include_completed behavior, but top_per_list is not explained. Schema coverage is low (25%), so description partially compensates but leaves a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it fetches every active task across all lists in a single round-trip, distinguishing it from multiple list_tasks calls. The verb 'Fetch' and resource 'every active task across every list' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use for 'what are all my tasks?' instead of NΓ—list_tasks, and explains default filtering behavior. Does not list all alternatives but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_checklist_itemsC
Read-only

List the sub-items (checklist) of a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).
paginateNoIf true: follows @odata.nextLink up to 20 pages (β‰ˆ2000 items max). Default false. Use sparingly β€” large result sets may exhaust the LLM context window.

TDQS

C2.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint. The description adds no additional behavioral context such as rate limits, result format, or dependencies. It relies solely on annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently states the tool's purpose. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description does not explain the return format. It omits details about pagination behavior and verbose output, which are only hinted in schema descriptions. For a listing tool with multiple parameters, the description is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 50% of parameters have schema descriptions; the tool description does not explain the undocumented parameters (list_id, task_id). It implicitly ties task_id to the parent task but offers no clarity on list_id. The schema descriptions for verbose and paginate are present but not reinforced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'list' and resource 'sub-items (checklist) of a task', clearly distinguishing from sibling tools like create/delete/update checklist items or list tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternative listing tools (e.g., list_tasks, list_all_tasks). 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_extensionsB
Read-only

List the open extensions (custom JSON metadata) attached to a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).
paginateNoIf true: follows @odata.nextLink up to 20 pages (β‰ˆ2000 items max). Default false. Use sparingly β€” large result sets may exhaust the LLM context window.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds that it lists 'custom JSON metadata' but doesn't disclose additional behavioral traits 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, concise and front-loaded. Could be slightly more informative but no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only partial parameter descriptions, the description is minimal. It doesn't explain return format, pagination behavior, or how to interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (required parameters list_id and task_id lack descriptions). The description does not add any parameter-specific meaning to compensate for this gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'open extensions (custom JSON metadata) attached to a task.' It distinguishes from sibling tools like set_extension and delete_extension.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. No when-to-use or when-not-to-use context is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_linked_resourcesB
Read-only

List the linked resources (external URLs, third-party app refs) of a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).
paginateNoIf true: follows @odata.nextLink up to 20 pages (β‰ˆ2000 items max). Default false. Use sparingly β€” large result sets may exhaust the LLM context window.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds no further behavioral context (e.g., pagination behavior is only in parameter descriptions). With annotations covering safety, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence of 12 words, entirely to the point with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing information about return format or what exactly a linked resource contains; with no output schema and 4 parameters, the description is too sparse for full understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (list_id and task_id lack descriptions). The tool description adds no parameter-level information to compensate for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'linked resources (external URLs, third-party app refs) of a task', distinguishing it from sibling tools like create_linked_resource and delete_linked_resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 list_extensions or search_tasks, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_overdue_tasksA
Read-only

List ALL overdue tasks (status ne completed and dueDateTime < today) across every list. Aggregated via Promise.all.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_per_listNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint. The description adds that results are aggregated via Promise.all, hinting at parallel requests and potential performance characteristics. It could mention pagination or size limits, but adds 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states purpose and filter, the second adds implementation detail. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple list tool with annotations, but it lacks explanation of top_per_list and expected output format beyond the verbose parameter's schema description. Missing pagination info.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain top_per_list at all, leaving its meaning unclear. verbose is described in the schema, but with schema coverage at 50%, the description should compensate. It does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List ALL overdue tasks' with explicit filter conditions (status ne completed and dueDateTime < today) and scope across every list. This distinguishes it from siblings like list_all_tasks, list_tasks, and search_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving all overdue tasks across all lists. It doesn't explicitly state when not to use or offer alternatives, but the name and filter make context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_task_listsA
Read-only

List all the user's To Do lists (Tasks, Inbox, custom lists, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).
paginateNoIf true: follows @odata.nextLink up to 20 pages (β‰ˆ2000 items max). Default false. Use sparingly β€” large result sets may exhaust the LLM context window.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint. Description adds no extra behavioral context (e.g., no side effects, no rate limits). 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with key information, no redundant words. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description omits return format details beyond verbose parameter. Functional for a simple list tool, but could mention that result is a list of list objects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers both parameters with descriptions. The description does not add meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 'all the user's To Do lists', including examples like Tasks, Inbox, custom lists. It distinguishes from sibling tools like list_tasks that handle individual tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this versus alternatives. However, it is the only tool for listing task lists, so usage is implied. Missing conditions like 'prefer this for overview tasks'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksA
Read-only

List the tasks of a To Do list. Supports OData filter, $orderby, $top, and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
filterNo
topNo
orderbyNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).
paginateNoIf true: follows @odata.nextLink up to 20 pages (β‰ˆ2000 items max). Default false. Use sparingly β€” large result sets may exhaust the LLM context window.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. The description adds concrete behavioral details beyond annotations, such as pagination 'follows @odata.nextLink up to 20 pages (β‰ˆ2000 items max)' and verbosity options, which significantly aids agent understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, starting with the core purpose. It is concise but could be more structured by separating features and parameters. No unnecessary information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers core behavior and pagination limits but lacks details on filter syntax, orderby format, and the structure of the return value. With no output schema, the agent must infer the response format, which is a gap given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33% (only verbose and paginate have descriptions). The description mentions filter, orderby, top, and pagination but does not provide syntax or format details for filter or orderby. It partially compensates for low coverage but leaves gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List the tasks of a To Do list,' specifying the resource and verb. It mentions supported operations like OData filter, $orderby, $top, and pagination, which distinguishes it from sibling tools like list_all_tasks or list_overdue_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing tasks from a specific list but does not provide explicit guidance on when to use this tool versus siblings like list_overdue_tasks or search_tasks. No when-not-to-use or alternative recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasks_by_categoryA
Read-only

List ALL tasks containing a given category, across every list. OData filter: categories/any(c: c eq '...').

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYes
top_per_listNo
include_completedNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint. The description adds useful context: it lists all tasks across every list and mentions the OData filter syntax. However, it does not disclose potential limits like pagination or the effect of top_per_list on 'ALL tasks'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (two sentences), front-loading the purpose and providing a useful OData syntax hint. However, it could be slightly more structured to cover all parameters without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 parameters and no output schema, the description inadequately explains top_per_list and include_completed, and creates ambiguity with 'ALL tasks'. It fails to clarify the output format beyond the verbose parameter's schema description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only the verbose parameter has a description in the schema (25% coverage). The description adds OData filter details for category but fails to explain top_per_list and include_completed. Moreover, 'List ALL tasks' contradicts the limiting effect of top_per_list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (list) and resource (tasks), specifies scope (across every list), and provides the OData filter syntax. It distinguishes itself from siblings like list_all_tasks or search_tasks by focusing on category filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (when filtering by category) but does not explicitly mention when not to use or suggest alternatives like list_all_tasks or search_tasks for other filtering needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_taskA
Destructive

Move a task from one list to another. Recreates the task in the target list (title, body, due, recurrence, reminder, categories preserved) then deletes the original. Note: checklistItems and linkedResources are NOT moved (Graph limitation). The task ID changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_list_idYes
task_idYes
target_list_idYes
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond annotations: it explains the recreate-then-delete mechanism, lists preserved fields, flags unsupported items (checklistItems, linkedResources), and notes that the task ID changes. Contradicts no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a note, all essential information. No wasted 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description covers key invocation details (parameters, behavior, limitations). It omits return value format (though 'verbose' parameter hints at it), but overall is sufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter ('verbose') is described in the schema; the three required parameters (source_list_id, task_id, target_list_id) have no descriptions. The tool description indirectly clarifies their roles but does not provide explicit semantics. Schema description coverage is low (25%), but the description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action ('move a task from one list to another') and lists preserved fields, distinguishing it from create/delete pairs and sibling tools like 'create_task' or 'delete_task'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the tool is for moving tasks between lists, but does not mention when not to use it (e.g., if preserving checklist items is important) or provide explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tasksA
Read-only

Search a term in the titles of tasks across ALL lists (case-sensitive). By default excludes completed tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_per_listNo
include_completedNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint. The description adds value by specifying case-sensitive search and default exclusion of completed tasks, which are not evident from annotations. This enhances the agent's understanding of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with key action and scope. Every word adds valueβ€”no fluff. The structure efficiently conveys the core function and a key behavioral nuance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the read-only, open-world annotations and four parameters with no output schema, the description covers essential aspects: search scope, case-sensitivity, default filter. It omits details like default values for top_per_list or return format, but the 'verbose' parameter schema partially covers that. Overall sufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 25% description coverage. The description partially compensates by mentioning case-sensitivity (query) and default exclusion (include_completed), but does not describe top_per_list or verbose beyond the schema's own 'verbose' description. More explicit parameter mapping would help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches a term in task titles across all lists, with specific behavioral details (case-sensitive, default exclude completed). This distinguishes it from sibling tools like list_all_tasks or list_tasks_by_category, which are for listing or filtering, not searching by term.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the default behavior (exclude completed) and scope (across all lists), giving agents context on when to use this tool. However, it lacks explicit guidance on when not to use it or direct comparison to alternatives like list_all_tasks or search within a single list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_extensionB
Idempotent

Create or update (upsert) an open extension on a task. Lets you attach arbitrary JSON metadata (project_id, external_ref, custom flags...) that persist in Microsoft Graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
extension_nameYesUnique name, ideally reverse-DNS, e.g. 'com.example.mydata'
dataYesArbitrary JSON object to store
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true and safety info. Description adds that metadata persists in Microsoft Graph, but does not disclose additional behavioral traits beyond annotations. Minimal added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is two concise sentences, front-loaded with the main action and benefit, with no superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite rich annotations, the description omits parameter details for list_id and task_id. For a tool with 5 parameters, the description is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 60% schema coverage; key parameters list_id and task_id lack descriptions in both schema and description. Description does not compensate for missing parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool creates or updates an open extension on a task (upsert), specifying verb and resource. It distinguishes from sibling tools like delete_extension and list_extensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for attaching arbitrary JSON metadata to a task, but does not explicitly mention when to use vs alternatives like list_extensions or delete_extension, nor provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarize_todayA
Read-only

Summary of tasks due today and overdue, aggregated per list. Useful for the question "what do I have to do today?".

ParametersJSON Schema
NameRequiredDescriptionDefault
time_zoneNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and openWorldHint=true. Description adds that output is aggregated per list and includes overdue tasks. No contradictions. Brief but sufficient for a read-only summary tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose and usage. No extraneous words. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two optional parameters, no output schema, and read-only semantics, the description adequately covers purpose and usage. The output format dependency on verbose is noted. More detail on the aggregated structure would be helpful but not necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (verbose has description, time_zone lacks). Description does not add meaning for time_zone beyond schema's lack of description. For verbose, it clarifies the impact on output format. Does not fully compensate for missing time_zone parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it summarizes tasks due today and overdue, aggregated per list, directly answering the question 'what do I have to do today?'. This distinguishes it from sibling tools like list_all_tasks or list_overdue_tasks which provide raw lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states it is useful for the daily summary question, providing clear usage context. Does not explicitly mention when not to use or alternatives, but the purpose is specific enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_checklist_itemA
Idempotent

Update a sub-item (rename or check/uncheck).

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
item_idYes
display_nameNo
is_checkedNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true. Description adds the concrete actions (rename, check/uncheck) but does not disclose additional behavior like error conditions or side effects. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys the core function efficiently. No wasted words, front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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 is too brief. It does not explain the effect of omitted optional fields, return format, or behavior on duplicate updates. The annotations add some context, but the description lacks necessary detail for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 17% schema coverage, the description should compensate but only hints at the role of display_name and is_checked via 'rename or check/uncheck'. It does not explain list_id, task_id, item_id, or verbose beyond what the schema provides. The verbose parameter has its own description, but others lack clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Update a sub-item' with specific examples 'rename or check/uncheck'. It effectively distinguishes this from sibling tools like create_checklist_item, delete_checklist_item, and list_checklist_items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to modify a checklist item) but does not explicitly state when not to use or suggest alternatives. No mention of prerequisites or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskC
Idempotent

Update an existing task (title, status, recurrence, reminder, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYes
task_idYes
titleNo
statusNo
bodyNo
importanceNo
due_dateNoISO 8601
time_zoneNo
categoriesNo
recurrenceNoMicrosoft Graph patternedRecurrence. Combines pattern (type, interval, ...) and range (type, startDate, ...).
is_reminder_onNo
reminder_date_timeNoISO 8601
reminder_time_zoneNo
verboseNoIf true: returns full JSON. Otherwise: compact text format (default, saves tokens).

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=true. Description adds no extra behavioral context (e.g., effect on omitted fields, permissions needed, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, concise. No wasted words, but could benefit from a bit more structure (e.g., bullet points for key parameters).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complex tool with 14 parameters, nested objects, and no output schema. Description fails to explain behavior on omitted fields, error scenarios, or return value. Incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (29%). Description mentions only a subset of parameters (title, status, recurrence, reminder), ignoring others like importance, due_date, categories. Does not fully compensate for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool updates an existing task (verb+resource) and lists common fields like title, status, recurrence, reminder. It distinguishes from create/delete/batch siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 batch_update or complete_task. No 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 28 tool updatesv1.2.1
    • First observedbatch_complete_tasks
    • First observedbatch_create_tasks
    • First observedbatch_delete_tasks
    • First observedbulk_update_categories
    • First observedcomplete_task
    • First observedcreate_checklist_item
    • First observedcreate_linked_resource
    • First observedcreate_task
    • First observeddelete_checklist_item
    • First observeddelete_extension
    • First observeddelete_linked_resource
    • First observeddelete_task
    • First observedexport_tasks_ics
    • First observedget_task
    • First observedlist_all_tasks
    • First observedlist_checklist_items
    • First observedlist_extensions
    • First observedlist_linked_resources
    • First observedlist_overdue_tasks
    • First observedlist_task_lists
    • First observedlist_tasks
    • First observedlist_tasks_by_category
    • First observedmove_task
    • First observedsearch_tasks
    • First observedset_extension
    • First observedsummarize_today
    • First observedupdate_checklist_item
    • First observedupdate_task

TDQS

B3.4/5.0

Scored across 28 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, with names that directly indicate their function. Batch operations are clearly separated from single operations, and tools for different resources (tasks, checklist items, linked resources, extensions) are easily distinguishable.

Naming Consistency5/5

Tool names consistently follow a verb_noun pattern with underscores, using lowercase. Prefixes like batch_, list_, create_, delete_, update_ are used predictably, making the naming scheme intuitive and easy to navigate.

Tool Count4/5

With 28 tools, the server covers a comprehensive set of operations for Microsoft To Do, including batch operations and exports. While a bit on the higher side, the count is justifiable given the domain's complexity and the need to support multiple resource types.

Completeness4/5

The tool set covers nearly all core workflows: CRUD for tasks, checklist items, linked resources, and extensions; batch operations; search; export; and summary. Minor gaps include the absence of tools to create, update, or delete task lists themselves.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

Latest Blog Posts

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/MAG-Cie/mcp-microsoft-todo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server