Free for 30 days on Scale.Start free
Run5 steps60 min setup, ongoing ~2 min per job review

Field service job summary and invoice prep

A field service workspace where every completed job turns into a reviewed, emailed invoice within hours of the tech writing the job note, with a full audit trail in Dock.

A field service workspace where every completed job turns into a reviewed

A field service workspace where every completed job turns into a reviewed, emailed invoice within hours of the tech writing the job note, with a full audit trail in Dock.

Spin up an agent for the heavy lifting

Watches jobs-inbox/ on cron, extracts job fields with Claude, computes invoice totals against LABOR_RATE + TAX_RATE, creates Jobs queue rows at Status=Pending Review, posts Slack review requests to REVIEWER_SLACK_ID. Never flips Status to Approved or emails the customer.

5 steps, 0 official links, 2 agent prompts

Every external doc the agent needs to cite is pre-loaded into the workspace's Pointers table. No hunting for the right URL mid-draft.

What's inside

Pre-loaded so day one is execution.

4Surfaces
5Steps
2Agent prompts
5Tools mapped
Surfaces
  • tableJobs queue
  • docSetup guide
  • docInvoice log
  • docStatus
How the loop works

Your agent works. Dock shows you what happened.

Open this template and you get a workspace seeded with an agent prompt. Connect your agent — Claude via our MCP, Cursor, your own setup — and it reads, drafts, and posts updates as it goes. You watch Dock for the latest.

  1. 01

    Connect your agent

    Claim an agent invite at trydock.ai/agent-invites — your agent gets an API key scoped to this workspace. Paste the key into Claude Desktop, Cursor, or any MCP client.

  2. 02

    Your agent reads the workspace

    The agent prompt at the top of the workspace tells your agent its role, the cadence to follow, and the surfaces to update. No extra setup — open Dock and your agent already knows what to do.

  3. 03

    Watch Dock for the latest

    Your agent posts to the Status surface after every meaningful action — newest at top. Wire the workspace's webhooks to Slack or email to get pinged in real time.

Wire it up · Claude Desktop

Add Dock as an MCP server in 30 seconds.

{
  "mcpServers": {
    "dock": {
      "command": "npx",
      "args": ["-y", "@trydock/mcp"],
      "env": {
        "DOCK_API_KEY": "<paste from /agent-invites>"
      }
    }
  }
}

Drop into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on Windows / Linux. Restart Claude Desktop. Ask Claude:“Read trydock.ai/<org>/field-service-job-invoice and follow the agent prompt.”

FAQ

Common questions on this template.

What if the tech doesn't include the customer email on the job note?
send_invoice.py handles this gracefully. If Customer Email is blank when Status flips to Approved, the script logs the skip and sets Status to 'Approved no email'. The reviewer sees this state in Dock and sends the invoice manually (or chases the customer email).
Can I bill different labor rates for different service types?
Yes, via the RATES dict extension in Setup guide. Replace the single LABOR_RATE with a dict keyed by service_type (e.g. {'HVAC': 110, 'Plumbing': 120}) and look up the rate by the Claude-extracted service_type. The base template uses a single rate for simplicity.
Can I attach a PDF invoice instead of plain text email body?
Yes, with one extension: pip install reportlab or weasyprint, then in send_invoice.py generate a formatted PDF from the row data and attach to the email. The base template ships plain-text bodies because most field service customers don't actually need PDFs; the message and total are what matters.
What if my techs already use ServiceTitan or Jobber?
Replace the folder watcher in generate_invoice.py with an API fetch loop using the field service app's API. Use processed_jobs.json to dedupe on job IDs. The rest of the pipeline (extract, compute, Dock row, Slack, send) is unchanged. Setup guide notes this extension in the Extending section.
What happens if Claude misreads parts quantities or prices?
Reviewer catches it. The Slack review request shows full line items with the math; the reviewer walks the totals and flips to Approved or Rejected. If a vendor or parts list trips up extraction consistently, edit the prompt in extract_job() with a hint specific to that parts catalog.

Open it. Hand it to your agent. Ship.

One click mints a fresh workspace in your org with the template body seeded. Your agents, your team, your edits from there.

About this template

Curated by the Dock team at . Every template is a real shared workspace we run with our own agents before publishing.

Reviewed regularly by the Dock team. Each playbook step links to the upstream tool's official docs so we can re-verify the rules as platforms change.