Skip to main content
Glama
@proof-holdings/mcp-server

@proof-holdings/mcp-server

Official

list_templates

Read-only

List custom message templates for a sub-account by channel and message type. Pass profile_id to target a specific sub-account, or omit it to use the key's default.

Instructions

List the custom message templates of one sub-account, organized by channel and message type. Templates belong to a sub-account, not to the account: profile_id picks it — omitted, a sub-account key lists its own sub-account and an account-wide key the primary sub-account.

ACCESS: needs a Proof account. Set PROOF_API_KEY and restart this server, then call this tool again. start_login does NOT open this tool.

Input Schema

NameRequiredDescriptionDefault
profile_idNoThe sub-account to act on; omitted → your key's sub-account, or the primary sub-account for an account-wide key

Output Schema

NameRequiredDescriptionDefault
sendableNoWhat a template is sent for. Always sent; absent from an API that predates it.
profile_idNo
custom_templatesYes
available_channelsYes
available_variablesYes
available_message_typesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv1.7.2
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / profile_id / description
      Previous value: -"The sub-account (project) to act on; omitted → your key's project, or the primary project for an account-wide key"New value: +"The sub-account to act on; omitted → your key's sub-account, or the primary sub-account for an account-wide key"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "available_channels": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "available_message_types": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "available_variables": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "description": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "custom_templates": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "body": {
      +            "type": "string"
      +          },
      +          "button_text": {
      +            "type": "string"
      +          },
      +          "button_url_template": {
      +            "type": "string"
      +          },
      +          "channel": {
      +            "type": "string"
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "is_active": {
      +            "type": "boolean"
      +          },
      +          "last_fallback_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "last_fallback_variables": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "message_type": {
      +            "type": "string"
      +          },
      +          "profile_id": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "subject": {
      +            "type": "string"
      +          },
      +          "updated_at": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "channel",
      +          "message_type",
      +          "body"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "profile_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "sendable": {
      +      "description": "What a template is sent for. Always sent; absent from an API that predates it.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "channel": {
      +            "type": "string"
      +          },
      +          "message_type": {
      +            "type": "string"
      +          },
      +          "variables": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "channel",
      +          "message_type",
      +          "variables"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "custom_templates",
      +    "available_channels",
      +    "available_message_types",
      +    "available_variables"
      +  ],
      +  "type": "object"
      +}
  2. Changed2 schema fields changedv1.7.0
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / profile_id
      Added value: +{
      +  "description": "The sub-account (project) to act on; omitted → your key's project, or the primary project for an account-wide key",
      +  "pattern": "^[0-9a-fA-F]{24}$",
      +  "type": "string"
      +}
  3. First observedv1.1.0

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds context the annotation cannot carry: the authentication prerequisite, the required restart, and the notable fact that the login flow does not satisfy it. That is precisely the kind of operational behavior an agent needs before wasting a call.

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?

Scope and grouping come first, then the sub-account ownership rule, then a clearly separated ACCESS block. Two sentences carry a lot without padding, though the ACCESS note sits somewhat outside the tool's functional description.

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 one optional parameter fully documented and an output schema present, the description need not explain return values; it covers the non-obvious risks instead (sub-account scoping, auth prerequisite, login-flow dead end). 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.

Parameters3/5

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

Schema description coverage is 100%, so profile_id is already documented, and the description largely restates the same omitted-parameter default logic. It phrases the account-wide-key case slightly more explicitly, but adds little meaning beyond the schema — baseline 3 applies.

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?

The description states a specific verb and resource — list the custom message templates — plus the scope (one sub-account) and the grouping (by channel and message type). The word 'custom' implicitly separates it from get_default_templates and the singular get_template, though neither sibling is named outright.

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

Usage Guidelines3/5

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

It gives real prerequisite guidance (needs a Proof account, PROOF_API_KEY, restart) and explicitly rules out start_login as a way in, which is genuinely useful. However, it never says when to call this versus get_template, get_default_templates, or preview_template, so alternative selection is left to inference.

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