Skip to main content
Glama
jayson-svg

BackCrew Housecall Pro MCP Server

by jayson-svg

BackCrew Housecall Pro MCP Server

Think of this like a brand-new employee on their first day, not a business partner.

A new hire only does the exact tasks you've shown them, nothing more, until you decide they're ready for more responsibility. That's exactly how this works: it connects an AI assistant like Claude or ChatGPT to your Housecall Pro account, so you can ask for things in plain English (things like "find this customer," "what's on the schedule Tuesday," "is this invoice paid") instead of clicking through the Housecall Pro website yourself. But out of the box, it can only look things up. Nothing else is switched on until you decide to switch it on.

Built by BackCrew, the first in a series of free tools like this for the software pest control companies use every day.

Not a developer? That's fine. Everything up through "Testing it safely" is written for you: no coding background needed, and no computer jargon without an explanation first.


Contents

Related MCP server: Jobber MCP Server

What this actually does

Let's be upfront about what this is, because it's easy to oversell: it's not some all-knowing assistant that understands your business and runs things for you. It's a specific, named list of actions (things like "look up a customer," "schedule a job," "send an invoice") that an AI assistant is allowed to trigger when you ask in plain English. It doesn't have judgment about your business. It just matches what you ask for to the closest thing on its list and does exactly that. Nothing more.

That's still genuinely useful, though. Instead of this:

Open Housecall Pro → click Customers → search "Ruiz" → click into her profile → click Jobs tab → scroll to find this week...

You just say:

"Find the customer named Dana Ruiz and show me any jobs scheduled for her this week."

And it does the clicking for you: same actions you'd take yourself, just faster, and in plain English.

Why use an independent MCP server instead of the platform's own AI?

Software platforms are increasingly shipping their own built-in AI features. Worth knowing why you might still reach for this instead:

  • No plan-tier gates. Native AI features are often locked to a platform's most expensive plan. This project just needs API access, which is usually available on lower tiers too.

  • Cross-platform, not walled off. A platform's own AI only sees that platform's own data. It has no reason to work fluently with your accounting software, another CRM, or your email, since those are somebody else's product. An MCP-connected assistant can have multiple servers attached at once (this one plus another BackCrew server covering a different part of your business), so it can work across your whole stack in one conversation.

  • Your choice of AI, not theirs. You keep using whichever assistant you already trust (Claude, ChatGPT, whatever) instead of learning a new vendor-specific AI interface.

Also from BackCrew

This is one of several MCP connectors BackCrew builds, same idea, different software. We've also got QuickBooks for the accounting side, plus CRM connectors like HubSpot and GoHighLevel for lead and marketing data. Full list and what's live right now: see ROADMAP.md.

Beyond this repo: once a business gets comfortable with an AI assistant reading its data, there's often more it wants to do with it, like catching missed calls faster, processing invoices and paperwork automatically, following up on quotes without someone having to remember, reactivating customers who've gone quiet, or pulling reports without digging through the software. That's a separate, scoped conversation, not part of this free, open-source repo. Same contact as in Built by BackCrew below if it's something you want to explore.

Some words you'll see, explained

  • API: short for "Application Programming Interface." A locked door into Housecall Pro's data that only software (not a person clicking a mouse) can open. This project is a key that opens that door, so an AI can read and update your data directly instead of needing a screen to click through.

  • MCP: short for "Model Context Protocol." The standard way an AI assistant like Claude or ChatGPT is told "here's exactly what you're allowed to do, and how to do it." This project speaks that standard, which is why it plugs into Claude (and similar tools) with no custom setup.

  • Server: a small program that sits between Claude and Housecall Pro, translating requests back and forth. You start it once and leave it running; you never interact with it directly.

  • Repo (short for "repository"): the folder of code for this whole project. "Clone the repo" just means "download a copy of this project."

  • Token / API key: a long, private password-like code that proves a request is really coming from you. You'll generate one from your own Housecall Pro account (steps below) and never share it.

  • Terminal: a plain-text window on your computer where you type commands instead of clicking buttons. We walk you through this step by step; you don't need to have used one before.

  • Tool: one specific action the AI is allowed to take, like "look up a customer" or "send an invoice." Each one is listed and named individually: there's no hidden catch-all action.

How this keeps you safe by default

The "new hire" comparison up top isn't just a nice way of putting it; it's the actual design:

  • Out of the box, this thing can only look things up. It ships in read-only mode: nothing it does can create, change, delete, or send anything in your Housecall Pro account, because those actions aren't even switched on yet. There's no way to accidentally trigger a write action in the default setup, because the server doesn't even hand those tools to the AI.

  • When you're ready for more, you pick a responsibility level, not an all-or-nothing switch. Turning on write access (HCP_MCP_MODE=read_write; see setup) still means picking a profile that caps what's allowed:

    • readonly-owner: same as the default. Look-ups only. Day-one new hire.

    • office-ops: everyday front-desk work (book a job, update a customer, send an invoice). No deleting, no voiding, no locking, no webhook/integration setup. Those stay off even here.

    • admin: everything, including deletes, voids, locking jobs, and technical integration settings (webhooks). This is the only level where anything hard-to-reverse is possible.

  • A typo can't accidentally hand out more trust than you meant to. If the profile setting is ever misspelled or invalid, it falls back to the safest option (read-only) instead of the most permissive one.

What it can look up (always safe)

These only read data: nothing here can change a record, send anything to a customer, or cost you anything to run. This is what's available with zero extra setup:

What it covers

Examples of what it can look up

Customers

Search, view profiles and service addresses

Jobs

View job details, line items, materials used, schedule

Appointments

View appointment times and status

Estimates

View estimates and their options

Invoices

View invoices, payment status

Employees

View technicians and office staff

Leads

View leads and where they came from

Materials & pricing

View your price book, materials, services

Company info & schedule

View company details, technician schedules, calendar

Tags

View existing tags

30 look-up actions in total.

⚠️ What it can change (off by default)

Everything below this line can create, edit, send, or delete something real in your Housecall Pro account. None of it is available until you deliberately turn it on (see How this keeps you safe by default). This section is here so you know exactly what you'd be turning on, not because any of it is active right now.

office-ops level (everyday front-desk actions):

What it covers

Examples of what it can do

Customers

Add or update a customer, add a service address

Jobs

Create a job, schedule it, assign a technician, add line items/materials/notes, attach files

Appointments

Create, reschedule, confirm an appointment

Estimates

Create an estimate, add notes

Invoices

Generate an invoice from a job, send it to the customer

Leads

Create/update a lead, add notes

Materials & pricing

Add or update a material

Tags

Create or rename a tag

admin level only (hard to reverse, or technical/integration-facing; kept separate from everyday office work on purpose):

  • Deleting a job's line items, notes, schedule, or tags

  • Locking a job so it can't be edited further

  • Voiding an invoice

  • Deleting a material, tag, or lead note

  • Anything to do with webhooks (technical event notifications to other software). This entire area stays admin-only, including just viewing webhook settings, since it's an integration/engineering concern rather than everyday office work

How to set it up

Do these three steps in order. Each one gathers everything you need before you move to the next, so you won't have to jump back and forth.

Step 1: Make a folder for this on your computer

Before touching anything technical, just pick a spot and create an empty folder.

  1. Open Finder (Mac) or File Explorer (Windows)

  2. Go to your Desktop or Documents, anywhere easy to find again

  3. Create a new folder and name it something like backcrew-housecall-pro

That's it. You now know exactly where this project is going to live. Keep this Finder/Explorer window handy; you'll need to find this folder again in Step 3.

Step 2: Get your Housecall Pro key

Do this next, entirely inside Housecall Pro. No terminal yet.

  1. Log into your Housecall Pro account

  2. Click App Store in the left-hand menu

  3. Click API Key Management

  4. Click Generate

  5. Copy the key it gives you, and paste it somewhere temporary (a Notes app, a blank email draft) so you don't lose it before Step 3

Housecall Pro's own instructions, if you want a second reference: Housecall Pro API docs.

You now have everything Housecall Pro needs to give you. Time to move to the terminal.

Step 3: Install it

This is one continuous set of steps: do them in order, in the same terminal window.

  1. Open a terminal. On a Mac, press Cmd + Space, type "Terminal," and press Enter. On Windows, click the Start menu, type "PowerShell," and hit enter. Use PowerShell rather than Command Prompt: a couple of the commands below, like pwd, only work in PowerShell.

  2. Move into the folder you made in Step 1. Type cd (with a space after it), then drag your backcrew-housecall-pro folder from Finder/Explorer straight into the terminal window (it'll fill in the full path for you), then press Enter.

  3. Download the project into that folder. Paste this exactly and press Enter:

    git clone https://github.com/jayson-svg/backcrew-mcp-housecall-pro.git .

    (The period at the end matters: it tells it to download into the folder you're already in, instead of making a new one. If your computer asks to install "command line developer tools" the first time you use git, say yes; that's normal on a Mac that's never used git before.)

  4. Install what the project needs to run. Paste and press Enter:

    npm install
  5. Get it ready to use. Paste and press Enter:

    npm run build
  6. Get the folder's exact location; you'll need this in Step 4. Paste and press Enter:

    pwd

    This prints out something like /Users/yourname/Desktop/backcrew-housecall-pro. Copy that whole line; you'll paste it into Claude's settings next.

  7. Create your settings file. Paste and press Enter:

    cp .env.example .env
  8. Open that new file in a text editor. On a Mac: type open -e .env and press Enter, and it'll open in TextEdit. On Windows: type notepad .env and press Enter.

  9. Paste in the key you copied in Step 2. Find the line that says HOUSECALL_PRO_API_KEY= and paste your key right after the =, no spaces. Leave the other two lines (HCP_MCP_MODE and HCP_MCP_PROFILE) exactly as they are for now; more on those in Testing it safely.

  10. Save the file and close it. (Cmd+S / Ctrl+S, then close the window.)

That's the whole install. Keep that pwd output from step 6 handy; the next section uses it.

Connecting it to Claude

This step comes last on purpose: it needs the exact folder location from Step 3, and now you have it.

Claude Desktop / Claude Code

  1. Open Claude's settings file. For Claude Desktop, this is claude_desktop_config.json; Claude's own settings menu will show you where to find it.

  2. Add this, replacing PASTE_YOUR_PWD_OUTPUT_HERE with what pwd printed in Step 3.6, and paste_your_key_here with your Housecall Pro key again. If you're on Windows, swap any backslashes in that path for forward slashes (for example C:/Users/yourname/Desktop/... instead of C:\Users\yourname\Desktop\...), since the config file needs regular slashes.

{
  "mcpServers": {
    "housecall-pro": {
      "command": "node",
      "args": ["PASTE_YOUR_PWD_OUTPUT_HERE/dist/index.js"],
      "env": {
        "HOUSECALL_PRO_API_KEY": "paste_your_key_here",
        "HCP_MCP_MODE": "read_only",
        "HCP_MCP_PROFILE": "readonly-owner"
      }
    }
  }
}
  1. Save the file and restart Claude completely (quit it, don't just close the window).

You should now see Housecall Pro show up as something Claude can use, with only the look-up actions available, by default. Nothing more to do; no need to go back to Housecall Pro or the terminal.

This also works with ChatGPT and other MCP-compatible AI tools (Cursor, Windsurf, and others). The setup step is basically the same.

Things you can try asking

With the default (read-only) setup:

  • "Show me all customers created in the last 30 days"

  • "What jobs are scheduled for tomorrow?"

  • "Which invoices are still unpaid from last month?"

  • "Look up the customer at 918 Sycamore Court and show me her service history"

If you later turn on office-ops:

  • "Set up a new account for Maria Alvarez at 918 Sycamore Court, Round Rock TX, and tag her as a referral from Dave"

  • "Schedule a job for that customer next Tuesday at 9am and dispatch it to Mike"

  • "Add a line item for a quarterly pest treatment at $89"

  • "Tag that job as 'termite' and add a note that the crawl space is locked; call ahead"

Testing it safely

If you do decide to turn on write access, a few habits save you a headache later:

  1. Start in read-only mode and just live with it for a while. Get a feel for how the AI reads your requests before you ever let it change anything.

  2. When you do turn on office-ops, test on a clearly fake customer first. Make a test customer named something obvious like "ZZZ Test Customer: Do Not Use" and try your first few write actions on that record, not a real one.

  3. Don't jump straight to admin mode. Deletes, voids, and locks are hard or impossible to undo. office-ops covers real day-to-day work without touching any of that.

  4. Never share your API key. Not in chat, not in a screenshot, not in a support ticket. Treat it like a password, because it functions like one.

  5. If anything looks off, flip back to HCP_MCP_MODE=read_only immediately. That alone guarantees nothing further can change, no matter what the profile is set to.

For developers

Everything below this point assumes a coding background.

Tool reference

Run the server and call tools/list from any MCP client to see exact input/output schemas: every tool's description includes both the HTTP method/path it maps to and its access tier (e.g. Maps to GET /jobs/{id}/line_items. [tier: readonly-owner]). Each domain lives in its own file under src/tools/.

The tier/profile system

Every call to registerJsonTool(...) declares a tier: "readonly-owner" | "office-ops" | "admin". At startup, src/toolkit.ts reads HCP_MCP_MODE and HCP_MCP_PROFILE once, computes the maximum exposed tier, and any tool above that tier is never registered with the MCP server: it doesn't just get hidden from a menu, it's genuinely absent from tools/list and can't be called. HCP_MCP_MODE=read_only always wins over HCP_MCP_PROFILE regardless of what the profile is set to; only read_write lets the profile setting take effect. An unrecognized profile value falls back to readonly-owner, not the most permissive tier.

To add a new tool: pick the right tier when you call registerJsonTool, following the guidance in What it can look up / What it can change above. No other file needs to change.

Project layout

src/
  index.ts          Server entrypoint, registers every tool group and starts stdio transport
  client.ts          Minimal fetch-based Housecall Pro API client (auth headers, error handling)
  toolkit.ts          Tier/profile-aware helper that wires a Zod input schema + handler into an MCP tool
  tools/
    customers.ts
    jobs.ts
    employees.ts
    estimates.ts
    appointments.ts
    invoices.ts
    jobTypes.ts
    leads.ts
    materials.ts
    company.ts
    tags.ts
    webhooks.ts

Notes on the Housecall Pro API

  • Base URL: https://api.housecallpro.com

  • Auth header: Authorization: Token <api_key> (API key) or Authorization: Bearer <token> (OAuth 2.0, integration partners only)

  • Rate limits apply; a 429 response includes a RateLimit-Reset header with the epoch time the limit resets

  • Full reference: docs.housecallpro.com

This server was built by reading Housecall Pro's public API documentation directly, not by reverse-engineering another project's code. If you spot a field or endpoint that's drifted from what HCP actually returns, please open an issue or PR; the public docs are the source of truth.

This repo intentionally stops at honest API access. It does not include business-logic features (like a prioritized collections queue, capacity/route analysis, or automated escalation rules); those live in BackCrew's managed offering, built on top of this open layer, not in this public repo. See ROADMAP.md.

What's next

This is the first of a planned series of tools like this, one per major piece of software pest control companies in the US and UK use to run their business. See ROADMAP.md for what's coming next, and for the safety pattern (read-only default, tiered profiles) this repo established for the rest of the series.

Built by BackCrew

This project is free and open for anyone to use, copy, or build on. That's the whole point.

It's also a sample of the kind of work BackCrew does: we build tools, automations, and AI setups like this one for pest control and field service businesses, including the business-logic layer (collections, capacity planning, escalation rules) that intentionally isn't part of this open repo. If you like what this does but don't want to set it up and maintain it yourself, or you want something built specifically for how your business runs, that's exactly the kind of project we take on.

Want this set up for you? Reach out: jayson@backcrew.co

No pressure either way: everything above works on its own, for free.

License

MIT

Available Tools

30 tools
get_appointmentB

Get details for a single appointment. Maps to GET /jobs/{job_id}/appointments/{appointment_id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
appointment_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The '[tier: readonly-owner]' notation hints at read-only access and ownership scoping, which is useful. However, the description does not disclose what the response contains, potential error conditions, or behavior if the appointment doesn't exist, beyond what the endpoint mapping implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that states purpose, mapping, and access tier. Concise and front-loaded with no wasted words. It could arguably be a 5, but the tier annotation appended in brackets is slightly cryptic without elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple two-parameter fetch tool with no output schema and no annotations. The description provides the endpoint mapping and tier, which is decent context, but it doesn't mention response shape, error handling, or relationship to related tools like list_job_appointments. For a simple single-resource GET, it's adequate but leaves questions unanswered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are only 2 plain string parameters (job_id, appointment_id) with no descriptions in the schema. The description names both IDs implicitly through the endpoint path, which adds modest value, but it doesn't clarify their format, relationship, or required scope beyond what the endpoint mapping shows. With 0 params, baseline would be 4, but the endpoint mapping provides some of that semantics already.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches details for a single appointment, with a specific verb ('Get') and resource ('details for a single appointment'). It maps to a clear REST endpoint and includes a tier notation ('[tier: readonly-owner]'). However, it doesn't explicitly differentiate itself from its sibling 'list_job_appointments' beyond the implied singular vs. plural distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (fetching a single appointment via job_id and appointment_id) but does not explicitly state when to use this versus list_job_appointments or other siblings. The 'readonly-owner' tier hint provides some permission context, but there is no when/when-not guidance or naming of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_companyA

Get the connected company's business info and settings. Maps to GET /company. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses '[tier: readonly-owner]' which communicates read-only behavior and owner-scoped access. However, it doesn't describe the return shape, whether 'settings' includes mutation-related fields that might be read-sensitive, or any rate-limit considerations. The tier tag adds some transparency but is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste. It packs the resource, the HTTP method mapping, and the access tier into a compact, front-loaded format. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema, read-only tool, the description is reasonably complete. It identifies the resource and access tier. It could note the return format (business info structure) slightly more, but given the low complexity of a parameterless company-info getter, this is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and 100% schema coverage (empty), so the baseline is 4. The description adds context about what the tool returns ('business info and settings'), making it clear there are no inputs needed — the tool operates on the authenticated company context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get'), resource ('the connected company's business info and settings'), and the HTTP mapping (GET /company). This distinguishes it from sibling tools which all target specific sub-resources like customers, jobs, invoices, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('connected company') but provides no explicit when-to-use guidance or exclusions. With no sibling tool targeting company-level info, it's somewhat self-evident, but the description doesn't articulate when to pick this vs alternatives or note any auth or setup prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_customerB

Get a single customer by ID. Maps to GET /customers/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the disclosure burden. The ['tier: readonly-owner'] tag hints at read-only, owner-scoped access, and the REST endpoint mapping is helpful. However, it doesn't describe what happens if the customer doesn't exist (404 behavior), pagination, or response structure beyond what the endpoint implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, compact and efficient. The endpooint mapping and tier tag add useful metadata. No waste, though the tier tag could arguably belong in annotations rather than description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool, the description is reasonable but sparse. It lacks explicit behavior on not-found cases, authentication requirements, and doesn't explain what the response contains. Given no output schema and no annotations, more detail could be warranted, though simplicity helps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there's one required parameter (customer_id) that has no description in the schema and no elaboration in the tool description. The description names the endpoint but doesn't explain the format, constraints, or semantics of customer_id beyond it being an identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Get a single customer by ID' with a specific verb+resource and maps to an explicit REST endpoint. It distinguishes itself from siblings like 'list_customers' and 'get_customer_address' by focusing on a single customer fetch, though it doesn't explicitly differentiate from get_customer_address beyond the obvious resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[tier: readonly-owner]' tag implies safe read usage and the operation semantics imply when to fetch a customer by ID. However, there's no explicit when-to-use vs alternatives guidance, no mention of when to prefer list_customers, and no exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_customer_addressB

Get a single address for a customer. Maps to GET /customers/{customer_id}/addresses/{address_id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
address_idYes
customer_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the '[tier: readonly-owner]' tag in the description discloses a read-only safety profile. This adds modest behavioral context, though it doesn't describe return format, permission requirements beyond owner-level, or error behavior. The tier tag partially compensates for missing annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences total, zero waste. States the action, maps to the endpoint, and tags the safety tier. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-item GET with 2 required parameters and no output schema, the description is reasonably adequate. It identifies the resource and both parameters via the endpoint mapping. However, with no annotations or output schema, it could add what data the returned address contains or any caveats about ownership scoping, leaving some gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full burden. The description names both parameters in the endpoint path (customer_id, address_id) but doesn't add any type, format, or semantic nuance beyond what the raw schema properties (just 'string' with no descriptions) provide. The path mapping helps but doesn't explain what each ID represents or any constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a single address for a customer' with specific verb+resource+scope. It maps to a precise endpoint and distinguishes from siblings like list_customer_addresses and get_customer. It doesn't explicitly name the sibling alternative, so not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (retrieve one specific address by IDs) but doesn't state when to use this vs list_customer_addresses or get_customer. The context is implied by the mapping to a specific endpoint but no explicit exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_employeeB

Get full profile details for a single employee. Maps to GET /employees/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
employee_idYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It includes a 'tier: readonly-owner' tag which implies read-only access, but doesn't disclose what fields are returned, whether the employee must exist (error behavior), or any auth/access implications. Some safety signal is present via the tier tag, but it lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with a useful endpoint mapping and tier tag. Every word earns its place with no fluff. Could arguably be more detailed given the low coverage, but the structure is clean and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter get-by-ID tool, the description is reasonably adequate. It communicates the purpose, endpoint, and read-only tier. However, with no output schema, no annotations, and 0% param coverage, it could describe what 'full profile details' includes or clarify the response shape to help the agent anticipate results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no parameter-level detail. The single parameter employee_id is described only by its name in the schema. The description adds no meaning about what constitutes a valid employee_id (format, lookup by ID vs other identifier), though the single-param simplicity somewhat mitigates the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('Get full profile details for a single employee'). Distinguishes well from sibling list_employees by specifying it returns full profile details for a single employee. The API endpoint mapping adds clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context via 'single employee' vs the list_employees sibling, but doesn't explicitly state when to choose this over other tools or provide exclusions. Context is clear enough to differentiate from list_employees, but no when/when-not guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_estimateA

Get full details for a single estimate, including its options. Maps to GET /estimates/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
estimate_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It does add the read-only tier indicator ('tier: readonly-owner') which is useful behavioral context. However, it doesn't describe error behavior, what happens if the estimate doesn't exist, or any authentication/authorization nuances beyond the tier tag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that convey the purpose, scope, endpoint mapping, and access tier. Every sentence earns its place with zero filler. Well-structured and immediately readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-resource read tool with one simple parameter and no output schema, the description is largely sufficient. The tier tag and endpoint mapping provide useful context. The only gap is not explicitly distinguishing from list_estimates or describing the response format, but for a simple getter this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the single parameter (estimate_id). The description implies the ID identifies the estimate but doesn't explain how to obtain it (e.g., from list_estimates) or its format. With only one simple param, the gap is minimal but the description could still mention where the ID comes from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb (get) + resource (single estimate) and adds that it includes options. It maps to a specific endpoint (GET /estimates/{id}) for precise understanding. It's distinct from list_estimates, though it doesn't explicitly name the sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it's for a single estimate (as opposed to list_estimates for collections) but doesn't explicitly state when to use it vs. list_estimates or other alternatives. The singular focus and resource name provide implicit context but no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_invoiceA

Get full details for a single invoice, including line items. Maps to GET /invoices/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. The description states it returns line items and mentions [tier: readonly-owner] which hints at access level/auth requirements. However, it doesn't disclose behaviors like error cases for invalid IDs, response shape, or pagination (if any for line items). The tier note adds modest value but doesn't fully compensate for missing annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact at two sentences, front-loads the core purpose, and adds the API mapping and tier note. It's efficient without being under-specified. The '[tier: readonly-owner]' addition is useful context in a single concise token.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-resource GET with one parameter, the description is reasonably complete: it states what it returns (full details plus line items) and the API mapping. However, with no output schema, no annotations, and no description of what 'full details' contains (fields like payment status, due date, totals), an agent has limited insight into the tool's output richness or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 1 parameter and 0% schema description coverage, the description doesn't elaborate on invoice_id beyond what the schema provides. The schema alone defines it as a required string, and the description doesn't add format expectations (e.g., UUID style, numeric ID). However, with only a single self-explanatory parameter, the gap is minimal — the schema and tool name convey sufficient meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get full details for a single invoice, including line items' with a specific verb (get), resource (invoice), and scope (full details including line items). It maps to GET /invoices/{id} and distinguishes from siblings like list_invoices (listing vs single) and list_job_invoices (which scopes by job).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage ('get a single invoice') and the sibling set includes list_invoices for listing, which provides natural differentiation. However, there's no explicit statement of when to use this vs alternatives like list_invoices, get_estimate, or get_job. The [tier: readonly-owner] note provides some access context but no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobA

Get full details for a single job, including line items and schedule. Maps to GET /jobs/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It includes '[tier: readonly-owner]' which signals a read-only operation and ownership scope — helpful security context. However, it doesn't describe the return structure, pagination behavior, or error cases. The tier tag adds value but the details of what 'full details' includes are not fully specified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The first states purpose with scope, the second gives the REST mapping and tier annotation. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-resource GET with one self-explanatory parameter and no output schema, the description is reasonably complete. It notes the tier (readonly-owner) and includes line items and schedule scope. Could mention what happens when job_id is invalid, but for a straightforward fetch the description is adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but there's only one parameter (job_id) which is self-describing. The description says 'for a single job' and maps to GET /jobs/{id}, which implies job_id is the path identifier. The schema provides the parameter name; the description provides minimal additional semantics, but for a single obvious parameter this is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets 'full details for a single job, including line items and schedule' — specific verb (get) + resource (job) + scope (full details). It maps to GET /jobs/{id} which disambiguates the single-resource fetch from siblings like list_jobs. It doesn't explicitly differentiate from other get_* tools, but the job resource is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: fetch full details for a job. The sibling list_jobs vs get_job contrast is implied (list vs single). However, there's no explicit when/when-not guidance or alternatives named for when a user should use a more targeted tool like list_job_line_items instead of get_job for a single fragment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_leadA

Get full details for a single lead. Maps to GET /leads/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
lead_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. The [tier: readonly-owner] tag communicates that this is a read-only operation owned by the lead's owner, which adds some behavioral context. However, it doesn't disclose return format, error behavior, or authentication beyond the tier hint. The tag provides moderate value but not deep transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tight sentence plus API mapping and tier tag. Zero wasted words, all content earns its place. The GET /leads/{id} mapping and tier annotation are compact and valuable additions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with no output schema and no annotations, the description is reasonably informative but could go further. The tier tag, API mapping, and single-parameter schema cover the basics. It would benefit from noting what 'full details' includes (fields returned) given there's no output schema to communicate that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There's only 1 parameter (lead_id), and schema description coverage is 0%, so the schema provides no semantic meaning beyond the type. The description implies lead_id is what identifies the lead but doesn't elaborate on its format or how to obtain valid IDs. With only one self-evident parameter, the gap is modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets full details for a single lead, which is a specific verb+resource that distinguishes it from list_leads (which would list leads). However, it doesn't explicitly contrast with siblings beyond the single-vs-list implicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The [tier: readonly-owner] tag and 'Get full details' phrasing imply it's for retrieving one lead when you have its ID. It doesn't explicitly say when to use this versus list_leads, though the single vs list contrast is fairly intuitive. No explicit exclusions or alternative recommendations provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scheduleC

Get technician schedules and availability for a date range. Maps to GET /schedule. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesISO 8601 date
start_dateYesISO 8601 date
employee_idsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. The description states it's a GET mapping and readonly tier, which implies a read operation. However, it doesn't describe what's returned (schedule structure, availability format), whether employee_ids is required for filtering, or any response shape. The readonly nature is only conveyed via the tier note rather than explicit behavior description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, efficient and front-loaded. The endpoint mapping and tier annotation add useful context without bloat. Could perhaps mention the filter param but the description is appropriately concise for its scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with no output schema, the description gives the endpoint and scope but not return format, filtering behavior of employee_ids, or pagination. Given the moderate complexity (read-only schedule retrieval), the description is somewhat sparse but adequate for a straightforward GET operation with two required date params.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (2 of 3 params have descriptions). The description adds 'date range' context which maps to start_date and end_date, and both already have 'ISO 8601 date' descriptions in the schema. The employee_ids parameter's semantics (whom to filter by) is inferable from the name but not described in either schema or description. Baseline 3 is appropriate given moderate schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (get), resource (technician schedules and availability), and scope (for a date range). It also maps to the underlying endpoint (GET /schedule). However, it doesn't explicitly distinguish from sibling tools like get_appointment or list_job_appointments, though those are clearly different resources, so purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is provided. The description doesn't mention when a date range is required, whether employee_ids is optional filtering, or how this relates to appointment/schedule tools as alternatives. The tier marker '[tier: readonly-owner]' hints at permission context but no explicit usage context or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tagA

Get details for a single tag. Maps to GET /tags/{id}. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. '[tier: readonly-owner]' signals this is a read-only operation scoped to the owner, which is helpful safety context. However, it doesn't disclose what fields the returned tag contains, whether related data is included, or any error/not-found behavior. The read-only nature is conveyed but minimally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste. Front-loaded with the purpose, followed by the endpoint mapping and tier hint. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-obvious-parameter read tool with no annotations, the description covers the core: purpose and read-only tier. Given the simplicity (1 param, no output schema requirements to explain), this is reasonably complete. Missing mention of what the response contains, but for a simple tag object this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but doesn't. tag_id is self-explanatory from its name as an identifier, and the description mentions it maps to /tags/{id}, confirming the path-parameter semantic. For a single obvious parameter, this is acceptable baseline, though nothing additional is added beyond what the schema's name implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('Get details for a single tag') that distinguishes from sibling list_tags which retrieves multiple. The mention of the HTTP endpoint adds specificity. However, it doesn't elaborate on what 'details' includes beyond the obvious tag object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description identifies this as a single-resource retrieval tool, implying it pairs with list_tags (to find IDs). The [tier: readonly-owner] hint signals read-only usage context. No explicit when-to-use vs when-not-to-use or alternative selection guidance is given, but the single-vs-list distinction is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_customer_addressesC

List all service addresses for a customer. Maps to GET /customers/{id}/addresses. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
customer_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions it's a read-only tier operation via the tier label, which is helpful, but it doesn't describe pagination, ordering, whether deleted addresses are included, or what fields are returned. The tier label is partial credit but insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: one stating purpose and one mapping to the REST endpoint plus tier. Zero wasted words, well front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 1-param resource-listing tool with no output schema and no annotations, the description lacks pagination/ordering behavior and return format. It's adequate but leaves several practical questions unanswered that an agent might need (e.g., how many results, ordering, whether customer must exist).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (customer_id) exists and the description's 'for a customer' implies its role. However, the description doesn't explain the format of customer_id (UUID, numeric ID, etc.) or clarify whether it matches other customer_listing tools. With 0% schema description coverage, the description should add more detail than it does; it names the parameter's role but not its format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource+scope: 'List all service addresses for a customer.' The purpose is specific and unambiguous. It maps to a REST endpoint which adds concrete grounding, though it doesn't differentiate from get_customer_address beyond the plural/singular distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells us it lists all addresses for a customer but offers no guidance on when to use this versus get_customer_address, or when one would prefer this over get_customer. The tier label '[tier: readonly-owner]' hints at permissions but isn't actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_customersB

List customers, with optional search, sorting and pagination. Maps to GET /customers. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by name, email, mobile number, or address
pageNo
expandNoExtra fields to include in the response
sort_byNoCustomer attribute to sort by, e.g. created_at
page_sizeNo
sort_directionNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description notes '[tier: readonly-owner]' which hints at access level, but doesn't explain what this means behaviorally. There's no mention of pagination behavior, default page size, rate limits, or what happens when no customers match. For a list tool, the description is thin on behavioral detail beyond 'it lists.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. It states the core function (list customers), lists the key options (optional search, sorting, pagination), and adds the endpoint mapping for technical grounding. This is appropriately concise and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 6 parameters and no output schema, the description is somewhat minimal. It covers the three main operations (search, sort, paginate) but doesn't explain default behaviors (e.g., default sort order, default page size), the expand parameter's effect on response size, or the meaning of 'readonly-owner' tier. Given no output schema and no annotations, the description could do more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, meaning half the parameters have descriptions in the schema. The description itself mentions search, sorting, and pagination, which loosely maps to q, sort_by/sort_direction, and page/page_size parameters. However, it adds no detail beyond what the schema provides for those parameters, and the undocumented parameters (page, sort_direction) get no additional explanation. The description doesn't compensate for the coverage gap, staying at baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: 'List customers, with optional search, sorting and pagination.' It uses a specific verb (list) plus resource (customers) and mentions the HTTP endpoint mapping. It's clearly distinct from siblings like get_customer (single record) and list_customer_addresses (different resource). However, it doesn't differentiate itself from the other list_* sibling tools beyond naming the resource, but that's inherent to the naming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions optional search, sorting and pagination, giving some implicit guidance on when these features are used. However, it doesn't explicitly state when to use this vs alternatives (like get_customer for a single record, or list_customer_addresses for addresses). No exclusions or prerequisites (e.g., ownership constraints) are noted. The guidance is adequate but implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_employeesB

List employees (field techs and office admins), with optional filters. Maps to GET /employees. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by name, email, or phone
pageNo
roleNo
tagsNo
sort_byNo
is_activeNo
page_sizeNo
sort_directionNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. The 'Maps to GET /employees' and '[tier: readonly-owner]' hint at a read-only operation, which is useful safety context. However, it doesn't disclose pagination behavior, default sort order, or what happens with large result sets, which would be valuable for a list endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence (plus API mapping and tier tag). Every element earns its place. It's appropriately front-loaded with the core purpose first. The tier tag and endpoint mapping add useful context without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 8 parameters, low schema coverage, no output schema, most describing a simple list operation, the description is adequate but thin. It doesn't explain the employee roles fully, pagination semantics, filtering behavior, or the q/role/tags/is_active parameter semantics. It's a minimum-viable description but leaves the agent to guess about key behaviors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 13% (1 of 8 params described in schema). The description mentions 'optional filters' generically and identifies the domain roles (field techs, office admins), but doesn't explain the 8 parameters or how they interact. It adds minimal value beyond the schema's near-empty parameter descriptions, and doesn't compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List employees (field techs and office admins), with optional filters' - a specific verb (list) + resource (employees) with field/domain context. It distinguishes nicely from siblings like get_employee (single record vs list). The 'Maps to GET /employees' adds API grounding. It could explicitly differentiate from similar list_* siblings, but the resource name is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is a list/collection tool via 'optional filters' and the GET mapping, which gives some context. However, it doesn't explicitly state when to use this vs alternatives like list_employees vs get_employee (single lookup), or when pagination is needed. There are no explicit exclusions or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_estimatesC

List estimates with optional filters for customer, employee, status and date range. Maps to GET /estimates. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNoe.g. pending, approved, declined
sort_byNo
page_sizeNo
customer_idNo
employee_idNo
sort_directionNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The '[tier: readonly-owner]' tag implies the consumer must be an owner with read-only access, but this is vague. It does not disclose pagination behavior, what is returned, whether it returns only estimates owned by the caller, or any rate-limiting or data scoping constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action. The '[tier: readonly-owner]' marker is compact. No wasted words, though the date-range mention that doesn't match the schema adds slight confusion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 7 parameters and no output schema, the description is thin. It should clarify pagination behavior, sorting semantics, the relationship between parameters, and what the response contains. The mismatch between the 'date range' claim and the absence of date parameters is a notable completeness gap. Sibling get_estimate may handle single-record retrieval but this is not cross-referenced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 14%, so the description must compensate, but it only names the filter dimensions (customer, employee, status, date range) without mapping them to specific parameter names or clarifying semantics. Notably, the description mentions a date range filter but there is no start_date/end_date parameter in the schema - a mismatch that could confuse an agent. The schema itself has minimal descriptions (only 'status' has an example).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: 'List estimates' with the filters it supports (customer, employee, status, date range). It names the endpoint it maps to. However, it does little to differentiate from its sibling list_* tools, though those siblings cover different resources so the purpose is sufficiently distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists filter capabilities but provides no context on when to use this tool versus alternatives, no pagination guidance, no mention that get_estimate would be used for a single record, and no guidance on typical usage patterns. The '[tier: readonly-owner]' is the only usage-ish hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsB

List calendar events and scheduling conflicts. Maps to GET /events. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
end_dateNoISO 8601 date
page_sizeNo
start_dateNoISO 8601 date

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It indicates a read-only mapping to GET /events and the tier note, which conveys safety. However, it doesn't disclose pagination behavior, date-range semantics, or what 'scheduling conflicts' entails in the response beyond the listing promise.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that names the purpose and REST mapping. The tier bracket is compact. No wasted words. Could arguably add more detail, but structural economy is good.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 params, 50% schema coverage, no output schema, and no annotations, a richer description would help. The tool is a read-only listing operation, which is relatively simple, but the absence of pagination/date-range explanation and output-format detail leaves the agent under-informed about expected behavior. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% — start_date and end_date have 'ISO 8601 date' descriptions, but page and page_size lack descriptions entirely. The tool description adds no per-parameter semantics; it doesn't explain that dates likely filter the event window or how paging relates to results. It maps to the GET endpoint but doesn't clarify parameter behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List calendar events and scheduling conflicts' — a clear verb+resource pair that distinguishes from siblings like list_jobs or list_estimates. It also maps to a REST endpoint which adds clarity. However, it doesn't emphasize the owner-readonly scoping context beyond the bracketed tier note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tier annotation '[tier: readonly-owner]' that implies context for when this can be called, but provides no explicit guidance on when to use this vs alternatives like get_schedule or list_job_appointments. No exclusions or alternative tool mentions are given; usage context is only implied by the 'list events' framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_invoicesB

List invoices with optional filters for customer and payment status. Maps to GET /invoices. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNoe.g. draft, sent, paid, void
sort_byNo
page_sizeNo
customer_idNo
sort_directionNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It does disclose that this is a readonly operation via the '[tier: readonly-owner]' tag, which is useful behavioral context. However, it doesn't disclose pagination behavior, result ordering defaults, or what happens with no filters (returns all invoices). The readonly disclosure adds value but richer behavioral context (e.g., default sort, max page size behavior) is missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence plus an endpoint mapping and tier tag. It's front-loaded with the core action and conveys useful information efficiently with zero waste. Could arguably be more structured but is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list/filter tool with 6 parameters, no output schema, and no annotations, the description provides a reasonable baseline: it names the resource, the filter types, the endpoint, and the tier. However, with 83% of parameters lacking schema descriptions and no output schema, an agent cannot know expected response shape, pagination semantics, or valid values for sort_by without external knowledge. The description is adequate for simple invocation but insufficient for edge-case usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% (only 'status' has an inline description), so the description should compensate. The description mentions 'customer and payment status' filters, which partially maps to customer_id and status parameters, but it doesn't clarify the semantics of page, page_size, sort_by, or sort_direction beyond what the schema types suggest. The description adds marginal value for two parameters but leaves the other four under-documented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List invoices') with a clear resource and specifies the available filters (customer, payment status). It maps to GET /invoices for endpoint reference. However, it doesn't explicitly distinguish itself from sibling tools like list_job_invoices, which could be ambiguous given list_invoices also exists. The verb+resource is clear but sibling differentiation is largely left to the names themselves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description identifies what filters are available (customer and payment status) and the readonly tier, implying it's safe to use for read-only scenarios. However, it doesn't explicitly state when to prefer this over list_job_invoices (which lists invoices scoped to a job) or get_invoice (single invoice). The 'optional filters' phrasing suggests flexible usage but no explicit when/when-not guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_appointmentsB

List appointments for a job, or across the account with filters. Maps to GET /jobs/{job_id}/appointments. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description includes '[tier: readonly-owner]' which signals a read-only operation and ownership constraint. No annotations are provided, so the description carries the burden. It adds the readonly and owner-scope context, which is useful, though it doesn't detail behaviors like pagination, sorting, or what happens with no appointments. The tier marker adds some transparency value beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences/short clauses and to the point, front-loading the core purpose and endpoint. The '[tier: readonly-owner]' tag is compact metadata. Minimal waste, though the 'filters' mention creates an expectation of parameter documentation that isn't fulfilled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter list tool with no output schema and no annotations, the description is reasonably informative: it states scope (per-job or account-wide), the endpoint mapping, and access tier. However, it promises 'filters' without enumerating them, and with 0% schema coverage the job_id parameter and any filter parameters go undocumented. Given the tool's simplicity, this is adequate but leaves the filter behavior under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and there's only one parameter (job_id: string). The description never mentions the job_id parameter explicitly — it's only implied by 'List appointments for a job.' With 0% coverage, the description should compensate, but it adds no parameter-specific detail about job_id format, whether it's required, or any filter parameters that the 'across the account with filters' clause implies would exist. This is a meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List appointments for a job, or across the account with filters' — a clear verb+resource with scope indicated. It maps to GET /jobs/{job_id}/appointments, which confirms the endpoint. However, it doesn't explicitly distinguish from sibling get_appointment (singular vs plural could be inferred but not stated).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes it lists for a specific job OR across the account with filters, so an agent knows it can be used in both scopes. However, it doesn't explicitly state when to prefer this over get_appointment (retrieving a single appointment by ID vs listing), and the 'or across the account with filters' is vague — no detail on what filters are available.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_input_materialsB

List materials consumed on a job. Maps to GET /jobs/{id}/input_materials. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The tier tag "readonly-owner" is embedded in the description, which helps signal authorization requirements. However, it doesn't describe what happens for a job with no input materials (empty list vs error), pagination behavior, or whether the response includes quantities/prices. For a read-only list operation, this is acceptable but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each earning its place — the first states the purpose, the second provides the endpoint mapping and tier. No wasted words. Could optionally add usage guidance, but what's present is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple filtered-list tool with a single parameter and no output schema. The description covers the purpose and endpoint clearly. Given the tool's low complexity, the description is nearly adequate. However, the tier "readonly-owner" implies ownership scoping that isn't explained, and it doesn't mention what fields or material details are returned. Acceptable for a simple tool but could note the return includes quantities/prices per material.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for documentation. There's only one parameter (job_id), and although the description mentions "on a job", it doesn't explicitly explain that job_id is the identifier of the job whose materials are being listed. With a single obvious parameter, the baseline is somewhat lower, but the description doesn't explicitly map the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states "List materials consumed on a job" with a specific verb (List), resource (materials), and scope (on a job). It maps to a clear endpoint. However, it doesn't clearly distinguish from siblings like list_materials (which lists all materials globally) — although the job-scoping is implied through the name. The endpoint mapping adds clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tier annotation "readonly-owner" and endpoint mapping provide implicit usage context, but there's no explicit statement about when to use this vs list_materials or list_job_line_items. "Consumed on a job" implies it requires an existing job_id, but no alternative tool is explicitly named or excluded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_invoicesA

List the invoices generated for a specific job. Maps to GET /jobs/{job_id}/invoices. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The '[tier: readonly-owner]' tag conveys an access-level constraint, which is useful behavioral context beyond the schema. However, with no annotations provided, the description carries the transparency burden, and it does not state what happens if the job has no invoices (empty list vs. error), pagination behavior, or response ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste: the first states the function and the second maps to the endpoint with an access-tier tag. Efficiently organized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple filtered-list tool with one parameter and no output schema. The description is reasonably complete for the simple use case, though it lacks detail on empty results, ordering, or pagination. The tier tag adds access context. Adequate but with room to describe return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full burden for the single parameter. However, job_id is a self-explanatory identifier and the description's 'for a specific job' clarifies its role as the job selector. With only one simple parameter, the baseline is acceptable even at 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: 'List the invoices generated for a specific job.' It distinguishes from the sibling list_invoices (which lists all invoices) by specifying 'for a specific job.' The endpoint mapping adds precision. Not a 5 because it doesn't explicitly contrast with sibling list_invoices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'for a specific job' phrasing implies the tool requires a job_id context, distinguishing it from a general invoice listing. However, there's no explicit when-to-use vs. alternatives guidance, no mention of list_invoices as the alternative for global access. Some implied usage context but no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_line_itemsB

List all line items on a job. Maps to GET /jobs/{id}/line_items. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. The tier tag [tier: readonly-owner] adds useful access-level context. However, it doesn't describe pagination, ordering, or what fields are returned, though the endpoint mapping provides some expectation of a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The endpoint mapping and tier tag are useful additions packed efficiently. Could arguably merge information more, but it's appropriately brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read-only list tool, the description provides the essential targeting info (resource + endpoint + access tier). However, with no output schema and no documentation of return fields or pagination behavior, it's slightly under-specified for a list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there's only one parameter (job_id) which is self-explanatory from the name. The description adds no meaning about the parameter beyond the schema, and with 0% coverage the description should compensate, though job_id is fairly unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (List), the resource (all line items on a job), and maps to a specific REST endpoint (GET /jobs/{id}/line_items). It distinguishes reasonably from siblings like list_job_input_materials and list_job_appointments by being job-line-item-specific, though it doesn't explicitly differentiate from similar list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The tier tag [tier: readonly-owner] hints at access-level usage but doesn't explain context or exclusions. No mention of which jobs it applies to or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_jobsA

List jobs with optional filters for customer, employee, status and date range. Maps to GET /jobs. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sort_byNo
page_sizeNo
customer_idNo
employee_idNo
work_statusNoe.g. needs_scheduling, scheduled, in_progress, completed, cancelled
sort_directionNo
scheduled_end_maxNoISO 8601 timestamp
scheduled_end_minNoISO 8601 timestamp
scheduled_start_maxNoISO 8601 timestamp
scheduled_start_minNoISO 8601 timestamp

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The '[tier: readonly-owner]' tag signals read-only/ownership scope, providing some behavioral context. With no annotations provided, the description partially carries the transparency burden. However, it doesn't disclose pagination behavior, default sorting, result limits, or whether filters are combinable. The tier tag is useful but limited in detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with zero waste. Front-loaded with the primary action and all key filter dimensions, plus the endpoint and tier context. Every element contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with 11 parameters, 45% schema coverage, and no output schema, this is moderately complete. The description captures the filtering dimensions but lacks detail on pagination defaults, result shape, and any permission implications beyond the tier tag. Sibling tools like list_estimates and list_invoices follow similar patterns, so some inference is possible, but the 11-parameter surface area warrants more guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 45%, so the description must compensate. It names the filter dimensions (customer, employee, status, date range) which maps to ~5 of the 11 parameters (customer_id, employee_id, work_status, scheduled_* bounds). This helps decode several undocumented params. However, it doesn't clarify page/page_size/sort_by/sort_direction semantics beyond what schema type hints suggest, and the date range mapping is implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states it lists jobs with optional filters (customer, employee, status, date range), clearly distinguishing it as a listing operation. It verb+resource is specific and the endpoint mapping adds clarity. Could benefit from explicitly distinguishing from get_job (single resource retrieval), but sibling differentiation is partially achieved by the plural listing nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it's for listing jobs and mentions the filter options, giving context on when to use it. However, it doesn't explicitly state when NOT to use it (e.g., when you need a single job use get_job, or when you need job line items use list_job_line_items). No exclusions or alternative tool mentions beyond the implicit endpoint mapping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_typesA

List the service/job types configured for the company (e.g. Termite Inspection, Quarterly Treatment). Maps to GET /job_types. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It does specify read-only nature via the tier tag '[tier: readonly-owner]' and the 'List' verb, which conveys non-destructive behavior. However, it doesn't describe the return format, ordering, pagination, or whether the list is exhaustive. The tier tag provides some confidence about the read-only nature but is somewhat cryptic for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that packs the purpose, examples, endpoint mapping, and tier annotation into roughly 30 words. It's efficient and front-loaded with the core action. No wasted words. The tier tag, while slightly cryptic, is concise. Could arguably be a 5, but the crypticity of the tier annotation and the absence of any additional useful context keeps it at 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool, this description is reasonably complete. The examples ground the resource type, the endpoint mapping aids verification, and the tier tag indicates permissions. No output schema exists, so the description doesn't need to explain return values per the rubric. There's not much more one could meaningfully add for such a simple tool without padding. The main gap is that the tier tag '[tier: readonly-owner]' is somewhat ambiguous about what 'owner' means in terms of access scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has 0 parameters, and schema description coverage is 100% (an empty properties object). With no parameters to document, the description's job is minimal on this dimension. The description correctly notes there are no filters or inputs needed, and the endpoint mapping is provided. A baseline of 4 is appropriate for a zero-parameter tool where nothing further could be added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('service/job types configured for the company'), with concrete examples (Termite Inspection, Quarterly Treatment). It maps to GET /job_types, which adds confidence. It doesn't explicitly distinguish from siblings, but the sibling list contains many list_* tools for distinct resources, and this tool's resource is uniquely named 'job_types', so the purpose is clear without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a tier tag '[tier: readonly-owner]' which implies it's a read-only operation scoped to the owner. It gives the endpoint mapping for reference. However, it doesn't explicitly state when to use this vs alternatives or mention any prerequisites, ordering, or combinations with other tools. The usage context is implied (read-only list operation for job types) but not elaborated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_leadsC

List prospective-work leads with optional filters. Maps to GET /leads. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNo
page_sizeNo
customer_idNo
lead_source_idNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It mentions '[tier: readonly-owner]' suggesting read-only ownership scope, which is somewhat useful, but it doesn't disclose pagination behavior, what the response contains, sorting, or whether results are limited by ownership scope beyond the cryptic tier tag. For a list tool with zero annotations, this is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact at a single sentence plus the HTTP mapping tag. It's front-loaded with the core purpose in the first clause. The '[tier: readonly-owner]' tag is concise but cryptic. No wasted sentences, though the tier notation is somewhat opaque.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and zero annotation coverage place high demand on the description, which responds with only one sentence. It doesn't describe pagination, response shape, filter behaviors, or access constraints. For a 5-parameter list tool with rich siblings (list_jobs, list_estimates), a competing read tool, and no structured safety annotations, this is materially under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only says 'optional filters' without explaining any specific parameter (status, customer_id, lead_source_id, page, page_size). None of the filter semantics, value formats, or relationships (e.g., customer_id filters by owning customer) are clarified. The 5 parameters are essentially undocumented by the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List prospective-work leads with optional filters' — a clear verb+resource. However, it doesn't differentiate from siblings like list_jobs, list_estimates, or list_invoices, all of which are parallel list tools. 'Maps to GET /leads' is technical detail but not differentiating guidance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says 'with optional filters' implying the parameters are all optional, and '[tier: readonly-owner]' hints at access level, but there is no explicit when-to-use guidance versus alternatives. No exclusions or naming of sibling tools for comparison when to prefer a different list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_lead_sourcesA

List the configured lead sources (e.g. Google Ads, Referral, Door Hanger). Maps to GET /lead_sources. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full burden. It mentions '[tier: readonly-owner]' which suggests permission/access requirements, and maps to GET (implying non-destructive). However, it doesn't describe pagination, ordering, or response shape for a list operation. Minimal behavioral disclosure beyond the method mapping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with examples, endpoint mapping, and tier tag. Efficient and front-loaded with the purpose. Slightly dense with the bracket metadata but no wasted words. Effective for such a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-parameter list tool with no output schema, the description is reasonably complete: it states what it returns, gives representative examples of lead sources, and indicates the endpoint. It doesn't describe result limits or sort order, but for a lookup-style tool this is acceptable. Tier tag adds access context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, so there is nothing for a description to document. Per the rubric, 0 params = baseline 4. The description correctly emphasizes the scope (configurable lead source types) which is the only semantic element. A 5 is appropriate given there are no parameters to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('List the configured lead sources'), distinguishes itself from siblings like list_leads by specifying lead source configuration (Google Ads, Referral, Door Hanger). Maps to an explicit endpoint. Not a full 5 as it doesn't explicitly distinguish from list_materials or other list tools beyond examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[tier: readonly-owner]' tag implies read-only usage scope. No explicit when-to-use or alternatives guidance, but the tool is simple and self-evident (listing configured sources), so context is reasonably implied by the name and examples. No exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_material_categoriesB

List the price book's material category hierarchy. Maps to GET /material_categories. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It indicates a read-only operation via the tier tag and endpoint (GET), but does not describe the shape of the hierarchy returned, whether it's a flat list or nested tree, pagination behavior, or any ordering characteristics. Minimal disclosure of behavioral traits beyond the endpoint method.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that states the purpose and endpoint reference. It's front-loaded and efficient. The tier tag adds a small amount of access control context. No wasted words, though it could arguably include more information given how short it is.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no parameters and no output schema, which lowers complexity. However, with no annotations and a no-annotations environment, the description could benefit from noting what the returned hierarchy looks like (e.g., whether categories are nested or flat, what fields are returned). For a simple no-parameter list operation, it's adequate but could be more informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there's nothing for the description to clarify about parameters. The schema coverage is 100% (trivially, as there are no properties). With 0 parameters, the baseline is 4 — the description doesn't need to add parameter context since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists the price book's material category hierarchy, mapping to a well-defined endpoint (GET /material_categories). It has a specific verb+resource and scopes it to 'material categories', which is distinct from the sibling list_materials (which lists materials, not their categories). It doesn't explicitly distinguish from siblings but the resource is clearly different.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is given. The description implies usage by identifying the resource and endpoint, but doesn't clarify when to use this over sibling tools like list_materials or list_price_forms. The tier marker [tier: readonly-owner] offers some scoping but no guidance on selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_materialsC

List price book materials, optionally filtered by category. Maps to GET /materials. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
pageNo
page_sizeNo
category_idNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of disclosure. It mentions the endpoint mapping (GET /materials) and tier tag '[tier: readonly-owner]', which implies read-only access but doesn't explicitly state the tool is non-destructive, whether pagination defaults exist, or what the return structure looks like. For a read/list tool with zero annotation coverage, moderate disclosure exists but significant gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The endpoint mapping and tier tag are efficiently included. Every sentence earns its place, though the tier tag format is cryptic.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 4-param list operation with no output schema and no annotations, the description is moderately complete. It covers the core purpose and endpoint, plus category filtering. Gaps: no pagination behavior described, no search semantics for q, no disclosure of what fields are returned. Given the tool's relative simplicity, this is adequate but could add a bit more on parameter behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, meaning the description must compensate for 4 undocumented parameters. The description mentions 'category' which maps to category_id, but the 'q' (search), 'page', and 'page_size' parameters are not explained in the description at all. However, page/page_size are conventional pagination params an agent can infer from naming, and q is a common search token. Some compensation but not complete for all 4 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List price book materials, optionally filtered by category' with a clear verb+resource. It maps to GET /materials. It distinguishes from siblings like list_material_categories and list_price_book_services, though not explicitly naming them. The 'optionally filtered by category' adds useful scoping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance, no exclusions, no mention of alternatives. The '[tier: readonly-owner]' tag hints at access requirements but not usage context. The tool identity implies it's the go-to for listing materials, but there's no guidance on when to use it versus list_price_book_services or list_material_categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_price_book_servicesB

List billable services configured in the price book. Maps to GET /price_book_services. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo
category_idNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. The 'readonly-owner' tier hint and 'Billable services' wording indicate read semantics, which is helpful. However, it doesn't disclose pagination semantics, default page sizes, or whether results are ordered/filtered in any particular way.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. Front-loaded with the core purpose, then maps to the endpoint and tier. This is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-optional-parameter list tool with no output schema, this is reasonably complete given the tier hint covers safety. However, the 0% schema description coverage plus undeclared pagination defaults and no filter explanation leaves gaps an agent would have to discover at runtime.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate, and it does not. None of the three parameters (page, page_size, category_id) are explained. The purpose of category_id is inferable from the tool's purpose, but no explicit guidance is given on filter semantics or pagination constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('List billable services configured in the price book'). The purpose is specific and distinct from siblings like list_materials or list_price_forms, though it doesn't explicitly differentiate itself from these names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance. The tier hint '[tier: readonly-owner]' implies it's a read-only list operation, but there's no mention of pagination behavior, filtering alternatives, or context in which this would be preferred over other list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_price_formsA

List price book form templates used to build estimates and invoices. Maps to GET /price_forms. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The '[tier: readonly-owner]' tag signals a read-only operation, which adds some transparency. However, it doesn't clarify whether all price forms are returned or if there's any filtering, pagination, or ownership scope implied by 'owner'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: one stating the purpose and one mapping to the API endpoint plus tier. Zero wasted words, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with no output schema, the description is reasonably complete. It states the resource, purpose, API mapping, and read-only tier. Could benefit from noting whether all templates are returned or if any default filtering applies, but this is a minor gap for a simple list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and schema coverage is 100% (nothing to document). The description clarifies the resource type and usage purpose beyond the name alone. With 0 params, the baseline is 4, and the description meets this by explaining what the returned templates are used for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb (List) + resource (price book form templates) + purpose (build estimates and invoices). The 'Maps to GET /price_forms' clarifies the API endpoint. It distinguishes somewhat from siblings by specifying these are templates for estimates/invoices, though many sibling tools also list resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing form templates for estimate/invoice building, which gives context. However, it doesn't explicitly state when NOT to use it or name alternatives among the many sibling list tools. The tier tag ([tier: readonly-owner]) implies a read-only context but no exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsA

List all organizational tags available on the account. Maps to GET /tags. [tier: readonly-owner]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. The '[tier: readonly-owner]' tag explicitly discloses this is a read-only operation requiring owner-level access. This is meaningful behavioral information (auth tier, read-only nature) that an agent would benefit from. It doesn't describe pagination or returned fields, but for a 0-parameter list tool the core behavioral context is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. It clearly states the action, the endpoint mapping, and the tier in a compact form. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-parameter, read-only list tool with no output schema, the description is fairly complete. The tier tag and endpoint mapping help the agent. It doesn't describe the return format, but for a simple list-all operation without an output schema, this is a minor gap. Overall adequate and functional.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100% (trivially, since there are no params to document). The description explains the scope of what's returned ('all organizational tags'), which is the only semantic context needed. Baseline 4 for 0-param tools applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List all organizational tags available on the account' with a clear verb (list) and resource (organizational tags). It maps to a specific endpoint (GET /tags). It's clear, though it doesn't explicitly distinguish from sibling get_tag (the singular form) — but the list vs. get distinction is inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool returns all tags at the organizational level, giving some context about scope. However, it provides no explicit when-to-use guidance or exclusions — e.g., no note about when to prefer get_tag for a single tag lookup. The context is adequate but no alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 30 tool updatesv0.1.0
    • First observedget_appointment
    • First observedget_company
    • First observedget_customer
    • First observedget_customer_address
    • First observedget_employee
    • First observedget_estimate
    • First observedget_invoice
    • First observedget_job
    • First observedget_lead
    • First observedget_schedule
    • First observedget_tag
    • First observedlist_customer_addresses
    • First observedlist_customers
    • First observedlist_employees
    • First observedlist_estimates
    • First observedlist_events
    • First observedlist_invoices
    • First observedlist_job_appointments
    • First observedlist_job_input_materials
    • First observedlist_job_invoices
    • First observedlist_job_line_items
    • First observedlist_job_types
    • First observedlist_jobs
    • First observedlist_lead_sources
    • First observedlist_leads
    • First observedlist_material_categories
    • First observedlist_materials
    • First observedlist_price_book_services
    • First observedlist_price_forms
    • First observedlist_tags

TDQS

B3.2/5.0

Scored across 30 tools

Disambiguation4/5

Tools are mostly distinct with clear resource+action separation (jobs, estimates, invoices, leads, customers, materials). Some potential confusion exists between get_schedule and list_events (both relate to scheduling/calendar), and between list_job_line_items and list_invoices line items, but the descriptions differentiate them adequately. list_job_invoices vs list_invoices also has slight overlap but the scoping differs.

Naming Consistency5/5

All 30 tools follow the consistent verb_noun pattern (list_*, get_*), with list_ prefixed collection endpoints and get_ prefixed singular resource fetches. The naming is uniform, predictable, and follows standard REST resource conventions throughout.

Tool Count4/5

30 tools is on the heavier side, but the domain (a field service management platform) genuinely spans many resource types: customers, jobs, estimates, invoices, leads, employees, materials, price book, schedule, tags, and company settings. Each list/get pair earns its place for the breadth of the CRM/job management domain, though it borders on the high end.

Completeness2/5

The entire tool surface is read-only (every single tool is readonly-owner tier). There are no create, update, or delete operations anywhere. This is a severe gap for a job-management platform where agents would realistically need to create customers, schedule jobs, create estimates, or invoice customers. The surface lacks all write capabilities and even some reads like customer contact details or job-specific customer info.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables AI assistants to access and manage Jobber field-service data including clients, jobs, invoices, and quotes through natural language interactions.
    6
    33
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Connect an AI assistant to your Jobber account to query clients, jobs, invoices, and more in plain English, with optional write actions for creating clients and jobs.
    12
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to interact with Commusoft CRM for tasks like customer lookups, supplier management, and more, with read-only access by default and optional write permissions.
    7
    MIT