You're juggling freelance clients, proposals, and invoices across spreadsheets and need them in one place Claude can access. This server centralizes your freelance operations so you can ask Claude to draft proposals for specific clients, log time entries, generate invoices, track project scope, and set follow-up reminders without switching contexts. It's built for solo consultants and freelancers who want their business admin accessible through conversation. The stdio and streamable HTTP transports mean you can run it locally or hit the hosted Railway instance. Reach for this when you're tired of context switching between your chat and three different tools just to answer "what did I bill this month" or "when's my next client check-in."
Public tool metadata for what this MCP can expose to an agent.
clients.records.createCreate a new client record in the FreelanceOS database. Use this tool whenever a freelancer mentions a new client they're starting to work with or want to begin tracking — capturing contact details and default billing rate upfront saves time when creating projects and invoic...7 paramsCreate a new client record in the FreelanceOS database. Use this tool whenever a freelancer mentions a new client they're starting to work with or want to begin tracking — capturing contact details and default billing rate upfront saves time when creating projects and invoic...
namestringemailstringnotesstringphonestringcompanystringcurrencystringbilling_ratenumberclients.records.getRetrieve the full profile for a single client, including all associated projects and follow-up communications. Use this tool when a freelancer asks about a specific client by name or ID, or when you need complete client context before drafting a proposal, invoice, or follow-up.1 paramsRetrieve the full profile for a single client, including all associated projects and follow-up communications. Use this tool when a freelancer asks about a specific client by name or ID, or when you need complete client context before drafting a proposal, invoice, or follow-up.
client_idstringclients.records.listList all active (non-archived) clients with optional name search, sorting, and pagination. Use this tool when a freelancer wants an overview of their client roster, needs to look up a client by name, or when you need to present a list of clients for the user to choose from.5 paramsList all active (non-archived) clients with optional name search, sorting, and pagination. Use this tool when a freelancer wants an overview of their client roster, needs to look up a client by name, or when you need to present a list of clients for the user to choose from.
limitintegeroffsetintegersearchstringsort_bystringname · created_at · updated_at · billing_ratedefault: created_atsort_dirstringasc · descdefault: descclients.records.updateUpdate one or more fields on an existing client record. Use this tool when a freelancer wants to correct contact details, change a billing rate, update notes, or make any other modification to a client's stored information — only the fields you provide will be changed, all o...8 paramsUpdate one or more fields on an existing client record. Use this tool when a freelancer wants to correct contact details, change a billing rate, update notes, or make any other modification to a client's stored information — only the fields you provide will be changed, all o...
namestringemailvaluenotesvaluephonevaluecompanyvaluecurrencystringclient_idstringbilling_ratevalueclients.records.archiveSoft-delete a client by setting their archived_at timestamp, hiding them from all active client lists while preserving their full history. Use this tool when a freelancer is done working with a client and wants to retire the record — the client and all linked projects, invoi...1 paramsSoft-delete a client by setting their archived_at timestamp, hiding them from all active client lists while preserving their full history. Use this tool when a freelancer is done working with a client and wants to retire the record — the client and all linked projects, invoi...
client_idstringprojects.records.createCreate a new project linked to an existing client and persist it to the FreelanceOS database. Use this tool when a freelancer is starting new work for a client and needs to track budget, timeline, and status across the project lifecycle.7 paramsCreate a new project linked to an existing client and persist it to the FreelanceOS database. Use this tool when a freelancer is starting new work for a client and needs to track budget, timeline, and status across the project lifecycle.
namestringbudgetnumbercurrencystringend_datestringclient_idstringstart_datestringdescriptionstringprojects.records.getRetrieve full details for a single project, including the associated client name and contact information. Use this tool when a freelancer asks about a specific project's status, budget, or timeline.1 paramsRetrieve full details for a single project, including the associated client name and contact information. Use this tool when a freelancer asks about a specific project's status, budget, or timeline.
project_idstringprojects.records.listList all non-archived projects with optional full-text search, status and client filters, sorting, and pagination. Use this tool when a freelancer wants an overview of their work portfolio or needs to locate a specific project by name or client.7 paramsList all non-archived projects with optional full-text search, status and client filters, sorting, and pagination. Use this tool when a freelancer wants an overview of their work portfolio or needs to locate a specific project by name or client.
limitintegeroffsetintegersearchstringstatusstringactive · paused · completedsort_bystringname · created_at · updated_at · start_date · budgetdefault: created_atsort_dirstringasc · descdefault: descclient_idstringprojects.records.updateUpdate one or more fields on an existing project record, including name, description, budget, dates, or lifecycle status. Use this tool when a freelancer wants to edit project details, revise the budget, adjust the timeline, or mark a project as paused or completed.8 paramsUpdate one or more fields on an existing project record, including name, description, budget, dates, or lifecycle status. Use this tool when a freelancer wants to edit project details, revise the budget, adjust the timeline, or mark a project as paused or completed.
namestringbudgetvaluestatusstringactive · paused · completedcurrencystringend_datevalueproject_idstringstart_datevaluedescriptionvalueprojects.records.archiveSoft-delete a project by setting its archived_at timestamp, hiding it from all active project lists while preserving all historical data. Use this tool when a freelancer wants to close out a completed or cancelled project without permanently destroying its records.1 paramsSoft-delete a project by setting its archived_at timestamp, hiding it from all active project lists while preserving all historical data. Use this tool when a freelancer wants to close out a completed or cancelled project without permanently destroying its records.
project_idstringproposals.records.createStore a new proposal for a project, capturing all relevant details such as title, deliverables, pricing, and expiry date. Use when the freelancer has drafted proposal content and wants to persist it to the database for tracking and future reference.7 paramsStore a new proposal for a project, capturing all relevant details such as title, deliverables, pricing, and expiry date. Use when the freelancer has drafted proposal content and wants to persist it to the database for tracking and future reference.
titlestringamountnumbercontentstringcurrencystringclient_idstringproject_idstringvalid_untilstringproposals.records.getRetrieve a single proposal by its unique identifier, returning all stored fields including status, amount, and content. Use when the freelancer asks to view, review, or reference the details of a specific proposal.1 paramsRetrieve a single proposal by its unique identifier, returning all stored fields including status, amount, and content. Use when the freelancer asks to view, review, or reference the details of a specific proposal.
proposal_idstringproposals.records.listList proposals filtered by project, client, or status with support for sorting and pagination. Use when the freelancer asks for proposal history, wants to audit outstanding proposals, or needs to check the status of proposals sent to a client.7 paramsList proposals filtered by project, client, or status with support for sorting and pagination. Use when the freelancer asks for proposal history, wants to audit outstanding proposals, or needs to check the status of proposals sent to a client.
limitintegeroffsetintegerstatusstringdraft · sent · accepted · declined · expiredsort_bystringcreated_at · updated_at · amount · titledefault: created_atsort_dirstringasc · descdefault: descclient_idstringproject_idstringproposals.records.updateUpdate one or more fields on an existing proposal, including content, pricing, status, or key timestamps. Use when the freelancer wants to revise proposal details, mark it as sent, or record a client response without going through the full accept flow.9 paramsUpdate one or more fields on an existing proposal, including content, pricing, status, or key timestamps. Use when the freelancer wants to revise proposal details, mark it as sent, or record a client response without going through the full accept flow.
titlestringamountvaluestatusstringdraft · sent · accepted · declined · expiredcontentvaluesent_atvaluecurrencystringproposal_idstringvalid_untilvalueresponded_atvalueproposals.records.acceptMark a proposal as accepted, record the response timestamp, and automatically seed the linked project's scope_definitions from the proposal deliverables in a single atomic operation. Use when the freelancer confirms that a client has accepted the proposal and work is ready to...1 paramsMark a proposal as accepted, record the response timestamp, and automatically seed the linked project's scope_definitions from the proposal deliverables in a single atomic operation. Use when the freelancer confirms that a client has accepted the proposal and work is ready to...
proposal_idstringinvoices.records.createCreate and persist a new invoice with line items, tax, and totals in the FreelanceOS database. Use when the freelancer wants to generate and save a billable invoice for a completed or ongoing project.13 paramsCreate and persist a new invoice with line items, tax, and totals in the FreelanceOS database. Use when the freelancer wants to generate and save a billable invoice for a completed or ongoing project.
notesvaluetotalnumbercurrencystringdue_datevaluesubtotalnumbertax_ratevalueclient_idstringissued_atvalueline_itemsarrayproject_idstringtax_amountnumberproposal_idvalueinvoice_numberstringinvoices.records.getRetrieve the full details of a single invoice by its UUID. Use when the freelancer asks to view, review, or share the details of a specific invoice.1 paramsRetrieve the full details of a single invoice by its UUID. Use when the freelancer asks to view, review, or share the details of a specific invoice.
invoice_idstringinvoices.records.listReturn a paginated, filtered list of invoices for the authenticated freelancer. Use when the freelancer asks about outstanding, paid, overdue, or draft invoices, or wants a revenue summary for a date range.9 paramsReturn a paginated, filtered list of invoices for the authenticated freelancer. Use when the freelancer asks about outstanding, paid, overdue, or draft invoices, or wants a revenue summary for a date range.
limitintegeroffsetintegerstatusstringdraft · sent · paid · overdue · voiddate_tostringsort_bystringcreated_at · due_date · total · invoice_numberdefault: created_atsort_dirstringasc · descdefault: descclient_idstringdate_fromstringproject_idstringinvoices.records.updateUpdate one or more fields on an existing invoice, including its status or financial totals. Use when the freelancer marks an invoice as sent, records a payment, corrects line items, or changes the due date.11 paramsUpdate one or more fields on an existing invoice, including its status or financial totals. Use when the freelancer marks an invoice as sent, records a payment, corrects line items, or changes the due date.
notesvaluetotalnumberstatusstringdraft · sent · paid · overdue · voidpaid_atvaluedue_datevaluesubtotalnumbertax_ratevalueissued_atvalueinvoice_idstringline_itemsarraytax_amountnumbertime.entries.createLog a time entry against a project to record hours worked. Use when the freelancer reports time spent on a task, meeting, or deliverable so it can be tracked and later billed to the client.5 paramsLog a time entry against a project to record hours worked. Use when the freelancer reports time spent on a task, meeting, or deliverable so it can be tracked and later billed to the client.
billablebooleanentry_datestringproject_idstringdescriptionstringduration_minutesintegertime.entries.getRetrieve a single time entry record by its unique identifier. Use when the freelancer asks to view the details of a specific logged time entry, such as its description, duration, or billable status.1 paramsRetrieve a single time entry record by its unique identifier. Use when the freelancer asks to view the details of a specific logged time entry, such as its description, duration, or billable status.
time_entry_idstringtime.entries.listList time entries with optional filtering by project, date range, and billable status. Use when reviewing logged hours for a project, preparing a timesheet, or checking what work has been recorded before generating an invoice.8 paramsList time entries with optional filtering by project, date range, and billable status. Use when reviewing logged hours for a project, preparing a timesheet, or checking what work has been recorded before generating an invoice.
limitintegeroffsetintegersort_bystringentry_date · created_at · duration_minutesdefault: entry_datebillablebooleanend_datestringsort_dirstringasc · descdefault: descproject_idstringstart_datestringtime.entries.updateUpdate one or more fields on an existing time entry record. Use when the freelancer needs to correct a logged entry's duration, description, date, or billable flag after it was originally saved.5 paramsUpdate one or more fields on an existing time entry record. Use when the freelancer needs to correct a logged entry's duration, description, date, or billable flag after it was originally saved.
billablebooleanentry_datestringdescriptionstringtime_entry_idstringduration_minutesintegertime.entries.archiveSoft-delete a time entry by setting its archived_at timestamp, hiding it from all queries. Use when the freelancer wants to permanently remove an incorrectly logged or duplicate time entry from their records without destroying the underlying data.1 paramsSoft-delete a time entry by setting its archived_at timestamp, hiding it from all queries. Use when the freelancer wants to permanently remove an incorrectly logged or duplicate time entry from their records without destroying the underlying data.
time_entry_idstringtime.entries.aggregateCalculate the total minutes and hours logged against a project over an optional date range. Use when preparing an invoice, verifying billable hours before sending to a client, or generating a summary timesheet report.4 paramsCalculate the total minutes and hours logged against a project over an optional date range. Use when preparing an invoice, verifying billable hours before sending to a client, or generating a summary timesheet report.
end_datestringproject_idstringstart_datestringbillable_onlybooleanscope.definition.createDefine and persist the agreed project scope with deliverables, boundaries, and exclusions. Use this tool when starting a new project or immediately after a proposal is accepted by the client to establish a clear, shared understanding of what will be built.5 paramsDefine and persist the agreed project scope with deliverables, boundaries, and exclusions. Use this tool when starting a new project or immediately after a proposal is accepted by the client to establish a clear, shared understanding of what will be built.
boundariesstringexclusionsstringproject_idstringassumptionsstringdeliverablesstringscope.definition.getRetrieve the current active scope definition for a project, including deliverables, boundaries, assumptions, and exclusions. Use when the freelancer wants to review exactly what was agreed with the client before starting work or answering a scope question.1 paramsRetrieve the current active scope definition for a project, including deliverables, boundaries, assumptions, and exclusions. Use when the freelancer wants to review exactly what was agreed with the client before starting work or answering a scope question.
project_idstringscope.definition.updateUpdate one or more fields of the active scope definition for a project. Use when the client and freelancer have mutually agreed to change the scope and the persisted record needs to reflect the new agreement.5 paramsUpdate one or more fields of the active scope definition for a project. Use when the client and freelancer have mutually agreed to change the scope and the persisted record needs to reflect the new agreement.
boundariesvalueexclusionsvalueproject_idstringassumptionsvaluedeliverablesstringscope.changes.logRecord a client scope change request with classification and impact notes to maintain an auditable history of scope creep. Use this tool ONLY after the freelancer confirms they want to log the change — never log speculatively without explicit instruction.6 paramsRecord a client scope change request with classification and impact notes to maintain an auditable history of scope creep. Use this tool ONLY after the freelancer confirms they want to log the change — never log speculatively without explicit instruction.
impactstringproject_idstringdescriptionstringresolved_atstringrequested_atstringclassificationstringin_scope · out_of_scope · needs_reviewscope.changes.listList all scope change requests logged against a project, with optional filtering by classification and configurable sort order. Use when reviewing scope creep history, preparing a change-order summary, or auditing out-of-scope requests for billing.6 paramsList all scope change requests logged against a project, with optional filtering by classification and configurable sort order. Use when reviewing scope creep history, preparing a change-order summary, or auditing out-of-scope requests for billing.
limitintegeroffsetintegersort_bystringrequested_at · created_atdefault: requested_atsort_dirstringasc · descdefault: descproject_idstringclassificationstringin_scope · out_of_scope · needs_reviewscope.definition.checkRetrieve the agreed scope definition and full change history for a project so Claude can assess whether a new client request falls within the original agreement. Use this tool when a client asks for something new and the freelancer wants an informed opinion on whether it is in...2 paramsRetrieve the agreed scope definition and full change history for a project so Claude can assess whether a new client request falls within the original agreement. Use this tool when a client asks for something new and the freelancer wants an informed opinion on whether it is in...
project_idstringrequest_descriptionstringfollowups.messages.createStore a drafted follow-up message in the FreelanceOS database. Use when the freelancer has composed a follow-up and wants to save it for tracking purposes before or after sending it to the client.5 paramsStore a drafted follow-up message in the FreelanceOS database. Use when the freelancer has composed a follow-up and wants to save it for tracking purposes before or after sending it to the client.
typestringproposal_follow_up · invoice_overdue · check_in · awaiting_response · otherdefault: check_incontentstringsubjectstringclient_idstringproject_idstringfollowups.messages.getRetrieve a single follow-up record by its unique ID. Use when the freelancer asks to view the full details of a specific saved follow-up, including its content, type, and sent status.1 paramsRetrieve a single follow-up record by its unique ID. Use when the freelancer asks to view the full details of a specific saved follow-up, including its content, type, and sent status.
followup_idstringfollowups.messages.listList and filter follow-up records for a client or project with pagination support. Use when the freelancer asks to review follow-up history, check outstanding drafts, or audit all sent communications for a given client.8 paramsList and filter follow-up records for a client or project with pagination support. Use when the freelancer asks to review follow-up history, check outstanding drafts, or audit all sent communications for a given client.
sentbooleantypestringproposal_follow_up · invoice_overdue · check_in · awaiting_response · otherlimitintegeroffsetintegersort_bystringcreated_at · sent_atdefault: created_atsort_dirstringasc · descdefault: descclient_idstringproject_idstringfollowups.messages.updateUpdate the content or metadata of an existing follow-up record. Use when the freelancer wants to revise a drafted follow-up's subject, body, type, or project association before sending it to the client.5 paramsUpdate the content or metadata of an existing follow-up record. Use when the freelancer wants to revise a drafted follow-up's subject, body, type, or project association before sending it to the client.
typestringproposal_follow_up · invoice_overdue · check_in · awaiting_response · othercontentstringsubjectstringproject_idvaluefollowup_idstringfollowups.sent.markRecord the current timestamp as the sent date on a follow-up, transitioning it from draft to sent status. Use when the freelancer confirms they have actually sent the follow-up message to the client outside of FreelanceOS.1 paramsRecord the current timestamp as the sent date on a follow-up, transitioning it from draft to sent status. Use when the freelancer confirms they have actually sent the follow-up message to the client outside of FreelanceOS.
followup_idstringfollowups.context.getFetch all relevant context needed to draft an effective follow-up for a client, including outstanding invoices, recent follow-up history, and client contact details. Always call this tool before followups.create so the drafted message is informed by the client's current accoun...2 paramsFetch all relevant context needed to draft an effective follow-up for a client, including outstanding invoices, recent follow-up history, and client contact details. Always call this tool before followups.create so the drafted message is informed by the client's current accoun...
client_idstringproject_idstringFREELANCEOS_API_KEY*secretFreelanceOS API key for MCP server authentication