nirvana-mcp
The nirvana-mcp server provides read-only access to your NirvanaHQ GTD task manager via 17 tools, exposing the following capabilities:
Task List Retrieval
Inbox (
get_inbox) — Unprocessed, uncategorized tasksNext Actions (
get_next_actions) — Concrete, actionable next stepsWaiting For (
get_waiting_for) — Tasks blocked on someone elseScheduled (
get_scheduled) — Tasks deferred to a future dateSomeday/Maybe (
get_someday) — Tasks parked for later considerationLater (
get_later) — Tasks between Next and SomedayTrash (
get_trash) — Soft-deleted, recoverable tasksLogbook (
get_logbook) — Completed tasksRecurring (
get_recurring) — Recurring task templates/rulesFocus (
get_focus) — High-priority flagged tasks
Projects & Organization
List Projects (
list_projects) — All active projectsGet Project (
get_project) — A specific project (by name or ID) with its child tasks and sub-projectsList Areas (
list_areas) — High-level life domains (e.g. work, personal)List Tags (
list_tags) — All tags, GTD contexts (@home, @phone), and contacts
Search & Filtering
Search Tasks (
search_tasks) — Filter tasks by any combination of free-text (name/note), tag, area, and state (inbox, next, waiting, scheduled, someday, later, logged, recurring, active_project)
No write operations are supported — the server is currently read-only; creating, modifying, or deleting data is not implemented.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nirvana-mcpWhat's in my inbox?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nirvana-mcp
MCP server that exposes NirvanaHQ — the GTD task manager — to Claude Code and other MCP-compatible clients.
Status: 17 read-only tools shipped (see docs/tools.html for the full reference). Writes are next. See PLAN.md for the roadmap.
Install into Claude Code
Prerequisites: Node.js 20 or newer (ships with npx) and the Claude Code CLI. Nothing needs to be cloned or globally installed — npx -y downloads the package on demand.
# 1. Get a Nirvana auth token. Prompts for username + password.
npx -y @sgoettschkes/nirvana-mcp login
# 2. Install the server. Paste the token from step 1.
claude mcp add nirvana \
--env NIRVANA_AUTH_TOKEN=<paste-token-here> \
-- npx -y @sgoettschkes/nirvana-mcp
# 3. Restart Claude Code, then ask: "What's in my Nirvana inbox?"To remove: claude mcp remove nirvana.
Related MCP server: Todoist MCP Server
Tools
Tool | Description |
| Tasks in the Inbox (state=0) — unprocessed items not yet categorized. |
| Tasks marked Next (state=1) — concrete, actionable next steps. |
| Tasks Waiting on someone else (state=2). |
| Tasks deferred to a future start date (state=3). |
| Tasks parked in Someday/Maybe (state=4). |
| Tasks in the Later list (state=5) — between Next and Someday. |
| Soft-deleted tasks (state=6), still recoverable. |
| Completed tasks (state=7) — currently returns all-time history. |
| Recurring task templates (state=9) — the rules, not individual occurrences. |
| Tasks flagged for Focus ( |
| Active projects ( |
| One project plus its direct children (tasks and sub-projects). Identify by |
| High-level life domains (e.g. "work", "personal"). |
| Plain tags + contacts (with a |
| Reference Lists ( |
| One Reference List plus all its items. Identify by |
| Filter tasks by |
How it works
NirvanaHQ has an undocumented HTTP API at https://api.nirvanahq.com. This server:
Calls
auth.newwith your username and the MD5 of your password to obtain a long-lived auth token.Calls the bulk
everythingendpoint and filters the result client-side to answer each tool.
Your password is hashed locally and never stored. Only the auth token is persisted (in your MCP client's config). Revoke it any time by changing your Nirvana password.
Troubleshooting
Nirvana API error 98: Invalid Login Details— wrong username/password.Missing required env var: NIRVANA_AUTH_TOKEN— runnirvana-mcp loginfirst and put the token in yourclaude mcp addcommand.Nirvana API errorfrom a tool call — your token was probably revoked (changing your Nirvana password does this). Re-runnirvana-mcp login, thenclaude mcp remove nirvana && claude mcp add ...with the new token.
Development
git clone https://github.com/Sgoettschkes/nirvana_mcp
cd nirvana_mcp
asdf install # installs the pinned Node version
npm install
cp .env.example .env # creates .env with an empty NIRVANA_AUTH_TOKEN
npm run login # prompts for username + password,
# prints an auth token. Paste it as
# NIRVANA_AUTH_TOKEN in .env.
npm run dev # runs the server against your account
npm run inspect # builds, then opens MCP InspectorWhen verifying the published install from inside this repo, the package.json name collides with the npm package, and npx -y @sgoettschkes/nirvana-mcp … will fail with command not found. Run from a different directory (cd ~ && npx …) or use the explicit form: npx -y --package=@sgoettschkes/nirvana-mcp nirvana-mcp ….
License
MIT
Available Tools
15 toolsget_focusGet Nirvana FocusA
Returns tasks the user has flagged for Focus in Nirvana (seqt > 0), excluding completed or trashed items. These are what the user is actively prioritizing right now.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It transparently discloses the filtering criteria (seqt > 0, excludes completed/trashed), which is adequate for a read-only tool with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, zero wasted words. Perfectly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple filtered list read tool with no parameters and no output schema, the description fully covers what the tool does and its data source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters, so schema coverage is 100%. Baseline for no parameters is 4. Description adds no parameter info but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns tasks flagged for Focus in Nirvana, using specific technical filter (seqt > 0) and exclusions. It distinguishes from siblings like get_inbox or get_later that return different views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when wanting to see actively prioritized tasks, but does not explicitly state alternatives or when not to use. The context 'actively prioritizing right now' provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inboxGet Nirvana InboxA
Returns tasks in the Nirvana Inbox (state=0) — unprocessed items the user hasn't categorized yet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description only says it returns tasks; it does not disclose whether the operation is read-only, has side effects, or any other behavioral aspects beyond the basic retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key information without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description adequately explains the purpose and content of the return, though additional context like ordering or format could improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, meeting the baseline of 4. The description adds value by clarifying what the Inbox represents (unprocessed items).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns tasks in the Nirvana Inbox (state=0) and explains it means unprocessed items, distinguishing it from siblings like get_focus or get_next_actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the user wants unprocessed inbox items, but lacks explicit guidance on when to use this tool versus alternatives like get_focus or search_tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_laterGet Nirvana LaterA
Returns tasks in Nirvana's Later list (state=5) — things the user will definitely do, but not in the immediate Next queue. Sits between Next and Someday.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states it returns tasks from the Later list, which implies a read operation, but does not disclose any specific behavioral traits like authentication, rate limits, or output format. For a simple get function, this is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action. Every sentence provides value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description provides sufficient context about the Later list and its place in the workflow. It could mention the return type (list of tasks), but it's implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so baseline is 4. The description adds meaning by explaining what the Later list represents, which is helpful context beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns tasks from the Later list, explains its position between Next and Someday, and includes the technical state=5. It distinguishes from sibling tools like get_next_actions and get_someday.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage by positioning the Later list between Next and Someday, indicating it's for tasks definitely to do but not immediate. However, no explicit when-to-use or when-not-to-use compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_logbookGet Nirvana LogbookA
Returns completed tasks logged in Nirvana (state=7). Use this to review what the user finished.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description itself should disclose behavioral traits. It implies a read-only operation by stating it returns data, but does not mention any side effects, authentication needs, or rate limits. For a simple read tool, this is adequate but not highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It is front-loaded with the main purpose, then adds usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (no parameters, no output schema), the description is mostly complete. However, it does not describe the output format or fields, which would help the agent interpret results. A slightly more detailed description of what 'completed tasks' includes would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description does not need to explain them. Baseline for 0 parameters is 4, and the description adds value by explaining what is returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Returns completed tasks logged in Nirvana (state=7).' The verb 'returns' and resource 'completed tasks' are specific, and it distinguishes from sibling tools like 'get_inbox' or 'get_later' by focusing on completed tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this to review what the user finished,' providing clear context for when to use. While it does not explicitly state when not to use or name alternatives, the sibling tool list helps differentiate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_actionsGet Nirvana Next ActionsA
Returns tasks marked as Next Actions in Nirvana (state=1) — concrete, actionable next steps the user has committed to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description only states it returns tasks. For a read-only, parameterless tool this is acceptable but lacks any extra behavioral detail like ordering or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence that is front-loaded and concise. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description sufficiently explains what the tool returns and the filter applied. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description adds meaning beyond schema by clarifying the filter condition (state=1) and the concept of 'Next Actions'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool returns tasks with state=1 (Next Actions) and explains what that means. Distinguishes from siblings by specifying a concrete state filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when needing actionable next steps, but no explicit when-not or comparison to siblings like get_focus or get_inbox. Adequate for a simple tool but could be improved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet Nirvana ProjectA
Returns a single project and all of its direct child items (tasks and sub-projects). Identify the project by its exact id (UUID) or its exact name. Provide exactly one. Use list_projects first to discover names.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided so the description carries full burden. It discloses the key behavior: returns a project with direct children. It could mention if there are any side effects or limitations, but for a read tool it is adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states the purpose, the second gives usage guidance. Well front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, no output schema, and sibling tools, the description is fairly complete. It covers what, how to identify, and a prerequisite. A description of the response structure would be beneficial but is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains that id is a UUID and name is a string, and that exactly one must be provided, adding valuable semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a single project and its direct child items, which distinguishes it from sibling get_ tools that return filtered views, and from list_projects which lists all projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to identify by exact id or name, provide exactly one, and suggests using list_projects first to discover names, providing clear usage context and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recurringGet Nirvana RecurringA
Returns the user's recurring task templates in Nirvana (state=9). These are the rules that spawn task instances on a schedule, not individual occurrences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must cover behavior. It explains the tool returns templates (state=9) and clarifies it is not individual instances, but lacks details on error behavior, auth needs, or result format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main purpose, and each sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with no output schema, description adequately explains what it returns (templates, not instances). Minor lack of count or sorting info, but sufficient given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4 per rubric. Description adds no parameter info, which is acceptable given zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns recurring task templates (state=9) and distinguishes them from individual occurrences. This differentiates it from siblings like get_inbox or get_focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing templates vs. occurrences but does not explicitly state when to use this tool over alternatives. No exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduledGet Nirvana ScheduledA
Returns Scheduled tasks in Nirvana (state=3) — tasks deferred to a specific future start date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool 'Returns' tasks, implying a read-only operation, but does not explicitly disclose any other behavioral traits like potential side effects, authorization requirements, or performance characteristics. The description is acceptable but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It is concise, front-loads the core purpose, and contains no extraneous information. Every word contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and a simple retrieval purpose, the description adequately covers what the tool does and what it returns. It could potentially mention filtering scope (e.g., user-specific), but for a straightforward list tool, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters (0 params, 100% coverage). The description adds value by explaining the meaning of 'Scheduled' (state=3, deferred future start date), which complements the schema. Since no parameters exist, the description effectively clarifies what the tool returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'Scheduled tasks' with state=3 and explains they are 'deferred to a specific future start date'. This specification distinguishes it from sibling tools like get_inbox, get_next_actions, etc., which handle different task states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by focusing on a specific task state (state=3) and provides a clear definition. While it doesn't explicitly state when not to use it or compare with siblings, the naming convention and state explanation offer sufficient guidance for an AI agent to choose this tool when needing deferred tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_somedayGet Nirvana Someday/MaybeA
Returns tasks parked in Nirvana's Someday list (state=4) — things to revisit later but not actionable now.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It clearly indicates a read operation (returns tasks) and specifies the filter (state=4). It does not mention side effects or pitfalls, but for a simple read tool with no parameters, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of 17 words, front-loaded with the main action and concise. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema or annotations, the description provides sufficient context: what is returned, the specific list, and the meaning of that list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters; baseline is 4. Schema coverage is 100% (empty). The description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns tasks from Nirvana's Someday list, specifies the state=4, and adds context that these are 'things to revisit later but not actionable now,' which distinguishes it from sibling tools like get_next_actions or get_inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for non-actionable tasks to revisit later, but it does not explicitly state when not to use or directly compare with siblings. However, the context is clear enough for an AI agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trashGet Nirvana TrashA
Returns tasks the user has thrown into Trash (state=6). These are soft-deleted but recoverable — useful for finding something the user trashed but might want back.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that tasks are 'soft-deleted but recoverable', a key behavioral trait. No additional side effects mentioned, but for a read-only retrieval tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The purpose and usage are front-loaded. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and a simple task, the description fully covers what the tool does and when to use it. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, achieving 100% schema coverage. The description adds meaning by explaining the return content (trash tasks), which is beyond the schema's implicit understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns tasks in Trash (state=6), using specific verb 'returns' and resource 'tasks the user has thrown into Trash'. It distinguishes from sibling tools like get_inbox and get_focus by targeting a specific state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'useful for finding something the user trashed but might want back.' It does not explicitly state when not to use or mention alternatives, but the sibling context implies purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_waiting_forGet Nirvana Waiting ForA
Returns tasks the user is Waiting on someone else for in Nirvana (state=2). Often blocked on a contact's response or delivery.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only discloses state=2 filter; lacks details on authorization, side effects, or performance. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for simple list with no parameters and no output schema, but could clarify return fields or scope. With 14 siblings, more differentiation would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage 100% via empty schema. Baseline 4 for zero-parameter tools, adds no param info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Returns', resource 'tasks', and context 'Waiting on someone else' with state=2. Distinguishes from siblings like get_inbox or get_next_actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for tasks blocked on others, but no explicit when-to-use or when-not-to-use guidance. Sibling tools listed but no comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_areasList Nirvana AreasA
Returns the user's Areas in Nirvana — high-level life domains (e.g. 'work', 'personal') that group projects and tasks. Areas are the top-level organizing dimension.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It transparently states a read operation with no side effects. It does not mention potential edge cases like empty results, but for a simple list tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded with the core purpose, followed by a clarifying definition. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and a simple retrieval task, the description is fully complete. It explains what is returned and why it matters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100%. The description does not need to add parameter info. Baseline 4 is appropriate for no-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the user's Areas, which are high-level life domains. It distinguishes from sibling tools like get_focus or list_projects by specifying that areas are the top-level organizing dimension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving the list of areas, but does not explicitly state when to use this tool versus alternatives or provide when-not scenarios. However, the sibling context makes it clear this is the only tool for listing areas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList Nirvana ProjectsA
Returns the user's active projects in Nirvana (state=11). Projects are containers that group related tasks under a shared outcome.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry behavioral disclosure. It only says 'active projects (state=11)' but does not mention authorization, rate limits, pagination, or side effects. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states action and scope, second provides domain context. No fluff, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters and no annotations, description covers the main function and entity meaning. Lacks details on sorting, completeness, or user scope, but adequate given tool simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so baseline is 4. Description adds value by specifying 'active projects (state=11)' beyond schema, which is helpful for understanding the filter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states verb 'Returns', resource 'active projects', and explains what projects are. It clearly distinguishes from siblings like get_project (single) and list_areas by specifying 'projects' as containers for tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives (e.g., search_tasks, list_areas). Missing exclusions or context about when to prefer this over other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList Nirvana TagsA
Returns the user's labels in Nirvana — plain tags, GTD contexts (e.g. @phone, @home), and contacts (people the user waits on). Each entry has a kind field distinguishing them. For high-level life domains, use list_areas instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. States it returns labels (read operation) and mentions the 'kind' field. Does not disclose details like pagination or ordering, but sufficiently conveys behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence covers core purpose and output detail; second provides usage distinction. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description explains the 'kind' field distinguishing entries and lists the types. Lacks full output structure details, but sufficient for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description cannot add value beyond schema, baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns user's labels in Nirvana, specifying three types (plain tags, GTD contexts, contacts). It also distinguishes from sibling tool list_areas by referencing its purpose for high-level life domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit alternative guidance: 'For high-level life domains, use list_areas instead.' Implicitly suggests use for tags/contexts/contacts. Could further clarify when to choose this over other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tasksSearch Nirvana TasksA
Search the user's Nirvana tasks with any combination of filters. At least one filter is required. Trashed and deleted tasks are always excluded. Completed (logged) tasks are excluded unless state: "logged" is passed — pair text search with state="logged" to mine the user's history.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Case-insensitive substring matched against the task name and note. | |
| tag | No | Exact tag name to filter by (case-insensitive). Use list_tags to discover names. | |
| area | No | Exact area name to filter by (case-insensitive). Use list_areas to discover names. | |
| state | No | Restrict to tasks in this Nirvana state. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers key behaviors: filter requirement, automatic exclusions, and how to include logged tasks. It lacks details on pagination or result limits, but these are common for search tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the main purpose, followed by essential usage constraints. No unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple schema and no output schema, the description provides necessary context for a search tool: purpose, constraints, exclusions, and a special use case. It is complete for its complexity level, though it could mention that it is the only multi-filter tool among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters (100% coverage). The description adds value by stating the 'at least one filter' requirement and the synergy between text and state='logged' for history mining, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search the user's Nirvana tasks with any combination of filters', specifying the verb and resource, and distinguishes from sibling tools that are single-state getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly requires at least one filter and explains exclusions (trashed, deleted, logged by default). It also advises when to use state='logged' with text search. However, it doesn't directly compare to sibling tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.0.10- First observed
get_focus - First observed
get_inbox - First observed
get_later - First observed
get_logbook - First observed
get_next_actions - First observed
get_project - First observed
get_recurring - First observed
get_scheduled - First observed
get_someday - First observed
get_trash - First observed
get_waiting_for - First observed
list_areas - First observed
list_projects - First observed
list_tags - First observed
search_tasks
TDQS
Scored across 15 tools
Each tool targets a specific Nirvana task state or entity (focus, inbox, later, logbook, next actions, project, recurring, scheduled, someday, trash, waiting for, areas, projects, tags, search). The descriptions clearly differentiate overlapping concepts like focus vs. next actions, making selection unambiguous.
All tool names follow a consistent verb_noun pattern using snake_case: get_*, list_*, search_*. No mixing of conventions or vague verbs. The naming is predictable and discoverable.
With 15 tools, the count is at the upper boundary of the ideal range. It covers many task states and organizational entities, which is reasonable for a full-featured GTD app. Slightly high but still well-scoped.
The tool set covers all retrieval needs for task states, projects, areas, and tags, but completely lacks mutation tools (create, update, delete for tasks or projects). This is a significant gap, as agents cannot modify the user's task system, limiting practical usage.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server for generating rough-draft project plans from natural-language prompts.
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP Server for the Notion API, enabling Claude to interact with Notion workspaces.31801 npm920MIT
- AlicenseAqualityCmaintenanceAn MCP server that integrates Claude with Todoist, enabling natural language task management including creating, updating, completing, and deleting tasks.5267 npm392MIT
- AlicenseBqualityDmaintenanceAn MCP server that connects Claude with Todoist for complete task and project management through natural language.86167 npm245MIT
- FlicenseNot gradedqualityDmaintenanceAn OAuth-authenticated MCP server that bridges Claude AI with a task management system, allowing users to list, create, and update tasks through natural language commands.1-