
FreelanceOS
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."
- tools
- 37
- auth
- Secret needed
- transport
- STDIO, HTTP
- env var
- 1
- last updated
- Apr 7, 2026
Tools
37 toolsPublic 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 params
Create 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...
billing_ratenumbercompanystringcurrencystringemailstringnamestringnotesstringphonestringclients.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 params
Retrieve 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 params
List 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 params
Update 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...
billing_ratevalueclient_idstringcompanyvaluecurrencystringemailvaluenamestringnotesvaluephonevalueclients.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 params
Soft-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 params
Create 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.
budgetnumberclient_idstringcurrencystringdescriptionstringend_datestringnamestringstart_datestringprojects.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 params
Retrieve 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 params
List 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.
client_idstringlimitintegeroffsetintegersearchstringsort_bystringname · created_at · updated_at · start_date · budgetdefault: created_atsort_dirstringasc · descdefault: descstatusstringactive · paused · completedprojects.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 params
Update 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.
budgetvaluecurrencystringdescriptionvalueend_datevaluenamestringproject_idstringstart_datevaluestatusstringactive · paused · completedprojects.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 params
Soft-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 params
Store 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.
amountnumberclient_idstringcontentstringcurrencystringproject_idstringtitlestringvalid_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 params
Retrieve 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 params
List 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.
client_idstringlimitintegeroffsetintegerproject_idstringsort_bystringcreated_at · updated_at · amount · titledefault: created_atsort_dirstringasc · descdefault: descstatusstringdraft · sent · accepted · declined · expiredproposals.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 params
Update 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.
amountvaluecontentvaluecurrencystringproposal_idstringresponded_atvaluesent_atvaluestatusstringdraft · sent · accepted · declined · expiredtitlestringvalid_untilvalueproposals.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 params
Mark 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 params
Create 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.
client_idstringcurrencystringdue_datevalueinvoice_numberstringissued_atvalueline_itemsarraynotesvalueproject_idstringproposal_idvaluesubtotalnumbertax_amountnumbertax_ratevaluetotalnumberinvoices.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 params
Retrieve 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 params
Return 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.
client_idstringdate_fromstringdate_tostringlimitintegeroffsetintegerproject_idstringsort_bystringcreated_at · due_date · total · invoice_numberdefault: created_atsort_dirstringasc · descdefault: descstatusstringdraft · sent · paid · overdue · voidinvoices.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 params
Update 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.
due_datevalueinvoice_idstringissued_atvalueline_itemsarraynotesvaluepaid_atvaluestatusstringdraft · sent · paid · overdue · voidsubtotalnumbertax_amountnumbertax_ratevaluetotalnumbertime.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 params
Log 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.
billablebooleandescriptionstringduration_minutesintegerentry_datestringproject_idstringtime.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 params
Retrieve 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 params
List 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.
billablebooleanend_datestringlimitintegeroffsetintegerproject_idstringsort_bystringentry_date · created_at · duration_minutesdefault: entry_datesort_dirstringasc · descdefault: descstart_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 params
Update 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.
billablebooleandescriptionstringduration_minutesintegerentry_datestringtime_entry_idstringtime.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 params
Soft-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 params
Calculate 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.
billable_onlybooleanend_datestringproject_idstringstart_datestringscope.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 params
Define 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.
assumptionsstringboundariesstringdeliverablesstringexclusionsstringproject_idstringscope.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 params
Retrieve 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 params
Update 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.
assumptionsvalueboundariesvaluedeliverablesstringexclusionsvalueproject_idstringscope.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 params
Record 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.
classificationstringin_scope · out_of_scope · needs_reviewdescriptionstringimpactstringproject_idstringrequested_atstringresolved_atstringscope.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 params
List 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.
classificationstringin_scope · out_of_scope · needs_reviewlimitintegeroffsetintegerproject_idstringsort_bystringrequested_at · created_atdefault: requested_atsort_dirstringasc · descdefault: descscope.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 params
Retrieve 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 params
Store 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.
client_idstringcontentstringproject_idstringsubjectstringtypestringproposal_follow_up · invoice_overdue · check_in · awaiting_response · otherdefault: check_infollowups.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 params
Retrieve 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 params
List 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.
client_idstringlimitintegeroffsetintegerproject_idstringsentbooleansort_bystringcreated_at · sent_atdefault: created_atsort_dirstringasc · descdefault: desctypestringproposal_follow_up · invoice_overdue · check_in · awaiting_response · otherfollowups.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 params
Update 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.
contentstringfollowup_idstringproject_idvaluesubjectstringtypestringproposal_follow_up · invoice_overdue · check_in · awaiting_response · otherfollowups.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 params
Record 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 params
Fetch 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_idstringSponsors
Configuration
FREELANCEOS_API_KEY*secretFreelanceOS API key for MCP server authentication
Details
- Package
freelance-os- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active