Skip to main content
Glama

Get Legislation Table of Contents

legislation_get_toc
Read-onlyIdempotent

USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents (parts, chapters, sections, schedules).

Returns structural elements with XML id and title, e.g. 'section-47: Definitions'. AFTER calling, pass the numeric section identifier (use '47', NOT 'section-47') into legislation_get_section for full text.

Large statutes (Companies Act 2006 has many hundreds of items) are paginated via offset/limit. Check has_more and total_items.

Alternative: call read_resource(uri="legislation://{type}/{year}/{number}/ toc") for the full TOC as a newline-separated id: title string (no pagination). Use this tool when you need the structured response with offset / limit / has_more for stepping through large statutes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeYesLegislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.
yearYesYear of enactment
limitNoMaximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.
numberYesChapter or SI number
offsetNoNumber of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeYesLegislation type code echoed from the request
yearYesYear of enactment echoed from the request
itemsNoTOC entries in XML document order, formatted as '<id>: <title>', e.g. 'section-47: Definitions'. When calling legislation_get_section pass only the numeric part ('47', not 'section-47').
limitYesPage size applied after offset
numberYesChapter or SI number echoed from the request
offsetYesOffset applied to the full TOC item list
has_moreYesTrue if more items remain beyond offset+returned
returnedYesNumber of items in this response
total_itemsYesTotal structural items parsed from the XML, before offset/limit. Compare to `returned` and `has_more` to decide whether to paginate.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed7 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 200,
      +  "description": "Maximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.",
      +  "maximum": 1000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / number
      Added value: +{
      +  "description": "Chapter or SI number",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / params
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "LegislationGetTocInput.",
      -  "properties": {
      -    "limit": {
      -      "default": 200,
      -      "description": "Maximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.",
      -      "maximum": 1000,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "number": {
      -      "description": "Chapter or SI number",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "offset": {
      -      "default": 0,
      -      "description": "Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "type": {
      -      "description": "Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.",
      -      "maxLength": 10,
      -      "minLength": 2,
      -      "type": "string"
      -    },
      -    "year": {
      -      "description": "Year of enactment",
      -      "maximum": 2100,
      -      "minimum": 1800,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "type",
      -    "year",
      -    "number"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / properties / type
      Added value: +{
      +  "description": "Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.",
      +  "maxLength": 10,
      +  "minLength": 2,
      +  "type": "string"
      +}
    • addedInput schema / properties / year
      Added value: +{
      +  "description": "Year of enactment",
      +  "maximum": 2100,
      +  "minimum": 1800,
      +  "type": "integer"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "params"
      -]New value: +[
      +  "type",
      +  "year",
      +  "number"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / params / description
      Previous value: -"LegislationGetTocInput with type, year, number, offset, limit."New value: +"LegislationGetTocInput."
  3. Changed1 schema field changed
    • changedOutput schema / properties / total_items / description
      Previous value: -"Total number of structural items parsed from the XML, before offset/limit. Use this to know the full size of the TOC."New value: +"Total structural items parsed from the XML, before offset/limit. Compare to `returned` and `has_more` to decide whether to paginate."
  4. Changed10 schema fields changed
    • removedInput schema / properties / date
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Optional point-in-time date YYYY-MM-DD for historical version"
      -}
    • removedInput schema / properties / number
      Removed value: -{
      -  "description": "Number, e.g. '46'",
      -  "maxLength": 10,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • addedInput schema / properties / params
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "LegislationGetTocInput with type, year, number, offset, limit.",
      +  "properties": {
      +    "limit": {
      +      "default": 200,
      +      "description": "Maximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.",
      +      "maximum": 1000,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "number": {
      +      "description": "Chapter or SI number",
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "offset": {
      +      "default": 0,
      +      "description": "Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).",
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "type": {
      +      "description": "Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.",
      +      "maxLength": 10,
      +      "minLength": 2,
      +      "type": "string"
      +    },
      +    "year": {
      +      "description": "Year of enactment",
      +      "maximum": 2100,
      +      "minimum": 1800,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "year",
      +    "number"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / type
      Removed value: -{
      -  "description": "Legislation type, e.g. 'ukpga', 'uksi'",
      -  "maxLength": 20,
      -  "minLength": 3,
      -  "type": "string"
      -}
    • removedInput schema / properties / year
      Removed value: -{
      -  "description": "Year, e.g. '2006'",
      -  "maxLength": 4,
      -  "minLength": 4,
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "type",
      -  "year",
      -  "number"
      -]New value: +[
      +  "params"
      +]
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / description
      Added value: +"Paginated table of contents for an Act or Statutory Instrument.\n\nThe upstream XML is fetched in one shot (legislation.gov.uk has no\nserver-side pagination), then sliced client-side via offset/limit.\nFor very large statutes like the Companies Act 2006 (1300+ items)\nuse offset to page through. Check has_more and total_items to\nknow the full size."
    • addedOutput schema / properties
      Added value: +{
      +  "has_more": {
      +    "description": "True if more items remain beyond offset+returned",
      +    "type": "boolean"
      +  },
      +  "items": {
      +    "description": "TOC entries in XML document order, formatted as '<id>: <title>', e.g. 'section-47: Definitions'. When calling legislation_get_section pass only the numeric part ('47', not 'section-47').",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "limit": {
      +    "description": "Page size applied after offset",
      +    "type": "integer"
      +  },
      +  "number": {
      +    "description": "Chapter or SI number echoed from the request",
      +    "type": "integer"
      +  },
      +  "offset": {
      +    "description": "Offset applied to the full TOC item list",
      +    "type": "integer"
      +  },
      +  "returned": {
      +    "description": "Number of items in this response",
      +    "type": "integer"
      +  },
      +  "total_items": {
      +    "description": "Total number of structural items parsed from the XML, before offset/limit. Use this to know the full size of the TOC.",
      +    "type": "integer"
      +  },
      +  "type": {
      +    "description": "Legislation type code echoed from the request",
      +    "type": "string"
      +  },
      +  "year": {
      +    "description": "Year of enactment echoed from the request",
      +    "type": "integer"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "type",
      +  "year",
      +  "number",
      +  "offset",
      +  "limit",
      +  "returned",
      +  "total_items",
      +  "has_more"
      +]
  5. Changed10 schema fields changed
    • addedInput schema / properties / date
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional point-in-time date YYYY-MM-DD for historical version"
      +}
    • addedInput schema / properties / number
      Added value: +{
      +  "description": "Number, e.g. '46'",
      +  "maxLength": 10,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • removedInput schema / properties / params
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "LegislationGetTocInput with type, year, number, offset, limit.",
      -  "properties": {
      -    "limit": {
      -      "default": 200,
      -      "description": "Maximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.",
      -      "maximum": 1000,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "number": {
      -      "description": "Chapter or SI number",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "offset": {
      -      "default": 0,
      -      "description": "Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).",
      -      "minimum": 0,
      -      "type": "integer"
      -    },
      -    "type": {
      -      "description": "Legislation type code: 'ukpga' (Acts), 'uksi' (SIs), 'asp' (Scottish Acts), 'nia' (NI Acts). Use the value from legislation_search results.",
      -      "maxLength": 10,
      -      "minLength": 2,
      -      "type": "string"
      -    },
      -    "year": {
      -      "description": "Year of enactment",
      -      "maximum": 2100,
      -      "minimum": 1800,
      -      "type": "integer"
      -    }
      -  },
      -  "required": [
      -    "type",
      -    "year",
      -    "number"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / properties / type
      Added value: +{
      +  "description": "Legislation type, e.g. 'ukpga', 'uksi'",
      +  "maxLength": 20,
      +  "minLength": 3,
      +  "type": "string"
      +}
    • addedInput schema / properties / year
      Added value: +{
      +  "description": "Year, e.g. '2006'",
      +  "maxLength": 4,
      +  "minLength": 4,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "params"
      -]New value: +[
      +  "type",
      +  "year",
      +  "number"
      +]
    • addedOutput schema / additionalProperties
      Added value: +true
    • removedOutput schema / description
      Removed value: -"Paginated table of contents for an Act or Statutory Instrument.\n\nThe upstream XML is fetched in one shot (legislation.gov.uk has no\nserver-side pagination), then sliced client-side via offset/limit.\nFor very large statutes like the Companies Act 2006 (1300+ items)\nuse offset to page through. Check has_more and total_items to\nknow the full size."
    • removedOutput schema / properties
      Removed value: -{
      -  "has_more": {
      -    "description": "True if more items remain beyond offset+returned",
      -    "type": "boolean"
      -  },
      -  "items": {
      -    "description": "TOC entries in XML document order, formatted as '<id>: <title>', e.g. 'section-47: Definitions'. When calling legislation_get_section pass only the numeric part ('47', not 'section-47').",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "limit": {
      -    "description": "Page size applied after offset",
      -    "type": "integer"
      -  },
      -  "number": {
      -    "description": "Chapter or SI number echoed from the request",
      -    "type": "integer"
      -  },
      -  "offset": {
      -    "description": "Offset applied to the full TOC item list",
      -    "type": "integer"
      -  },
      -  "returned": {
      -    "description": "Number of items in this response",
      -    "type": "integer"
      -  },
      -  "total_items": {
      -    "description": "Total number of structural items parsed from the XML, before offset/limit. Use this to know the full size of the TOC.",
      -    "type": "integer"
      -  },
      -  "type": {
      -    "description": "Legislation type code echoed from the request",
      -    "type": "string"
      -  },
      -  "year": {
      -    "description": "Year of enactment echoed from the request",
      -    "type": "integer"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "type",
      -  "year",
      -  "number",
      -  "offset",
      -  "limit",
      -  "returned",
      -  "total_items",
      -  "has_more"
      -]
  6. Changed1 schema field changed
    • addedInput schema / properties / params / description
      Added value: +"LegislationGetTocInput with type, year, number, offset, limit."
  7. Changed15 schema fields changed
    • addedInput schema / properties / params / properties / limit
      Added value: +{
      +  "default": 200,
      +  "description": "Maximum items to return in this call (default 200, max 1000). Raise only when you need a larger slice in one response. Check has_more and total_items to know if further pages exist.",
      +  "maximum": 1000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / params / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Number of items to skip from the flattened TOC. Use with limit to page through very large statutes like the Companies Act 2006 (1300+ items).",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / description
      Previous value: -"Generic wrapper for non-object return types."New value: +"Paginated table of contents for an Act or Statutory Instrument.\n\nThe upstream XML is fetched in one shot (legislation.gov.uk has no\nserver-side pagination), then sliced client-side via offset/limit.\nFor very large statutes like the Companies Act 2006 (1300+ items)\nuse offset to page through. Check has_more and total_items to\nknow the full size."
    • addedOutput schema / properties / has_more
      Added value: +{
      +  "description": "True if more items remain beyond offset+returned",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / items
      Added value: +{
      +  "description": "TOC entries in XML document order, formatted as '<id>: <title>', e.g. 'section-47: Definitions'. When calling legislation_get_section pass only the numeric part ('47', not 'section-47').",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / limit
      Added value: +{
      +  "description": "Page size applied after offset",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / number
      Added value: +{
      +  "description": "Chapter or SI number echoed from the request",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / offset
      Added value: +{
      +  "description": "Offset applied to the full TOC item list",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / result
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / returned
      Added value: +{
      +  "description": "Number of items in this response",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / total_items
      Added value: +{
      +  "description": "Total number of structural items parsed from the XML, before offset/limit. Use this to know the full size of the TOC.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / type
      Added value: +{
      +  "description": "Legislation type code echoed from the request",
      +  "type": "string"
      +}
    • addedOutput schema / properties / year
      Added value: +{
      +  "description": "Year of enactment echoed from the request",
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "result"
      -]New value: +[
      +  "type",
      +  "year",
      +  "number",
      +  "offset",
      +  "limit",
      +  "returned",
      +  "total_items",
      +  "has_more"
      +]
    • removedOutput schema / x-fastmcp-wrap-result
      Removed value: -true
  8. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context: pagination via offset/limit, has_more/total_items fields, and a note about stripping the 'section-' prefix when passing IDs to legislation_get_section.

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

Conciseness4/5

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

The description is front-loaded with an explicit use case and is well-structured into purpose, return elements, pagination, and alternative. It is longer than strictly necessary, but each sentence adds value and the structure helps an agent parse it.

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

Completeness4/5

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

Given the tool's complexity (5 parameters, pagination, output schema), the description covers the essential context: when to use it, how pagination works, what the returned elements look like, and how the output relates to sibling tool legislation_get_section. With annotations and output schema present, this is sufficiently complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds some pragmatic guidance (e.g., 'Use the value from legislation_search results' for type, and check has_more/total_items for pagination), but these mostly reinforce the schema rather than providing new semantics.

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

Purpose5/5

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

The description states a specific purpose: retrieving the structural table of contents for a known Act/SI, enumerating parts, chapters, sections, schedules. It clearly distinguishes this from sibling tools like legislation_get_section and read_resource.

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

Usage Guidelines5/5

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

It explicitly says 'USE THIS TOOL WHEN you have a known Act / SI and want the structural table of contents'. It also provides an alternative (read_resource) and explains when to choose this tool over that alternative (when structured response with pagination is needed).

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.

TDQS

A4.4/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose, with detailed descriptions that prevent ambiguity. Tools covering similar domains (e.g., multiple parliament search tools) are carefully differentiated by their search approach and input requirements.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (e.g., bills_get_bill, case_law_search, citations_resolve). Even generic tools adhere to this style. No mixing of conventions.

Tool Count4/5

With 35 tools, the count is on the higher side but appropriate for the wide-ranging domain of UK legal research. Each tool contributes to specific sub-domains (bills, case law, citations, committees, HMRC, legislation, parliament, votes) without unnecessary duplication.

Completeness5/5

The tool surface covers nearly all essential aspects of UK legal research: searching and retrieving bills, case law, and legislation; parsing and resolving citations; exploring committee evidence; accessing Hansard debates and member interests; and checking HMRC guidance and VAT rates. Gaps like full judgment text retrieval are mitigated by paragraph-level access and indexing.