Skip to main content
Glama

Bankstatemently

Convert Bank Statement

convert_statement

Convert a bank statement PDF into structured data or a spreadsheet. When the user attaches a PDF in the conversation, it arrives automatically as pdf_file — never encode it yourself. Otherwise, pass pdf_url for a public HTTPS link. If your host has no way to reference the attached file at all (no pdf_file/pdf_url equivalent), call request_upload first and pass its upload_id here instead. The base64 pdf parameter is a last resort only, for a caller with no other way to reference the file. To convert several statements in one call, pass upload_ids (the array from a single request_upload call made with count set) instead of pdf/pdf_url/pdf_file/upload_id — mutually exclusive with those four. This batch form only ADMITS each file (queues it, or reports an already-completed duplicate) and returns immediately with a compact per-file status list plus a summary — it never waits for conversion, so call get_statement per document_id once ready rather than expecting inline results here. Returns accounts, transactions, and metadata. output_format "json" (default) returns the data inline, renderable in chat. The other formats (csv, xlsx, qbo, xero) return a time-limited download link instead: present it as a normal link. Every response includes a "summary" field: use it as the single source of truth for what happened. If the conversation is not in English, translate it faithfully into the conversation language; never add details it doesn't contain. Never echo raw status values (e.g. "completed") or field names. Consumes credits (1 per page). Page limit depends on your plan.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pdfNoBase64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link
pdf_urlNoHTTPS URL to fetch the PDF from
passwordNoPassword for encrypted PDFs
pdf_fileNoAn attached PDF (populated automatically by ChatGPT — do not construct this yourself).
upload_idNoAn upload_id from request_upload, after PUTting the file to its upload_url. Use this only when your host has no other way to reference the attached file (no pdf_file/pdf_url equivalent).
upload_idsNoBatch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement.
output_formatNoOutput formatjson

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hintNo
errorNo
gatingNo
statusYes
columnsNo
messageNo
resultsNo
summaryNo
dataModeNo
documentNo
warningsNo
elapsedMsNo
exportUrlNo
documentIdNo
paginationNo
transactionsNo
confidenceScoreNo
estimateSecondsNo
processingStageNo
transactionCountNo
processingProgressNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • removedOutput schema / properties / completedAt
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedOutput schema / properties / createdAt
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedOutput schema / properties / extraction
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "method": {
      -      "enum": [
      -        "rule",
      -        "vlm",
      -        "precomputed"
      -      ],
      -      "type": "string"
      -    },
      -    "pageCount": {
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "method",
      -    "pageCount"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / processedAt
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / processingTimeMs
      Removed value: -{
      -  "type": "number"
      -}
  2. Changed23 schema fields changed
    • addedOutput schema / $defs
      Added value: +{
      +  "__schema0": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "number"
      +      },
      +      {
      +        "type": "boolean"
      +      },
      +      {
      +        "type": "null"
      +      },
      +      {
      +        "items": {
      +          "$ref": "#/$defs/__schema0"
      +        },
      +        "type": "array"
      +      },
      +      {
      +        "additionalProperties": {
      +          "$ref": "#/$defs/__schema0"
      +        },
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    ]
      +  }
      +}
    • changedOutput schema / properties / columns / items / additionalProperties
      Previous value: -{}New value: +false
    • addedOutput schema / properties / completedAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / createdAt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / bank
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / bankId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / country
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / currency
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / documentType
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / languages
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / pageCount
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / statementDate
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / document / properties / statementPeriod
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "from": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "to": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "from",
      +    "to"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / document / properties / statements
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "date": {
      +        "type": "string"
      +      },
      +      "period": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "from": {
      +            "type": "string"
      +          },
      +          "to": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "from",
      +          "to"
      +        ],
      +        "type": "object"
      +      },
      +      "products": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "accounts": {
      +              "items": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "accountHolderName": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "accountId": {
      +                    "anyOf": [
      +                      {
      +                        "type": "number"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "accountNumber": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "cardNumber": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "categories": {
      +                    "items": {
      +                      "additionalProperties": {
      +                        "$ref": "#/$defs/__schema0"
      +                      },
      +                      "propertyNames": {
      +                        "type": "string"
      +                      },
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "currency": {
      +                    "type": "string"
      +                  },
      +                  "declared": {
      +                    "items": {
      +                      "additionalProperties": {
      +                        "$ref": "#/$defs/__schema0"
      +                      },
      +                      "propertyNames": {
      +                        "type": "string"
      +                      },
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "totals": {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "closingBalance": {
      +                        "anyOf": [
      +                          {
      +                            "type": "number"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "openingBalance": {
      +                        "anyOf": [
      +                          {
      +                            "type": "number"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "totalCredits": {
      +                        "anyOf": [
      +                          {
      +                            "type": "number"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      },
      +                      "totalDebits": {
      +                        "anyOf": [
      +                          {
      +                            "type": "number"
      +                          },
      +                          {
      +                            "type": "null"
      +                          }
      +                        ]
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  "transactions": {
      +                    "items": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "accountId": {
      +                          "type": "number"
      +                        },
      +                        "amount": {
      +                          "anyOf": [
      +                            {
      +                              "type": "number"
      +                            },
      +                            {
      +                              "type": "string"
      +                            }
      +                          ]
      +                        },
      +                        "balance": {
      +                          "anyOf": [
      +                            {
      +                              "type": "number"
      +                            },
      +                            {
      +                              "type": "string"
      +                            }
      +                          ]
      +                        },
      +                        "category": {
      +                          "type": "string"
      +                        },
      +                        "checkNumber": {
      +                          "type": "string"
      +                        },
      +                        "currency": {
      +                          "type": "string"
      +                        },
      +                        "date": {
      +                          "type": "string"
      +                        },
      +                        "description": {
      +                          "type": "string"
      +                        },
      +                        "direction": {
      +                          "anyOf": [
      +                            {
      +                              "type": "string"
      +                            },
      +                            {
      +                              "type": "null"
      +                            }
      +                          ]
      +                        },
      +                        "originalData": {
      +                          "additionalProperties": {
      +                            "type": "string"
      +                          },
      +                          "propertyNames": {
      +                            "type": "string"
      +                          },
      +                          "type": "object"
      +                        },
      +                        "reference": {
      +                          "type": "string"
      +                        },
      +                        "sequence": {
      +                          "type": "number"
      +                        }
      +                      },
      +                      "required": [
      +                        "sequence",
      +                        "date",
      +                        "description",
      +                        "amount",
      +                        "direction",
      +                        "currency"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "type": "array"
      +                  }
      +                },
      +                "required": [
      +                  "accountId"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "categories": {
      +              "items": {
      +                "additionalProperties": {
      +                  "$ref": "#/$defs/__schema0"
      +                },
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "currency": {
      +              "anyOf": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "declared": {
      +              "items": {
      +                "additionalProperties": {
      +                  "$ref": "#/$defs/__schema0"
      +                },
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "productId": {
      +              "anyOf": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "productName": {
      +              "anyOf": [
      +                {
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "required": [
      +            "productId",
      +            "productName",
      +            "currency",
      +            "accounts"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "products"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / elapsedMs
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "pass": {
      +          "type": "number"
      +        },
      +        "total": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "pass",
      +        "total"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / estimateSeconds
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / extraction / additionalProperties
      Previous value: -{}New value: +false
    • changedOutput schema / properties / gating / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "accessMode": {
      -        "enum": [
      -          "paid",
      -          "free_processed"
      -        ],
      -        "type": "string"
      -      },
      -      "gatedRecipe": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "template-first",
      -              "vlm-learning"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "hiddenTransactionPages": {
      -        "type": "number"
      -      },
      -      "previewMode": {
      -        "type": "boolean"
      -      },
      -      "previewPageLimit": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "previewPages": {
      -        "items": {
      -          "type": "number"
      -        },
      -        "type": "array"
      -      },
      -      "previewTransactionCount": {
      -        "type": "number"
      -      },
      -      "processedPages": {
      -        "type": "number"
      -      },
      -      "requiresPlanUpgrade": {
      -        "type": "boolean"
      -      },
      -      "resultQuality": {
      -        "enum": [
      -          "verified",
      -          "partial",
      -          "unverified"
      -        ],
      -        "type": "string"
      -      },
      -      "totalPages": {
      -        "type": "number"
      -      },
      -      "totalTransactionCount": {
      -        "type": "number"
      -      },
      -      "unlocked": {
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "previewMode",
      -      "accessMode",
      -      "previewPageLimit",
      -      "previewPages",
      -      "hiddenTransactionPages",
      -      "processedPages",
      -      "totalPages",
      -      "totalTransactionCount",
      -      "previewTransactionCount",
      -      "unlocked",
      -      "requiresPlanUpgrade",
      -      "resultQuality",
      -      "gatedRecipe"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "accessMode": {
      +        "enum": [
      +          "paid",
      +          "free_processed"
      +        ],
      +        "type": "string"
      +      },
      +      "gatedRecipe": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "template-first",
      +              "vlm-learning"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "hiddenTransactionPages": {
      +        "type": "number"
      +      },
      +      "previewMode": {
      +        "type": "boolean"
      +      },
      +      "previewPageLimit": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "previewPages": {
      +        "items": {
      +          "type": "number"
      +        },
      +        "type": "array"
      +      },
      +      "previewTransactionCount": {
      +        "type": "number"
      +      },
      +      "processedPages": {
      +        "type": "number"
      +      },
      +      "requiresPlanUpgrade": {
      +        "type": "boolean"
      +      },
      +      "resultQuality": {
      +        "enum": [
      +          "verified",
      +          "partial",
      +          "unverified"
      +        ],
      +        "type": "string"
      +      },
      +      "totalPages": {
      +        "type": "number"
      +      },
      +      "totalTransactionCount": {
      +        "type": "number"
      +      },
      +      "unlocked": {
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "previewMode",
      +      "accessMode",
      +      "previewPageLimit",
      +      "previewPages",
      +      "hiddenTransactionPages",
      +      "processedPages",
      +      "totalPages",
      +      "totalTransactionCount",
      +      "previewTransactionCount",
      +      "unlocked",
      +      "requiresPlanUpgrade",
      +      "resultQuality",
      +      "gatedRecipe"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / pagination / additionalProperties
      Previous value: -{}New value: +false
    • addedOutput schema / properties / processingProgress
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "pagesProcessed": {
      +          "type": "number"
      +        },
      +        "pass": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "number": {
      +              "type": "number"
      +            },
      +            "startedAt": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "number",
      +            "startedAt"
      +          ],
      +          "type": "object"
      +        },
      +        "totalPages": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "pagesProcessed",
      +        "totalPages"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / processingStage
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / results / items / additionalProperties
      Previous value: -{}New value: +false
    • changedOutput schema / properties / warnings / items / additionalProperties
      Previous value: -{}New value: +false
  3. Changed13 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / properties / output_format / description
      Added value: +"Output format"
    • addedInput schema / properties / password / description
      Added value: +"Password for encrypted PDFs"
    • addedInput schema / properties / pdf / description
      Added value: +"Base64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link"
    • addedInput schema / properties / pdf_file / description
      Added value: +"An attached PDF (populated automatically by ChatGPT — do not construct this yourself)."
    • addedInput schema / properties / pdf_file / properties / download_url / description
      Added value: +"Signed URL ChatGPT provides to fetch the attached PDF's bytes."
    • addedInput schema / properties / pdf_file / properties / file_id / description
      Added value: +"ChatGPT's identifier for the attached file."
    • addedInput schema / properties / pdf_file / properties / file_name / description
      Added value: +"Original filename of the attached file, when ChatGPT provides one."
    • addedInput schema / properties / pdf_file / properties / mime_type / description
      Added value: +"MIME type of the attached file, when ChatGPT provides one."
    • addedInput schema / properties / pdf_url / description
      Added value: +"HTTPS URL to fetch the PDF from"
    • addedInput schema / properties / upload_id / description
      Added value: +"An upload_id from request_upload, after PUTting the file to its upload_url. Use this only when your host has no other way to reference the attached file (no pdf_file/pdf_url equivalent)."
    • addedInput schema / properties / upload_ids / description
      Added value: +"Batch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement."
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  4. Changed11 schema fields changed
    • removedInput schema / properties / output_format / description
      Removed value: -"Output format"
    • removedInput schema / properties / password / description
      Removed value: -"Password for encrypted PDFs"
    • removedInput schema / properties / pdf / description
      Removed value: -"Base64-encoded PDF content — last resort only; prefer pdf_file for an attachment or pdf_url for a link"
    • removedInput schema / properties / pdf_file / description
      Removed value: -"An attached PDF (populated automatically by ChatGPT — do not construct this yourself)."
    • removedInput schema / properties / pdf_file / properties / download_url / description
      Removed value: -"Signed URL ChatGPT provides to fetch the attached PDF's bytes."
    • removedInput schema / properties / pdf_file / properties / file_id / description
      Removed value: -"ChatGPT's identifier for the attached file."
    • removedInput schema / properties / pdf_file / properties / file_name / description
      Removed value: -"Original filename of the attached file, when ChatGPT provides one."
    • removedInput schema / properties / pdf_file / properties / mime_type / description
      Removed value: -"MIME type of the attached file, when ChatGPT provides one."
    • removedInput schema / properties / pdf_url / description
      Removed value: -"HTTPS URL to fetch the PDF from"
    • removedInput schema / properties / upload_id / description
      Removed value: -"An upload_id from request_upload, after PUTting the file to its upload_url. Use this only when your host has no other way to reference the attached file (no pdf_file/pdf_url equivalent)."
    • removedInput schema / properties / upload_ids / description
      Removed value: -"Batch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement."
  5. Changed2 schema fields changed
    • addedInput schema / properties / upload_ids
      Added value: +{
      +  "description": "Batch of upload_ids from a single request_upload(count) call, each already PUT to its own upload_url — converts many statements in one call. Mutually exclusive with pdf, pdf_url, pdf_file, and upload_id. Admission only: the response reports per-file status immediately, never waiting for conversion — fetch results per document_id via get_statement.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 100,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedOutput schema / properties / results
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "content_hash": {
      +        "type": "string"
      +      },
      +      "duplicate": {
      +        "type": "boolean"
      +      },
      +      "error_code": {
      +        "type": "string"
      +      },
      +      "status": {
      +        "type": "string"
      +      },
      +      "upload_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "upload_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  6. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false, so the description carries the burden of behavioral disclosure and delivers richly: it discloses that batch mode 'only ADMITS each file' and returns immediately, that non-json formats return a time-limited download link, that the summary field is the single source of truth, that credits are consumed at 1 per page with plan-dependent page limits, and that responses must never echo raw status values. No contradiction exists between the description and annotations.

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 long but every sentence earns its place given the tool's genuine complexity: input-method resolution, batch vs. single semantics, output-format behavior, translation rules, and pricing. However, it is a single dense unbroken paragraph; bullet-style structuring of the input-method rules would improve scannability without adding words.

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 high complexity (7 parameters, batch mode, 5 output formats, 16 siblings) and a present output schema, the description covers nearly everything an agent needs: all input reference pathways, batch admit-only behavior with the get_statement handoff, inline vs. download-link output behavior, credit cost, and the summary-field contract. Minor gaps such as failure/error handling and the exact shape of the summary field are acceptable since an output schema exists.

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%, giving a baseline of 3, and the description adds real value beyond the schema: it establishes a priority order among pdf_file/pdf_url/upload_id/base64 pdf, clarifies that pdf_file is auto-populated and must never be self-encoded, and explains the admission-only semantics and mutual exclusivity of upload_ids. It does not add per-parameter syntax details beyond the schema, but the orchestration-level semantics it provides are substantial.

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 opens with a specific verb+resource+outcome: 'Convert a bank statement PDF into structured data or a spreadsheet.' This unambiguously distinguishes it from siblings like get_statement (retrieving results), request_upload (uploading files), and categorize_statement (post-conversion analysis). The name, title, and description align without the description merely restating the title.

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 gives explicit when-to-use guidance for every input method: pdf_file arrives automatically for attachments, pdf_url for public HTTPS links, upload_id only when the host lacks attachment references, base64 as a declared last resort, and upload_ids for batching. It explicitly names the alternative follow-up: 'call get_statement per document_id once ready rather than expecting inline results here,' and states that batch mode is mutual-exclusive with the single-file parameters.

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.