Skip to main content
Glama

Get task list

get_tsk

Read and parse a full task list document by ID, optionally returning raw body text with line windowing and numbering, plus language-specific variants.

Instructions

Read, parse, and return a full task list document (frontmatter and body) by its id. Pass raw=True to return the frontmatter-stripped body text verbatim instead. With raw=True, optional read-style offset/limit window the raw read: offset (1-based, default 1) is the first body line to return, limit (line count, default through end of body) how many; out-of-range values clamp (offset > N returns the empty string), and coordinates with raw=False raise ValueError. A document that exists but fails to parse returns a ParseFailureResult (error/path/id) instead of raising; its error text is byte-identical to the domain's own list tool's failed-row error for the same file (identical field path and cause, including the trailing pydantic documentation line; ADR 9080b37c-82b3-4f63-81f1-79641d0bf14c). An invalid id (path-injection attempt or wrong format) is also a ValueError, raised before any file access. With raw=True, an optional numbered=True prefixes every returned body line with its 1-based absolute body-line number in the "<n>: " form (plain decimal, no padding) -- under offset/limit windowing the numbers start at the clamped offset and never restart at 1, so a number seen in the output can be fed straight back into the generic update tool's offset. numbered is meaningful only with raw=True: combining it with raw=False raises ValueError (like offset/limit), and a numbered read of a document that fails to parse returns the ParseFailureResult described above, never numbered text. Numbered output must never be fed back verbatim into content for update or create_tsk -- strip the "<n>: " prefix from each line first (it is likewise never a valid edit old_str). The optional language parameter (default 'en') selects the language variant to read: omitted/'en' = the flat docs/tsk/ document, exactly the default behavior; any other ISO 639-1-shaped lowercase two-letter code (e.g. 'de') = that language's variant at docs/tsk/{language}/ (the EN source's exact basename). The language is shape-validated before any file access (a path-injection-shaped payload is a ValueError, like an invalid id), and a shape-valid language without a packaged heading-mapping table is rejected up front with an actionable ValueError, also before any file access. A raw=True read of a variant returns the variant's on-disk body verbatim (translation preserved); a raw=False read parses it through the variant's heading table, so the structured model holds canonical heading text. The ParseFailureResult error of a broken variant is byte-identical to list_tsk(language=...)'s failed row for the same file.

Input Schema

NameRequiredDescriptionDefault
idYes
rawNo
limitNo
offsetNo
languageNoen
numberedNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.38.0
    • addedInput schema / properties / language
      Added value: +{
      +  "default": "en",
      +  "title": "Language",
      +  "type": "string"
      +}
  2. Changed4 schema fields changedv0.37.0
    • changedOutput schema / $defs / RecentUpdates / description
      Previous value: -"`## Recent Updates` -- a dynamic, newest-first list of timestamp-led `### ` update entries.\n\nA fixed-title (non-alias) `MarkdownSection2WithComment`, structurally\nsimilar to `AdrBody`'s `## Pros and Cons of the Options`/`AdrOption`\ncollection, but with no dedicated per-entry tools (no\n`option_create`/`option_list` equivalent) -- entries are prepended\n(newest-first) by editing the whole body. May be preceded by an\nexplanatory HTML comment (e.g. an ordering hint).\n\nParameters\n----------\ncomment:\n    Optional explanatory HTML comment (`<!-- ... -->`), e.g.\n    `<!-- Newest entry first -- prepend new entries directly below\n    this comment. -->`. Inherited from `MarkdownSection2WithComment`.\nupdates:\n    The dynamic collection of `### ` entries, in document order,\n    newest-first (enforced, see `_validate_newest_first`). Requires\n    at least one entry (``min_length=1``), same as `Task.items` below --\n    `models.md`'s generic list-parsing engine already enforces this\n    during `from_text` for any non-`Optional` `list[X]` field regardless\n    of `min_length`, so this constraint makes direct Python construction\n    (e.g. a future `create_tsk` tool) consistent with parsing instead of\n    silently allowing `RecentUpdates(updates=[])`. A newly created `tsk`\n    document must therefore seed a first entry (e.g. \"Created\") -- see\n    the feature README's Decisions Made."New value: +"`## Recent Updates` -- a dynamic, newest-first list of timestamp-led `### ` update entries.\n\nA fixed-title (non-alias) `MarkdownSection2WithComment`, structurally\nsimilar to `AdrBody`'s `## Pros and Cons of the Options`/`AdrOption`\ncollection, but with no dedicated per-entry tools (no\n`option_create`/`option_list` equivalent) -- entries are prepended\n(newest-first) by editing the whole body. May be preceded by an\nexplanatory HTML comment (e.g. an ordering hint).\n\nParameters\n----------\ncomment:\n    Optional explanatory HTML comment (`<!-- ... -->`), e.g.\n    `<!-- Newest entry first -- prepend new entries directly below\n    this comment. -->`. Inherited from `MarkdownSection2WithComment`.\nupdates:\n    The dynamic collection of `### ` entries, in document order,\n    newest-first (enforced, see `_validate_newest_first`). Requires\n    at least one entry (``min_length=1``), same as `Task.items` below --\n    `models.md`'s generic list-parsing engine already enforces this\n    during `from_text` for any non-`Optional` `list[X]` field regardless\n    of `min_length`, so this constraint makes direct Python construction\n    (e.g. the `create_tsk` tool) consistent with parsing instead of\n    silently allowing `RecentUpdates(updates=[])`. A newly created `tsk`\n    document must therefore seed a first entry (e.g. \"Created\") -- see\n    the feature README's Decisions Made."
    • addedOutput schema / $defs / TaskItem / pattern
      Added value: +"^\\[( |x|X)\\]\\s*(.*)$"
    • addedOutput schema / $defs / TskFrontmatter / properties / status / enum
      Added value: +[
      +  "active",
      +  "cancelled",
      +  "done",
      +  "draft"
      +]
    • addedOutput schema / $defs / UpdateEntry / pattern
      Added value: +"^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}\\.\\d{3}(?:Z|[+-]\\d{2}:\\d{2})(?: - | : ).+$"
  3. First observedv0.36.0

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: parse failures return a ParseFailureResult instead of raising, invalid ids and path-injection payloads raise ValueError before file access, unsupported language shape-valid codes raise actionable ValueErrors up front, and invalid parameter combinations (numbered/offset/limit with raw=False) raise ValueError. It also warns that numbered output must be stripped before being reused in content/old_str, which is non-obvious operational guidance.

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

Conciseness2/5

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

Core purpose is front-loaded, which helps, but the remainder is a single dense block that mixes parameter semantics, error contracts, downstream tool interactions, and an ADR UUID reference. Details such as the error being 'byte-identical ... including the trailing pydantic documentation line' and the cited ADR hash exceed what an agent needs to select or invoke the tool.

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

Completeness5/5

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

An output schema exists, yet the description still explains the ParseFailureResult shape and the failure-vs-raise contract, plus language-variant parse semantics (canonical heading text on parse, translated text on raw). For a six-parameter tool with variant handling, nothing an agent needs to call it correctly appears to be missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does: raw, offset (1-based, default 1), limit (default to end), clamping behavior (offset > N returns empty string), numbered format ('<n>: ', absolute line numbering under windowing), and language ('en' = flat docs/tsk/, other two-letter codes = docs/tsk/{language}/). Only `id` is left without format detail beyond the invalid-id error rule.

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

Purpose4/5

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

Opens with a specific verb+resource: 'Read, parse, and return a full task list document (frontmatter and body) by its id', and immediately contrasts the raw=True mode as returning 'the frontmatter-stripped body text verbatim'. An agent can distinguish it from list/parse siblings, though it never explicitly names parse_tsk or get_tsk_example/get_tsk_schema, which are the closest alternative reads.

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

Usage Guidelines4/5

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

Gives clear conditional guidance: use default mode for structured frontmatter+body, raw=True for verbatim body, numbered=True only with raw=True, and language for non-EN variants. It also routes downstream behavior (numbered line numbers can be fed into update's offset). It lacks an explicit 'enumerate ids with list_tsk first' or 'use parse_tsk if you only want parsing' routing statement.

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

Deploy Server

Other Tools