MCP Integration

Drive Biloh from any AI assistant

Biloh exposes a Model Context Protocol server. Connect Claude, GPT, Grok, or any MCP client and run your business through chat.

Endpoint

https://app.biloh.com.au/api/mcp

Transport

Streamable HTTP / SSE

Tools

70 operator tools

Connect from your client

Paste the configuration below into your MCP client. ReplaceYOUR_PAT_HEREwith a Biloh Personal Access Token issued by your tenant administrator.

Claude Desktop / Claude Code / any JSON-config MCP client

{
  "mcpServers": {
    "biloh": {
      "url": "https://app.biloh.com.au/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_PAT_HERE"
      }
    }
  }
}

ChatGPT, Perplexity, Grok (MCP-compatible builds)

Add a custom MCP server in your client's settings with the endpoint URL above and the Bearer token in theAuthorizationheader. The shape matches Claude Desktop's JSON config.

Test from your terminal

curl -X POST https://app.biloh.com.au/api/mcp \
  -H "Authorization: Bearer YOUR_PAT_HERE" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Tool catalogue

Auto-generated from the live MCP registry. Operator-persona tools shown; architect and platform-internal tools are not listed. 70 tools across 11 categories.

Clients & Sites (11)
  • 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), and pagination via limit/offset.

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

  • 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_site_contact to add contacts at each site.

  • 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 compliance/legal conditions specific to this site.

  • 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; explicit flag values override defaults.

  • update_site_contact

    Updates a site contact's details or notification preferences. Only provided fields are changed.

  • 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 placement: pricing flows to contract_service_line, site conditions flow to site.legal_notes, the service catalog is never touched.

Contractors (10)
  • 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) require architect persona.

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

Contracts & Services (10)
  • list_services

    Returns the service 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 pricing lives.

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

Jobs (4)
  • 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.

Work Orders (5)
  • 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_order before the work order is dispatched. The sent email includes a portal-link CTA (Review Work Order button) — the contractor accepts via the portal.

  • 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 portal.

  • 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 work_orders.status to 'accepted'. Transitions the underlying job to 'dispatched'.

Proposals (11)
  • 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, user_agent, content_hash, pdf_url, pdf_generated_at, confirmation_email_sent_at, and retention_class.

  • 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 use update_proposal_line. For status changes use propose_send_proposal or cancel_pending_operation.

  • 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 legal evidence.

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

  • 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 confirmed via confirm_pending_operation before the proposal is marked as sent. This is a HIGH-STAKES operation. The sent email includes a portal-link CTA (Review Proposal button) for click-to-accept signing — do not instruct the recipient to reply with acceptance text, the signing flow is handled by the portal.

Invoices (4)
  • 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 accidental sends.

Operations (5)
  • 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 the send. Validates ownership, expiry, and status before transitioning. Only the original proposer can confirm.

  • 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 flow.

  • 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 digitally sign.

  • 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 this to show the operator what is queued before they confirm the send via approve_send_operation.

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

Audit (2)
  • 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 narrowing to a specific time window. For investigating a single entity's full timeline, prefer get_audit_log_for_entity.

  • 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 provides the complete timeline of actions.

Platform (3)
  • 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 validation error, an inconsistency between MCP output and database state, or any platform-level defect. Bugs are stored at the Biloh platform level (cross-tenant, visible to platform admins). Downstream automation may pick up the bug and ship a fix; you will not be notified of resolution from within this tool. INCLUDE A `suggested_fix` ONLY IF YOU'RE CONFIDENT — it's a hypothesis for the receiving agent, not a directive. Don't use this for tenant-specific data issues (bad client name, missing site) — those are not bugs.

  • 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 missing. Tool requests are stored at the Biloh platform level (cross-tenant). Downstream automation may design and ship the new tool; you will not be notified of completion from within this tool. BE PRECISE about `proposed_name`, `tool_class`, and `workflow_context` — the receiving agent uses these to decide whether to build. Don't request a tool that already exists under a different name — use `mcp_session_diagnostic` first to see the full server tool list.

  • 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. Idempotent — re-call to refresh after data changes. Updates the entity row's pdf_url field if applicable.

Other (5)
  • 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 session-staleness or Cowork-side discoverability gap. Restart the Cowork session to refresh.

  • 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, persona mismatches, or upstream approval-gate issues without needing repo access.

  • 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` (and optionally `state`) to find businesses by name, returns up to 5 matches. USE WHEN: About to create a client — verify their ABN and pre-populate legal name, trading name, entity type, and GST status from the authoritative register. Works for businesses, body corporates, sole traders, trusts, and partnerships.

  • list_frequencies

    Returns the frequency catalog for the authenticated user's tenant.

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

Authentication

Biloh MCP uses Bearer-token authentication. Tokens are tenant-scoped Personal Access Tokens issued by your administrator. Tokens carry an operator persona and respect the same RLS rules as the in-app user interface — a token cannot see or write data outside its tenant.

Self-service PAT issuance is under active development. Until that lands, request a token through your tenant's administrator surface or contact hello@biloh.com.au.

Reference

Ready to plug Biloh into your assistant?

Start a free trial — your MCP server endpoint is ready on day one.