Skip to main content
Glama

Inspect CSV template columns

inspect_template
Read-onlyIdempotent

Get the CSV column headers for any supported ISO 20022 pain message type to see the exact column order needed when hand-building a CSV file.

Instructions

Return the CSV column headers the message type's bundled template uses.

Use this to see the exact column order for hand-building a CSV before
``generate_message_from_file``. This returns column *names* from the
bundled sample; for the typed JSON contract (types, required flags) use
``get_input_schema``.

Mirrors the in-tree ``pain001.mcp.server.inspect_template`` tool so an
agent can introspect the column layout before assembling rows.

Args:
    message_type: A supported ISO 20022 pain message type.

Returns:
    ``{"message_type": str, "columns": list[str]}`` or
    ``{"error": ...}`` if the type is unsupported or no template ships.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
message_typeYesA supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.001.001.13', 'pain.008.001.02', 'pain.008.001.08', 'pain.001', 'pain.008' (see list_message_types). The bare family names 'pain.001' and 'pain.008' are accepted as aliases for 'pain.001.001.09' and 'pain.008.001.02'.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
columnsNo
message_typeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.0.71
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "The bundled CSV template's column names for one message type.",
      +  "properties": {
      +    "columns": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "title": "Columns",
      +      "type": "array"
      +    },
      +    "error": {
      +      "title": "Error",
      +      "type": "string"
      +    },
      +    "message_type": {
      +      "title": "Message Type",
      +      "type": "string"
      +    }
      +  },
      +  "title": "TemplateResult",
      +  "type": "object"
      +}
  2. Changed2 schema fields changedv0.0.67
    • changedInput schema / properties / message_type / description
      Previous value: -"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.001.001.13', 'pain.008.001.02', 'pain.001', 'pain.008' (see list_message_types). The bare family names 'pain.001' and 'pain.008' are accepted as aliases for 'pain.001.001.09' and 'pain.008.001.02'."New value: +"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.001.001.13', 'pain.008.001.02', 'pain.008.001.08', 'pain.001', 'pain.008' (see list_message_types). The bare family names 'pain.001' and 'pain.008' are accepted as aliases for 'pain.001.001.09' and 'pain.008.001.02'."
    • changedInput schema / properties / message_type / enum
      Previous value: -[
      -  "pain.001.001.03",
      -  "pain.001.001.04",
      -  "pain.001.001.05",
      -  "pain.001.001.06",
      -  "pain.001.001.07",
      -  "pain.001.001.08",
      -  "pain.001.001.09",
      -  "pain.001.001.10",
      -  "pain.001.001.11",
      -  "pain.001.001.12",
      -  "pain.001.001.13",
      -  "pain.008.001.02",
      -  "pain.001",
      -  "pain.008"
      -]New value: +[
      +  "pain.001.001.03",
      +  "pain.001.001.04",
      +  "pain.001.001.05",
      +  "pain.001.001.06",
      +  "pain.001.001.07",
      +  "pain.001.001.08",
      +  "pain.001.001.09",
      +  "pain.001.001.10",
      +  "pain.001.001.11",
      +  "pain.001.001.12",
      +  "pain.001.001.13",
      +  "pain.008.001.02",
      +  "pain.008.001.08",
      +  "pain.001",
      +  "pain.008"
      +]
  3. Changed2 schema fields changed
    • changedInput schema / properties / message_type / description
      Previous value: -"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02', 'pain.001', 'pain.008' (see list_message_types). The bare family names 'pain.001' and 'pain.008' are accepted as aliases for 'pain.001.001.09' and 'pain.008.001.02'."New value: +"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.001.001.13', 'pain.008.001.02', 'pain.001', 'pain.008' (see list_message_types). The bare family names 'pain.001' and 'pain.008' are accepted as aliases for 'pain.001.001.09' and 'pain.008.001.02'."
    • changedInput schema / properties / message_type / enum
      Previous value: -[
      -  "pain.001.001.03",
      -  "pain.001.001.04",
      -  "pain.001.001.05",
      -  "pain.001.001.06",
      -  "pain.001.001.07",
      -  "pain.001.001.08",
      -  "pain.001.001.09",
      -  "pain.001.001.10",
      -  "pain.001.001.11",
      -  "pain.001.001.12",
      -  "pain.008.001.02",
      -  "pain.001",
      -  "pain.008"
      -]New value: +[
      +  "pain.001.001.03",
      +  "pain.001.001.04",
      +  "pain.001.001.05",
      +  "pain.001.001.06",
      +  "pain.001.001.07",
      +  "pain.001.001.08",
      +  "pain.001.001.09",
      +  "pain.001.001.10",
      +  "pain.001.001.11",
      +  "pain.001.001.12",
      +  "pain.001.001.13",
      +  "pain.008.001.02",
      +  "pain.001",
      +  "pain.008"
      +]
  4. Addedv0.0.60
  5. Removed
  6. Changed2 schema fields changed
    • changedInput schema / properties / message_type / description
      Previous value: -"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types)."New value: +"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02', 'pain.001', 'pain.008' (see list_message_types). The bare family names 'pain.001' and 'pain.008' are accepted as aliases for 'pain.001.001.09' and 'pain.008.001.02'."
    • changedInput schema / properties / message_type / enum
      Previous value: -[
      -  "pain.001.001.03",
      -  "pain.001.001.04",
      -  "pain.001.001.05",
      -  "pain.001.001.06",
      -  "pain.001.001.07",
      -  "pain.001.001.08",
      -  "pain.001.001.09",
      -  "pain.001.001.10",
      -  "pain.001.001.11",
      -  "pain.001.001.12",
      -  "pain.008.001.02"
      -]New value: +[
      +  "pain.001.001.03",
      +  "pain.001.001.04",
      +  "pain.001.001.05",
      +  "pain.001.001.06",
      +  "pain.001.001.07",
      +  "pain.001.001.08",
      +  "pain.001.001.09",
      +  "pain.001.001.10",
      +  "pain.001.001.11",
      +  "pain.001.001.12",
      +  "pain.008.001.02",
      +  "pain.001",
      +  "pain.008"
      +]
  7. Changed2 schema fields changedv0.0.57
    • changedInput schema / properties / message_type / description
      Previous value: -"A supported ISO 20022 pain message type whose bundled CSV template columns to return, e.g. 'pain.001.001.09' — see list_message_types."New value: +"A supported ISO 20022 pain message type. Must be exactly one of: 'pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05', 'pain.001.001.06', 'pain.001.001.07', 'pain.001.001.08', 'pain.001.001.09', 'pain.001.001.10', 'pain.001.001.11', 'pain.001.001.12', 'pain.008.001.02' (see list_message_types)."
    • addedInput schema / properties / message_type / enum
      Added value: +[
      +  "pain.001.001.03",
      +  "pain.001.001.04",
      +  "pain.001.001.05",
      +  "pain.001.001.06",
      +  "pain.001.001.07",
      +  "pain.001.001.08",
      +  "pain.001.001.09",
      +  "pain.001.001.10",
      +  "pain.001.001.11",
      +  "pain.001.001.12",
      +  "pain.008.001.02"
      +]
  8. Changed1 schema field changedv0.0.56
    • addedInput schema / properties / message_type / description
      Added value: +"A supported ISO 20022 pain message type whose bundled CSV template columns to return, e.g. 'pain.001.001.09' — see list_message_types."
  9. First observed

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it returns column names from the bundled sample, returns an error for unsupported types or missing templates, and clarifies the alias behavior for bare family names. This goes beyond the annotations without contradicting them.

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?

The description is compact and front-loaded: the first sentence states the core function, the second gives usage context, and the third distinguishes from a sibling. The Args/Returns sections are minimal and directly useful. Every sentence earns its place.

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?

For a simple read-only introspection tool with one parameter, a full output schema, and rich annotations, the description is complete. It covers the return shape, error behavior, and the relationship to sibling tools. Nothing an agent needs to call it correctly is missing.

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 description coverage is 100%, so the schema already documents the parameter fully, including the enum values and alias behavior. The description adds a concise restatement of the parameter's purpose and the return contract, which is helpful but not strictly necessary. Baseline 3 is exceeded slightly because the description clarifies the alias semantics in the context of the tool's purpose.

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 verb ('Return the CSV column headers') and resource ('the message type's bundled template'), and distinguishes it from siblings by naming get_input_schema and generate_message_from_file. An agent can tell exactly what this tool does and how it differs from related tools.

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?

The description explicitly says when to use this tool ('to see the exact column order for hand-building a CSV before generate_message_from_file') and when not to ('for the typed JSON contract ... use get_input_schema'). It also notes the mirroring of an in-tree tool, giving clear context for selection.

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