Skip to main content
Glama
cotletdev

Contractor Foreman MCP Server

by cotletdev

List invoices

list_invoices
Read-onlyIdempotent

Retrieves invoices newest first with status, totals, balance due and overdue flags. Filter by project, customer, status or due date to track unpaid balances and past-due accounts.

Instructions

Invoices, newest first, with status, totals, balance due and an overdue flag.

The Invoices list: number, status (draft, submitted, on_hold, paid, denied, write_off), project, customer, invoice and due dates, total and balance due in dollars, and overdue (past the due date with a balance). Archived invoices are left out. unpaid_only keeps submitted and on-hold invoices that still have a balance. status, when given, replaces the unpaid_only status filter. unpaid_only and due_before filter the page you get, so a page can hold fewer than limit. Keep the cursor going until next_cursor is null. get_invoice gives the items and payments.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoMatches the number, project or customer.
statusNo
due_beforeNoOnly invoices due before this date.
project_idNoOnly this project's (list_projects).
customer_idNoOnly this customer's.
unpaid_onlyNoOnly submitted or on-hold invoices with a balance due.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.1

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/idempotent annotations, it discloses the non-obvious behaviors an agent would otherwise get wrong: archived records are filtered out, status overrides the unpaid_only status filter, and unpaid_only/due_before are applied after paging so a page may return fewer than limit. That last point is a genuinely valuable warning the annotations cannot convey.

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?

Dense and largely front-loaded, with return shape first and filtering/pagination mechanics after. There is minor redundancy between the opening 'Invoices, newest first, with status, totals, balance due and an overdue flag' and the subsequent field enumeration, which restates the same projection.

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 no output schema, the description carries the return-shape burden and does so fully (number, status enum values, project, customer, dates, total, balance, overdue, exclusion of archived). Pagination termination and filter-override semantics are also covered, so an agent has everything needed to call this correctly.

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?

The description adds real meaning over the 75%-covered schema: it defines unpaid_only's scope, documents the precedence rule when both status and unpaid_only are supplied, warns that due_before/unpaid_only filter the returned page, and tells the agent to loop on cursor until next_cursor is null. limit and search get no extra treatment, but the schema already covers them adequately.

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 opening sentence names the resource, ordering (newest first), and the projected fields (status, totals, balance due, overdue flag), and the following sentence enumerates the returned columns. It explicitly separates itself from get_invoice, which 'gives the items and payments', so an agent can distinguish list vs. detail without opening either schema.

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

Usage Guidelines4/5

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

It gives concrete contextual rules: archived invoices are excluded, unpaid_only's meaning is defined, and a get_invoice alternative is named for line items and payments. It never states the inverse condition (e.g. 'use get_invoice when you already have the invoice id'), so the alternative routing is implied rather than spelled out.

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