# Biloh > Biloh is the operating system for service businesses — quotes, dispatch, > contractor management, jobs, invoicing — usable from a phone, with > Model Context Protocol (MCP) integration bundled at every tier. ## What this file is This is a llms.txt manifest, per https://llmstxt.org/, intended to make Biloh discoverable and usable by AI agents and crawlers. ## How to integrate via MCP Biloh exposes a Model Context Protocol server. AI agents (Claude, GPT, Grok, Perplexity, or any MCP-compatible client) can drive a Biloh tenant's operations end-to-end through this surface. - MCP endpoint: https://app.biloh.com.au/api/mcp - Spec: https://modelcontextprotocol.io - Tier inclusion: every Biloh tier (Basic, Pro, Enterprise, Custom) ## Documentation - Marketing site: https://biloh.com.au - Features overview: https://biloh.com.au/features - Pricing and tiers: https://biloh.com.au/pricing - MCP integration: https://biloh.com.au/mcp - About: https://biloh.com.au/about - Contact: hello@biloh.com.au ## Tools (auto-generated catalogue) The operator-persona toolset is listed below. Architect-only and platform-internal tools are not included. Names are stable; semantics may evolve. - mcp_health: Health check tool — returns auth context, MCP status, server version, tool count, and tool_names. Compare tool_names to your reachable tools — any name in the server list that you cannot call is a ses - mcp_session_diagnostic: Read-only session diagnostic — returns server version, auth context, full tool list with categories and personas, and upstream constraint documentation. Use this to diagnose tool-list staleness, perso - list_clients: Returns clients for the authenticated user's tenant. Supports filtering by status, free-text search via `query` (case-insensitive substring match across legal_name, trading_name, and billing_email), a - get_client: Returns a single client by ID for the authenticated user's tenant. - list_sites: Returns all sites for the authenticated user's tenant. Optionally filtered by client_id. - get_site: Returns a single site by ID for the authenticated user's tenant. - list_site_contacts: Returns contacts for a site. The execution prompt says 'list_client_contacts' but biloh's canonical table is site_contacts. - lookup_abn: Looks up an Australian business via the Australian Business Register (ABR). Supports two modes: (1) ABN lookup — provide `abn` to get verified details for a known ABN; (2) Name search — provide `name` - create_client: Creates a new client record for the tenant. A client is a business entity that contracts the tenant for services. After creating a client, use create_site to add their service locations and create_sit - update_client: Updates an existing client's business details, billing info, payment terms, or status. Only provided fields are changed. - create_site: Creates a new site (service location) linked to a client. Sites represent physical locations where services are delivered. Use access_notes for contractor access instructions and legal_notes for compl - create_site_contact: Creates a contact person at a site. Contacts receive notifications based on their contact_role (owner, primary, billing, backup, emergency, technical). Role defaults auto-set notification flags; expli - update_site_contact: Updates a site contact's details or notification preferences. Only provided fields are changed. - list_contractors: Returns all contractors for the authenticated user's tenant. - get_contractor: Returns a single contractor by ID for the authenticated user's tenant. - list_contractor_agreements: Returns signed agreements (SMAs etc.) for a contractor. - list_contractor_quotes: Returns quotes submitted by a contractor. - list_contractor_compliance_documents: Returns compliance documents (insurance certs, ABNs, etc.) for a contractor. - create_contractor: Creates a new contractor (sub-contractor) for the tenant. Contractors are businesses that perform services on behalf of the tenant. Include business_name, ABN, contact details. - update_contractor: Updates a contractor's business details, insurance, banking, availability, or capabilities. Most fields are operator-accessible; banking fields (bank_bsb, bank_account_number, bank_account_name) requi - create_contractor_agreement: Creates a contractor agreement (SMA — Service Master Agreement) record. Agreements track the legal relationship between tenant and contractor. - create_contractor_quote: Creates a contractor quote — a price a contractor has offered for a specific site/service combination. Quotes are reference data used when negotiating contract_service_line rates. - create_contractor_compliance_document: Creates a compliance document record (insurance certificate, ABN verification, workers comp, etc.) for a contractor. Documents track the contractor's regulatory compliance status. - list_services: Returns the service catalog for the authenticated user's tenant. - list_frequencies: Returns the frequency catalog for the authenticated user's tenant. - list_contract_service_lines: Returns the rate schedule lines (per site/service/contractor) for the tenant. Optionally filtered by site_id, service_id, or contractor_id. - create_service: Creates a generic, reusable service in the tenant's catalog. Services are CLIENT-AGNOSTIC and CONTRACTOR-AGNOSTIC — they describe what work is offered, not who it's for or who delivers it. - update_service: Updates fields on a generic catalog service. Only provided fields are changed. The same content rules as create_service apply: services are CLIENT-AGNOSTIC and CONTRACTOR-AGNOSTIC. - archive_service: Soft-deletes a service from the catalog. The service remains in the database for audit history and existing contract/job references, but is excluded from active listings. - create_frequency: Creates a new frequency in the tenant's catalog. Frequencies define scheduling patterns (e.g., weekly, fortnightly, 4-weekly) used by contract_service_lines to determine job recurrence. - update_frequency: Updates an existing frequency's fields. Only provided fields are changed. - archive_frequency: Soft-deletes a frequency from the catalog. The frequency remains in the database for audit history but is excluded from active queries. - create_contract_service_line: Creates a contract service line — THE place for client-specific pricing. Links a site to a service with a frequency, client rate, and optional contractor rate. This is where per-client, per-site prici - update_contract_service_line: Updates a contract service line's rates, active status, contractor assignment, or active months. This is where rate changes and seasonal adjustments are made. - onboard_client_for_service: One-step tool to set up a client's service at a site with correct pricing. Creates a contract_service_line and optionally appends special conditions to site.legal_notes. ENFORCES correct data placemen - list_jobs: Returns jobs (work orders, scheduled visits) for the tenant. Optionally filtered by status, site_id, contractor_id, or date range. - get_job: Returns a single job by ID with full details including notes and completion data. - create_job: Creates a new job (work order) for a site/service on a scheduled date. Jobs represent individual instances of work to be performed. Should reference a contract_service_line where one exists. - update_job: Updates a job's status, schedule, contractor assignment, or notes. Valid statuses: scheduled, dispatched, completed, approved, invoiced, paid, on_hold, cancelled, missed, partial. - record_completion: Records contractor completion of a job: sets status='completed', completion_submitted_at, completion_photos[], completion_notes. Validates min photos + notes per tenant tunables. - list_work_orders: Returns work orders for the tenant. Optionally filtered by status, job_id, or contractor_id. Status values: sent, accepted, declined, rejected_after_acceptance, expired, cancelled. - get_work_order: Returns a single work order by ID with full details including signing token, acceptance, and signed PDF URL. - propose_send_work_order: Stages a work-order send. Validates the job has an assigned contractor with a signed Subcontractor Master Agreement. Creates an mcp_pending_operations row that must be confirmed via approve_send_work_ - approve_send_work_order: Approves a staged work-order send and immediately dispatches the email to the contractor with a portal-link CTA. The contractor clicks the link, reviews the work order, and digitally accepts via the p - record_work_order_acceptance: Records an out-of-band work-order acceptance (e.g. contractor accepted verbally or via email, and the operator is back-filling the system). Creates an immutable work_order_acceptances row and flips wo - list_invoices: Returns invoices issued by the tenant. Optionally filtered by client_id or status. - get_invoice: Returns a single invoice by ID with line items. - create_payment: Records a payment received against an invoice. Amount is in integer cents. Payment does not auto-update invoice status — that must be done separately if the invoice is fully paid. - propose_send_invoice: Proposes sending an invoice to the client. Creates a pending operation that MUST be confirmed (via confirm_pending_operation) before the invoice is actually sent. This two-step pattern prevents accide - confirm_pending_operation: Confirms a previously proposed operation, minting the signing_token and transitioning to staged_for_send status. Does NOT send the email — call approve_send_operation with operator approval to fire th - cancel_pending_operation: Cancels a pending operation in `pending` or `staged` status. After approve_send_operation has fired, the operation is `approved_and_sent` and cannot be cancelled — that's a separate withdrawal/voiding - list_proposals: Lists proposals for the tenant, with optional filters. Returns proposal header info including status, client, site, and dates. - get_proposal: Gets a single proposal with full detail: header, all lines (with service/frequency names), and acceptance records. - list_proposal_acceptances: Lists proposal acceptance records for audit/history. Returns core fields by default; set include_snapshot=true to include the full proposal_snapshot JSONB (large). Audit fields include ip_address, use - create_proposal: Creates a new proposal in draft status for a client at a specific site. After creation, add lines with add_proposal_line. Auto-assigns the next proposal_number for the tenant. - update_proposal: Updates the header fields (intro message / notes, valid_until date) on a draft proposal. Only allowed when proposal status is 'draft' — same constraint as update_proposal_line. For line item changes u - add_proposal_line: Adds a line item to a draft proposal. Each line links a service (and optionally a frequency) with pricing. Only allowed when proposal status is 'draft'. - update_proposal_line: Updates a proposal line's price, description, quantity, or display order. Only allowed when the parent proposal is in 'draft' status. - remove_proposal_line: Soft-deletes a line from a draft proposal. Only allowed when proposal status is 'draft'. - record_proposal_acceptance: Records that a proposal has been accepted. Creates a proposal_acceptances record and updates the proposal status to 'accepted'. For email-reply acceptance, captures the literal acceptance text as lega - bulk_archive_proposals: Soft-deletes multiple proposals in a single call. Accepted proposals are IMMUTABLE and are skipped (not archived). Cascade-cancels any associated pending/staged operations for archived proposals. - approve_send_operation: Approves a staged operation and immediately sends the email to the recipient with a portal-link CTA. The recipient will be able to click the link, land in the portal, review the agreement, and digital - get_pending_operation: Read-only inspection of a staged operation. Returns the operation's current state, the email subject/body that will be sent, the attachment path, the signing_token, and the related entity details. Use - list_pending_operations: List staged or in-flight operations for the current tenant. Use to find operations that need approval, or to review recent send activity. Default returns the most recent 20 staged operations. - get_audit_log: Returns recent audit log entries for the tenant. Supports filtering by actor, entity, action, and date range (time-window via from_date/to_date ISO params). Use for browsing general history or narrowi - get_audit_log_for_entity: Returns all audit log entries for a specific entity in chronological order. Use this for self-diagnosis: when investigating what happened to a proposal, operation, client, or other entity, this tool p - report_bug_to_biloh: Report a bug to the Biloh platform. Use this when you encounter unexpected behaviour while operating in a tenant — a tool returning the wrong shape, a UI route 404'ing, a stale schema, an unexpected v - request_tool_to_biloh: Request a new tool from the Biloh platform. Use this when you wished you had a tool that didn't exist — a composite that would have replaced six granular calls, or a granular tool that's genuinely mis - propose_send_proposal: Stages a proposal for sending. Validates proposal is in draft status and has at least one line. Renders the proposal PDF and returns a preview URL. Creates an mcp_pending_operations row that must be c - render_artifact_pdf: Renders a tenant artefact (proposal, invoice, quote, statement, receipt, signed agreement) as a PDF, stores it in Supabase storage scoped to the tenant, and returns a 1-hour signed download URL. Idemp ## Auth MCP requests authenticate via a tenant-scoped Personal Access Token (see /mcp for current connection instructions). A PAT issuance UX is under active development; until that lands, tenants generate tokens through their administrator surface. ## Contact hello@biloh.com.au — general privacy@biloh.com.au — privacy support@biloh.com.au — support