Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Contractor Foreman by Cotlet

PYPI · CONTRACTOR-FOREMAN-API-MCP · 3 COMPONENTS

Projects, estimates, daily logs and invoices in Contractor Foreman.

0 this week 78 Trust /100

Last scanned (50 minutes ago)

Scores higher than 76% of PyPI servers

Category Project Management

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 35 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency84
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to cotletdev/contractor-foreman-api-mcp-server). View diagnostics → Pass
  • License check failed: the license (PolyForm-Noncommercial-1.0.0) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 8 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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 12393 tokens (~136/item across 91 items; 89 tools + 2 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 not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage88
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 64% 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 91 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

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.

  • 3 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 2 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 1 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 31 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 29 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 28 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 25 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 24 Oct 26 63

    First indexed and scored.

Diagnostics

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 5 Nov 2026 · Analysed pypi/contractor-foreman-api-mcp@1.0.2

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo cotletdev/contractor-foreman-api-mcp-server
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/cotletdev/contractor-foreman-api-mcp-server/.github/workflows/publish.yml@refs/tags/v1.0.2
Rekor log index 3440923831
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:c8ffc7ffe3e029c8868bc362323949bd0d1cd3faec452502b8553a940ad2580f

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 35 packages
Packages resolved 35
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 89 exposed · ~12,278 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
searchstring–Matches the code or the name.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
searchstring–Matches the item name.
typestring––

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
fromstring–First log date.
limitinteger––
project_idstring–Only logs of this project.
searchstring–Text to match, as the search box of the Daily Logs list.
tostring–Last log date.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
include_archivedboolean––
limitinteger––
project_idstring–Only estimates of this project (list_projects).
searchstring–Matches the title, number or customer.
statusstring––

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
customer_idstring–Only this customer's.
due_beforestring–Only invoices due before this date.
limitinteger––
project_idstring–Only this project's (list_projects).
searchstring–Matches the number, project or customer.
statusstring––
unpaid_onlyboolean–Only submitted or on-hold invoices with a balance due.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
searchstring–Name, company, email or phone to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
searchstring–Words in the name, number or customer.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
customer_idstring–Only this customer's.
limitinteger––
project_idstring–Only this project's (list_projects).

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
end_datestring–Hours up to this day, YYYY-MM-DD.
project_idintegeryesThe project's numeric id (list_projects).
start_datestring–Hours from this day on, YYYY-MM-DD.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
project_idintegeryesThe project's numeric id (list_projects).

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
project_idintegeryesThe project's numeric id (list_projects).

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
include_completedboolean–Include completed projects. Ignored when status is set.
limitinteger––
searchstring–Match on project name, number or customer.
statusstring–Only projects in this stage.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idstring–Only punchlists of this project.
searchstring–Text to match, as the search box of the Punchlists list.

No output schema declared.

No examples provided.

list_purchase_orders ~126

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
project_idstringyesproject_id from list_projects.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
employee_idinteger–Only this employee's cards (contact_id).
end_datestring–Cards up to this day, YYYY-MM-DD.
limitinteger––
project_idinteger–Only this project's cards.
start_datestring–Cards from this day on, YYYY-MM-DD.

No output schema declared.

No examples provided.

list_todos ~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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
mine_onlyboolean–Only to-dos assigned to this account's user.
project_idstring–Only to-dos of this project.
searchstring–Text to match, as the search box of the To-Do list.
statusstring––

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
project_idinteger–Only this project's records.
searchstring–Words to look for.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
inspection_idintegeryesinspection_id from list_inspections.
notesstring–Replaces the inspection's notes.
resultstringyes–

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
amountnumberyesDollars, at most the balance due.
datestring–Default: today.
invoice_idstringyesFrom list_invoices.
methodstringyes–
notesstring–e.g. the check number.
statusstring––

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
estimate_idstringyesFrom list_estimates.
item_idsarrayyesitem_id values from get_estimate.

No output schema declared.

No examples provided.

send_change_order ~153

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 status does not change: update_change_order sets pending_approval or approved.

NameTypeReqDescription
change_order_idstringyesFrom list_change_orders.
copy_meboolean––
messagestring–Email text above the PDF.
subjectstring–Default: the app's 'Change Order #n'.
toarray–Recipient emails. Default: the project's customer.

No output schema declared.

No examples provided.

send_estimate ~169

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 estimate's status does not change. update_estimate sets it (pending_approval, approved).

NameTypeReqDescription
copy_meboolean–Send a copy to you.
estimate_idstringyesFrom list_estimates or create_estimate.
messagestring–Email text above the PDF.
subjectstring–Default: the app's 'Estimate: <title> (#n)'.
toarray–Recipient emails. Default: the estimate's customer.

No output schema declared.

No examples provided.

send_invoice ~159

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 invoice needs a due date (update_invoice). Sending does not change the status: update_invoice with status submitted marks it sent.

NameTypeReqDescription
copy_meboolean––
invoice_idstringyesFrom list_invoices or create_invoice.
messagestring–Email text above the PDF.
subjectstring–Default: the app's 'Invoice #n'.
toarray–Recipient emails. Default: the invoice's customer.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
change_order_idstringyesFrom list_change_orders.
datestring––
descriptionstring––
statusstring––
titlestring––

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
arrival_timestring–Arrival on site, e.g. 07:00 or 7:00 AM.
daily_log_idstringyesdaily_log_id from list_daily_logs.
departure_timestring–Departure from site, e.g. 15:30.
jobsite_notesstring–Jobsite condition notes.
materials_deliveredarray–Materials delivered or used, one line each.
notesstring–Work done and site notes (the log's Work Performed).
people––Crews, subcontractors and visitors on site: headcount per crew, or free text.
schedule_delaystring–What else held the schedule up. Marks a schedule delay.
visitorsstring–Visitors on site (inspector, owner, architect).
weather_delaystring–What the weather delayed. Marks a weather delay.
weather_notesstring–Your own notes next to the recorded weather.

No output schema declared.

No examples provided.

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.

NameTypeReqDescription
descriptionstring––
estimate_datestring––
estimate_idstringyesFrom list_estimates.
exclusionsstring––
expire_datestring––
inclusionsstring––
statusstring––
titlestring––

No output schema declared.

No examples provided.

update_invoice ~131

Changes an invoice's status, invoice date, due date or description. Sets only the fields you pass. Statuses: draft, submitted (sent to the customer, payments can be recorded), on_hold, paid, denied, write_off. Contractor Foreman needs a due date on every change, so an invoice without one needs due_date in the same call. Nobody is emailed. send_invoice does that.

NameTypeReqDescription
descriptionstring––
due_datestring––
invoice_datestring––
invoice_idstringyesFrom list_invoices.
statusstring––

No output schema declared.

No examples provided.

update_project ~177

Change a project's name, stage, type, address, dates or description. Changes only the fields you pass and returns the project as get_project shows it. A completed project drops out of list_projects unless include_completed is true. Editing the schedule can move the project dates again. Nothing reaches the customer, so this tool runs without asking.

NameTypeReqDescription
citystring––
descriptionstring––
end_datestring––
namestring––
project_idstringyesproject_id from list_projects.
start_datestring––
statestring––
statusstring–New stage, e.g. started or completed.
streetstring––
street2string––
typestring––
zipstring––

No output schema declared.

No examples provided.

update_schedule_task ~205

Change the name, dates, length or percent complete of a task on the project schedule. Changes one task and returns it as the schedule shows it afterwards. start_date alone moves the task and keeps its length; end_date or duration_days change the length. Tasks that depend on it are not moved: check depends_on in list_schedule_tasks and move them too. The project's start and end dates follow the schedule. A schedule edit reaches nobody outside your company and one more call undoes it, so this tool runs without asking.

NameTypeReqDescription
duration_daysinteger–New length in days, from the start.
end_datestring–New last day.
namestring––
percent_completenumber––
project_idstringyesproject_id from list_projects.
start_datestring–New first day. Alone, it moves the task and keeps its length.
task_idstringyestask_id from list_schedule_tasks.

No output schema declared.

No examples provided.

update_service_ticket_status ~133

Moves a service ticket to scheduled, en route, checked in, completed, closed and so on. Sets the status of a Contractor Foreman service ticket as the status field on its page does: unscheduled, scheduled, en_route, checked_in, requires_followup, canceled, completed or closed. The app's own en-route and completion emails to the customer are separate buttons and are not sent. Completed moves the service date to today, as the app does. Returns the ticket as saved.

NameTypeReqDescription
service_ticket_idintegeryesservice_ticket_id from list_service_tickets.
statusstringyes–

No output schema declared.

No examples provided.

update_todo ~159

Change a to-do's name, description, due date, priority or status, e.g. mark it complete. Changes only the fields you pass and returns the to-do as get_todo shows it. status complete closes it, open reopens it. Assignees and checklist items are not changed. Nothing is sent to anyone, so this tool runs without asking.

NameTypeReqDescription
descriptionstring––
due_datestring––
due_timestring–e.g. 09:00 or 2:30 PM.
namestring––
prioritystring––
statusstring–complete closes the to-do.
todo_idstringyestodo_id from list_todos.

No output schema declared.

No examples provided.

update_work_order_status ~94

Moves a work order to open, estimating, submitted, approved, canceled or completed. Sets the status of a Contractor Foreman work order as the status field on its page does. The status in the answer is the label the company uses for it. Nobody is emailed. Returns the work order as saved.

NameTypeReqDescription
statusstringyes–
work_order_idintegeryeswork_order_id from list_work_orders.

No output schema declared.

No examples provided.

Install

How do I install the Contractor Foreman by Cotlet MCP server?

Contractor Foreman by Cotlet runs locally as a PyPI package, launched with uvx contractor-foreman-api-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · contractor-foreman-api-mcp

# add to Claude Code
claude mcp add dev-cotlet-contractor-foreman -- uvx contractor-foreman-api-mcp
Common questions

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 PyPI package (contractor-foreman-api-mcp).

Is the Contractor Foreman by Cotlet MCP server safe to use?

Contractor Foreman by Cotlet scores 78 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. 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 89 tools: add_change_order_items, add_estimate_items, add_invoice_items, add_project_note, create_bill, and 84 more. Their descriptions and schemas cost roughly 12,278 tokens of context every time the server is loaded.

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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Contractor Foreman by Cotlet MCP server under?

Contractor Foreman by Cotlet declares the PolyForm-Noncommercial-1.0.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.