mcp-invoices-pt
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| INVOICES_PT_CONFIG | No | Path to the config.yaml file, if it is not in the default location (~/.config/mcp-invoicesPT/config.yaml). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scan_inboxA | List the files in the inbox folder (PDFs, images, e-Fatura CSVs), newest first: kind (document, not_an_invoice, efatura_export), whether a PDF reads like an invoice, its status in the ledger (new, extracted, filed) and whether it is an exact copy of another inbox file. |
| plan_inboxA | Read everything in the inbox and return the plan, without writing anything: expense rows ready for
add_expense (with the file name for file_document and any |
| extractA | Read one invoice or receipt (PDF or photo). Returns the document fields, which layer read them (qr / parser: / text), a booking proposal (VAT code, region, ECB rate, payment account, business share, document label, file name) and a ready expense row. If a PDF does not read like an invoice or receipt, its text is withheld unless read_anyway=true, so unrelated documents are not exposed. |
| read_efaturaB | Parse an e-Fatura CSV export into documents, each with a booking proposal. |
| add_expenseA | Add one expense row to the year's expenses tab. |
| index_yearA | Read every document already in the year's folders into the ledger, so later copies are recognised. Run it once per year (and again after moving files by hand). |
| file_documentA | Move a document from the inbox into its tax-year folder under the proposed name (or |
| missingA | What is still missing for a year: rows flagged MISSING, rows whose file is not in the folder, rows without a date, amount or invoice number, files in the folder no row books (and receipts that duplicate a booked payment), and months missing in monthly subscriptions. For income: sales without an AT document yet, missing files and unbooked files. |
| propose_incomeB | Read one sale: your own invoice and/or the AT document issued on the Portal (recibo verde, fatura or fatura-recibo). Returns the income row (client, tax id, recibo no. and date, amount, rate, IVA, withholding, VAT case), the file names to file both under, and checks that the two documents belong together. |
| add_incomeA | Add one sale to the year's income tab. |
| income_totalsB | The IRS and Segurança Social totals at the top of the income tab, per quarter and for the year: gross income by invoice date (IRS), income by recibo date (Segurança Social quarterly declaration), and business expenses. |
| reconcile_efaturaB | Compare an e-Fatura CSV export with the expenses tab: invoices not in the sheet, rows whose amount, VAT or invoice number differ (or that lack fields e-Fatura has), and Portuguese rows e-Fatura lacks. |
| vat_returnB | The Declaração Periódica boxes for a quarter (Q1-Q4) as the sheet shows them, including the credit carried over (box 61) and the result boxes 90-96, and whether the quarter is already filed. |
| mark_filedA | After the user submits a quarter: freeze its declaration values, grey them and lock (warning-only) the quarter's block column, expense rows and income rows. If the submitted return PDF is in the year folder (or given), its boxes are compared with the sheet; apply_pdf_values=true copies the PDF's values over the frozen ones, since the submitted return is the source of truth. Dry run first. |
| vat_codesB | The purchase and sales VAT codes the sheet understands, and which return boxes each one fills. |
| create_year_sheetB | Create a tax year's books: a local .xlsx workbook (default) or tabs in a Google Sheet, per the config. Expenses and income tables with the Declaração Periódica block (what to type each quarter, with the credit carried over), quarter sums, IRS / Segurança Social totals, formulas, dropdowns and formats. The opening credit (Q1 box 61) defaults to the previous year's Q4 box 96. Refuses to overwrite. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 16 tools
The tools mostly map to distinct workflow stages: inbox scanning/planning, document extraction, expense/income booking, filing, reconciliation, VAT reporting, and year-sheet lifecycle. There is some potential overlap around e-Fatura reading versus reconciliation and inbox planning versus scanning, but the descriptions make the intended boundaries fairly clear.
All names use snake_case, and most follow a verb_noun pattern such as add_expense, file_document, reconcile_efatura, and create_year_sheet. A few departures like extract, missing, income_totals, vat_return, and vat_codes are still readable but slightly less predictable.
Sixteen tools is slightly above the typical well-scoped range, but it is reasonable for a domain involving inbox processing, expenses, income, e-Fatura reconciliation, VAT returns, and tax-year sheet lifecycle. Each tool appears to cover a meaningful step rather than duplicating another.
The surface covers the main lifecycle: extracting documents, planning inbox work, adding expenses and income, filing documents, reconciling e-Fatura, checking missing items, generating VAT returns, creating year sheets, and marking quarters filed. Minor gaps remain around querying or updating/deleting individual booked rows, but core workflows are supported.