Nyask Docs
JA EN
Open app
MCP API Catalog

MCP API Catalog

Every Tool Nyask exposes via its MCP (Model Context Protocol) endpoint. 88 Tools callable from MCP clients such as ChatGPT / Claude Desktop / Cursor, listed with scope, sideEffect and input schema.

88 tools read33 write55 destructive17

Connecting & auth

These Tools are callable from MCP clients such as ChatGPT / Claude Desktop / Cursor. Connection steps and auth / scope are covered on dedicated pages.

Work Items 22

Tasks / Items 12

items_bulk_patch write destructive

Patch the same fields across multiple existing tasks (max 25). Use ONLY when the user explicitly requests a bulk operation across N items (e.g. "そのプロジェクトの未完了タスクを全部 archived_at にして"). For a single item use items_patch instead. detail_append is not supported here — pass detail to overwrite, or omit. This always requires explicit user confirmation.

Parameters 13 · input schema
ArgTypeRequired
item_refs array yes
title string no
detail string no
due_date string no
due_time string no
start_date string no
priority string no
labels array no
archived_at string no
area_id string no
kind string no
estimate string no
sprint_id string no
json
{
  "type": "object",
  "properties": {
    "item_refs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of 2-25 item refs like [\"#42\",\"WORK#43\"] (project prefix optional; bare \"#42\" resolves owner-wide)."
    },
    "title": {
      "type": "string"
    },
    "detail": {
      "type": "string",
      "description": "Replaces detail of every target item."
    },
    "due_date": {
      "type": "string",
      "format": "date"
    },
    "due_time": {
      "type": "string",
      "description": "Time-of-day for the due date in HH:MM (JST, 24h). null to clear (all-day). Applies to every target item."
    },
    "start_date": {
      "type": "string",
      "format": "date"
    },
    "priority": {
      "type": "string",
      "enum": [
        "urgent",
        "high",
        "normal",
        "low"
      ]
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "archived_at": {
      "type": "string",
      "description": "ISO 8601 datetime to archive every item. Pass null to unarchive. Omit to leave unchanged."
    },
    "area_id": {
      "type": "string",
      "description": "Area id to assign to every target item (must belong to each item's own project). Pass null to clear the area on every item. Omit to leave unchanged. For path-based single-item assignment prefer project_areas_assign_item."
    },
    "kind": {
      "type": "string",
      "description": "Work-item kind key to set on every target item (lowercase / digits / - _, e.g. \"story\", \"bug\"). Pass null to clear the kind on every item. Omit to leave unchanged. Not validated against each project's custom kinds — built-in kinds always work."
    },
    "estimate": {
      "type": "string",
      "description": "Estimate value to set on every target item (must match each project's estimate unit, e.g. numeric for sp/hours). Pass null to clear the estimate on every item. Omit to leave unchanged."
    },
    "sprint_id": {
      "type": "string",
      "description": "Sprint id to assign every target item to (must belong to each item's own project). Pass null to remove every item from its (non-closed) sprint. Omit to leave unchanged."
    }
  },
  "required": [
    "item_refs"
  ]
}
items_bulk_patch_preview read

Dry-run preview for items_bulk_patch. Accepts the SAME args as items_bulk_patch and returns, for each item_ref, the current value vs. the value after applying the patch, plus the list of fields that would change. Read-only — no write happens. Use this BEFORE items_bulk_patch to show the user exactly what will change across N items, and to catch ownership / not-found errors per ref before requesting confirmation. Up to 25 items per call.

Parameters 12 · input schema
ArgTypeRequired
item_refs array yes
title string no
detail string no
due_date string no
due_time string no
start_date string no
priority string no
labels array no
archived_at string no
kind string no
estimate string no
sprint_id string no
json
{
  "type": "object",
  "properties": {
    "item_refs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of 2-25 item refs like [\"#42\",\"WORK#43\"] (project prefix optional; bare \"#42\" resolves owner-wide)."
    },
    "title": {
      "type": "string"
    },
    "detail": {
      "type": "string",
      "description": "Replaces detail of every target item."
    },
    "due_date": {
      "type": "string",
      "format": "date"
    },
    "due_time": {
      "type": "string",
      "description": "HH:MM in JST (24h). null clears time (back to all-day)."
    },
    "start_date": {
      "type": "string",
      "format": "date"
    },
    "priority": {
      "type": "string"
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "archived_at": {
      "type": "string",
      "description": "ISO 8601 datetime to archive. null to unarchive. Omit to leave unchanged."
    },
    "kind": {
      "type": "string",
      "description": "Work-item kind key (lowercase). null clears. Omit to leave unchanged."
    },
    "estimate": {
      "type": "string",
      "description": "Estimate value (must match project unit). null clears. Omit to leave unchanged."
    },
    "sprint_id": {
      "type": "string",
      "description": "Sprint id to assign. null removes from sprint. Omit to leave unchanged."
    }
  },
  "required": [
    "item_refs"
  ]
}
items_complete write

Mark an existing task as completed. This ALWAYS transitions to the single workflow state marked "default for close" (typically "Done") — it does NOT let you pick which closed state. Use this ONLY for a plain completion: the user clearly says "完了", "done", "終わった", "finished" (or a bare "クローズ" / "閉じて" that means "done"). For a close with a SPECIFIC terminal state — "重複" / "duplicate" → the "Duplicated" state, "却下" / "rejected" / "やめる" / "WONT-FIX" → the "Rejected" state, or any other named closed state — do NOT use this; call workflow_states_list to get that state id and move with items_move_state (those terminal states are closed but have is_default_for_close=false, so items_complete would wrongly land them in "Done"). Prefer this over manually setting status via items_patch — items_patch does NOT change workflow state.

Parameters 2 · input schema
ArgTypeRequired
item_ref string yes
reason string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "reason": {
      "type": "string",
      "description": "Optional reason for completion."
    }
  },
  "required": [
    "item_ref"
  ]
}
items_context_get read

Fetch a task and its full surrounding context (attachments metadata, discussions, pending reminders, relations) in a single call. Use this as the FIRST read when the user references a specific task and you need to understand it before responding or proposing changes (e.g. "INBOX#121 って何?" / "このバグ進捗どう?"). Returns metadata for attachments — use attachments_download to fetch image / PDF binary. Read-only. Best-effort: if a sub-section fails (e.g. relations), the main item is still returned and the failure is reported under `errors`.

Parameters 2 · input schema
ArgTypeRequired
item_ref string yes
include array no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "include": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "attachments",
          "discussions",
          "reminders",
          "relations"
        ]
      },
      "description": "Sections to include. Default: all of [\"attachments\",\"discussions\",\"reminders\",\"relations\"]. Pass a subset to reduce payload."
    }
  },
  "required": [
    "item_ref"
  ]
}
items_create write

Create a new task in the user's task management system. project_key is REQUIRED — pass the project to create the task in. There is NO implicit default: to create in the user's Inbox, pass project_key:"INBOX" explicitly. Use this when the user clearly intends to track a new actionable item; do NOT use it for things they only mention casually or hypothetically. For due time-of-day (e.g. "明日 9:00 まで"), pass due_time as "HH:MM" in JST; omit due_time for all-day tasks. Pass `kind` to classify the item as a work-item kind — built-in kinds are epic / story / task / bug / chore (use these directly, no lookup needed). Projects with board profiles enabled may define additional custom kinds; discover those via item_kinds_list. FIELD POLICY: a kind may declare a `field_policy` (see item_kinds_list) saying which agile fields it uses. Honor it — e.g. a Nano Epic does NOT use estimate / sprint (assign it a version instead); a Chore uses none. Do not set fields the kind does not use. Pass `parent` (an item_ref like "WORK#10") to link this new item under a parent (e.g. a Story under an Epic). Pass `version` (version name) to assign to a roadmap version at creation time. Pass `sprint` (sprint name or path like "Q3/Sprint 1") to assign to a sprint at creation time. Pass `area_path` (e.g. "API/Auth") to assign to a project area at creation time. When `parent` is given and version/sprint/area_path are omitted, the new item inherits the parent's version/sprint/area automatically. Returns `{ itemId, ref }`. Use `ref` (e.g. `INBOX#178`) for any user-facing reference; `itemId` is an internal UUID for relation / FK lookups only.

Parameters 13 · input schema
ArgTypeRequired
project_key string yes
title string yes
detail string no
due_date string no
due_time string no
start_date string no
priority string no
labels array no
kind string no
parent string no
version string no
sprint string no
area_path string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Required. Existing project key to create the task in. Pass \"INBOX\" for the Inbox project (no implicit default)."
    },
    "title": {
      "type": "string",
      "description": "Task title (1-200 chars)."
    },
    "detail": {
      "type": "string",
      "description": "Optional task detail/description (Markdown, up to 32000 chars/call). For longer content, create first then append in chunks via items_patch detail_append."
    },
    "due_date": {
      "type": "string",
      "description": "Due date in YYYY-MM-DD (JST).",
      "format": "date"
    },
    "due_time": {
      "type": "string",
      "description": "Optional time-of-day for the due date in HH:MM (JST, 24h). Requires due_date. Omit to keep the task all-day."
    },
    "start_date": {
      "type": "string",
      "description": "Start date in YYYY-MM-DD.",
      "format": "date"
    },
    "priority": {
      "type": "string",
      "enum": [
        "urgent",
        "high",
        "normal",
        "low"
      ],
      "description": "Optional priority."
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional labels."
    },
    "kind": {
      "type": "string",
      "enum": [
        "epic",
        "story",
        "task",
        "bug",
        "chore"
      ],
      "description": "Optional work-item kind. Built-in kinds: epic / story / task / bug / chore — pick one of these directly (no lookup needed). Projects with board profiles may define custom kinds (lowercase / digits / - _); discover them via item_kinds_list and they are also accepted here."
    },
    "parent": {
      "type": "string",
      "description": "Optional parent item reference (e.g. \"WORK#10\") to link this item under as a child."
    },
    "version": {
      "type": "string",
      "description": "Optional version name to assign this item to at creation time (e.g. \"v2.0\"). Must exist in the project. If parent is given and version is omitted, the parent's version is inherited."
    },
    "sprint": {
      "type": "string",
      "description": "Optional sprint name or path to assign this item to at creation time (e.g. \"Sprint 3\" or \"Q3/Sprint 1\"). Must exist and not be closed. If parent is given and sprint is omitted, the parent's active/planned sprint is inherited."
    },
    "area_path": {
      "type": "string",
      "description": "Optional area path within the project to assign this item to (e.g. \"API/Auth\"). Must exist and not be archived. Pass null to skip inheritance when a parent is set. If parent is given and area_path is omitted, the parent's area is inherited."
    }
  },
  "required": [
    "project_key",
    "title"
  ]
}
items_get read

Get full details of a specific item (task / note / event / task_template) by its ref (e.g. "#42", "INBOX#3", or "WORK#42"; the project prefix is optional — bare "#42" works). Use this in two main situations: (1) READ-FOR-ANSWER — after `tasks_list` / `notes_list` / `events_list` returned a matching ref but the user's question concerns the body (本文 / detail / 詳細 / 例年 / 経緯 / 人数 / ノート内容); list tools do not return `detail`, so you MUST call `items_get` here before answering. (2) PRE-UPDATE — to read the current title, detail, due_date, status, etc. before proposing changes. For richer context (attachments + discussions + reminders + relations in one call), prefer `items_context_get` instead. The returned `type` field tells you which kind of item this is — use it to decide which follow-up tool to call (tasks_* / notes_* / events_* / templates_*). When present, `series_links` lists the custom numbering series this item belongs to: each has series_key, series_label, and display_ref (e.g. "INV-0012") — or display_ref=null for a number-less link (membership only). Use series_key with custom_number_assign / custom_number_unassign. When present, `detail_summary` is an auto-generated summary of the item's confirmed discussions up to `detail_summary_updated_at`; it is separate from the user-authored `detail` body (which is never rewritten). To get the latest context, combine `detail_summary` with any discussions posted AFTER `detail_summary_updated_at` (read those via discussions_list). When `detail_summary` is absent, read the discussions directly. The response always includes `detail_length` (total character count of the detail body). For a very large body, fetch it in chunks: pass `detail_offset` (start character, default 0) and `detail_max_chars` (chunk size); when the returned slice is partial, `detail_truncated` is true and `detail_next_offset` is the character offset to pass back as `detail_offset` for the next chunk. Omitting both returns the full body (default, unchanged). To locate a specific string inside a large body, prefer items_grep.

Parameters 3 · input schema
ArgTypeRequired
item_ref string yes
detail_offset number no
detail_max_chars number no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "detail_offset": {
      "type": "number",
      "description": "Optional. Start character offset into the detail body for windowed reads of a large detail. Default 0 (start of body). Combine with detail_max_chars to page through a long body using the detail_next_offset returned in the response."
    },
    "detail_max_chars": {
      "type": "number",
      "description": "Optional. Max number of characters of detail to return starting at detail_offset. Omit to return the full remaining body (default = full detail, backward compatible). When the slice is partial, the response sets detail_truncated=true and detail_next_offset for the next chunk."
    }
  },
  "required": [
    "item_ref"
  ]
}
items_grep read

EXACT lexical / regex search across the user's items — the precision counterpart to `query`. Use `items_grep` for: exact string / identifier / error-message search, finding ALL occurrences, duplicate-issue checks, and ABSENCE PROOF ("is this string anywhere?"). It searches item title / detail / labels / comments / custom field values. There is NO semantic fallback and results are NOT ranked — they are exhaustive and deterministic. TRUST 0 hits as proof of absence ONLY when the response has `exhaustive=true` AND `truncated=false`. If `exhaustive=false` (candidate cap / timeout / regex reject), the result is incomplete — narrow with `filters`. Contrast with `query`: use `query` for discovery / cross-type / semantic / ranked recall (its 0 hits are NOT proof of absence). pattern is a literal substring by default; set regex=true for a JS RegExp. `filters` is a filter-ONLY DSL (its free text is ignored — put search text in `pattern`) and shares the Items View vocabulary: project / type / system_status / priority / label / due / area / sprint / version / agile_kind / cf:<field_key>. Note type = item type (task|note), agile_kind = work-item kind (story|bug|...). Example (fictional): pattern="ACME_LEGACY_FLAG", filters="agile_kind:bug area:Platform/API". Returns grouped-by-item results with field-level locators (comment_id / field_key) so you rarely need a follow-up items_get.

Parameters 11 · input schema
ArgTypeRequired
pattern string yes
regex boolean no
ignore_case boolean no
fields array no
custom_field_keys array no
filters string no
context_chars number no
count_only boolean no
limit_items number no
max_snippets_per_item number no
cursor string no
json
{
  "type": "object",
  "properties": {
    "pattern": {
      "type": "string",
      "description": "Search text. Literal substring by default; a JS RegExp when regex=true."
    },
    "regex": {
      "type": "boolean",
      "description": "Interpret pattern as a regular expression (JS RegExp)."
    },
    "ignore_case": {
      "type": "boolean",
      "description": "Case-insensitive match."
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "title",
          "detail",
          "labels",
          "comments.body",
          "comments.author",
          "custom.value",
          "custom.key"
        ]
      },
      "description": "Fields to search. Omit for content default (title/detail/labels/comments.body/custom.value). comments.author and custom.key are opt-in (not indexed, force a scan)."
    },
    "custom_field_keys": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Restrict custom field search to these field_keys."
    },
    "filters": {
      "type": "string",
      "description": "Filter-only DSL (e.g. \"type:note priority:high area:Platform/API agile_kind:bug cf:severity\"). Free text here is ignored — use `pattern` for the search text."
    },
    "context_chars": {
      "type": "number",
      "description": "Snippet context characters around a match (default 80)."
    },
    "count_only": {
      "type": "boolean",
      "description": "Return per-item match counts without snippets/locators."
    },
    "limit_items": {
      "type": "number",
      "description": "Max items per page (default 50)."
    },
    "max_snippets_per_item": {
      "type": "number",
      "description": "Max snippets emitted per item (default 3)."
    },
    "cursor": {
      "type": "string",
      "description": "Pagination cursor from a prior response."
    }
  },
  "required": [
    "pattern"
  ]
}
items_move_state write

Move an existing task to a specific workflow state (status). The `status_definition_id` is a workflow state id — get it from workflow_states_list (the `id` field). Always derive the project from the item and call workflow_states_list(project_key) so you pick a state from THIS item's workflow; do not reuse a state id from another workflow. Use this ONLY when the user actually asks to CHANGE / MOVE an item to a state — imperatives like "レビュー中にして" / "ブロック中にして" / "検収待ちにする" / "未着手に戻す" / "再オープン". A bare MENTION, QUESTION, or CORRECTION about a status name is NOT a move request — do NOT call this. Examples that are READS, not moves: clarifying which status exists ("Reviewing って言うステータスのはず"), or asking which items are in a state ("レビュー待ちのは?" / "レビュー中のタスク"). For those, answer with a read — use the `query` tool with `status:<state name>` — and do not propose a state change. For plain completion intent ("完了" / "done" / "終わった" / "クローズ"), prefer items_complete instead (it targets the default-for-close state without needing an id). items_patch does NOT change workflow state; items_patch(archived_at) is only for archive/unarchive, NOT for reopening a workflow state. For a vague "次にして" / "進めて" (advance) without a named state, first call workflow_transitions_list(from_state_id) to find the allowed next state, then move there.

Parameters 3 · input schema
ArgTypeRequired
item_ref string yes
status_definition_id string yes
reason string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "status_definition_id": {
      "type": "string",
      "description": "Target workflow state id (= workflow_states_list `id`). Must belong to this item's project workflow."
    },
    "reason": {
      "type": "string",
      "description": "Optional reason for the state change."
    }
  },
  "required": [
    "item_ref",
    "status_definition_id"
  ]
}
items_patch write

Patch attributes of an existing task (title / detail / due_date / due_time / start_date / priority / labels). Use only for items in the current thread context (pinned items or items the user explicitly mentioned by ref). Do NOT use this to change workflow state — use items_complete for completion, items_move_state for any other workflow state (e.g. "レビュー中"), or set the `archived_at` field via items_patch for archiving. To APPEND text to an existing detail (e.g. "追記して"), use detail_append instead of detail. To EDIT specific parts of an existing detail (e.g. "ここを直して"), use detail_edits with find/replace pairs. detail replaces the entire detail field; detail_append adds text to the end; detail_edits patches specific substrings. Only one of detail/detail_append/detail_edits can be used per call. For time-of-day on the due date (e.g. "9 時にして"), pass due_time as "HH:MM" in JST. Pass due_time=null to clear the time component (back to all-day). When changing due_date alone, the existing due_time is reset to null unless you pass due_time explicitly. Common state-transition vocabulary: "完了" / "done" / "終わった" / "クローズ" → use items_complete (NOT this tool). "レビュー中" / "ブロック中" / any named workflow state, and "再オープン" / "未完了に戻す" → use items_move_state (NOT this tool — it changes workflow state). "アーカイブ解除" / unarchive → items_patch(archived_at=null). "重複" / "duplicate" → if the workflow has a matching state use items_move_state; otherwise items_patch(labels=[...existing, "duplicate"]) — read labels first via items_get. "後回し" / "Someday" → items_patch(due_date=null). "延期" / "リスケ" → items_patch(due_date=<new YYYY-MM-DD>). "archive" / "アーカイブ" → items_patch(archived_at=<ISO 8601 now>). To set or change the PARENT of this item (e.g. "親を WORK#10 にして" / "Story を別の Epic 配下に移して"), pass `parent` as the new parent item_ref; pass parent=null to detach (make it top-level). Re-parenting replaces the existing parent (single-parent). For re-pointing MANY items at once, prefer relations_reassign. Note: unlike items_create, re-parenting via items_patch does NOT inherit the new parent's version/sprint/area.

Parameters 12 · input schema
ArgTypeRequired
item_ref string yes
title string no
detail string no
detail_append string no
detail_edits array no
due_date string no
due_time string no
start_date string no
priority string no
labels array no
archived_at string no
parent string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "title": {
      "type": "string"
    },
    "detail": {
      "type": "string",
      "description": "Replaces the entire detail/description (up to 32000 chars/call). Use detail_append to add text instead."
    },
    "detail_append": {
      "type": "string",
      "description": "Text to append to the existing detail (詳細欄), up to 32000 chars/call. Use this when the user says \"追記\" or \"詳細追加\", and to add long content in chunks (total detail is capped at 100000 chars)."
    },
    "detail_edits": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "find": {
            "type": "string",
            "description": "Exact substring to find in the current detail."
          },
          "replace": {
            "type": "string",
            "description": "Replacement text."
          },
          "occurrence": {
            "type": "string",
            "enum": [
              "first",
              "all"
            ],
            "description": "Which occurrences to replace. Default: first."
          }
        },
        "required": [
          "find",
          "replace"
        ]
      },
      "description": "Partial edit of detail by find-and-replace. Use when the user wants to change specific parts of the detail without rewriting the whole text. Each edit is applied in order; if any find string is not found, the entire operation is aborted (all-or-nothing). Mutually exclusive with detail and detail_append."
    },
    "due_date": {
      "type": "string",
      "format": "date",
      "description": "Due date in YYYY-MM-DD (JST). null to clear."
    },
    "due_time": {
      "type": "string",
      "description": "Time-of-day for the due date in HH:MM (JST, 24h). null to clear time (back to all-day). Note: changing due_date alone resets due_time to null unless you also pass due_time."
    },
    "start_date": {
      "type": "string",
      "format": "date"
    },
    "priority": {
      "type": "string",
      "enum": [
        "urgent",
        "high",
        "normal",
        "low"
      ]
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "archived_at": {
      "type": "string",
      "description": "ISO 8601 datetime to archive the task. Pass null to unarchive. Omit to leave unchanged."
    },
    "parent": {
      "type": "string",
      "description": "New parent item reference (e.g. \"WORK#10\") to set/re-parent this item under. Replaces any existing parent (single-parent). Pass null to detach (top-level). Omit to leave unchanged. A descendant cannot be set as parent (cycle is rejected). Does NOT inherit the parent's version/sprint/area."
    }
  },
  "required": [
    "item_ref"
  ]
}
items_set_custom_fields write

Set or clear custom field values on a task. Identify the task by ref (e.g. "WORK#42" or "#42") and pass `custom_fields` as a map of field_key → value (discover field_keys via project_custom_fields_list). v1.0 stores text values; pass an empty string or null to CLEAR a field. Unknown or deactivated field_keys are rejected. The field must belong to the task's own project. This only touches custom field values — use items_patch for built-in attributes.

Parameters 2 · input schema
ArgTypeRequired
item_ref string yes
custom_fields object yes
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item ref, e.g. \"WORK#42\" or \"#42\"."
    },
    "custom_fields": {
      "type": "object",
      "description": "Map of field_key → value (text in v1.0). Empty string or null clears the field. field_keys come from project_custom_fields_list."
    }
  },
  "required": [
    "item_ref",
    "custom_fields"
  ]
}
items_summarize write

Trigger background regeneration of an item's auto-summary (detail_summary) from its confirmed discussions. This is asynchronous: it returns immediately after enqueuing, and the refreshed summary appears later on the item (re-read the item with items_get to see detail_summary). The item's main detail body is NOT modified. Owner-only and opt-in: it works only when the owner has enabled auto-summarization. Use when the user explicitly asks to summarize / re-summarize / refresh the summary of a task from its discussion history.

Parameters 1 · input schema
ArgTypeRequired
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    }
  },
  "required": [
    "item_ref"
  ]
}
tasks_list read

Search and list the user's tasks with optional filters. Use this to find tasks by description before patching/completing them, or to answer questions about a task. Returns up to `limit` tasks with their ref, title, due_date, due_time (HH:MM JST or null for all-day), priority, status, `detail`, and `detail_truncated`. BODY: the response now includes `detail` (本文 / body / notes). Short bodies are returned in full. Long bodies are condensed into a snippet — centered around the `title_contains` keyword if it appears in the body, otherwise the head. When `detail_truncated: false`, you have the entire body — answer directly from it. When `detail_truncated: true`, the body was condensed; if the snippet does NOT contain the answer the user asked about (本文全体 / 詳細 / 例年 / 経緯 / 議事録 / participant lists / embedded numbers may live outside the snippet), you MUST follow up with `items_get` using the returned `ref` to read the full body BEFORE answering. Replying "情報はありませんでした" while the snippet is truncated and might be missing the answer is a contract violation. Recurring task templates (the generators themselves) are not returned here — use `task_templates_list` for those. For memos use `notes_list`, for calendar events use `events_list`. FINDING A TASK BY NAME: `title_contains` is a CONTIGUOUS substring (LIKE) match, so passing the user's whole sentence (e.g. "アクメ社から5万円返金してもらった") will NOT match a task titled "アクメ社に5万円返金依頼する" — the full phrase is not a contiguous substring. When the user references a task in natural language, decompose it and pass only the MOST DISTINCTIVE SHORT keyword (a proper noun / entity, e.g. "アクメ社"). If 0 results, shorten further, or use the `query` tool with mode "semantic" for meaning-based matching. Do not give up after one full-sentence miss. FILTERING BY WORKFLOW STATE (status / column): the `status` arg and `is:open|closed` here only express open vs closed — they CANNOT filter by a named workflow state (the kanban column, e.g. "Reviewing" / "検収待ち"). When the user asks which items are in a named state (e.g. 「レビュー待ちのは?」「レビュー中のタスク」), do NOT search the status word as a title with `title_contains`. Instead map the user's phrase to the actual workflow state name (from me_overview `vocabulary.statuses` / workflow_states_list, or the per-card state in the current-screen board/list context) and use the `query` tool with `status:<that name>` (e.g. `query status:reviewing is:open`). You may also pass a DSL query via `q`. These are the supported axes on this path — the canonical values below are authoritative, so build the query from them rather than guessing syntax from memory or from prior items: - `is:` 状態 — open / done / closed / overdue / wip / pending / unscheduled / archived / mine / unestimated / estimated - `priority:` 優先度 — urgent / high / normal / low - `due:` 期日 — today / tomorrow / yesterday / overdue_today / this_week / anytime / someday / YYYY-MM-DD / 範囲(..) / 比較(>=,<=) - `completed:` 完了日 — today / tomorrow / yesterday / overdue_today / this_week / anytime / someday / YYYY-MM-DD / 範囲(..) / 比較(>=,<=) - `status:` ステータス — カスタムステータス名 (例: status:"In Review") - `project:` プロジェクト — プロジェクトキー / ID - `sprint:` スプリント — @current / @next / @none - `agile_kind:` 作業種別 — epic / story / task / bug / chore / @none - `estimate:` 見積もり — 見積もり値 (estimate:>3 / estimate:1..5 / estimate:@none で未見積もり)。Items ビュー専用。 - `area:` 領域 — 領域パス (例: area:API/Auth。カンマで OR / area:@none で未分類) - `version:` バージョン — バージョン (version:バージョン名 / version:@none で未計画)。Items ビュー専用。 - `parent:` 親 — 親アイテム (parent:#158 で #158 の直下の子)。Items ビュー専用。 - `epic:` 配下(推移) — 配下すべて (epic:#158 で #158 の子孫を再帰的に)。Items ビュー専用。 - `cf:` カスタムフィールド — カスタムフィールド (cf:<field_key>:<value>)。Board Queries / Items ビュー専用。 NEGATION: prefix any axis with `-` to exclude (e.g. `-area:Product/Search`, `-agile_kind:epic`, `-epic:#158`). PRESENCE: `has:X` = items that HAVE attribute X; `-has:X` = items MISSING it, where X ∈ {due, sprint, area, version, estimate, agile_kind, parent, assignee}. Common "unassigned/empty" queries: スプリント未割当(バックログ)=`-has:sprint`, 期日なし/未設定=`-has:due` (or `due:none`), 領域未分類=`-has:area`, 未計画=`-has:version`, 未見積もり=`is:unestimated` (= `-has:estimate`), 担当者なし=`-has:assignee`. DUE NUANCE: `due:none` / `due:anytime` mean the task has NO due date set; `due:someday` means it is explicitly filed as 「いつかやる」(someday). These are DIFFERENT — do not conflate them. When the user says 「期日なし」/「期日未設定」 use `-has:due`/`due:none`, NOT `due:someday`. Do NOT express "no due date" with `due_before`/`due_after` — those cannot match a NULL due date and will silently miss every undated task. HIERARCHY: `parent:<ref>` matches DIRECT children (one level); `epic:<ref>` matches the WHOLE subtree (transitive, grandchildren included). `<ref>` is an item ref like `#158` / `INBOX#158` / `158` (e.g. `epic:#158 is:open`, `parent:#158`). DSL filters are merged with the explicit args (explicit args take precedence). COMPLETION DATE: to find or count tasks the user actually **completed/finished** on a date, use the `completed:` axis in `q` (e.g. `completed:today`, `completed:>=2026-06-01`, `completed:2026-05-01..2026-05-31`). It filters by when the task was finished (completion history), which is DIFFERENT from `due:` (the deadline). NEVER answer "how many did I finish today / 今日完了したタスク" with `due:today` — a task due today may be unfinished, and a task finished today may have had a different (or no) due date. Use `completed:today` for completion questions. PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, the returned slice is incomplete — narrow the filter (`q`, `status`, `project_key`, `due_before` / `due_after`, `title_contains`) and re-query, or warn the user that the listing is partial. Do not claim the returned set is exhaustive while `has_more` is true. SORTING: pass `sort` + `order` to control ordering. To get the OLDEST task(s) by registration date (「一番古いタスク」), use `sort:"created"`, `order:"asc"`, `limit:1`. For the most recently created use `sort:"created"` with `order:"desc"`. `sort:"updated"` orders by last-modified time. Omit `sort` for the default due-date ordering. Do NOT try to infer creation order from ref numbers.

Parameters 15 · input schema
ArgTypeRequired
project_key string no
status string no
due_before string no
due_after string no
title_contains string no
q string no
sort string no
order string no
limit number no
include_custom_fields boolean no
include_relations boolean no
include_agile boolean no
include_area boolean no
include_attachments boolean no
include_custom_numbers boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Filter by project key (e.g. \"WORK\"). Omit for all projects."
    },
    "status": {
      "type": "string",
      "enum": [
        "open",
        "closed"
      ],
      "description": "Filter by open/closed status. Omit for all."
    },
    "due_before": {
      "type": "string",
      "format": "date",
      "description": "Return tasks due on or before this date (YYYY-MM-DD)."
    },
    "due_after": {
      "type": "string",
      "format": "date",
      "description": "Return tasks due on or after this date (YYYY-MM-DD)."
    },
    "title_contains": {
      "type": "string",
      "description": "Filter tasks whose title contains this string (case-insensitive)."
    },
    "q": {
      "type": "string",
      "description": "DSL query string (e.g. \"is:open priority:p1 due:>=today\"). Merged with explicit args."
    },
    "sort": {
      "type": "string",
      "enum": [
        "due",
        "created",
        "updated",
        "priority"
      ],
      "description": "Order field. \"due\" (default) = by due date; \"created\" = by registration date; \"updated\" = by last-modified; \"priority\" = by priority. For 「一番古いタスク」 use \"created\" with order \"asc\"."
    },
    "order": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "description": "Direction for `sort` (applies to created/updated). \"asc\" = oldest first, \"desc\" = newest first. Default \"desc\". Ignored for due/priority."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-20, default 10)."
    },
    "include_custom_fields": {
      "type": "boolean",
      "description": "Opt-in: when true, each returned task includes its project-defined custom field values (`custom_fields`: array of { field_key, label, field_type, value }). Default false (omitted) to keep the response lightweight. Use this when the user asks about a custom field (e.g. a per-project \"priority_rank\" / \"ADR\" field) so you can answer without a follow-up items_get per task."
    },
    "include_relations": {
      "type": "boolean",
      "description": "Opt-in: include the parent link (parent_ref / parent_title / parent_kind) so you can see an item's hierarchy without a follow-up call. Default false (omitted)."
    },
    "include_agile": {
      "type": "boolean",
      "description": "Opt-in: include agile placement (sprint_id / sprint_name / version_id / version_name / resolved_field_policy). Note estimate / agile_kind are already always included. Default false (omitted)."
    },
    "include_area": {
      "type": "boolean",
      "description": "Opt-in: include the assigned area (area_id / area_path, e.g. \"Product/Search\"). Default false (omitted)."
    },
    "include_attachments": {
      "type": "boolean",
      "description": "Opt-in: include attachment_count (number of non-deleted attachments). Default false (omitted)."
    },
    "include_custom_numbers": {
      "type": "boolean",
      "description": "Opt-in: include custom series refs (custom_numbers: array of { series_key, display_ref, number }, e.g. \"INV-0012\"). Default false (omitted)."
    }
  }
}

Notes 2

notes_create write

Create a new note (type=note item) in the user's knowledge base. Use this when the user wants to record information, ideas, or reference material that is NOT actionable. For actionable items the user wants to track and complete, use items_create instead. project_key is REQUIRED — pass the project to create the note in. There is NO implicit default: to create in the user's Inbox, pass project_key:"INBOX" explicitly. Returns `{ itemId, ref }`. Use `ref` (e.g. `INBOX#178`) for any user-facing reference; `itemId` is an internal UUID for relation / FK lookups only.

Parameters 4 · input schema
ArgTypeRequired
project_key string yes
title string yes
body string no
labels array no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Required. Existing project key to create the note in. Pass \"INBOX\" for the Inbox project (no implicit default)."
    },
    "title": {
      "type": "string",
      "description": "Short heading shown in lists (1-200 chars)."
    },
    "body": {
      "type": "string",
      "description": "Note body / content (long-form Markdown supported). Strongly recommended; the note is mostly empty without it."
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional labels."
    }
  },
  "required": [
    "project_key",
    "title"
  ]
}
notes_list read

Search and list the user's notes with optional filters. Notes do not have due dates or open/closed status — they are free-form knowledge entries. Use this to find a note by description, or to answer questions about a note's contents. Returns up to `limit` notes with their ref, title, project_key, `detail` (body), and `detail_truncated`. BODY: the response includes the note body (`detail`). Short notes are returned in full (`detail_truncated: false`). Long notes are condensed into a snippet centered on the `title_contains` keyword (or head if the keyword is not in the body). When `detail_truncated: false`, you have the entire note — answer directly from `detail`. When `detail_truncated: true` and the snippet does NOT contain the answer the user asked about, you MUST follow up with `items_get` using the returned `ref` to read the full body BEFORE answering. Replying about a note based on title alone (without consulting `detail`) is almost always wrong — the answer lives in the body. For tasks use `tasks_list`, for calendar events use `events_list`. You may also pass a DSL query via `q` (e.g. "project:WORK 議事録"). DSL filters are merged with the explicit args (explicit args take precedence). PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, narrow the filter (`q`, `project_key`, `title_contains`) and re-query, or warn the user that the listing is partial. Do not claim the returned set is exhaustive while `has_more` is true.

Parameters 10 · input schema
ArgTypeRequired
project_key string no
title_contains string no
q string no
limit number no
include_custom_fields boolean no
include_relations boolean no
include_agile boolean no
include_area boolean no
include_attachments boolean no
include_custom_numbers boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Filter by project key (e.g. \"WORK\"). Omit for all projects."
    },
    "title_contains": {
      "type": "string",
      "description": "Filter notes whose title contains this string (case-insensitive)."
    },
    "q": {
      "type": "string",
      "description": "DSL query string. Merged with explicit args."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-20, default 10)."
    },
    "include_custom_fields": {
      "type": "boolean",
      "description": "Opt-in: when true, each returned note includes its project-defined custom field values (`custom_fields`: array of { field_key, label, field_type, value }). Default false (omitted) to keep the response lightweight."
    },
    "include_relations": {
      "type": "boolean",
      "description": "Opt-in: include the parent link (parent_ref / parent_title / parent_kind) so you can see an item's hierarchy without a follow-up call. Default false (omitted)."
    },
    "include_agile": {
      "type": "boolean",
      "description": "Opt-in: include agile placement (sprint_id / sprint_name / version_id / version_name / resolved_field_policy). Note estimate / agile_kind are already always included. Default false (omitted)."
    },
    "include_area": {
      "type": "boolean",
      "description": "Opt-in: include the assigned area (area_id / area_path, e.g. \"Product/Search\"). Default false (omitted)."
    },
    "include_attachments": {
      "type": "boolean",
      "description": "Opt-in: include attachment_count (number of non-deleted attachments). Default false (omitted)."
    },
    "include_custom_numbers": {
      "type": "boolean",
      "description": "Opt-in: include custom series refs (custom_numbers: array of { series_key, display_ref, number }, e.g. \"INV-0012\"). Default false (omitted)."
    }
  }
}

Calendar Events 1

events_list read

Search and list the user's calendar events with optional filters. Calendar events have due_date (event date) and due_time (start time, JST). Use this to find an event by description before patching it, or to answer questions about an event. Returns up to `limit` events with their ref, title, due_date, due_time, priority, status, `detail` (body), and `detail_truncated`. BODY: the response includes the event body (`detail`). Short bodies are returned in full. Long bodies are condensed into a snippet — centered on the `title_contains` keyword if present in the body, otherwise the head. When `detail_truncated: false`, you have the entire body — answer directly. When `detail_truncated: true` and the snippet does NOT contain the answer the user asked about (attendee counts, agenda, "例年〜", "何人来る", embedded numbers may live outside the snippet), you MUST follow up with `items_get` using the returned `ref` to read the full body BEFORE answering. Replying "情報はありませんでした" while the snippet is truncated and might be missing the answer is a contract violation. For tasks use `tasks_list`, for memos use `notes_list`. Returns an error if the user has not enabled the calendar feature. You may also pass a DSL query via `q` (e.g. "is:open due:this_week"). DSL filters are merged with the explicit args (explicit args take precedence). COMPLETION DATE: to find events the user **completed/finished** on a date, use `completed:` in `q` (e.g. `completed:today`, `completed:>=2026-06-01`) — this is the completion time, NOT `due:` (the event date). PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, narrow the filter (`q`, `status`, `project_key`, `due_before` / `due_after`, `title_contains`) and re-query, or warn the user that the listing is partial. Do not claim the returned set is exhaustive while `has_more` is true.

Parameters 13 · input schema
ArgTypeRequired
project_key string no
status string no
due_before string no
due_after string no
title_contains string no
q string no
limit number no
include_custom_fields boolean no
include_relations boolean no
include_agile boolean no
include_area boolean no
include_attachments boolean no
include_custom_numbers boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Filter by project key (e.g. \"WORK\"). Omit for all projects."
    },
    "status": {
      "type": "string",
      "enum": [
        "open",
        "closed"
      ],
      "description": "Filter by open/closed status. Omit for all."
    },
    "due_before": {
      "type": "string",
      "format": "date",
      "description": "Return events on or before this date (YYYY-MM-DD)."
    },
    "due_after": {
      "type": "string",
      "format": "date",
      "description": "Return events on or after this date (YYYY-MM-DD)."
    },
    "title_contains": {
      "type": "string",
      "description": "Filter events whose title contains this string (case-insensitive)."
    },
    "q": {
      "type": "string",
      "description": "DSL query string. Merged with explicit args."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-20, default 10)."
    },
    "include_custom_fields": {
      "type": "boolean",
      "description": "Opt-in: when true, each returned event includes its project-defined custom field values (`custom_fields`: array of { field_key, label, field_type, value }). Default false (omitted) to keep the response lightweight."
    },
    "include_relations": {
      "type": "boolean",
      "description": "Opt-in: include the parent link (parent_ref / parent_title / parent_kind) so you can see an item's hierarchy without a follow-up call. Default false (omitted)."
    },
    "include_agile": {
      "type": "boolean",
      "description": "Opt-in: include agile placement (sprint_id / sprint_name / version_id / version_name / resolved_field_policy). Note estimate / agile_kind are already always included. Default false (omitted)."
    },
    "include_area": {
      "type": "boolean",
      "description": "Opt-in: include the assigned area (area_id / area_path, e.g. \"Product/Search\"). Default false (omitted)."
    },
    "include_attachments": {
      "type": "boolean",
      "description": "Opt-in: include attachment_count (number of non-deleted attachments). Default false (omitted)."
    },
    "include_custom_numbers": {
      "type": "boolean",
      "description": "Opt-in: include custom series refs (custom_numbers: array of { series_key, display_ref, number }, e.g. \"INV-0012\"). Default false (omitted)."
    }
  }
}

Attachments 3

attachments_download read

Fetch the binary content of an attachment. Returns inline base64 image content when the file is a small image (<= 5MB), otherwise returns a short-lived signed download URL (10 min TTL) that the client can fetch. Always includes attachment metadata as text content alongside the binary/URL. Read-only.

Parameters 1 · input schema
ArgTypeRequired
attachment_id string yes
json
{
  "type": "object",
  "properties": {
    "attachment_id": {
      "type": "string",
      "description": "UUID of the attachment."
    }
  },
  "required": [
    "attachment_id"
  ]
}
attachments_get read

Fetch metadata for a single attachment by attachment_id. Read-only. Use this when the user references a specific file the assistant has not yet seen in the conversation.

Parameters 1 · input schema
ArgTypeRequired
attachment_id string yes
json
{
  "type": "object",
  "properties": {
    "attachment_id": {
      "type": "string",
      "description": "UUID of the attachment."
    }
  },
  "required": [
    "attachment_id"
  ]
}
attachments_list read

List file attachments on a specific item / discussion / chat message. Use this to enumerate prior images / PDFs / documents the user uploaded for reference. Read-only. Returns metadata only (filename / mime_type / byte_size / created_at). PAGINATION: internally capped at 50 attachments per call. Response includes `has_more: boolean`; if true, earlier attachments are not returned.

Parameters 3 · input schema
ArgTypeRequired
parent_kind string yes
parent_ref string no
parent_id string no
json
{
  "type": "object",
  "properties": {
    "parent_kind": {
      "type": "string",
      "enum": [
        "item",
        "discussion",
        "ai_chat_message"
      ],
      "description": "Parent resource kind."
    },
    "parent_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed. Required when parent_kind=\"item\". For discussion / ai_chat_message use parent_id instead."
    },
    "parent_id": {
      "type": "string",
      "description": "UUID parent id (required when parent_kind != \"item\")."
    }
  },
  "required": [
    "parent_kind"
  ]
}

Custom Numbering 4

custom_numbers_assign write

Attach an item to a named series. Call custom_sequences_list first to get the series `key`. item_ref accepts the main ref ("WORK#42" / "#42") or a display_ref. Two modes: (1) NUMBERED (default) — assigns a number; omit `number` for auto-numbering (recommended), or pass `number` to set a specific value. The display_ref (e.g. "INV-0012") is fixed at assignment time. (2) LINK-ONLY (`link_only: true`) — attaches the item to the series WITHOUT a number (membership only); `number` must NOT be passed. If the item is already linked number-less and you call this WITHOUT link_only, it is upgraded to a number in place. One item can hold at most one link (numbered or number-less) per series. FROZEN SERIES: if the series is frozen (custom_sequences_list reports frozen:true / freeze_level >= 1) it is a LEGACY, read-only counter and this call is rejected with a "series_frozen" conflict. Do NOT use this tool to file new work into a frozen series — create the item with items_create instead (it receives the built-in item_number automatically). Only assign into a series the owner is actively numbering into.

Parameters 4 · input schema
ArgTypeRequired
item_ref string yes
series_key string yes
number number no
link_only boolean no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item ref (\"WORK#42\" / \"#42\") or display_ref (\"INV-0012\")."
    },
    "series_key": {
      "type": "string",
      "description": "Series key from custom_sequences_list."
    },
    "number": {
      "type": "number",
      "description": "Optional explicit number. Omit for auto-numbering. Do not pass with link_only."
    },
    "link_only": {
      "type": "boolean",
      "description": "Attach without a number (membership only). number must be omitted."
    }
  },
  "required": [
    "item_ref",
    "series_key"
  ]
}
custom_numbers_unassign write destructive

Remove a custom number of a given series from an item. The number becomes a gap and is not reused (same policy as item_number). item_ref accepts the main ref or a display_ref. A fully-frozen series (freeze_level 3) rejects unassign too with a "series_frozen" conflict; lower freeze levels still allow removal.

Parameters 2 · input schema
ArgTypeRequired
item_ref string yes
series_key string yes
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item ref or display_ref."
    },
    "series_key": {
      "type": "string",
      "description": "Series key whose number to remove."
    }
  },
  "required": [
    "item_ref",
    "series_key"
  ]
}
custom_sequences_list read

List the custom numbering series the owner has defined. Each series is an independent named counter (e.g. stub numbers "S-", ticket numbers) separate from the built-in item_number. Returns key, label, prefix, strategy_kind for each series, plus a read-only peek at the counter WITHOUT consuming it: next_value / next_ref (the value auto-assign would issue next, and its formatted display_ref preview) and current_value / current_ref (the most recently issued value in the current period, null if none yet). For date-reset series these reflect today's period (current_value resets per day). Use this to know the next stub number before assigning. Also returns freeze_level: 0=none, 1=auto-numbering stopped (manual assign still allowed), 2=new numbers blocked (only re-using an already-issued number for a move, or unassigning, is allowed), 3=fully frozen (read-only). The derived `frozen` flag is true whenever freeze_level >= 1. IMPORTANT: a frozen series is a LEGACY / read-only counter — do NOT route new work into it. To file a new item, just create it with items_create (it gets the built-in item_number automatically); reach for custom_numbers_assign ONLY for a non-frozen series the owner is actively numbering into. A blocked op returns a "series_frozen" conflict. Use the `key` with custom_number_assign / custom_number_unassign. EXHAUSTIVE: returns all series for the owner — no pagination.

input schema
json
{
  "type": "object",
  "properties": {}
}
item_custom_numbers_list read

List the custom numbers / series links of a specific item, across all series. Returns series_key, series_label, number, display_ref for each. A number-less link (membership only) has number=null and display_ref=null. item_ref accepts the main ref ("PROJ#42" / "#42") or a custom display_ref ("INV-0012").

Parameters 1 · input schema
ArgTypeRequired
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item ref. Main ref (\"WORK#42\" / \"#42\") or custom display_ref (\"INV-0012\")."
    }
  },
  "required": [
    "item_ref"
  ]
}

Links & Conversation 14

Relations 5

relations_bulk_create write destructive

Link multiple existing tasks to ONE counterpart task in a single call (max 25). Use ONLY when the user explicitly wants to attach several items to the same target (e.g. "これらの子タスクを #50 の下にぶら下げて"). For a single link use relations_create. Direction follows relations_create (source→target). member_role="source" (default) makes each member_refs item the source and counterpart_ref the target — correct for attaching children to a parent with relation_type="parent". Best-effort result: created = new links, already_linked = pairs that already existed (NOT errors — created=0 with already_linked>0 means everything was already linked, a SUCCESS no-op). This always requires explicit user confirmation.

Parameters 4 · input schema
ArgTypeRequired
member_refs array yes
counterpart_ref string yes
relation_type string yes
member_role string no
json
{
  "type": "object",
  "properties": {
    "member_refs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of 2-25 item refs like [\"#42\",\"WORK#43\"] (project prefix optional). Each is linked to counterpart_ref."
    },
    "counterpart_ref": {
      "type": "string",
      "description": "The single item every member is linked to, e.g. \"#50\" (prefix optional). For parent hierarchy this is the parent."
    },
    "relation_type": {
      "type": "string",
      "enum": [
        "parent",
        "child",
        "reference",
        "duplicate",
        "generated_from",
        "enriches",
        "previous_instance"
      ],
      "description": "Kind of relation applied to every pair."
    },
    "member_role": {
      "type": "string",
      "enum": [
        "source",
        "target"
      ],
      "description": "Whether each member_refs item is the source (default) or target of the relation. Keep \"source\" for attaching children to a parent with relation_type=\"parent\"."
    }
  },
  "required": [
    "member_refs",
    "counterpart_ref",
    "relation_type"
  ]
}
relations_create write

Create a relation between two existing tasks. Use when the user wants to link tasks (e.g. "親子関係", "参照", "重複"). Both source_item_ref and target_item_ref must already exist. See relation_type enum in the schema for available kinds. For linking MANY items to one target in a single call (e.g. "これらの子を #50 の下に一括で") use relations_bulk_create; to MOVE/REPARENT existing links from one item to another ("付け替え" / "親を A から B に変えて") use relations_reassign instead of create+delete.

Parameters 3 · input schema
ArgTypeRequired
source_item_ref string yes
target_item_ref string yes
relation_type string yes
json
{
  "type": "object",
  "properties": {
    "source_item_ref": {
      "type": "string",
      "description": "Source item reference, e.g. \"#42\" (prefix optional) or \"WORK#42\"."
    },
    "target_item_ref": {
      "type": "string",
      "description": "Target item reference, e.g. \"#3\" (prefix optional) or \"INBOX#3\"."
    },
    "relation_type": {
      "type": "string",
      "enum": [
        "parent",
        "child",
        "reference",
        "duplicate",
        "generated_from",
        "enriches",
        "previous_instance"
      ],
      "description": "Kind of relation."
    }
  },
  "required": [
    "source_item_ref",
    "target_item_ref",
    "relation_type"
  ]
}
relations_delete write destructive

Delete an existing relation by relation_id. This always requires explicit user confirmation. Look up relation_id with relations_list before calling this. To RE-POINT links from one counterpart to another across several items ("付け替え" / reparent), prefer relations_reassign (it detaches + re-attaches in one call) over delete-then-create.

Parameters 1 · input schema
ArgTypeRequired
relation_id string yes
json
{
  "type": "object",
  "properties": {
    "relation_id": {
      "type": "string",
      "description": "Relation UUID (from relations_list)."
    }
  },
  "required": [
    "relation_id"
  ]
}
relations_list read

List relations attached to a specific item (both source and target). Use this BEFORE relations_delete to find the relation_id, or to check whether two items are already linked before relations_create. EXHAUSTIVE: returns all relations attached to the item — no pagination.

Parameters 1 · input schema
ArgTypeRequired
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    }
  },
  "required": [
    "item_ref"
  ]
}
relations_reassign write destructive

Reassign a relation across multiple items in one call (max 25): detach each member from from_ref and attach it to to_ref under the same relation_type. Use when the user wants to re-point several links at once (e.g. "#10〜#15 の親を #50 から #60 に付け替えて"). Omit from_ref to only attach (to_ref), omit to_ref to only detach (from_ref). Direction follows relations_bulk_create: member_role="source" (default) makes each member the source and from_ref/to_ref the target — correct for reparenting children with relation_type="parent". Result counters are broken down (NOT collapsed into one "skipped"): detached = old links removed, attached = new links created, from_not_found = members that had no link to from_ref (nothing to detach), already_attached = members already linked to to_ref. IMPORTANT: detached=0 AND attached=0 with from_not_found/already_attached > 0 means the members were ALREADY in the target state — this is an idempotent no-op / SUCCESS, NOT an argument error (do not retry with different args; call relations_list on a member to confirm the current parent if unsure). This always requires explicit user confirmation.

Parameters 5 · input schema
ArgTypeRequired
member_refs array yes
relation_type string yes
from_ref string no
to_ref string no
member_role string no
json
{
  "type": "object",
  "properties": {
    "member_refs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Array of 1-25 item refs being re-pointed (e.g. the children)."
    },
    "relation_type": {
      "type": "string",
      "enum": [
        "parent",
        "child",
        "reference",
        "duplicate",
        "generated_from",
        "enriches",
        "previous_instance"
      ],
      "description": "Kind of relation being reassigned."
    },
    "from_ref": {
      "type": "string",
      "description": "Current counterpart to detach from (e.g. the old parent). Omit to only attach."
    },
    "to_ref": {
      "type": "string",
      "description": "New counterpart to attach to (e.g. the new parent). Omit to only detach."
    },
    "member_role": {
      "type": "string",
      "enum": [
        "source",
        "target"
      ],
      "description": "Whether each member is the source (default) or target of the relation. Keep \"source\" for relation_type=\"parent\"."
    }
  },
  "required": [
    "member_refs",
    "relation_type"
  ]
}

Discussions 4

discussions_create write

Post a new discussion entry (decision / fact / progress note) on an existing task. Use this when the user wants to record a finding, decision, or progress note that should persist on the task itself rather than only in the chat thread. kind hints how the entry should be displayed (decision / fact / progress).

Parameters 3 · input schema
ArgTypeRequired
item_ref string yes
body string yes
kind string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "body": {
      "type": "string",
      "description": "Discussion body (Markdown, required; long-form supported)."
    },
    "kind": {
      "type": "string",
      "enum": [
        "decision",
        "fact",
        "progress"
      ],
      "description": "Optional kind tag."
    }
  },
  "required": [
    "item_ref",
    "body"
  ]
}
discussions_delete write destructive

Delete a discussion entry. Only the original author or the project owner can delete. Server enforces. Always requires explicit user confirmation (destructive).

Parameters 1 · input schema
ArgTypeRequired
discussion_id string yes
json
{
  "type": "object",
  "properties": {
    "discussion_id": {
      "type": "string",
      "description": "Discussion id from discussions_list."
    }
  },
  "required": [
    "discussion_id"
  ]
}
discussions_list read

List discussion entries (decisions / facts / progress notes) attached to a specific item. Use this to inspect prior context the user recorded on a task before responding or proposing changes. PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, the returned slice is the most recent `limit` entries; older entries are truncated. Either raise `limit` (max 30) or warn the user that earlier discussions are not visible.

Parameters 2 · input schema
ArgTypeRequired
item_ref string yes
limit number no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-30, default 10)."
    }
  },
  "required": [
    "item_ref"
  ]
}
discussions_patch write

Update the body of an existing discussion entry. Only the user who originally posted the discussion can edit it (server enforces). Use when the user explicitly asks to revise a recorded decision/fact/progress note. discussion_id must come from a prior discussions_list call.

Parameters 2 · input schema
ArgTypeRequired
discussion_id string yes
body string yes
json
{
  "type": "object",
  "properties": {
    "discussion_id": {
      "type": "string",
      "description": "Discussion id from discussions_list."
    },
    "body": {
      "type": "string",
      "description": "New body (Markdown; long-form supported)."
    }
  },
  "required": [
    "discussion_id",
    "body"
  ]
}

Reminders 5

reminders_create write

Create a reminder for an existing task. Provide either lead_time_minutes (offset before due_date; requires due_date set) or remind_at (absolute ISO 8601 timestamp). Exactly one is required.

Parameters 3 · input schema
ArgTypeRequired
item_ref string yes
lead_time_minutes number no
remind_at string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Target item. Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "lead_time_minutes": {
      "type": "number",
      "description": "Minutes before due_date. Item must have due_date set."
    },
    "remind_at": {
      "type": "string",
      "description": "Absolute ISO 8601 timestamp."
    }
  },
  "required": [
    "item_ref"
  ]
}
reminders_delete write destructive

Delete a reminder by reminder_id. This always requires explicit user confirmation. Look up reminder_id with reminders_list before calling this.

Parameters 1 · input schema
ArgTypeRequired
reminder_id string yes
json
{
  "type": "object",
  "properties": {
    "reminder_id": {
      "type": "string"
    }
  },
  "required": [
    "reminder_id"
  ]
}
reminders_list read

List pending reminders for a specific item. Use this BEFORE reminders_patch / reminders_delete / reminders_snooze to find reminder_id. EXHAUSTIVE: returns all pending reminders attached to the item — no pagination.

Parameters 1 · input schema
ArgTypeRequired
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    }
  },
  "required": [
    "item_ref"
  ]
}
reminders_patch write

Update an existing reminder by reminder_id (lead_time_minutes / remind_at / status). Look up reminder_id with reminders_list before calling this.

Parameters 4 · input schema
ArgTypeRequired
reminder_id string yes
lead_time_minutes number no
remind_at string no
status string no
json
{
  "type": "object",
  "properties": {
    "reminder_id": {
      "type": "string"
    },
    "lead_time_minutes": {
      "type": "number",
      "description": "Pass null to switch to absolute remind_at."
    },
    "remind_at": {
      "type": "string",
      "description": "Absolute ISO 8601 timestamp."
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "sent",
        "dismissed"
      ]
    }
  },
  "required": [
    "reminder_id"
  ]
}
reminders_snooze write

Snooze a reminder by snooze_minutes (push remind_at into the future). Look up reminder_id with reminders_list before calling this.

Parameters 2 · input schema
ArgTypeRequired
reminder_id string yes
snooze_minutes number yes
json
{
  "type": "object",
  "properties": {
    "reminder_id": {
      "type": "string"
    },
    "snooze_minutes": {
      "type": "number",
      "description": "Minutes to push remind_at into the future."
    }
  },
  "required": [
    "reminder_id",
    "snooze_minutes"
  ]
}

Agile 20

Sprints 10

sprints_add_item write

Assign an item to a sprint. `sprint` is the sprint name or path; `item_ref` is the item reference (e.g. "WORK#42" or "#42"). The item must belong to the same project as the sprint. An active sprint rejects items already assigned to another active sprint (1 item = 0..1 active sprint).

Parameters 3 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path."
    },
    "item_ref": {
      "type": "string",
      "description": "Item reference (e.g. \"WORK#42\" or \"#42\")."
    }
  },
  "required": [
    "project_key",
    "sprint",
    "item_ref"
  ]
}
sprints_close write destructive

Close (finish) a sprint with a close review. `sprint` is the sprint name or path. Provide `dispositions` for unfinished items: "next_sprint" carries the item over to `next_sprint` (its name/path — required when any disposition is "next_sprint"), "backlog"/"split"/"drop" just unassign. Items without a disposition are dropped (unassigned). Closing snapshots the sprint as canonical velocity. Irreversible lifecycle change.

Parameters 4 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
dispositions array no
next_sprint string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path."
    },
    "dispositions": {
      "type": "array",
      "description": "Per unfinished-item handling. Omit for none (all unfinished items dropped).",
      "items": {
        "type": "object",
        "properties": {
          "item_ref": {
            "type": "string",
            "description": "Item reference (e.g. \"WORK#42\")."
          },
          "disposition": {
            "type": "string",
            "enum": [
              "next_sprint",
              "backlog",
              "split",
              "drop"
            ],
            "description": "How to handle this item on close."
          }
        },
        "required": [
          "item_ref",
          "disposition"
        ]
      }
    },
    "next_sprint": {
      "type": "string",
      "description": "Carry-over target sprint name / path. Required if any disposition is \"next_sprint\"."
    }
  },
  "required": [
    "project_key",
    "sprint"
  ]
}
sprints_create write

Create a sprint (iteration) in a project. Requires the project to have Sprint management enabled (agile.sprints). The sprint is referenced later by its `name` within the project — do NOT create it as a task/note. Pass `parent` (an existing sprint name or path, e.g. "Q3") to nest under a container sprint; omit / null for a root sprint (max depth 3). `status` defaults to "planning"; pass "active" to start it immediately (only one active sprint per project). Dates are YYYY-MM-DD. `capacity` is an optional numeric target.

Parameters 8 · input schema
ArgTypeRequired
project_key string yes
name string yes
parent string no
goal string no
start_date string no
end_date string no
capacity number no
status string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "name": {
      "type": "string",
      "description": "Sprint name (max 120 chars)."
    },
    "parent": {
      "type": "string",
      "description": "Optional parent sprint name or path (e.g. \"Q3\" or \"Q3/Sprint 1\"). Omit / null for a root sprint."
    },
    "goal": {
      "type": "string",
      "description": "Optional sprint goal."
    },
    "start_date": {
      "type": "string",
      "format": "date",
      "description": "Optional start date (YYYY-MM-DD)."
    },
    "end_date": {
      "type": "string",
      "format": "date",
      "description": "Optional end date (YYYY-MM-DD)."
    },
    "capacity": {
      "type": "number",
      "description": "Optional numeric capacity target."
    },
    "status": {
      "type": "string",
      "enum": [
        "planning",
        "active",
        "closed"
      ],
      "description": "Lifecycle status. Defaults to \"planning\". \"active\" starts the sprint."
    }
  },
  "required": [
    "project_key",
    "name"
  ]
}
sprints_delete write destructive

Delete a sprint by `sprint` (name or path within the project). Irreversible. Item assignments to the sprint are removed but the items themselves are kept. A sprint that still has child sprints cannot be deleted (move / delete the children first).

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path."
    }
  },
  "required": [
    "project_key",
    "sprint"
  ]
}
sprints_handoff write destructive

Hand off from the active sprint to the next one in a single atomic step: close (finish) the currently active `sprint` AND activate `next_sprint` (its name/path — must be a planning, leaf sprint) at once. Use this for the Review/Retro overlap where the next sprint should start while the previous one is being closed. `dispositions` handle unfinished items: "next_sprint" carries the item over to `next_sprint`, "backlog"/"split"/"drop" just unassign. Closing snapshots the old sprint as canonical velocity and the new sprint's start date is set to today. Irreversible lifecycle change.

Parameters 4 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
next_sprint string yes
dispositions array no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Currently active sprint name or path (handed off / closed)."
    },
    "next_sprint": {
      "type": "string",
      "description": "Next sprint name / path to activate. Must be a planning, leaf (no children) sprint."
    },
    "dispositions": {
      "type": "array",
      "description": "Per unfinished-item handling. Omit for none (all unfinished items dropped).",
      "items": {
        "type": "object",
        "properties": {
          "item_ref": {
            "type": "string",
            "description": "Item reference (e.g. \"WORK#42\")."
          },
          "disposition": {
            "type": "string",
            "enum": [
              "next_sprint",
              "backlog",
              "split",
              "drop"
            ],
            "description": "How to handle this item on handoff (\"next_sprint\" carries it to next_sprint)."
          }
        },
        "required": [
          "item_ref",
          "disposition"
        ]
      }
    }
  },
  "required": [
    "project_key",
    "sprint",
    "next_sprint"
  ]
}
sprints_list read

Read the agile Sprint context for a project so you can answer questions like 「このスプリントのリスクは?」「今日は何に集中すべき?」「積み残しはどれくらい?」. Pass `project_key` to get all Sprints (planning / active / closed) of that project. Omit `project_key` to get the currently ACTIVE Sprint across all of the user's projects. Each Sprint returns: status, goal, start_date / end_date, `capacity`, `item_count`, `parent_id` (parent Sprint / container id; null = root) and `path` (materialized path e.g. "2026Q3/Sprint 1") so you can see the iteration-path hierarchy — a container (Release / quarter) rolls up its descendant Sprints, and its `item_count` / `commitment` / `remaining` already include the children; `open_count` (未完了件数), `unestimated_count` (見積もり未設定の割当件数), `carry_over_candidate_count` (= open_count; close 時に carry-over 候補となる件数), `commitment` (投入見積もり合計), `remaining` (残見積もり), and `over_capacity` (boolean). IMPORTANT: `commitment` / `remaining` are numbers ONLY when the project's estimate unit is numeric (sp / hours, indicated by `numeric: true`); for t-shirt sizing or no unit they are null — do not invent point totals then. A Sprint is at risk when `over_capacity` is true, `unestimated_count` is high (planning is incomplete), or `remaining` is large relative to time left (compare against `end_date`). This tool returns Sprint-level aggregates only; to inspect the actual tasks in a Sprint, call `tasks_list` with the DSL query `q: "sprint:<sprint_id>"` (or `q: "sprint:active"`), and `q: "sprint:<id> is:open"` for the carry-over candidates.

Parameters 1 · input schema
ArgTypeRequired
project_key string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Optional. Project key (e.g. \"WORK\") to scope to that project's Sprints. Omit to get the active Sprint across all projects."
    }
  }
}
sprints_note_get read

Read a sprint's fixed note slots (planning / review / retro / nyall_summary) — the free-text 「計画メモ / レビュー / ふりかえり / Nyall サマリー」 shown in Sprint detail. These are SEPARATE from the short `goal` field (use sprints_list / sprints_update for `goal`); long planning notes and retrospectives belong here, NOT in `goal`. Identify the sprint by `project_key` + `sprint` (its name or path, e.g. "Sprint 1" or "Q3/Sprint 1"). Returns `notes` keyed by slot; an unwritten slot is null. Each note has `body` (Markdown), `author_kind` ("user" or "agent" = written by Nyall/AI) and `updated_at`. Write a slot with sprints_note_set.

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path (e.g. \"Sprint 1\" or \"Q3/Sprint 1\")."
    }
  },
  "required": [
    "project_key",
    "sprint"
  ]
}
sprints_note_set write

Set a sprint's fixed note slot (planning / review / retro / nyall_summary) — the free-text 「計画メモ / レビュー / ふりかえり / Nyall サマリー」 in Sprint detail. These are SEPARATE from the short `goal` field: put long planning notes, review remarks and retrospectives HERE, not in `goal` (set `goal` via sprints_update). Identify the sprint by `project_key` + `sprint` (name or path). `slot` selects which note; `body` is Markdown and REPLACES the slot (pass empty string to clear it). Read current notes with sprints_note_get.

Parameters 4 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
slot string yes
body string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path (e.g. \"Sprint 1\" or \"Q3/Sprint 1\")."
    },
    "slot": {
      "type": "string",
      "enum": [
        "planning",
        "review",
        "retro",
        "nyall_summary"
      ],
      "description": "Which note slot: \"planning\" (計画メモ), \"review\" (レビュー), \"retro\" (ふりかえり), \"nyall_summary\" (Nyall サマリー)."
    },
    "body": {
      "type": "string",
      "description": "Markdown body. REPLACES the slot. Empty string clears (deletes) the slot."
    }
  },
  "required": [
    "project_key",
    "sprint",
    "slot",
    "body"
  ]
}
sprints_remove_item write

Unassign an item from a sprint (removes the assignment only; the item itself is kept). `sprint` is the sprint name or path; `item_ref` is the item reference (e.g. "WORK#42").

Parameters 3 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path."
    },
    "item_ref": {
      "type": "string",
      "description": "Item reference (e.g. \"WORK#42\" or \"#42\")."
    }
  },
  "required": [
    "project_key",
    "sprint",
    "item_ref"
  ]
}
sprints_update write

Update a sprint by `sprint` (its name or path within the project). Only provided fields change. Set `status` to "active" to start it (one active per project), "closed" via sprints_close instead. Set `parent` to move it under another container sprint (name or path); pass null to make it a root sprint. Dates are YYYY-MM-DD; pass null to clear goal / dates / capacity.

Parameters 9 · input schema
ArgTypeRequired
project_key string yes
sprint string yes
name string no
parent string no
goal string no
start_date string no
end_date string no
capacity number no
status string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint": {
      "type": "string",
      "description": "Target sprint name or path (e.g. \"Sprint 1\" or \"Q3/Sprint 1\")."
    },
    "name": {
      "type": "string",
      "description": "New name (rename)."
    },
    "parent": {
      "type": "string",
      "description": "New parent sprint name / path (move). null = make root. Omit = keep."
    },
    "goal": {
      "type": "string",
      "description": "Sprint goal. null clears."
    },
    "start_date": {
      "type": "string",
      "format": "date",
      "description": "Start date (YYYY-MM-DD). null clears."
    },
    "end_date": {
      "type": "string",
      "format": "date",
      "description": "End date (YYYY-MM-DD). null clears."
    },
    "capacity": {
      "type": "number",
      "description": "Numeric capacity target. null clears."
    },
    "status": {
      "type": "string",
      "enum": [
        "planning",
        "active",
        "closed"
      ],
      "description": "Lifecycle status."
    }
  },
  "required": [
    "project_key",
    "sprint"
  ]
}

Versions 5

versions_add_item write

Assign an item to a version (replaces any existing version assignment for that item = 1 item = 0..1 version). `version` is the version name; `item_ref` is the item reference (e.g. "WORK#42"). The item must belong to the same project as the version.

Parameters 3 · input schema
ArgTypeRequired
project_key string yes
version string yes
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "version": {
      "type": "string",
      "description": "Target version name."
    },
    "item_ref": {
      "type": "string",
      "description": "Item reference (e.g. \"WORK#42\" or \"#42\")."
    }
  },
  "required": [
    "project_key",
    "version",
    "item_ref"
  ]
}
versions_create write

Create a version (release / roadmap milestone) in a project. Requires the project to have Version/Roadmap management enabled (agile.roadmap). Referenced later by its `name` within the project. `status` defaults to "planning" ("released" records released_at). `target_date` is YYYY-MM-DD. Order on the roadmap is auto-assigned (appended).

Parameters 5 · input schema
ArgTypeRequired
project_key string yes
name string yes
description string no
target_date string no
status string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "name": {
      "type": "string",
      "description": "Version name (max 120 chars)."
    },
    "description": {
      "type": "string",
      "description": "Optional description."
    },
    "target_date": {
      "type": "string",
      "format": "date",
      "description": "Optional target date (YYYY-MM-DD)."
    },
    "status": {
      "type": "string",
      "enum": [
        "planning",
        "released",
        "archived"
      ],
      "description": "Lifecycle status. Defaults to \"planning\"."
    }
  },
  "required": [
    "project_key",
    "name"
  ]
}
versions_delete write destructive

Delete a version by `version` (name within the project). Irreversible. Item assignments (item_versions) are removed but the items themselves are kept.

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
version string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "version": {
      "type": "string",
      "description": "Target version name."
    }
  },
  "required": [
    "project_key",
    "version"
  ]
}
versions_remove_item write

Unassign an item from a version (removes the assignment only; the item itself is kept). `version` is the version name; `item_ref` is the item reference (e.g. "WORK#42").

Parameters 3 · input schema
ArgTypeRequired
project_key string yes
version string yes
item_ref string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "version": {
      "type": "string",
      "description": "Target version name."
    },
    "item_ref": {
      "type": "string",
      "description": "Item reference (e.g. \"WORK#42\" or \"#42\")."
    }
  },
  "required": [
    "project_key",
    "version",
    "item_ref"
  ]
}
versions_update write

Update a version by `version` (its name within the project). Only provided fields change. Setting `status` to "released" records released_at; moving away from "released" clears it. `target_date` is YYYY-MM-DD; pass null to clear description / target_date.

Parameters 6 · input schema
ArgTypeRequired
project_key string yes
version string yes
name string no
description string no
target_date string no
status string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "version": {
      "type": "string",
      "description": "Target version name."
    },
    "name": {
      "type": "string",
      "description": "New name (rename)."
    },
    "description": {
      "type": "string",
      "description": "Description. null clears."
    },
    "target_date": {
      "type": "string",
      "format": "date",
      "description": "Target date (YYYY-MM-DD). null clears."
    },
    "status": {
      "type": "string",
      "enum": [
        "planning",
        "released",
        "archived"
      ],
      "description": "Lifecycle status."
    }
  },
  "required": [
    "project_key",
    "version"
  ]
}

Estimation / Retro (AI-assisted) 5

agile_estimate_suggest read

Suggest draft estimates for the unestimated backlog items of a project, referencing the actual estimates of completed items. Returns suggestions[] with suggested_value, unit, rationale, and confidence. Read-only — it does NOT write estimates (the user confirms and applies them). Requires the agile.ai capability AND estimation enabled for the project.

Parameters 1 · input schema
ArgTypeRequired
project_key string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\") to estimate unestimated items for."
    }
  },
  "required": [
    "project_key"
  ]
}
agile_improvement_suggest read

Suggest process improvements for a project from its carry-over rate, velocity trend, and risk signals. Returns observations[], suggestions[] (action / rationale / priority), and a short summary. Read-only (proposals only; nothing is executed). Pass sprint_id to focus on a specific sprint's risk/aging, otherwise the active sprint is used if any. Requires the agile.ai capability AND sprint management enabled for the project.

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
sprint_id string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "sprint_id": {
      "type": "string",
      "description": "Optional. Focus sprint for risk/aging signals. Defaults to the active sprint."
    }
  },
  "required": [
    "project_key"
  ]
}
agile_meta_patch write

Set or clear an item's estimate and/or work-item kind. `item_ref` is the item reference (e.g. "WORK#42"). Requires the project to have estimation enabled (agile.estimation). Omit a field to leave it unchanged; pass null to clear it. `estimate` must match the project's estimate unit (e.g. numeric for sp/hours). `kind` is a work-item kind key (lowercase, e.g. "bug"). FIELD POLICY: before setting `estimate`, check the kind's `field_policy` via item_kinds_list — if the kind declares `estimate:false` (e.g. a Nano Epic / Chore), do NOT set an estimate on it; it will be hidden in the UI.

Parameters 3 · input schema
ArgTypeRequired
item_ref string yes
estimate string no
kind string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference (e.g. \"WORK#42\" or \"#42\")."
    },
    "estimate": {
      "type": "string",
      "description": "Estimate value (must match project unit). null clears. Omit to keep."
    },
    "kind": {
      "type": "string",
      "description": "Work-item kind key (lowercase / digits / - _). null clears. Omit to keep."
    }
  },
  "required": [
    "item_ref"
  ]
}
agile_retro_draft write destructive

Draft a sprint retrospective with AI and save it to the sprint's "nyall_summary" slot (authored as agent; the user edits it afterward). Inputs are the sprint's actuals (goal, completion, risk signals). By default it will NOT overwrite an existing nyall_summary; pass overwrite=true to replace it. Requires the agile.ai capability AND sprint management enabled for the project.

Parameters 2 · input schema
ArgTypeRequired
sprint_id string yes
overwrite boolean no
json
{
  "type": "object",
  "properties": {
    "sprint_id": {
      "type": "string",
      "description": "Target sprint id."
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace an existing nyall_summary draft. Default false (conflict if one exists)."
    }
  },
  "required": [
    "sprint_id"
  ]
}
agile_sprint_forecast read

Forecast whether a Sprint will finish on time using its velocity history, burndown, and risk signals. Returns forecast_completion_date, confidence (high/medium/low), remaining_points, velocity_average, risk_factors, and a short summary. Read-only (does not modify anything). Requires the agile.ai capability AND sprint management enabled for the project.

Parameters 1 · input schema
ArgTypeRequired
sprint_id string yes
json
{
  "type": "object",
  "properties": {
    "sprint_id": {
      "type": "string",
      "description": "Target sprint id."
    }
  },
  "required": [
    "sprint_id"
  ]
}

Project Configuration 25

Workflow States 5

workflow_states_create write

Add a workflow state to a user-owned workflow. Dual-axis model: `system_status` is one of open/closed. Optional `status_attribute` is a supplementary classification tag (open: pending / closed: duplicate / wontfix / null). To mark a state as "the default completion target" for AI/bulk-complete operations, send `status_attribute="done"` for compatibility (server normalizes it to the default-for-close flag). Only one default-for-close state per workflow. is_default (initial state) is also limited to 1 per workflow. is_terminal is auto-derived from system_status (open=false, closed=true) and cannot be set directly.

Parameters 8 · input schema
ArgTypeRequired
workflow_id string yes
name string yes
description string no
system_status string yes
category string no
status_attribute string no
color_hex string no
is_default boolean no
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "name": {
      "type": "string",
      "description": "Display name (1-80 chars)."
    },
    "description": {
      "type": "string",
      "description": "Optional hint on what this state means / when to use it (max 500 chars). Helps decide when to move an item into this state."
    },
    "system_status": {
      "type": "string",
      "enum": [
        "open",
        "closed",
        "closed_done",
        "closed_wontfix",
        "closed_duplicate"
      ],
      "description": "Dual-axis model: open=in-progress, closed=terminal. Legacy values closed_done/closed_duplicate/closed_wontfix are auto-decomposed."
    },
    "category": {
      "type": "string",
      "enum": [
        "todo",
        "in_progress",
        "review",
        "done"
      ],
      "description": "Optional progress category. open states allow todo/in_progress/review; closed states are always done. Omit to auto-derive from system_status (open→todo, closed→done). Backs the is:wip filter and board lanes."
    },
    "status_attribute": {
      "type": "string",
      "description": "Optional attribute label (open: pending, closed: done/duplicate/wontfix). Defaults to done for closed when omitted."
    },
    "color_hex": {
      "type": "string",
      "description": "Optional #RRGGBB color. Omit or null for unset."
    },
    "is_default": {
      "type": "boolean",
      "description": "Mark as initial state (workflow can have at most 1)."
    }
  },
  "required": [
    "workflow_id",
    "name",
    "system_status"
  ]
}
workflow_states_delete write destructive

Archive a workflow state. Refuses when any active item still references this state (move items first). Refuses to delete the last closed_done state or the is_default state. Side effect: transitions that reference this state (from_state_id or to_state_id) are hard-deleted. Destructive: requires explicit user confirmation.

Parameters 2 · input schema
ArgTypeRequired
workflow_id string yes
state_id string yes
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "state_id": {
      "type": "string",
      "description": "State id to archive."
    }
  },
  "required": [
    "workflow_id",
    "state_id"
  ]
}
workflow_states_list read

List the workflow states (statuses) available for the user's items. If project_key is given, returns the states of that project's workflow. Otherwise, returns states from all workflows visible to the user (system + user-owned), grouped by workflow. Each state's `id` can be passed as `status_definition_id` to items_move_state to move an existing item to that state, or as `from_state_id` to workflow_transitions_list. When moving an item, derive project_key from the item (e.g. items_get) and scope this call to that project so you do not pick a state from another workflow. items_patch does NOT change state; for completion use items_complete.

Parameters 1 · input schema
ArgTypeRequired
project_key string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Optional. Project key to scope to that project's workflow states."
    }
  }
}
workflow_states_reorder write

Bulk reorder workflow states. state_ids MUST contain every active state id of the workflow exactly once; the new display_order follows the array order (1-based).

Parameters 2 · input schema
ArgTypeRequired
workflow_id string yes
state_ids array yes
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "state_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "All active state ids in the new desired order."
    }
  },
  "required": [
    "workflow_id",
    "state_ids"
  ]
}
workflow_states_update write

Update a workflow state (rename / edit description / change system_status / change color / toggle is_default). The `description` is a "what this state means / when to use it" hint (empty string clears it). is_terminal is server-managed and cannot be set directly. Constraints: closed_done and is_default are each limited to 1 per workflow; the last one cannot be removed.

Parameters 9 · input schema
ArgTypeRequired
workflow_id string yes
state_id string yes
name string no
description string no
system_status string no
category string no
status_attribute string no
color_hex string no
is_default boolean no
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "state_id": {
      "type": "string",
      "description": "State id from workflow_states_list."
    },
    "name": {
      "type": "string",
      "description": "New display name (1-80 chars)."
    },
    "description": {
      "type": "string",
      "description": "New \"what this state means\" hint (max 500 chars). Empty string clears it."
    },
    "system_status": {
      "type": "string",
      "enum": [
        "open",
        "closed",
        "closed_done",
        "closed_wontfix",
        "closed_duplicate"
      ],
      "description": "New semantic role (dual-axis model, legacy 4-values accepted)."
    },
    "category": {
      "type": "string",
      "enum": [
        "todo",
        "in_progress",
        "review",
        "done"
      ],
      "description": "New progress category. open states allow todo/in_progress/review; closed is always done. Changing system_status auto-corrects the category (→done for closed, →todo for open) when omitted."
    },
    "status_attribute": {
      "type": "string",
      "description": "New attribute label (open: pending / closed: done/duplicate/wontfix)."
    },
    "color_hex": {
      "type": "string",
      "description": "New #RRGGBB color. Pass null to clear."
    },
    "is_default": {
      "type": "boolean",
      "description": "true=mark as initial state, false=unset."
    }
  },
  "required": [
    "workflow_id",
    "state_id"
  ]
}

Workflow Transitions 4

workflow_transitions_create write

Add a state transition to a user-owned workflow. Use this when the user wants to allow moving items from state A to state B with a specific kind. Call workflow_states_list first to obtain state ids. system-owned workflows are read-only and will be rejected.

Parameters 5 · input schema
ArgTypeRequired
workflow_id string yes
from_state_id string no
to_state_id string yes
kind string yes
is_default_next boolean no
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "from_state_id": {
      "type": "string",
      "description": "Source state id. Pass null/omit for the initial transition (entry point)."
    },
    "to_state_id": {
      "type": "string",
      "description": "Destination state id."
    },
    "kind": {
      "type": "string",
      "enum": [
        "next",
        "cancel",
        "manual",
        "reopen"
      ],
      "description": "Transition kind. next=primary progression, cancel=negative terminal, manual=arbitrary, reopen=terminal->initial."
    },
    "is_default_next": {
      "type": "boolean",
      "description": "If true, mark this transition as the default next from from_state. Only valid when kind=\"next\". Any other transition with the same (workflow_id, from_state_id) that is currently the default will be atomically demoted to false. At most one default_next is allowed per from_state."
    }
  },
  "required": [
    "workflow_id",
    "to_state_id",
    "kind"
  ]
}
workflow_transitions_delete write destructive

Delete a transition from a user-owned workflow. Use workflow_transitions_list first to obtain transition_id. Destructive: requires explicit user confirmation.

Parameters 2 · input schema
ArgTypeRequired
workflow_id string yes
transition_id string yes
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "transition_id": {
      "type": "string",
      "description": "Transition id from workflow_transitions_list."
    }
  },
  "required": [
    "workflow_id",
    "transition_id"
  ]
}
workflow_transitions_list read

List workflow transitions originating from a given workflow_state. Use this to determine the next valid state(s) for an item before proposing items_complete or items_patch. Returns transitions with `kind` (next/cancel/manual/reopen), `is_default_next` (true means "the primary next state" — prefer this when auto-advancing), and target state info.

Parameters 1 · input schema
ArgTypeRequired
from_state_id string yes
json
{
  "type": "object",
  "properties": {
    "from_state_id": {
      "type": "string",
      "description": "Workflow state id to query transitions from (typically the current item.status_definition_id)."
    }
  },
  "required": [
    "from_state_id"
  ]
}
workflow_transitions_update write

Update an existing transition: change its kind (next/cancel/manual/reopen) and/or toggle is_default_next. Use workflow_transitions_list first to obtain transition_id. Setting is_default_next=true atomically demotes any other default_next on the same (workflow_id, from_state_id). is_default_next=true requires kind="next" (after the update applied).

Parameters 4 · input schema
ArgTypeRequired
workflow_id string yes
transition_id string yes
kind string no
is_default_next boolean no
json
{
  "type": "object",
  "properties": {
    "workflow_id": {
      "type": "string",
      "description": "Target workflow id (must be user-owned)."
    },
    "transition_id": {
      "type": "string",
      "description": "Transition id from workflow_transitions_list."
    },
    "kind": {
      "type": "string",
      "enum": [
        "next",
        "cancel",
        "manual",
        "reopen"
      ],
      "description": "New transition kind. Omit to leave unchanged."
    },
    "is_default_next": {
      "type": "boolean",
      "description": "Toggle the default-next flag. Only valid for kind=\"next\". When set to true, any other default_next on the same (workflow_id, from_state_id) is demoted to false."
    }
  },
  "required": [
    "workflow_id",
    "transition_id"
  ]
}

Labels 4

project_labels_create write

Create a label definition for a project. Use this when you want to explicitly add a label with a color BEFORE attaching it to items. For most cases you can skip this — items_create / items_patch with `labels` will auto-create missing label definitions (color_hex=NULL).

Parameters 4 · input schema
ArgTypeRequired
project_key string yes
name string yes
description string no
color_hex string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "name": {
      "type": "string",
      "description": "Label name (max 64 chars)."
    },
    "description": {
      "type": "string",
      "description": "Optional hint on when to apply this label (max 500 chars). Helps later tagging decide whether an item should carry it."
    },
    "color_hex": {
      "type": "string",
      "description": "Optional #RRGGBB color. Omit / null for unset."
    }
  },
  "required": [
    "project_key",
    "name"
  ]
}
project_labels_delete write destructive

Delete a project label definition. If `strip_from_items=true` (default true), the label name is also removed from all items.labels arrays in the same project. Otherwise the items keep the label name but it will render without color.

Parameters 3 · input schema
ArgTypeRequired
project_key string yes
label_id string yes
strip_from_items boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key."
    },
    "label_id": {
      "type": "string",
      "description": "Label id from project_labels_list."
    },
    "strip_from_items": {
      "type": "boolean",
      "description": "Also remove the label name from items.labels. Default true."
    }
  },
  "required": [
    "project_key",
    "label_id"
  ]
}
project_labels_list read

List the label definitions for a project. Returns id, name, description (a "when to apply this label" hint, null if unset), color_hex (null if unset), display_order. Use the `description` to decide whether an item should carry a given label. Use this before project_labels_patch / project_labels_delete to get `label_id`. EXHAUSTIVE: returns all label definitions for the project — no pagination.

Parameters 1 · input schema
ArgTypeRequired
project_key string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\"). Use \"INBOX\" for inbox."
    }
  },
  "required": [
    "project_key"
  ]
}
project_labels_patch write

Update a project label's name, description and/or color. The `description` is a "when to apply this label" hint (empty string clears it). Renaming also updates `labels` arrays in existing items of the same project. Use project_labels_list (read tool) first to get `label_id`.

Parameters 5 · input schema
ArgTypeRequired
project_key string yes
label_id string yes
name string no
description string no
color_hex string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key."
    },
    "label_id": {
      "type": "string",
      "description": "Label id from project_labels_list."
    },
    "name": {
      "type": "string",
      "description": "New label name (max 64 chars)."
    },
    "description": {
      "type": "string",
      "description": "New \"when to apply\" hint (max 500 chars). Empty string clears it."
    },
    "color_hex": {
      "type": "string",
      "description": "New #RRGGBB color. Pass null to clear."
    }
  },
  "required": [
    "project_key",
    "label_id"
  ]
}

Areas 5

project_areas_assign_item write

Assign an area to an item, or clear it. 1 item has 0..1 area. Identify the item by ref (e.g. "WORK#42" or "#42") and the area by `area_path` (e.g. "API/Auth"); the area must belong to the item's own project and not be archived. Pass `area_path: null` (or omit) to unassign. Assigning replaces any existing area.

Parameters 2 · input schema
ArgTypeRequired
item_ref string yes
area_path string no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item ref, e.g. \"WORK#42\" or \"#42\"."
    },
    "area_path": {
      "type": "string",
      "description": "Area path within the item's project (e.g. \"API/Auth\"). null / omit to unassign."
    }
  },
  "required": [
    "item_ref"
  ]
}
project_areas_create write

Create an area (classification axis) in a project. Areas are a hierarchical first-class axis distinct from labels: they represent product / feature / responsibility boundaries. Pass `parent_path` (e.g. "API") to nest under an existing area; omit / null for a root area. Max depth is 3. The new area's path becomes `<parent_path>/<name>`. Use `area:<path>` in tasks_list / query DSL to filter by it afterwards. Pass `description` to record what belongs in this area (a one-line scope hint) — this helps later classification (yours and the user's) decide which area an item should go to.

Parameters 4 · input schema
ArgTypeRequired
project_key string yes
name string yes
description string no
parent_path string no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "name": {
      "type": "string",
      "description": "Area name (max 80 chars, no \"/\")."
    },
    "description": {
      "type": "string",
      "description": "Optional one-line scope hint (\"what goes in this area\", max 500 chars). Used as a classification cue when assigning items to areas."
    },
    "parent_path": {
      "type": "string",
      "description": "Optional parent area path (e.g. \"API\"). Omit / null to create a root area. Max depth 3."
    }
  },
  "required": [
    "project_key",
    "name"
  ]
}
project_areas_delete write destructive

Delete an area. Fails if it has child areas (move / delete children first, or archive instead). If items are assigned to it, deletion is rejected unless `force=true`, which first detaches the area from those items and then deletes it. To keep the data, prefer project_areas_update with archived:true instead of deleting.

Parameters 3 · input schema
ArgTypeRequired
project_key string yes
area_path string yes
force boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key."
    },
    "area_path": {
      "type": "string",
      "description": "Area path to delete (e.g. \"API/Auth\")."
    },
    "force": {
      "type": "boolean",
      "description": "If true, detach the area from assigned items first, then delete. Default false."
    }
  },
  "required": [
    "project_key",
    "area_path"
  ]
}
project_areas_list read

List the area definitions (classification axis) for a project. Areas are a hierarchical first-class axis distinct from labels (product / feature / responsibility boundaries). Returns id, name, path (e.g. "API/Auth"), parent_id, description (a "what goes in this area" hint, null if unset), display_order. Use this to discover the area tree and each area's path BEFORE project_areas_assign_item (which takes area_path) or a bulk area re-assignment (items_bulk_patch with area_id — use the `id` from here). Pass include_archived=true to also see archived areas. EXHAUSTIVE: returns all areas for the project — no pagination.

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
include_archived boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\"). Use \"INBOX\" for inbox."
    },
    "include_archived": {
      "type": "boolean",
      "description": "Include archived areas (default false)."
    }
  },
  "required": [
    "project_key"
  ]
}
project_areas_update write

Update an area: rename, edit its description, move under a different parent, or archive. Identify the target by `area_path` (e.g. "API/Auth"). Pass `description` to set the "what goes in this area" scope hint (empty string clears it). To move it, pass `new_parent_path` (empty string "" moves it to root); descendants' paths are recalculated by the server. Pass `archived: true` to hide it (data is kept) or `archived: false` to restore. You cannot move an area under its own descendant.

Parameters 6 · input schema
ArgTypeRequired
project_key string yes
area_path string yes
name string no
description string no
new_parent_path string no
archived boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key."
    },
    "area_path": {
      "type": "string",
      "description": "Current area path (e.g. \"API/Auth\")."
    },
    "name": {
      "type": "string",
      "description": "New name (rename). Max 80 chars, no \"/\"."
    },
    "description": {
      "type": "string",
      "description": "New scope hint (\"what goes in this area\", max 500 chars). Empty string clears it."
    },
    "new_parent_path": {
      "type": "string",
      "description": "New parent area path to move under. Empty string \"\" = move to root."
    },
    "archived": {
      "type": "boolean",
      "description": "true = archive (hide, keep data); false = restore."
    }
  },
  "required": [
    "project_key",
    "area_path"
  ]
}

Custom Fields 4

project_custom_fields_create write

Create a custom field definition in a project. Custom fields are project-scoped, user-defined attributes attached to items (tasks). Provide a human `label` (e.g. "見積もり時間"). Optionally pass `field_key` — a stable slug (^[a-z][a-z0-9_]*$, max 64) used later to set values; if omitted it is derived from the label. v1.0 supports text fields only (field_type is always "text"). Pass `is_required: true` to mark it required, `display_order` to control ordering (lower = earlier). After creating, use items_set_custom_fields with the field_key to put values on individual tasks.

Parameters 5 · input schema
ArgTypeRequired
project_key string yes
label string yes
field_key string no
is_required boolean no
display_order number no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\")."
    },
    "label": {
      "type": "string",
      "description": "Human-readable field label (max 80 chars)."
    },
    "field_key": {
      "type": "string",
      "description": "Optional stable slug (^[a-z][a-z0-9_]*$, max 64). Used to set values later. Derived from label if omitted."
    },
    "is_required": {
      "type": "boolean",
      "description": "Mark the field as required. Default false."
    },
    "display_order": {
      "type": "number",
      "description": "Ordering hint (lower = earlier). Default 0."
    }
  },
  "required": [
    "project_key",
    "label"
  ]
}
project_custom_fields_delete write destructive

Deactivate (logically delete) a custom field definition. Identify the target by `field_key` (from project_custom_fields_list). This is NON-destructive: existing values are kept in the DB and excluded from item responses while inactive, and are restored if you reactivate the field via project_custom_fields_update(is_active=true). There is no hard-delete in v1.0.

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
field_key string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key."
    },
    "field_key": {
      "type": "string",
      "description": "Stable slug of the field to deactivate (from project_custom_fields_list)."
    }
  },
  "required": [
    "project_key",
    "field_key"
  ]
}
project_custom_fields_list read

List the custom field definitions for a project. Custom fields are project-scoped, user-defined attributes attached to items (tasks). Returns id, field_key (a stable slug used to set values, e.g. "estimate_hours"), label, field_type (v1.0: "text" only), display_order, is_required, is_active, is_multi. Use this to discover each field's `field_key` BEFORE items_set_custom_fields (which takes field_key → value) or before project_custom_fields_update / _delete (which take field_key). Pass include_inactive=true to also see logically-deleted (deactivated) fields. EXHAUSTIVE: returns all fields for the project — no pagination.

Parameters 2 · input schema
ArgTypeRequired
project_key string yes
include_inactive boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\"). Use \"INBOX\" for inbox."
    },
    "include_inactive": {
      "type": "boolean",
      "description": "Include logically-deleted (deactivated) fields (default false)."
    }
  },
  "required": [
    "project_key"
  ]
}
project_custom_fields_update write

Update a custom field definition: rename its label, change display_order, toggle is_required, or reactivate a deactivated field. Identify the target by `field_key` (the stable slug from project_custom_fields_list); the field_key itself is immutable. Pass `is_active: true` to restore a logically-deleted field, or `is_active: false` to deactivate it (same as project_custom_fields_delete). At least one mutable field is required.

Parameters 6 · input schema
ArgTypeRequired
project_key string yes
field_key string yes
label string no
display_order number no
is_required boolean no
is_active boolean no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key."
    },
    "field_key": {
      "type": "string",
      "description": "Stable slug of the field to update (from project_custom_fields_list)."
    },
    "label": {
      "type": "string",
      "description": "New label (rename). Max 80 chars."
    },
    "display_order": {
      "type": "number",
      "description": "New ordering hint (lower = earlier)."
    },
    "is_required": {
      "type": "boolean",
      "description": "Toggle required flag."
    },
    "is_active": {
      "type": "boolean",
      "description": "true = reactivate a deactivated field; false = deactivate (logical delete)."
    }
  },
  "required": [
    "project_key",
    "field_key"
  ]
}

Task Templates 3

task_templates_list read

List the user's task templates (recurring task generators). Use this BEFORE templates_run to find a valid template_ref, or to summarize what recurring schedules the user has set up. PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, narrow the filter (`project_key`, `enabled`) and re-query, or warn the user that the listing is partial.

Parameters 3 · input schema
ArgTypeRequired
project_key string no
enabled boolean no
limit number no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Filter by project key."
    },
    "enabled": {
      "type": "boolean",
      "description": "Filter by enabled status."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-30, default 20)."
    }
  }
}
templates_create write

Create a new task template that auto-generates tasks on a recurring schedule (RFC 5545 RRULE). Examples: daily review tasks, weekly reports, monthly billing checks. recurrence_rule MUST be a valid RRULE string like "FREQ=DAILY", "FREQ=WEEKLY;BYDAY=MO,WE,FR", or "FREQ=MONTHLY;BYMONTHDAY=1". If project_key is omitted, the template is created in the user's Inbox project. Use this only when the user clearly wants a *recurring* task. For one-off tasks use items_create. Returns `{ itemId, ref }`. Use `ref` (e.g. `INBOX#178`) for any user-facing reference; `itemId` is an internal UUID for relation / FK lookups only.

Parameters 7 · input schema
ArgTypeRequired
project_key string no
title string yes
detail string no
recurrence_rule string yes
timezone string no
generation_strategy string no
labels array no
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Optional. Existing pinned project key. Omit for Inbox."
    },
    "title": {
      "type": "string",
      "description": "Template title shown in lists (1-200 chars)."
    },
    "detail": {
      "type": "string",
      "description": "Optional default detail/description for generated tasks."
    },
    "recurrence_rule": {
      "type": "string",
      "description": "RFC 5545 RRULE, e.g. \"FREQ=DAILY\" or \"FREQ=WEEKLY;BYDAY=MO\"."
    },
    "timezone": {
      "type": "string",
      "description": "IANA timezone (default \"Asia/Tokyo\")."
    },
    "generation_strategy": {
      "type": "string",
      "enum": [
        "always",
        "skip_if_previous_open",
        "supersede_previous"
      ],
      "description": "How to handle the previous open instance. Default \"skip_if_previous_open\"."
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional labels (default [\"定型\"])."
    }
  },
  "required": [
    "title",
    "recurrence_rule"
  ]
}
templates_run write

Manually trigger a task template to generate a new task instance now (regardless of the recurrence schedule). template_ref must point to an existing task_template item (e.g. "#42" or "WORK#42"; project prefix optional). Use this when the user explicitly says "run", "execute", or "generate from" a known template.

Parameters 1 · input schema
ArgTypeRequired
template_ref string yes
json
{
  "type": "object",
  "properties": {
    "template_ref": {
      "type": "string",
      "description": "Reference of a task_template item, e.g. \"#42\" (prefix optional) or \"WORK#42\"."
    }
  },
  "required": [
    "template_ref"
  ]
}

Discovery & Read Context 7

Unified Search 1

query read

Unified search across the user's items, chat threads, and chat messages. Shares the same engine as the UI search bar (DSL + kinds + mode). Prefer the type-scoped list tools for ordinary lookups: use tasks_list / notes_list / events_list when the user wants tasks / notes / events filtered by project, status, due date, etc. Reach for `query` only for CROSS-TYPE search, free-text keyword search, or searching chat thread / message history — things the list tools cannot do. q accepts free text plus DSL filters such as `status:done`, `due:<2026-05`, `project:WORK`, `priority:high`, `type:task`, `is:archived`. STATUS BY NAME: `status:<name>` filters by the WORKFLOW STATE name (e.g. `status:reviewing`, `status:検収待ち`) — it matches the board column / status the item is in, NOT a title text search. When the user refers to a status in their own words (e.g. 「レビュー待ち」「レビュー中のタスク」), do NOT search that phrase as a title; map it to the ACTUAL workflow state name from the status vocabulary (me_overview `vocabulary.statuses` or workflow_states_list — or the per-card state shown in the current-screen board/list context) and query `status:<that name>` (combine with `is:open` to exclude closed). Default mode is "fulltext" (FTS5 trigram). Use "semantic" or "hybrid" only when the user clearly asks for paraphrase / similarity matching, or when fulltext returns nothing for an obvious topical query — semantic is more expensive and noisier. KEYWORDS: fulltext is a trigram match, which requires a CONTIGUOUS substring of the stored title/body. Do NOT paste the user's whole sentence into `q` — a phrase like 「アクメ社から5万円返金してもらった」 will NOT match a task titled 「アクメ社に5万円返金依頼する」 because the full string is not a contiguous substring. Instead, decompose the request into the MOST DISTINCTIVE SHORT keyword (a proper noun / entity / amount, e.g. just 「アクメ社」) and search that. If you get 0 hits: shorten the keyword further, OR pass multiple short space-separated terms (each is ANDed as its own substring), OR switch to mode "semantic" / "hybrid" which match by meaning rather than exact substring. If a fulltext search returns 0 hits, the server automatically retries once in semantic mode; when that fallback is used the response carries `fallback: "semantic"`, meaning the hits are SIMILARITY matches (not exact), so confirm with the user before acting on them. For EXACT-string / regex / ALL-occurrences / ABSENCE-PROOF searches, use `items_grep` instead (deterministic & exhaustive; query is best-effort/topK and its 0 hits do NOT prove absence). IGNORED FILTERS: agile_kind / sprint / area / version / estimate / cf are Items-view-only axes that unified search CANNOT filter by. Instead of failing, the query runs WITHOUT those axes and the response carries `ignored_filters: [{key, reason}]`. When present, the results are NOT narrowed by those axes (broader than asked) — do NOT treat the result set as filtered by them. To filter by agile_kind / sprint / estimate etc., use `tasks_list` with the same axes in its `q` instead. Returns up to `limit` hits per kind.

Parameters 4 · input schema
ArgTypeRequired
q string yes
mode string no
kinds array no
limit number no
json
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Free text + DSL filters (e.g. \"deploy status:done due:<2026-05\"). For Japanese, use >= 3 character phrases for trigram FTS."
    },
    "mode": {
      "type": "string",
      "enum": [
        "fulltext",
        "semantic",
        "hybrid"
      ],
      "description": "Default 'fulltext'. Pick 'semantic' / 'hybrid' only when explicitly needed."
    },
    "kinds": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "item",
          "thread",
          "thread_message"
        ]
      },
      "description": "Subset of kinds to search. Omit for all kinds."
    },
    "limit": {
      "type": "number",
      "description": "Per-kind cap (1-30, default 10)."
    }
  },
  "required": [
    "q"
  ]
}

Workspace Reference (read-only) 6

activities_list read

List the change history of a specific task (title / due_date / priority / completion / archive / re-open etc.) as recorded in the activities table. Use this when the user asks "いつ変えた?" / "誰が完了した?" / "履歴見せて" or when you need to understand why an item is in its current state before proposing changes. Read-only. Returns newest first. PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, older activities are truncated. Either raise `limit` (max 50) or narrow with `kind` / `actor_kind`.

Parameters 4 · input schema
ArgTypeRequired
item_ref string yes
kind string no
actor_kind string no
limit number no
json
{
  "type": "object",
  "properties": {
    "item_ref": {
      "type": "string",
      "description": "Item reference like \"#42\" (owner-wide number, prefix optional) or \"WORK#42\". Bare \"#42\" resolves the item in any project — no project prefix needed."
    },
    "kind": {
      "type": "string",
      "description": "Optional filter by activity kind (e.g. \"item.completed\", \"item.due_date.changed\", \"item.archived\"). Omit to return all kinds."
    },
    "actor_kind": {
      "type": "string",
      "enum": [
        "human",
        "nyall",
        "agent",
        "system"
      ],
      "description": "Optional filter by who performed the change."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-50, default 20)."
    }
  },
  "required": [
    "item_ref"
  ]
}
item_kinds_list read

List the CUSTOM work-item kinds a project defines via its board profile. You usually do NOT need this: the built-in kinds epic / story / task / bug / chore are always valid on items_create / agile_meta_patch — use them directly. Call this only to discover extra project-specific kinds (board profiles enabled). Returns each kind's `key` (use as the `kind` value), `label`, `category`, `hierarchy_level`, `is_default`, and `field_policy`. An empty array means the project has no custom kinds — fall back to the built-in set, do NOT omit `kind`. FIELD POLICY: `field_policy` declares which agile fields this kind USES — `{estimate?, area?, sprint?, version?}` where `false` = the kind does NOT use that field (omitted key = used). null = all fields used. Honor it when calling agile_meta_patch / sprints_add_item / versions_add_item: e.g. a Nano Epic has `{estimate:false,area:false,sprint:false,version:true}` — do NOT set its estimate or add it to a sprint; assign it to a version instead. Story/Task/Bug do not carry a version directly (via Epic).

Parameters 1 · input schema
ArgTypeRequired
project_key string yes
json
{
  "type": "object",
  "properties": {
    "project_key": {
      "type": "string",
      "description": "Project key (e.g. \"WORK\") whose work-item kinds to list."
    }
  },
  "required": [
    "project_key"
  ]
}
me_overview read

Call this FIRST when you connect, before exploring other tools. Returns a one-shot bird's-eye view of the user so you can ground every later action: their projects (with keys to pass to items_create / tasks_list, plus an optional `description` saying what each project is for — use it to pick the right project), the status vocabulary (workflow states; status_definition_id is the id to pass to items_move_state — but this is an overview spanning workflows, so before moving an item read workflow_states_list(project_key) for that item's project to resolve same-name collisions), what they have actually been doing recently (recent_activity — independent of what they opened on screen), summaries of their recent AI conversations (recent_conversations), their weekly pulse (completions / in-progress / streak / focus), and their currently open tasks (open_tasks — not gated by due date). Use this instead of grinding projects_list + tasks_list + settings_list one by one. A project may carry an `areas` list (the area classification axis): each entry has a `path` and an optional `description` ("what goes in this area"). The `path` is a HIERARCHICAL SLASH-SEPARATED materialized path (e.g. "API/Auth"), NOT a bare label — always use it exactly as listed. Pass `area:<path>` (e.g. area:API/Auth for a nested area, area:API for a root one) in tasks_list / query DSL to filter that project by area, and use the `description` to decide which area a given item belongs to when assigning. A project with no `areas` key has the axis disabled. Read-only.

Parameters 2 · input schema
ArgTypeRequired
tz_offset_minutes number no
week_start string no
json
{
  "type": "object",
  "properties": {
    "tz_offset_minutes": {
      "type": "number",
      "description": "Optional. Minutes offset from UTC for the user's local day (e.g. 540 for JST). Used to bucket the weekly pulse / streak by local day. Defaults to 0 (UTC) if omitted."
    },
    "week_start": {
      "type": "string",
      "enum": [
        "sunday",
        "monday"
      ],
      "description": "Optional. Week start for the pulse weekly_done window (this-week boundary). Defaults to \"monday\" if omitted."
    }
  }
}
notifications_list read

List recent notifications (read or unread) for the user. Use this to surface alerts the user might have missed (quota warnings, due-date approaching, AUTO router thinking_recommended, etc.). Read-only — does NOT mark them read. PAGINATION: the response includes `has_more: boolean`. If `has_more` is true, the returned slice is the most recent `limit` notifications; older ones are truncated. Either raise `limit` (max 30) or warn the user that earlier notifications are not shown.

Parameters 2 · input schema
ArgTypeRequired
status string no
limit number no
json
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "unread",
        "all"
      ],
      "description": "Default unread."
    },
    "limit": {
      "type": "number",
      "description": "Max results (1-30, default 10)."
    }
  }
}
projects_list read

List the user's projects (key, name, is_inbox, description). Use this BEFORE items_create when you need to verify or pick a project_key. The `description` (when set) says what the project is for — use it to decide which project an item belongs to. Excludes archived projects by default. EXHAUSTIVE: returns all matching projects — no pagination.

Parameters 1 · input schema
ArgTypeRequired
include_archived boolean no
json
{
  "type": "object",
  "properties": {
    "include_archived": {
      "type": "boolean",
      "description": "Include archived projects (default false)."
    }
  }
}
settings_list read

Read the user's LLM / chat preference settings. Use this to confirm what the user has currently enabled before suggesting changes (e.g. is grounding/web-search ON? is Context Caching enabled? is RAG retrieval enabled?). Read-only — does NOT modify settings. EXHAUSTIVE: returns all matching settings up to an internal cap of 200 — no pagination param exposed.

Parameters 1 · input schema
ArgTypeRequired
prefix string no
json
{
  "type": "object",
  "properties": {
    "prefix": {
      "type": "string",
      "description": "Optional key prefix (e.g. \"llm\" / \"chat\") to narrow the result."
    }
  }
}

Total: 88 tools