Contractor Foreman by Cotlet
REMOTE · COTLET.DEV · 2 COMPONENTS
Projects, estimates, daily logs and invoices in Contractor Foreman.
Available components
Last scanned (3 hours ago)
Scores higher than 57% of remote servers
Reachable. Last reached 24 Oct 2026.
Category Project Management
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security66
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (cotlet_browser_click). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 14600 tokens (~136/item across 107 items; 106 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability check failed: schema churn in the 1 day we've observed: 3 tool removals, 0 breaking changes, 0 auth/transport breaks, 0 additions. See how to fix → Fail
Tool Coverage89
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 66% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 108 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 24 Oct 26 0
- Stability: unverified → fail ▼ security
- A breaking change shipped without a version bump: still 0.1.0 ▼ security
- Tool “cotlet_balance” was removed ▼ security
- Tool “cotlet_browser_connect” was removed ▼ security
- Tool “cotlet_browser_sessions” was removed ▼ security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “add_change_order_items” rewrote its description, which is the text the model reads security
- Tool “add_estimate_items” rewrote its description, which is the text the model reads security
- Tool “add_invoice_items” rewrote its description, which is the text the model reads security
- Tool “add_project_note” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_click” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_close” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_navigate” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_open” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_press” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_read” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_screenshot” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_scroll” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_select” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_type” rewrote its description, which is the text the model reads security
- Tool “cotlet_browser_upload” rewrote its description, which is the text the model reads security
- Tool “create_bill” rewrote its description, which is the text the model reads security
- Tool “create_change_order” rewrote its description, which is the text the model reads security
- Tool “create_contact” rewrote its description, which is the text the model reads security
- Tool “create_daily_log” rewrote its description, which is the text the model reads security
- Tool “create_estimate” rewrote its description, which is the text the model reads security
- Tool “create_expense” rewrote its description, which is the text the model reads security
- Tool “create_inspection” rewrote its description, which is the text the model reads security
- Tool “create_invoice” rewrote its description, which is the text the model reads security
- Tool “create_lead” rewrote its description, which is the text the model reads security
- Tool “create_opportunity” rewrote its description, which is the text the model reads security
- Tool “create_project” rewrote its description, which is the text the model reads security
- Tool “create_punchlist” rewrote its description, which is the text the model reads security
- Tool “create_purchase_order” rewrote its description, which is the text the model reads security
- Tool “create_rfi” rewrote its description, which is the text the model reads security
- Tool “create_service_ticket” rewrote its description, which is the text the model reads security
- Tool “create_share_link” rewrote its description, which is the text the model reads security
- Tool “create_sub_contract” rewrote its description, which is the text the model reads security
- Tool “create_todo” rewrote its description, which is the text the model reads security
- Tool “create_work_order” rewrote its description, which is the text the model reads security
- Tool “delete_change_order” rewrote its description, which is the text the model reads security
- Tool “delete_estimate” rewrote its description, which is the text the model reads security
- Tool “delete_invoice” rewrote its description, which is the text the model reads security
- Tool “get_bill” rewrote its description, which is the text the model reads security
- Tool “get_change_order” rewrote its description, which is the text the model reads security
- Tool “get_clock_status” rewrote its description, which is the text the model reads security
- Tool “get_contact” rewrote its description, which is the text the model reads security
- Tool “get_daily_log” rewrote its description, which is the text the model reads security
- Tool “get_estimate” rewrote its description, which is the text the model reads security
- Tool “get_expense” rewrote its description, which is the text the model reads security
- Tool “get_inspection” rewrote its description, which is the text the model reads security
- Tool “get_invoice” rewrote its description, which is the text the model reads security
- Tool “get_job_costing” rewrote its description, which is the text the model reads security
- Tool “get_opportunity” rewrote its description, which is the text the model reads security
- Tool “get_project” rewrote its description, which is the text the model reads security
- Tool “get_punchlist” rewrote its description, which is the text the model reads security
- Tool “get_purchase_order” rewrote its description, which is the text the model reads security
- Tool “get_rfi” rewrote its description, which is the text the model reads security
- Tool “get_service_ticket” rewrote its description, which is the text the model reads security
- Tool “get_sub_contract” rewrote its description, which is the text the model reads security
- Tool “get_submittal” rewrote its description, which is the text the model reads security
- Tool “get_time_card” rewrote its description, which is the text the model reads security
- Tool “get_todo” rewrote its description, which is the text the model reads security
- Tool “get_work_order” rewrote its description, which is the text the model reads security
- Tool “list_bills” rewrote its description, which is the text the model reads security
- Tool “list_change_orders” rewrote its description, which is the text the model reads security
- Tool “list_contacts” rewrote its description, which is the text the model reads security
- Tool “list_cost_codes” rewrote its description, which is the text the model reads security
- Tool “list_cost_items” rewrote its description, which is the text the model reads security
- Tool “list_daily_logs” rewrote its description, which is the text the model reads security
- Tool “list_estimates” rewrote its description, which is the text the model reads security
- Tool “list_expenses” rewrote its description, which is the text the model reads security
- Tool “list_inspections” rewrote its description, which is the text the model reads security
- Tool “list_invoices” rewrote its description, which is the text the model reads security
- Tool “list_leads” rewrote its description, which is the text the model reads security
- Tool “list_opportunities” rewrote its description, which is the text the model reads security
- Tool “list_payments” rewrote its description, which is the text the model reads security
- Tool “list_project_crew_hours” rewrote its description, which is the text the model reads security
- Tool “list_project_files” rewrote its description, which is the text the model reads security
- Tool “list_project_notes” rewrote its description, which is the text the model reads security
- Tool “list_projects” rewrote its description, which is the text the model reads security
- Tool “list_punchlists” rewrote its description, which is the text the model reads security
- Tool “list_purchase_orders” rewrote its description, which is the text the model reads security
- Tool “list_rfis” rewrote its description, which is the text the model reads security
- Tool “list_schedule_tasks” rewrote its description, which is the text the model reads security
- Tool “list_service_tickets” rewrote its description, which is the text the model reads security
- Tool “list_sub_contracts” rewrote its description, which is the text the model reads security
- Tool “list_submittals” rewrote its description, which is the text the model reads security
- Tool “list_time_cards” rewrote its description, which is the text the model reads security
- Tool “list_todos” rewrote its description, which is the text the model reads security
- Tool “list_work_orders” rewrote its description, which is the text the model reads security
- Tool “record_inspection_result” rewrote its description, which is the text the model reads security
- Tool “record_payment” rewrote its description, which is the text the model reads security
- Tool “remove_estimate_items” rewrote its description, which is the text the model reads security
- Tool “send_change_order” rewrote its description, which is the text the model reads security
- Tool “send_estimate” rewrote its description, which is the text the model reads security
- Tool “send_invoice” rewrote its description, which is the text the model reads security
- Tool “update_change_order” rewrote its description, which is the text the model reads security
- Tool “update_daily_log” rewrote its description, which is the text the model reads security
- Tool “update_estimate” rewrote its description, which is the text the model reads security
- Tool “update_invoice” rewrote its description, which is the text the model reads security
- Tool “update_project” rewrote its description, which is the text the model reads security
- Tool “update_schedule_task” rewrote its description, which is the text the model reads security
- Tool “update_service_ticket_status” rewrote its description, which is the text the model reads security
- Tool “update_todo” rewrote its description, which is the text the model reads security
- Tool “update_work_order_status” rewrote its description, which is the text the model reads security
- Schema quality: pass → fail ▼ functional
- Stability: unverified → 0.03 ▲ functional
- 23 Oct 26 68
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Probed https://cotlet.dev/mcp/v1/contractor-foreman
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=cotlet.dev | CN=YE1,O=Let's Encrypt,C=US | 12 Oct 2026 | 10 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 6afd7585ee8e24a40f5683c10835ec990a8 |
| SANs: *.cotlet.dev, cotlet.dev | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of cotlet.dev. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| dev. | present | 60074 | 8 | Verified |
| cotlet.dev. | present | 2371 | 13 | Verified |
| cotlet.dev. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://cotlet.dev/mcp/v1/contractor-foreman | Verified | 200 | |
| http (plaintext) | http://cotlet.dev/mcp/v1/contractor-foreman | HTTPS enforced | 301 | https://cotlet.dev/mcp/v1/contractor-foreman |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_inspection Get inspection ~59
One inspection with type, project, date, result, agency, inspector and notes. Reads one Contractor Foreman inspection by inspection_id, with the same fields as list_inspections.
| Name | Type | Req | Description |
|---|---|---|---|
| inspection_id | integer | yes | inspection_id from list_inspections. |
No output schema declared.
No examples provided.
get_invoice Get invoice ~89
One invoice with customer, dates, terms, line items, payments and balance due. Everything on one invoice: status, project, customer and their email, invoice and due dates, terms, retainage, total, amount paid and balance due in dollars, the line items and every payment recorded against it (date, amount, method, status).
| Name | Type | Req | Description |
|---|---|---|---|
| invoice_id | string | yes | From list_invoices. |
No output schema declared.
No examples provided.
get_job_costing Get job costing ~177
Estimated and actual cost per cost code for one project, with the difference and totals. Sums the project's Job Cost Actual report per cost code: contract value, estimated cost (from the Schedule of Values or the approved estimates, plus change orders), actual cost split into bills, expenses, time cards and equipment, the difference (estimated minus actual, negative means over) and the amount invoiced. Time card hours are priced at labor_rate (default burden_rate). Costs with no cost code are under Unassigned. Amounts are in dollars. Read only.
| Name | Type | Req | Description |
|---|---|---|---|
| budget_from | string | – | Estimated cost from the Schedule of Values or the approved estimates. Default: the project's own setting. |
| labor_rate | string | – | Rate that prices time card hours as labor cost. |
| project_id | string | yes | project_id from list_projects. |
No output schema declared.
No examples provided.
get_opportunity Get opportunity ~75
One opportunity in full: customer contact, stage, score, budget, notes and last activity. Reads one Contractor Foreman opportunity by opportunity_id: what list_opportunities gives plus the customer's email and phone, the notes and the subject of the last sales activity.
| Name | Type | Req | Description |
|---|---|---|---|
| opportunity_id | integer | yes | opportunity_id from list_opportunities. |
No output schema declared.
No examples provided.
get_project Get project ~104
One project: customer, address, stage, dates, contract amounts, costs, billing and retainage. Returns one project. The revised contract amount is the original contract plus approved change orders, as the project shows it. Costs are budgeted, committed and actual. Billing is invoiced, paid and outstanding invoices, with retainage held shown apart. Amounts are in dollars. Use project_id from list_projects.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | project_id from list_projects. |
No output schema declared.
No examples provided.
get_punchlist Get punchlist ~96
One punchlist: project, address, customer and how many items are open and completed. Returns one punchlist with its project, the project address and customer, the number of open and completed items, who made it and when. The items themselves are not returned yet: open the punchlist in Contractor Foreman to see them. Read only.
| Name | Type | Req | Description |
|---|---|---|---|
| punchlist_id | string | yes | punchlist_id from list_punchlists. |
No output schema declared.
No examples provided.
get_purchase_order Get purchase order ~78
One purchase order with supplier, dates, status and its line items. Reads one Contractor Foreman purchase order by purchase_order_id: what list_purchase_orders gives plus every line item with description, cost type, quantity, unit, unit cost, total and cost code.
| Name | Type | Req | Description |
|---|---|---|---|
| purchase_order_id | integer | yes | purchase_order_id from list_purchase_orders. |
No output schema declared.
No examples provided.
get_rfi Get RFI ~59
One RFI with its question, dates, answer and status. Reads one Contractor Foreman RFI by rfi_id, with the same fields as list_rfis.
| Name | Type | Req | Description |
|---|---|---|---|
| rfi_id | integer | yes | rfi_id from list_rfis. |
No output schema declared.
No examples provided.
get_service_ticket Get service ticket ~79
One service ticket with customer, service address, schedule, technicians and priority. Reads one Contractor Foreman service ticket by service_ticket_id: what list_service_tickets gives plus the priority, planned duration, service address, the customer's phone and the hours logged on it.
| Name | Type | Req | Description |
|---|---|---|---|
| service_ticket_id | integer | yes | service_ticket_id from list_service_tickets. |
No output schema declared.
No examples provided.
get_sub_contract Get sub-contract ~107
One sub-contract with subcontractor, amounts, retainage, scope of work and items. Reads one Contractor Foreman sub-contract by sub_contract_id: what list_sub_contracts gives plus the scope of work text (HTML as saved) and the items added in the app, with quantity, unit cost, total and cost code. paid and balance come back null here. list_sub_contracts has them.
| Name | Type | Req | Description |
|---|---|---|---|
| sub_contract_id | integer | yes | sub_contract_id from list_sub_contracts. |
No output schema declared.
No examples provided.
get_submittal Get submittal ~90
One submittal with plan sheet, specification section, status, dates and its items. Reads one Contractor Foreman submittal by submittal_id: what list_submittals gives plus the plan sheet and specification section and each submitted item with manufacturer, status and the date it was sent back.
| Name | Type | Req | Description |
|---|---|---|---|
| submittal_id | integer | yes | submittal_id from list_submittals. |
No output schema declared.
No examples provided.
get_time_card Get time card ~82
One time card or crew sheet with hours per employee and cost code. Reads one Contractor Foreman time card by timecard_id: what list_time_cards gives plus one entry per employee and cost code with the hours worked and the entry's notes. A crew sheet lists every crew member.
| Name | Type | Req | Description |
|---|---|---|---|
| timecard_id | integer | yes | timecard_id from list_time_cards. |
No output schema declared.
No examples provided.
get_todo Get to-do ~67
One to-do: description, project, priority, status, due date, assignees and checklist. Returns one to-do with its description, due date and time, assignees and checklist items. Read only.
| Name | Type | Req | Description |
|---|---|---|---|
| todo_id | string | yes | todo_id from list_todos. |
No output schema declared.
No examples provided.
get_work_order Get work order ~76
One work order with project, customer, status, dates, location, notes and items. Reads one Contractor Foreman work order by work_order_id: what list_work_orders gives plus the location, notes and line items with quantity, unit cost and total.
| Name | Type | Req | Description |
|---|---|---|---|
| work_order_id | integer | yes | work_order_id from list_work_orders. |
No output schema declared.
No examples provided.
list_bills List bills ~119
Vendor bills with vendor, project, dates, total, balance due and status. Reads the Contractor Foreman Bills list, newest first: bill number, subject, vendor, project, bill date, due date, total, balance still due and status (Open, Paid). Filter by project or search. get_bill adds the line items.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_change_orders List change orders ~231
Change orders and change order requests, newest first, with status, project and total. The Change Orders list: number, title, kind (change_order or request), status, project, customer, date and total in dollars. Filter by project, kind, status or a search over title and number. Archived ones only with include_archived. Change orders have the statuses open, pending_approval, on_hold, approved, denied, billed. Requests have draft, on_hold, approved, denied, closed. A status that does not fit the kind stops the call. get_change_order gives the line items.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| include_archived | boolean | – | – |
| kind | string | – | request = change order requests (COR) not yet turned into a change order. |
| limit | integer | – | – |
| project_id | string | – | Only this project's (list_projects). |
| search | string | – | Matches the title or number. |
| status | string | – | With kind all or change_order, a change order status. Request statuses need kind request. |
No output schema declared.
No examples provided.
list_contacts List contacts ~154
Customers, employees, contractors, vendors and misc contacts from the Directory. Reads the Contractor Foreman Directory: active contacts with their type, name, company, title, email, phone, cell and address. Filter by type or search by name, company, email or phone. contact_id is the id other tools ask for as customer_id, vendor_id, contractor_id or employee_id. Leads have their own tool, list_leads.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| search | string | – | Name, company, email or phone to look for. |
| type | string | – | Only this kind of contact. Left out: all of them, leads excluded. |
No output schema declared.
No examples provided.
list_cost_codes List cost codes ~70
The company's cost codes, to put on estimate, change order and invoice items. Every active cost code with its code number, name and parent group. cost_code_id is what the item tools take. search narrows by code or name.
| Name | Type | Req | Description |
|---|---|---|---|
| search | string | – | Matches the code or the name. |
No output schema declared.
No examples provided.
list_cost_items List cost items ~157
Saved cost items with unit, unit cost and markup, to price estimate and change order lines. The Cost Items Database: name, type, unit, your unit cost in dollars, default markup, cost code, SKU and notes. Use the values as line items in create_estimate, add_estimate_items or create_change_order. Filter by type or a name search. Subcontractor and other items are picked out of each page of all items, so such a page can hold fewer than limit. Keep the cursor going until next_cursor is null.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| search | string | – | Matches the item name. |
| type | string | – | – |
No output schema declared.
No examples provided.
list_daily_logs List daily logs ~177
Daily logs by date, optionally for one project and a date range. Returns daily logs in the order of the Daily Logs list, with date, arrival time, project and who wrote them, and total, the count of logs that match. Filter by project and by from/to dates (both inclusive). get_daily_log gives one log in full: notes, people, materials, equipment and the weather. Pages hold up to 100 logs; pass next_cursor back as cursor.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| from | string | – | First log date. |
| limit | integer | – | – |
| project_id | string | – | Only logs of this project. |
| search | string | – | Text to match, as the search box of the Daily Logs list. |
| to | string | – | Last log date. |
No output schema declared.
No examples provided.
list_estimates List estimates ~140
Estimates, newest first, with status, project, customer and total. The Estimates list: number, title, status, project, customer, dates and total in dollars. Filter by project, status or a search over title, number and customer. Archived estimates only with include_archived. get_estimate gives the line items.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| include_archived | boolean | – | – |
| limit | integer | – | – |
| project_id | string | – | Only estimates of this project (list_projects). |
| search | string | – | Matches the title, number or customer. |
| status | string | – | – |
No output schema declared.
No examples provided.
list_expenses List expenses ~125
Expenses with amount, date, vendor, project, cost type and who paid. Reads the Contractor Foreman Expenses list, last added first: name, amount with tax, date, vendor, project, cost type (Material, Labor, Equipment ...), who paid it and through what, and whether it is billable to the customer. Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_inspections List inspections ~121
Inspections with project, type, date, result, agency and permit number. Reads the Contractor Foreman Inspections list, newest first: number, inspection type, project, date and time, status (Draft, Pass, Fail, Re-Inspect), agency, inspector, permit number, assignee and notes. Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_invoices List invoices ~247
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| customer_id | string | – | Only this customer's. |
| due_before | string | – | Only invoices due before this date. |
| limit | integer | – | – |
| project_id | string | – | Only this project's (list_projects). |
| search | string | – | Matches the number, project or customer. |
| status | string | – | – |
| unpaid_only | boolean | – | Only submitted or on-hold invoices with a balance due. |
No output schema declared.
No examples provided.
list_leads List leads ~127
Sales leads with contact details, stage and quality score. Reads the active leads in the Contractor Foreman Directory: name, company, email, phone, address, stage (received, pending, qualifying, qualified, quoted, awarded, lost) and quality from 1 to 5. Search by name, company, email or phone. Opportunities (deals tied to a customer) are list_opportunities.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| search | string | – | Name, company, email or phone to look for. |
No output schema declared.
No examples provided.
list_opportunities List opportunities ~134
Sales opportunities with customer, stage, score, budget and expected sale date. Reads the Contractor Foreman Opportunities list: deals for a customer before they turn into a project, at every stage, with number, name, stage (received, pending, qualifying, qualified, quoted, awarded, lost), score 1 to 5, budget in the account currency, estimated sales date and who it is assigned to. Search by name, number or customer.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| search | string | – | Words in the name, number or customer. |
No output schema declared.
No examples provided.
list_payments List payments ~112
Payments received on invoices, newest first, with amount, method and invoice. The Payments list: date, amount in dollars, method, status (received, in_review, verified, failed), notes, the invoice it pays, customer and project. get_invoice shows the payments of one invoice.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| customer_id | string | – | Only this customer's. |
| limit | integer | – | – |
| project_id | string | – | Only this project's (list_projects). |
No output schema declared.
No examples provided.
list_project_crew_hours List project crew hours ~159
Hours and labor cost logged on one project, per employee and per day and cost code. Reads the time logged on a Contractor Foreman project (the project's Time Cards tab): every entry with the day, employee, cost code, regular and overtime hours and labor cost, plus a sum per employee (most hours first) and the project total. days counts the distinct days an employee logged. Cost uses the wages in the Directory and is 0 when no wage is set. Optional date range.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | – | Hours up to this day, YYYY-MM-DD. |
| project_id | integer | yes | The project's numeric id (list_projects). |
| start_date | string | – | Hours from this day on, YYYY-MM-DD. |
No output schema declared.
No examples provided.
list_project_files List project files ~104
Photos and documents on a project, with name, size and a download link. Reads a Contractor Foreman project's Files tab, newest first: file name, title, whether it is an image, size, notes, tags, when it was added and a download link. The app signs the links and they expire about 30 days after the call (the expires parameter). Call again for fresh ones.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | integer | yes | The project's numeric id (list_projects). |
No output schema declared.
No examples provided.
list_project_notes List project notes ~77
The notes on a project's Notes tab, with author and time. Reads the notes kept on a Contractor Foreman project's Notes tab, oldest first: title, text, who added it, when (in the account's date format) and how many files are attached.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | integer | yes | The project's numeric id (list_projects). |
No output schema declared.
No examples provided.
list_projects List projects ~172
Projects with customer, stage, dates, contract amount, costs and percent complete. Returns active (not archived) projects in the order of the Projects list. Completed projects are left out unless include_completed is true or status asks for them. search matches the project name, number or customer. Amounts are in the account's currency: contract amount without tax, budgeted, committed and actual cost, invoiced and paid. Pages hold up to 100 projects; pass next_cursor back as cursor.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| include_completed | boolean | – | Include completed projects. Ignored when status is set. |
| limit | integer | – | – |
| search | string | – | Match on project name, number or customer. |
| status | string | – | Only projects in this stage. |
No output schema declared.
No examples provided.
list_punchlists List punchlists ~136
Punchlists with project, status, open and completed item counts and who the items are assigned to. Returns punchlists, optionally for one project, with the number of open and completed items and the people their items are assigned to. status is the one the Punchlists list shows. Pages hold up to 100 punchlists; pass next_cursor back as cursor.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | string | – | Only punchlists of this project. |
| search | string | – | Text to match, as the search box of the Punchlists list. |
No output schema declared.
No examples provided.
list_purchase_orders List purchase orders ~125
Purchase orders with supplier, project, order date, total and status. Reads the Contractor Foreman Purchase Orders list, newest first: PO number, subject, supplier, project, order and delivery date, total, status (Draft, Submitted, Approved, Received, Closed ...) and who ordered it. Filter by project or search. get_purchase_order adds the line items.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_rfis List RFIs ~151
Requests for information with question, project, dates, answer and status. Reads the RFIs in Contractor Foreman's RFI & Notices module, newest first: number, title, the question, area and plan sheet it refers to, project, date, response needed by, response received, the answer and status (Draft, Submitted, Outstanding, Received, Closed). Schedule and compliance notices from the same module are left out, so a page can hold fewer than limit. Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_schedule_tasks List schedule tasks ~121
Gantt schedule tasks of a project: dates, duration, dependencies, assignees, percent complete. Returns the tasks of the project schedule in Gantt order. kind is task, milestone or summary (a group whose dates follow its subtasks). end_date is the task's last day, inclusive. depends_on lists the tasks this one waits for, with the link type and lag in days. Use task_id with update_schedule_task. An empty list means the project has no schedule yet.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | project_id from list_projects. |
No output schema declared.
No examples provided.
list_service_tickets List service tickets ~121
Service tickets with customer, status, service date and time and technicians. Reads the Contractor Foreman Service Tickets list, newest first: ticket number, title, description, status (Unscheduled, Scheduled, En Route, Checked-In, Completed ...), customer, project, service date and time and the assigned technicians. Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_sub_contracts List sub-contracts ~129
Sub-contracts with subcontractor, project, amount, billed, paid, balance and status. Reads the Contractor Foreman Sub-Contracts list, newest first: agreement number, subject, subcontractor, project, date, contract total, amount billed and paid, balance, retainage percent and status (Draft, Submitted, Committed, Approved ...). Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_submittals List submittals ~127
Submittals with project, status, date received, due date and approver. Reads the Contractor Foreman Submittals list, newest first: number, title, project, status (Draft, Submitted, Pending, Response Received, Approved, Rejected), date received, due date, who it is assigned to and who approved it. Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
list_time_cards List time cards ~186
Time cards with employee or crew, project, clock-in and clock-out times and hours, newest first. Reads the Contractor Foreman Time Cards list, newest first: employee cards and crew sheets with the project, day, clock-in and clock-out time, hours worked and break hours. A card still running has running true and no hours yet. Filter by a date range, a project or an employee. get_time_card gives one card's entries per person and cost code.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| employee_id | integer | – | Only this employee's cards (contact_id). |
| end_date | string | – | Cards up to this day, YYYY-MM-DD. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's cards. |
| start_date | string | – | Cards from this day on, YYYY-MM-DD. |
No output schema declared.
No examples provided.
list_todos List to-dos ~161
To-dos with project, priority, status, due date and assignees. Returns to-dos, optionally for one project, one status (open, incomplete, complete) or only those assigned to you. get_todo gives one with its description and checklist. Pages hold up to 100 to-dos; pass next_cursor back as cursor.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| mine_only | boolean | – | Only to-dos assigned to this account's user. |
| project_id | string | – | Only to-dos of this project. |
| search | string | – | Text to match, as the search box of the To-Do list. |
| status | string | – | – |
No output schema declared.
No examples provided.
list_work_orders List work orders ~126
Work orders with project, customer, status, dates, total and assignee. Reads the Contractor Foreman Work Orders list, newest first: number, subject, description, project, customer, status (Open, Estimating, Submitted, Approved, Canceled, Completed), start and end date, total and who it is assigned to. Filter by project or search.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | next_cursor from the previous call. |
| limit | integer | – | – |
| project_id | integer | – | Only this project's records. |
| search | string | – | Words to look for. |
No output schema declared.
No examples provided.
record_inspection_result Record inspection result ~115
Marks an inspection passed, failed or to re-inspect, optionally with notes. Sets the status of a Contractor Foreman inspection to pass, fail, re_inspect or back to draft, as the status field on its page does, and optionally replaces its notes (corrections the inspector asked for). Nobody is notified. Returns the inspection as saved.
| Name | Type | Req | Description |
|---|---|---|---|
| inspection_id | integer | yes | inspection_id from list_inspections. |
| notes | string | – | Replaces the inspection's notes. |
| result | string | yes | – |
No output schema declared.
No examples provided.
record_payment Record payment ~169
Records a payment you received against an invoice. Adds a payment to an invoice, as Add Payment does: amount in dollars, method (bank_transfer, cash, check, credit_card, other), date, status (received, in_review, verified, failed) and notes. It only records money already received. It charges nobody and emails nobody. The invoice must be submitted (update_invoice) and the amount cannot exceed the balance due. A payment that clears the balance marks the invoice paid.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | yes | Dollars, at most the balance due. |
| date | string | – | Default: today. |
| invoice_id | string | yes | From list_invoices. |
| method | string | yes | – |
| notes | string | – | e.g. the check number. |
| status | string | – | – |
No output schema declared.
No examples provided.
remove_estimate_items Remove estimate items ~107
Deletes line items from an estimate. Deletes the given line items (item_id from get_estimate) and returns the new estimate total. An item_id that is not on the estimate stops the call before anything is deleted. The app refuses while the estimate is pending_approval, approved or completed: set it back to estimating with update_estimate first.
| Name | Type | Req | Description |
|---|---|---|---|
| estimate_id | string | yes | From list_estimates. |
| item_ids | array | yes | item_id values from get_estimate. |
No output schema declared.
No examples provided.
send_change_order Send change order ~185
Emails the change order as a PDF to the customer or to the addresses you give. Sends the change order (or request) PDF by email from Contractor Foreman, as the panel's View/Email PDF does. Without to it goes to the project's customer, and a customer without an email stops the call. The approval call shows recipients and subject first. The status does not change: update_change_order sets pending_approval or approved. By default you confirm each call, and you can switch that off for this tool. Waits for the owner's approval.
| Name | Type | Req | Description |
|---|---|---|---|
| change_order_id | string | yes | From list_change_orders. |
| copy_me | boolean | – | – |
| message | string | – | Email text above the PDF. |
| subject | string | – | Default: the app's 'Change Order #n'. |
| to | array | – | Recipient emails. Default: the project's customer. |
No output schema declared.
No examples provided.
send_estimate Send estimate ~202
Emails the estimate as a PDF to the customer or to the addresses you give. Sends the customer version of the estimate PDF by email from Contractor Foreman, as the panel's View/Email PDF does. Without to it goes to the estimate's customer, and a customer without an email stops the call. The approval call shows the recipients and subject first. The estimate's status does not change. update_estimate sets it (pending_approval, approved). By default you confirm each call, and you can switch that off for this tool. Waits for the owner's approval.
| Name | Type | Req | Description |
|---|---|---|---|
| copy_me | boolean | – | Send a copy to you. |
| estimate_id | string | yes | From list_estimates or create_estimate. |
| message | string | – | Email text above the PDF. |
| subject | string | – | Default: the app's 'Estimate: <title> (#n)'. |
| to | array | – | Recipient emails. Default: the estimate's customer. |
No output schema declared.
No examples provided.
send_invoice Send invoice ~191
Emails the invoice as a PDF to the customer or to the addresses you give. Sends the invoice PDF by email from Contractor Foreman, as the panel's View/Email PDF does. Without to it goes to the invoice's customer, and a customer without an email stops the call. The approval call shows recipients and subject first. The invoice needs a due date (update_invoice). Sending does not change the status: update_invoice with status submitted marks it sent. By default you confirm each call, and you can switch that off for this tool. Waits for the owner's approval.
| Name | Type | Req | Description |
|---|---|---|---|
| copy_me | boolean | – | – |
| invoice_id | string | yes | From list_invoices or create_invoice. |
| message | string | – | Email text above the PDF. |
| subject | string | – | Default: the app's 'Invoice #n'. |
| to | array | – | Recipient emails. Default: the invoice's customer. |
No output schema declared.
No examples provided.
update_change_order Update change order ~136
Changes a change order's status, title, reason or date. Sets only the fields you pass. Change order statuses: open, pending_approval, on_hold, approved (Unbilled/Approved, counts toward the contract), denied, billed. Change order request statuses: draft, on_hold, approved, denied, closed. A status of the other kind stops the call. Nobody is emailed. send_change_order does that.
| Name | Type | Req | Description |
|---|---|---|---|
| change_order_id | string | yes | From list_change_orders. |
| date | string | – | – |
| description | string | – | – |
| status | string | – | – |
| title | string | – | – |
No output schema declared.
No examples provided.
update_daily_log Update daily log ~316
Change the notes, times, people, deliveries, weather notes or delays of a daily log. Replaces only the fields you pass and returns the log as get_daily_log shows it. Text fields are replaced, not appended: read the log first to add to its notes. materials_delivered replaces the material notes. weather_delay, schedule_delay and visitors can mark a delay or a visit but not clear it. The log date and project do not change. The log reaches no client or crew, so this tool runs without asking.
| Name | Type | Req | Description |
|---|---|---|---|
| arrival_time | string | – | Arrival on site, e.g. 07:00 or 7:00 AM. |
| daily_log_id | string | yes | daily_log_id from list_daily_logs. |
| departure_time | string | – | Departure from site, e.g. 15:30. |
| jobsite_notes | string | – | Jobsite condition notes. |
| materials_delivered | array | – | Materials delivered or used, one line each. |
| notes | string | – | Work done and site notes (the log's Work Performed). |
| people | – | – | Crews, subcontractors and visitors on site: headcount per crew, or free text. |
| schedule_delay | string | – | What else held the schedule up. Marks a schedule delay. |
| visitors | string | – | Visitors on site (inspector, owner, architect). |
| weather_delay | string | – | What the weather delayed. Marks a weather delay. |
| weather_notes | string | – | Your own notes next to the recorded weather. |
No output schema declared.
No examples provided.
update_estimate Update estimate ~155
Changes an estimate's status, title, dates, description, inclusions or exclusions. Sets only the fields you pass. status moves the estimate on the Estimates board: estimating, pending_approval, on_hold, re_estimating, approved, completed or lost. Marking it approved here does not email anyone. send_estimate sends it. Line items change with add_estimate_items and remove_estimate_items.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | – |
| estimate_date | string | – | – |
| estimate_id | string | yes | From list_estimates. |
| exclusions | string | – | – |
| expire_date | string | – | – |
| inclusions | string | – | – |
| status | string | – | – |
| title | string | – | – |
No output schema declared.
No examples provided.
How do I install the Contractor Foreman by Cotlet MCP server?
Contractor Foreman by Cotlet is a hosted endpoint at https://cotlet.dev/mcp/v1/contractor-foreman, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · cotlet.dev
claude mcp add --transport http dev-cotlet-contractor-foreman 'https://cotlet.dev/mcp/v1/contractor-foreman'
What is the Contractor Foreman by Cotlet MCP server?
Contractor Foreman by Cotlet is an MCP server listed in the public MCP registry as dev.cotlet/contractor-foreman. Projects, estimates, daily logs and invoices in Contractor Foreman. This page covers its hosted endpoint (https://cotlet.dev/mcp/v1/contractor-foreman).
Is the Contractor Foreman by Cotlet MCP server safe to use?
Contractor Foreman by Cotlet scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Contractor Foreman by Cotlet MCP server expose?
Contractor Foreman by Cotlet exposes 106 tools: cotlet_whoami, cotlet_apps, cotlet_request_apps, cotlet_get_call, cotlet_upload_file, and 101 more. Their descriptions and schemas cost roughly 14,404 tokens of context every time the server is loaded.
Does the Contractor Foreman by Cotlet MCP server require authentication?
No. We connected to Contractor Foreman by Cotlet without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Contractor Foreman by Cotlet MCP server still maintained?
Contractor Foreman by Cotlet is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.