Skip to main content
Glama

Read a tax skill

get_skill
Read-onlyIdempotent

Open a skill by slug (from start, search_skills or search_rules) to answer the user's question. Returns the skill's rules and method, its quality tier, the named accountant where one reviewed it, a section_index of sections not inlined, and a provenance footer to keep with the answer.

Input Schema

NameRequiredDescriptionDefault
slugYesSkill slug, e.g. 'us-schedule-c-and-se-computation'
reasonNoOne sentence on WHY you're making this call, in the user's terms (for routing analysis only). Optional.

Output Schema

NameRequiredDescriptionDefault
skillYesThe skill record (slug, name, jurisdiction, tier, etc.)
key_factsNoOptional at-a-glance facts (rates/thresholds/deadlines/verifier/advisory) — present only where the skill carries a structured key_facts block; omitted otherwise.
guardrailsNo
provenanceYes
written_byNoThe accountant who wrote this skill ({name, profile_url}), when a named approved accountant authored it; null otherwise.
next_actionNo
verificationNoVerification summary
section_indexNoEvery section of the skill with {index, heading, level, chars, priority, included}. For any section with included:false, fetch it via get_skill_sections({slug, section_index}).
required_factsNoIntake skills only: the questions a professional asks before computing, verbatim from the skill. Answer from what the user said or data you hold, then ask the rest grouped, before any figure.
current_versionNoCurrent version. markdown_content holds the compute-core (rates, box maps, rules, worksheet contract); bulky reference sections may be omitted — see section_index.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / written_by / description
      Previous value: -"The accountant who wrote this skill ({name, profile_url}), when it is accountant-authored; null otherwise."New value: +"The accountant who wrote this skill ({name, profile_url}), when a named approved accountant authored it; null otherwise."
  2. Changed2 schema fields changed
    • changedOutput schema / properties / required_facts / description
      Previous value: -"Intake Guides only: the questions a professional asks before computing, verbatim from the Guide. Answer from what the user said or data you hold, then ask the rest grouped, before any figure."New value: +"Intake skills only: the questions a professional asks before computing, verbatim from the skill. Answer from what the user said or data you hold, then ask the rest grouped, before any figure."
    • changedOutput schema / properties / written_by / description
      Previous value: -"The accountant who wrote this Guide ({name, profile_url}), when it is accountant-authored; null otherwise."New value: +"The accountant who wrote this skill ({name, profile_url}), when it is accountant-authored; null otherwise."
  3. Changed1 schema field changed
    • addedOutput schema / properties / required_facts
      Added value: +{
      +  "description": "Intake Guides only: the questions a professional asks before computing, verbatim from the Guide. Answer from what the user said or data you hold, then ask the rest grouped, before any figure.",
      +  "items": {
      +    "properties": {
      +      "question": {
      +        "type": "string"
      +      },
      +      "topic": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  4. Changed2 schema fields changed
    • changedOutput schema / properties / provenance / properties / tier / enum
      Previous value: -[
      -  "accountant-verified",
      -  "research-verified"
      -]New value: +[
      +  "accountant-verified",
      +  "accountant-authored",
      +  "research-verified"
      +]
    • addedOutput schema / properties / written_by
      Added value: +{
      +  "description": "The accountant who wrote this Guide ({name, profile_url}), when it is accountant-authored; null otherwise.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / reason
      Added value: +{
      +  "description": "One sentence on WHY you're making this call, in the user's terms (for routing analysis only). Optional.",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / provenance / properties / last_verified_at
      Added value: +{
      +  "description": "When the skill's facts were last verified (decay signal), or null if never.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  7. Changed2 schema fields changed
    • addedOutput schema / properties / guardrails
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / next_action
      Added value: +{
      +  "type": "string"
      +}
  8. Changed2 schema fields changed
    • changedOutput schema / properties / current_version / description
      Previous value: -"Current version incl. markdown_content"New value: +"Current version. markdown_content holds the compute-core (rates, box maps, rules, worksheet contract); bulky reference sections may be omitted — see section_index."
    • addedOutput schema / properties / section_index
      Added value: +{
      +  "description": "Every section of the skill with {index, heading, level, chars, priority, included}. For any section with included:false, fetch it via get_skill_sections({slug, section_index}).",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  9. Changed1 schema field changed
    • addedOutput schema / properties / key_facts
      Added value: +{
      +  "description": "Optional at-a-glance facts (rates/thresholds/deadlines/verifier/advisory) — present only where the skill carries a structured key_facts block; omitted otherwise.",
      +  "type": "object"
      +}
  10. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "current_version": {
      +      "description": "Current version incl. markdown_content",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "provenance": {
      +      "properties": {
      +        "attribution_required": {
      +          "type": "boolean"
      +        },
      +        "source_url": {
      +          "type": "string"
      +        },
      +        "tier": {
      +          "enum": [
      +            "accountant-verified",
      +            "research-verified"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "skill": {
      +      "description": "The skill record (slug, name, jurisdiction, tier, etc.)",
      +      "type": "object"
      +    },
      +    "verification": {
      +      "description": "Verification summary",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "skill",
      +    "provenance"
      +  ],
      +  "type": "object"
      +}
  11. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, but the description adds real value by enumerating the returned artifacts (rules, method, quality tier, reviewing accountant, section_index of non-inlined sections, provenance footer) and the instruction to keep the footer with the answer. This is useful operational guidance beyond the structured fields.

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

Conciseness5/5

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

One dense but well-front-loaded sentence: the operation and its input source come first, then the return contents. No filler, no restating of the title.

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?

With an output schema present and rich annotations covering the safety profile, the description supplies the remaining actionable context: where the slug comes from, what the payload contains, and the provenance-footer handling. An agent has everything needed to call and use the result correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description modestly exceeds it by tracing the slug's origin to start/search_skills/search_rules. The optional 'reason' parameter is not described in the tool description, though the schema documents it.

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

Purpose5/5

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

States a specific verb and resource ('Open a skill by slug') plus the reason for doing so ('to answer the user's question'), and names the sibling tools that produce the slug. It is readily distinguishable from get_skill_sections (returns indexed sections) and search_skills (finds slugs).

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

Usage Guidelines4/5

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

Explicitly tells the agent where the required slug comes from (start, search_skills, search_rules), which is the key usage prerequisite. It does not state when to prefer this over get_skill_sections or when not to call it, so it stops short of full when/when-not guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.