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.

Tradify by Cotlet

PYPI · TRADIFY-API-MCP · 3 COMPONENTS

Jobs, quotes, invoices and schedule in Tradify.

−15 this week 63 Trust /100

Last scanned (1 hour ago)

Scores higher than 59% of PyPI servers

Category CRM and Sales

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 Security50
  • Malware scan not yet available for this package.Unverified
  • 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/tradify-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 Usability76
  • 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 2692 tokens (~158/item across 17 items; 15 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 Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 84% 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 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 17 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.

  • 5 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 3 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 2 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 29 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/tradify-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/tradify-api-mcp-server
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/cotletdev/tradify-api-mcp-server/.github/workflows/publish.yml@refs/tags/v1.0.2
Rekor log index 3440923866
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:105502db472186d68a2953834d63a1c5c2bf96edcc0804fc695ec511cbfc6c3e

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 · 15 exposed · ~2,528 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
create_customer ~159

New customer profile, optionally with contact details and a physical address. Creates an active customer with the company's default price group, document theme and tax settings, as the New Customer form does. email may hold several addresses separated by commas; quotes and invoices go there. It reaches no one and stays inside Tradify.

NameTypeReqDescription
addressstring–Street address.
citystring––
contactstring–Contact person. Default: the name.
emailstring–Email for quotes and invoices; commas for more.
mobilestring––
namestringyesCustomer or company name.
phonestring––
postal_codestring––
statestring–State or region.

No output schema declared.

No examples provided.

create_invoice_from_quote ~214

Draft invoice from an approved or accepted quote, for all of it or part of it. Creates a draft invoice from a quote, as Create Invoice > From Quote does, linked to the quote and its job. mode entire copies every line; line_items copies the lines at the positions in lines; percentage invoices amount percent of the quote total; fixed_amount invoices amount (with tax); remaining invoices what the quote's earlier invoices did not. A part is one line at the quote's tax rate. Due date follows the customer's or your payment terms. The invoice stays a draft until send_invoice. Needs a plan with progress invoicing (Pro) for the part modes.

NameTypeReqDescription
amountnumber–percentage: percent of the quote total (e.g. 50). fixed_amount: amount with tax.
linesarray–line_items: positions of the quote's lines to invoice, 1 for the first.
modestringyes–
quote_idstringyesQuote ID from list_quotes.

No output schema declared.

No examples provided.

create_job ~158

New job for a customer. It starts as Unassigned. Creates a job for a customer, as New Job does, and Tradify gives it the next job number. It starts Unassigned; schedule_appointment books staff on it. Contact, phone and site address default to the customer's. It reaches no one and stays inside Tradify.

NameTypeReqDescription
contactstring–Job contact. Default: the customer's.
contact_phonestring–Default: the customer's phone.
customer_idstringyesFrom list_customers or create_customer.
descriptionstringyesWhat the work is.
referencestring–Your reference, e.g. a PO number.
site_addressstring–Default: the customer's address.

No output schema declared.

No examples provided.

create_quote ~224

Draft quote with line items. Nothing is sent until you call send_quote. Creates a draft quote for a customer, as New Quote does. Each line is misc (description, quantity, unit_price) or time (hours at a billing rate; the price comes from the customer's price group unless unit_price is given). Tax uses the default rate, or tax_rate by name; amounts, tax and totals are worked out as Tradify does. job_id links it to a job of the same customer. Expiry defaults to your expiry days setting. Price list items and kits are not supported yet. The quote stays a draft until send_quote.

NameTypeReqDescription
customer_idstringyesFrom list_customers or create_customer.
descriptionstring–Shown on the quote.
expiry_datestring–Default: your expiry days setting.
job_idstring–Link the quote to this customer's job (list_jobs).
line_itemsarrayyes–
referencestring–Customer reference.
tax_inclusiveboolean–Prices include tax.

No output schema declared.

No examples provided.

get_job ~106

Full job: description, site, tasks, notes, appointments, costs, linked quotes and invoices. Returns one job: customer, contact, site address, status, reference and description, the staff on it, its tasks and notes, the Scheduler appointments (times with the company's UTC offset), the costs logged on it (products and misc costs) and the quotes and invoices linked to it. Read it before changing a job.

NameTypeReqDescription
job_idstringyesJob ID from list_jobs.

No output schema declared.

No examples provided.

list_appointments ~136

Scheduler appointments in a date range, with staff, job, times and notes. Returns the Scheduler's job appointments that fall between from and to (both days included, at most 31 days), each with its job, customer, staff member, start and end (ISO 8601 with the company's UTC offset), notes and status (accepted, unconfirmed, declined, cancelled). staff keeps only those people, by full name.

NameTypeReqDescription
fromstringyesFirst day.
staffarray–Only these staff members, by full name.
tostringyesLast day, up to 31 days after from.

No output schema declared.

No examples provided.

list_customers ~125

Customer profiles with contact details and sites. Lists customers by name with contact, email (may be a comma list), phone, mobile, physical address and sites. search matches name, contact, email or phone, so use it to find the customer_id before creating a job or quote. archived lists archived customers instead. Pass next_cursor back as cursor.

NameTypeReqDescription
archivedboolean–List archived customers instead.
cursorstring–next_cursor from the previous call.
limitinteger––
searchstring–Matches name, contact, email or phone.

No output schema declared.

No examples provided.

list_invoices ~185

Invoices with customer, job, due date, total, amount paid and amount due. Lists invoices, newest first, with customer, jobs, invoice and due dates, total, paid and due (total minus payments and credits). status approved (default) is every approved invoice not fully paid; overdue is the ones past their due date; paid, draft, cancelled and all as named. customer_id lists that customer's invoices, and status then filters the page you get. Pass next_cursor back as cursor.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
customer_idstring–Only this customer's invoices (list_customers).
limitinteger––
searchstring–Matches number, reference or customer.
statusstring–approved (sent, not fully paid; default), overdue, paid, draft, cancelled or all.

No output schema declared.

No examples provided.

list_jobs ~175

Jobs with number, customer, site address, status and assigned staff. Lists jobs, newest number first. By default only active jobs (every status marked active, built-in or custom); status all, a built-in status or the name of a custom status narrows it. customer_id lists that customer's jobs, and status then filters the page you get. Pass next_cursor back as cursor.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
customer_idstring–Only this customer's jobs (list_customers).
limitinteger––
searchstring–Matches job number, customer or reference.
statusstring–active (default), all, unassigned, assigned, scheduled, in_progress, to_invoice, on_hold, complete, cancelled or the name of a custom status.

No output schema declared.

No examples provided.

list_quotes ~172

Quotes with customer, total, quote date, expiry date and status. Lists quotes, newest quote date first, with customer, linked job, total (with tax), quote, expiry and accepted dates and status. By default the quotes awaiting acceptance; expired is the ones awaiting acceptance past their expiry date. since keeps quotes dated on or after that day, so use status accepted with since to find what was won in a period. Pass next_cursor back as cursor.

NameTypeReqDescription
cursorstring–next_cursor from the previous call.
limitinteger––
searchstring–Matches number, reference or customer.
sincestring–Only quotes dated on or after this day.
statusstring–awaiting_acceptance (default), draft, accepted, expired, cancelled, declined or all.

No output schema declared.

No examples provided.

record_payment ~175

Record a payment received against an invoice and reduce the amount due. Adds a payment you already received to an approved invoice, as Add Payment does: amount, date, method (by name, from Settings > Payment Methods) and a reference. It charges nobody and emails nobody. The amount cannot exceed what is due; paying it all marks the invoice paid. If an accounting app is connected, Tradify syncs the payment to it.

NameTypeReqDescription
amountnumberyesAmount received, at most the amount due.
datestring–Payment date. Default: today.
invoice_idstringyesInvoice ID from list_invoices.
methodstring–Payment method name, e.g. Bank Deposit, Cash, Credit Card. Default: Unknown.
referencestring–e.g. the check number.

No output schema declared.

No examples provided.

schedule_appointment ~202

Book a job appointment on the Scheduler for staff, optionally emailing the customer a confirmation. Books the job on the Scheduler from start to end for each staff member named (by full name; default the signed-in user), as the Scheduler does. Each staff member gets Tradify's "You've been scheduled" notice, and an Unassigned or Assigned job becomes Scheduled. email_customer also sends the customer the appointment confirmation email, with customer_message in it.

NameTypeReqDescription
customer_messagestring–Extra text in that email.
email_customerboolean–Email the customer a confirmation.
endstringyesISO 8601; without a zone, company time.
job_idstringyesJob ID from list_jobs.
notesstring–Notes for the crew.
staffarray–Staff member names, one appointment each. Default: you.
startstringyesISO 8601; without a zone, company time.

No output schema declared.

No examples provided.

send_invoice ~184

Approve the invoice and email it to the customer, with payment reminders if enabled. Approves a draft invoice (Tradify gives it its number) and emails it from Tradify with the link to view and pay it; payment reminders follow if you enabled them. Without to it goes to the customer's email. Subject and text default to your invoice email template. An approved invoice can be sent again. Tradify sends this mail only when the login has 2-Step Security set up; otherwise the call stops before approving.

NameTypeReqDescription
invoice_idstringyesInvoice ID from list_invoices or create_invoice_from_quote.
messagestring–Email text. Default: your invoice template.
send_me_a_copyboolean––
subjectstring–Default: your invoice email template.
toarray–Recipient emails. Default: the customer's email.

No output schema declared.

No examples provided.

send_quote ~176

Approve the quote and email it to the customer with a link to accept or decline online. Approves a draft quote (it becomes awaiting acceptance) and emails it from Tradify with the link where the customer accepts or declines it online. Without to it goes to the customer's email. Subject and text default to your quote email template. An approved quote can be sent again. Tradify sends this mail only when the login has 2-Step Security set up; otherwise the call stops before approving.

NameTypeReqDescription
messagestring–Email text. Default: your quote template.
quote_idstringyesQuote ID from list_quotes or create_quote.
send_me_a_copyboolean––
subjectstring–Default: your quote email template.
toarray–Recipient emails. Default: the customer's email.

No output schema declared.

No examples provided.

update_job_status ~137

Set a status on a job, built-in or one of your custom statuses. Sets a job's status, as Change Status on the Jobs list does: to_invoice, on_hold, complete, cancelled, the others of the built-in list, or the name of a custom status from Settings > Jobs > Job Statuses (spaces as underscores). It reaches no one, and one more call sets it back.

NameTypeReqDescription
job_idstringyesJob ID from list_jobs.
statusstringyesunassigned, assigned, scheduled, in_progress, to_invoice, on_hold, complete, cancelled or the name of a custom status.

No output schema declared.

No examples provided.

Install

How do I install the Tradify by Cotlet MCP server?

Tradify by Cotlet runs locally as a PyPI package, launched with uvx tradify-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 · tradify-api-mcp

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

What is the Tradify by Cotlet MCP server?

Tradify by Cotlet is an MCP server listed in the public MCP registry as dev.cotlet/tradify. Jobs, quotes, invoices and schedule in Tradify. This page covers its PyPI package (tradify-api-mcp).

Is the Tradify by Cotlet MCP server safe to use?

Tradify by Cotlet scores 63 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 Tradify by Cotlet MCP server expose?

Tradify by Cotlet exposes 15 tools: create_customer, create_invoice_from_quote, create_job, create_quote, get_job, and 10 more. Their descriptions and schemas cost roughly 2,528 tokens of context every time the server is loaded.

Is the Tradify by Cotlet MCP server still maintained?

Tradify 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 Tradify by Cotlet MCP server under?

Tradify 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.