STEADYWRK Agentic Readiness Probe, Store Guard and Dispatch
Server Details
Keyless storefront readiness probe linking a Store Guard audit, plus dispatch estimates and quotes.
- Status
- Healthy
- Uptime
- 99.7% over 83 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 9 tools
The two validators (acp.validate, ucp.validate) are distinct, but agentic.readiness_probe also inspects UCP and ACP discovery files, creating real overlap in what an agent should call. Within dispatch, estimate (public modeled pricing) versus index (catalog with modeled rates) versus quote (credentialed request) are separable only after careful reading of long descriptions, and dispatch.evals is vague about what it evaluates relative to the readiness probe.
The namespace.action pattern (acp., ucp., agentic., dispatch.) is readable and mostly uniform, but namespaces fragment inconsistently across what is essentially one storefront-readiness area. Action segments mix verbs (validate, estimate, quote, order) with bare nouns (index, evals, order_status), so no single convention is followed throughout.
Nine tools is well within a comfortable range for a server spanning two domains (storefront readiness checks and field-service dispatch). Each tool maps to a recognizable operation, and nothing feels padded or missing at the count level.
Dispatch covers a credible lifecycle: catalog, estimate, quote, order creation, and order status tracking, while validators return verdicts plus fix lists. Gaps remain—no order cancellation/update, no way to retrieve or compare stored readiness snapshots historically, and no trade-level detail beyond the index—but these are workable around.
Available Tools
9 toolsacp.validateValidate a store's ACP discovery fileARead-onlyIdempotentInspect
Free validator for a store's Agentic Commerce Protocol (ACP) discovery file at /.well-known/acp.json. Pass url to fetch a public store's file, or document to check pasted JSON. Returns a verdict, every rule result, and a fix list: each failed rule with the change that fixes it. Reads one public file, stores nothing, calls no checkout endpoint. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public store URL or domain, e.g. shop.example.com | |
| document | No | The discovery document's JSON text, checked without any fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive. The description adds value beyond them by stating it reads one public file, stores nothing, and calls no checkout endpoint, plus that no API key is needed. The return shape (verdict, per-rule results, fix list) is described, though an output schema exists, so that earns less credit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with what the tool is and where the file lives, then mode selection, then return shape, then safety and auth constraints. No filler and nothing repeated needlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read-only validator with full schema coverage and an output schema, the description covers everything an agent needs: both invocation modes, the mutual-exclusion rule, the return shape, and the safety/auth profile. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself documents both parameters and the exactly-one-of constraint. The description restates the fetch-vs-paste distinction and adds the 'public store' qualifier, but adds no syntax, format, or error-handling detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (a store's ACP discovery file at /.well-known/acp.json), and names the protocol explicitly, which distinguishes it from the sibling ucp.validate. An agent can tell what this does and which protocol it governs without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear mode-selection guidance: pass url to fetch a public store's file, or document to check pasted JSON. It also notes no API key is required, lowering invocation friction. It does not, however, explicitly point to ucp.validate as the alternative for UCP files, so the sibling routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agentic.readiness_probeInspect storefront readinessARead-onlyIdempotentInspect
Run a one-time readiness check on a public storefront and return a score, a grade and per-check results (UCP and ACP discovery files, product schema, robots rules, answer-engine maps). The result is a dated snapshot of public files, not an attested Store Guard grade. Input: url, a public storefront URL or domain (up to 255 characters; local, private and numeric hosts are refused). Each run may store a public snapshot record, at most one per host per UTC day, linked in the response. The response also lists Store Guard and sample-report links under next. Rate-limited per caller. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public storefront URL or domain |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint/openWorldHint/idempotentHint), it discloses rate limiting per caller, that no API key is needed, that local/private/numeric hosts are refused, and the storage side effect: at most one public snapshot record per host per UTC day, linked in the response. These are exactly the operational facts an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb, resource, and return shape, then layers constraints and side effects in short, information-dense sentences with no filler. The parenthetical check list replaces a longer enumeration without losing specificity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation; the description instead covers the things the schema cannot: refusal rules, rate limits, auth requirements, snapshot-vs-attested caveat, and the `next` links. For a single-parameter, side-effecting read tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the baseline is the schema itself. The description still adds meaning: the URL may be a bare domain, is capped at 255 characters, and must be a public host since local, private, and numeric hosts are refused.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('run a one-time readiness check on a public storefront') and enumerates exactly what is checked (UCP/ACP discovery files, product schema, robots rules, answer-engine maps). It also explicitly separates itself from the Store Guard attested grade, so an agent can distinguish it from sibling validators like acp.validate and ucp.validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description frames this as a 'one-time' check producing a 'dated snapshot, not an attested Store Guard grade,' which tells the agent when this tool is the right choice versus the attested grade path. It also notes 'No API key required,' removing an eligibility question. It does not name the sibling validators as alternatives for protocol-specific checks, so it falls short of explicit when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch.estimateEstimate dispatch costARead-onlyIdempotentInspect
Public modeled field-service price estimate with cited BLS wage benchmarks. Returns customer hourly rates, line items, ranges and a total alongside geographic scope and source provenance. Model estimates are not observed transaction prices or binding quotes. Use dispatch.quote with an accepted credential to request a quote. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| trade | Yes | Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index). | |
| urgency | No | routine | |
| location | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, not open-world), but the description adds meaningful caveats beyond them: estimates are modeled, not observed transaction prices, and not binding quotes, plus the auth posture. It stops short of disclosing latency or rate-limit behavior, but the model-vs-quote limitation is exactly the context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five compact sentences, each carrying a distinct load: purpose, return contents, non-binding caveat, sibling routing, and auth. Front-loaded with the purpose; the only mild redundancy is listing return contents when an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only estimator with an output schema and safety annotations, the description covers the critical unknowns: what is returned, that results are non-binding, and that no key is needed. The gap is parameter-level guidance (urgency meanings, location requirements) delegated to the sibling dispatch.index rather than restated here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'trade' is documented; 'urgency' and the nested location fields are not), so the description would need to compensate. Instead it says nothing about the required location.state, acceptable urgency values/default, or trade codes, leaving undocumented parameters weaker than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('modeled field-service price estimate') and immediately differentiates itself from dispatch.quote by clarifying that estimates are not binding quotes. An agent can distinguish this read-only estimator from the quoting sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the alternative ('Use dispatch.quote with an accepted credential to request a quote') and gives the condition that selects it (an accepted credential). It also states 'No API key required,' which tells the agent when this public estimator is callable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch.evalsRead dispatch evaluationsARead-onlyIdempotentInspect
Return the public evaluation document for a selected rolling window. Consult its per-field provenance and methodology to distinguish self-reported estimates, measurements, and unavailable fields. It is not an independent audit or a service-level guarantee. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | rolling_30d |
Output Schema
| Name | Required | Description |
|---|---|---|
| period | Yes | |
| estimated | Yes | False only when every goal-fulfillment rate is backed by fresh, sufficient production telemetry. A rate without such telemetry is null, not an estimate. |
| provenance | Yes | Per-field record of whether each figure is measured (live_telemetry), a stated target or coverage statement (canonical_estimate), or unavailable (published as null). |
| methodology | Yes | Metric definitions, named-period window, source-class vocabulary. Never a sample size. |
| operational | Yes | |
| trust_signals | Yes | |
| schema_version | Yes | |
| goal_fulfillment | Yes | Each rate is a live measurement or null. Null means unavailable (see provenance.by_field), not zero. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely new context: no API key is required, and it explicitly disclaims being 'an independent audit or a service-level guarantee' — an important limitation on trustworthiness that the structured fields do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose and followed by interpretation guidance and caveats. No filler or repetition, though the second and third sentences are somewhat dense and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary, and the description appropriately covers trust caveats, auth requirements, and interpretability. Combined with the annotations, an agent has enough to invoke and reason about the result, though the missing parameter detail is a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it only gestures at the 'period' param via 'a selected rolling window.' The enum values (rolling_7d/30d/90d) are largely self-explanatory, but the description adds no detail about units, default behavior, or trade-offs between windows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Return the public evaluation document' scoped to a 'rolling window.' This is clear enough to distinguish from dispatch.estimate or dispatch.quote, but it never names or contrasts those siblings explicitly, so it lands just short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent how to read the result ('consult its per-field provenance and methodology') but never says when to choose this tool over alternatives like dispatch.estimate. There are no conditions, prerequisites, or exclusions to guide selection, so a caller has no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch.indexRead the dispatch trade catalogARead-onlyIdempotentInspect
Return the catalog of 8 dispatch trade verticals. Per trade: the BLS OES hourly WAGE benchmark (medianRateDollars/p25/p75 — what a technician earns, NOT a price) alongside billedHourlyRateRoutineDollars, a modeled customer hourly estimate at routine urgency. Estimates are not observed transaction prices or binding quotes. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| trades | Yes | |
| updated_at | Yes | |
| source_period | Yes | |
| wage_vs_billed | Yes | |
| model_assumptions | Yes | |
| rate_model_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), so the description's real value is semantic: it warns that medianRateDollars/p25/p75 are technician wages, NOT prices, and that billedHourlyRateRoutineDollars is a modeled estimate, not an observed price or binding quote. That prevents a genuine misinterpretation of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and scope. The parenthetical wage-vs-price clarification is dense but earns its place; nothing else is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only catalog tool with an output schema, the description supplies everything needed: what is returned, how many items, what the fields mean, and that the numbers are estimates rather than quotes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The sentence about per-trade fields is about outputs, not inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Return the catalog of 8 dispatch trade verticals.' This clearly separates it from siblings that compute values (dispatch.estimate, dispatch.quote) — this one reads a static reference catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly frames this as a catalog lookup ('No API key required' signals a free, unauthenticated read), but it never states when to call it versus dispatch.estimate or dispatch.quote, nor any precondition. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch.orderCreate a dispatch work orderBDestructiveInspect
Create a field-service order and return its status URL. HTTP 201 returns a created order; HTTP 202 returns an order accepted_pending_fulfilment with fulfilled=false. Order creation requires a provisioned integration key through x-api-key. MCP also accepts that key through Authorization: Bearer; direct REST order creation requires x-api-key. A self-serve OAuth token authenticates but is not entitled to create orders: HTTP 402 payment_required (JSON-RPC -32002 over MCP). Anonymous callers receive HTTP 401 with WWW-Authenticate. To be provisioned, POST JSON to https://steadywrk.app/api/integration-key-request or use https://steadywrk.app/developers/keys and a person reviews each request. Email fallback: hello@steadywrk.app.
| Name | Required | Description | Default |
|---|---|---|---|
| trade | Yes | Trade code, as listed by dispatch.index (e.g. plumbing, hvac, electrical). | |
| urgency | No | routine | |
| location | Yes | ||
| nte_cents | No | ||
| test_mode | No | true: a test booking with your STEADYWRK key (any key, including the free one). Answered whether orders are open or not, marked test: true; nothing is dispatched, matched or charged. | |
| description | Yes | ||
| callback_url | No | ||
| reference_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Strong disclosure beyond annotations: the 201-vs-202 split, that 202 means accepted_pending_fulfilment with fulfilled=false, and the full auth failure taxonomy (402/payment_required, JSON-RPC -32002, 401 + WWW-Authenticate). It stops short of describing the real-world side effects — contractor dispatch and NTE charging — and says nothing about retry safety despite idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and there is little redundancy, but emphasis is badly misallocated: roughly two-thirds of the text covers auth, provisioning URLs, and an email fallback, while the parameters that determine whether the order is correct get zero words. The developer-portal link and email fallback are marginal for an in-call agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the auth/status semantics are unusually thorough. But for a destructive, non-idempotent, potentially billable 8-parameter mutation with a nested location object, leaving nte_cents and location semantics undocumented is a real completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the description adds no parameter meaning at all — it is entirely about authentication. Critically, nte_cents (a monetary not-to-exceed cap, min 2500 / max 5,000,000) goes unmentioned, as do the location object's fields, urgency tiers, callback_url, and reference_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: "Create a field-service order and return its status URL." That is unambiguous. However, it never distinguishes this from sibling tools dispatch.quote and dispatch.estimate, which an agent would plausibly consider for the same intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through entitlement requirements (a provisioned integration key is required; a self-serve OAuth token gets 402). That tells the agent who *can* call it but not when to prefer it over dispatch.quote or dispatch.estimate. No explicit exclusions or alternative-routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch.order_statusRead a dispatch work orderARead-onlyIdempotentInspect
Return the current state of a work order created by dispatch.order: status, assignment, quote and timestamps. Same key as dispatch.order (the order's status_url, served over MCP). A self-serve OAuth token cannot have created an order, so it receives HTTP 402 payment_required (JSON-RPC -32002). Anonymous callers receive HTTP 401 with WWW-Authenticate. To be provisioned, POST JSON to https://steadywrk.app/api/integration-key-request or use https://steadywrk.app/developers/keys and a person reviews each request. Email fallback: hello@steadywrk.app.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The order.id returned by dispatch.order. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: exact failure modes (HTTP 402 payment_required with JSON-RPC -32002, HTTP 401 with WWW-Authenticate), the provisioning path, human review, and an email fallback. That is unusually rich behavioral disclosure for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and returned fields are front-loaded in the first sentence, followed by key/auth mechanics. Sentences are dense but each carries actionable content; the provisioning URLs and email fallback make it longer than strictly necessary for an invocation decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and safety is covered by annotations. Purpose, identifier semantics, and auth/provisioning obstacles are all addressed; only edge cases such as an unknown order_id (e.g. 404 behavior) are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as 'order.id returned by dispatch.order'. The description's note that it is the same key as dispatch.order (the status_url served over MCP) adds only marginal clarification, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Return the current state') and resource ('a work order'), and enumerates the returned fields (status, assignment, quote, timestamps). It also distinguishes itself from the sibling dispatch.order by tying the order_id back to that creation call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes clear this reads orders created by dispatch.order and that the caller must hold the same key, which implicitly excludes anonymous/self-serve callers. It does not explicitly state when to prefer this over other siblings, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispatch.quoteGet a dispatch quoteAInspect
Request a field-service quote by trade, location, and urgency. Returns availability and quote details when available. Accepts a provisioned integration key through x-api-key or, when OAuth is enabled, a scoped self-serve OAuth token through Authorization: Bearer. MCP also accepts the provisioned key through Authorization: Bearer. Request an integration key: POST JSON to https://steadywrk.app/api/integration-key-request (GET it for the fields), or use https://steadywrk.app/developers/keys and a person reviews each request. Email fallback: hello@steadywrk.app. Over MCP, without a key, add contact_email (and optionally contact_name and company) and the request is filed for a person to answer by email. Other anonymous callers receive HTTP 401 with WWW-Authenticate. Public modeled pricing is available through dispatch.estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| trade | Yes | Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index). | |
| company | No | ||
| urgency | No | routine | |
| location | Yes | ||
| nte_cents | No | ||
| test_mode | No | true: a test booking with your STEADYWRK key (any key, including the free one). Answered whether orders are open or not, marked test: true; nothing is dispatched, matched or charged. | |
| description | No | ||
| contact_name | No | ||
| contact_email | No | Only without a key: where a person replies with the quote. The request is filed for review. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing auth requirements (x-api-key, Authorization: Bearer for OAuth or MCP), the anonymous-caller outcome (HTTP 401 with WWW-Authenticate), the human-review fallback when no key is present, and how key provisioning works. Annotations only say it is a non-idempotent, open-world, non-destructive call; the description supplies the operational context an agent actually needs. No claim conflicts with the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return behavior, then organized into auth, key provisioning, and fallback paragraphs. The auth sentences repeat themselves ('Accepts a provisioned integration key through x-api-key... MCP also accepts the provisioned key through Authorization: Bearer'), which costs some tightness, but nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers auth, the keyless path, and the estimate alternative. It leaves nte_cents semantics and any idempotency/retry expectations unstated for what is a non-idempotent call, but on balance an agent has what it needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description should compensate, but it mostly restates the required inputs (trade, location, urgency) rather than explaining them. It does add real meaning for the keyless path – contact_email/contact_name/company get filed for a person to answer – but nte_cents and the location sub-fields receive no explanation beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (request) and resource (field-service quote) scoped by trade, location, and urgency, and reports what comes back (availability and quote details). It also names the sibling that provides the other pricing path, dispatch.estimate, so an agent can separate it from that tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes public modeled pricing to dispatch.estimate and describes the two caller situations (keyed vs. keyless/anonymous). It does not spell out when to escalate from a quote to dispatch.order, but the context for choosing this tool over its nearest sibling is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp.validateValidate a store's UCP discovery fileARead-onlyIdempotentInspect
Free validator for a store's Universal Commerce Protocol (UCP) discovery file at /.well-known/ucp. Pass url to fetch a public store's file, or document to check pasted JSON. Returns a verdict, every rule result, and a fix list: each failed rule with the change that fixes it. Reads one public file, stores nothing, calls no checkout endpoint. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public store URL or domain, e.g. shop.example.com | |
| document | No | The discovery document's JSON text, checked without any fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, openWorld, non-destructive), it discloses side-effect and auth facts an agent cannot get from structured fields: it reads exactly one public file, stores nothing, calls no checkout endpoint, and needs no API key. That directly answers the safety and permission questions for a fetch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool is and where it looks, then the two input modes, then side effects and auth. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description still names the return shape (verdict, per-rule results, fix list with the change that fixes each failure), and covers inputs, safety, and auth. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains that document is checked without a fetch, so the description adds little beyond restating the fetch-vs-paste distinction. Baseline 3 is appropriate when the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — validating a store's UCP discovery file at /.well-known/ucp — which is concrete and unambiguous. It does not explicitly differentiate itself from the sibling acp.validate, so an agent must infer the UCP-vs-ACP split from the protocol name rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly routes the two input modes: pass url to fetch a public store's file, or document to check pasted JSON. That is actionable context, but there is no explicit when-not-to-use or pointer to acp.validate for the other protocol.
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 tool update
- Changed
dispatch.order2 fields changed- added
Input schema / properties / nte_cents / maximumAdded value: +5000000 - changed
Input schema / properties / nte_cents / minimumPrevious value: -1New value: +2500
2 tool updates
- Changed
dispatch.order2 fields changed- added
Input schema / properties / test_modeAdded value: +{ + "description": "true: a test booking with your STEADYWRK key (any key, including the free one). Answered whether orders are open or not, marked test: true; nothing is dispatched, matched or charged.", + "type": "boolean" +} - changed
Output schema / oneOfPrevious value: -[ - { - "properties": { - "accepted": { - "const": true, - "type": "boolean" - }, - "created": { - "const": true, - "type": "boolean" - }, - "fulfilled": { - "type": "boolean" - }, - "fulfilment": { - "description": "Present only when fulfilled=false.", - "properties": { - "assigned": { - "const": false, - "type": "boolean" - }, - "detail": { - "type": "string" - }, - "escalation_contact": { - "type": "string" - }, - "reason": { - "type": "string" - } - }, - "type": "object" - }, - "order": { - "additionalProperties": true, - "properties": { - "assigned_contractor_ref": { - "type": [ - "string", - "null" - ] - }, - "created_at": { - "type": "string" - }, - "estimated_response_minutes": { - "type": [ - "number", - "null" - ] - }, - "id": { - "type": "string" - }, - "location": { - "type": "object" - }, - "quoted_cost_cents": { - "type": [ - "integer", - "null" - ] - }, - "quoted_cost_usd": { - "type": [ - "string", - "null" - ] - }, - "status": { - "enum": [ - "pending_dispatch", - "accepted_pending_fulfilment" - ], - "type": "string" - }, - "trade": { - "type": "string" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - } - }, - "required": [ - "id", - "status", - "trade", - "location", - "urgency", - "created_at" - ], - "type": "object" - }, - "tracking": { - "properties": { - "auth": { - "type": "string" - }, - "status_url": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "created", - "accepted", - "fulfilled", - "order", - "tracking" - ], - "type": "object" - }, - { - "additionalProperties": true, - "description": "Business/rate-limit/entitlement error passthrough.", - "properties": { - "error": { - "type": "string" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "accepted": { + "const": true, + "type": "boolean" + }, + "created": { + "const": true, + "type": "boolean" + }, + "fulfilled": { + "type": "boolean" + }, + "fulfilment": { + "description": "Present only when fulfilled=false.", + "properties": { + "assigned": { + "const": false, + "type": "boolean" + }, + "detail": { + "type": "string" + }, + "escalation_contact": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "type": "object" + }, + "order": { + "additionalProperties": true, + "properties": { + "assigned_contractor_ref": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "estimated_response_minutes": { + "type": [ + "number", + "null" + ] + }, + "id": { + "type": "string" + }, + "location": { + "type": "object" + }, + "quoted_cost_cents": { + "type": [ + "integer", + "null" + ] + }, + "quoted_cost_usd": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "pending_dispatch", + "accepted_pending_fulfilment", + "test_accepted" + ], + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + } + }, + "required": [ + "id", + "status", + "trade", + "location", + "urgency", + "created_at" + ], + "type": "object" + }, + "tracking": { + "properties": { + "auth": { + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "created", + "accepted", + "fulfilled", + "order", + "tracking" + ], + "type": "object" + }, + { + "additionalProperties": true, + "description": "Business/rate-limit/entitlement error passthrough.", + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
dispatch.quote1 field changed- added
Input schema / properties / test_modeAdded value: +{ + "description": "true: a test booking with your STEADYWRK key (any key, including the free one). Answered whether orders are open or not, marked test: true; nothing is dispatched, matched or charged.", + "type": "boolean" +}
2 tool updates
- Added
acp.validate - Added
ucp.validate
1 tool update
- Added
dispatch.order_status
3 tool updates
- Changed
dispatch.estimate1 field changed- changed
Input schema / properties / trade / descriptionPrevious value: -"Trade code (plumbing, electrical, HVAC, etc.)"New value: +"Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index)."
- Changed
dispatch.order1 field changed- added
Input schema / properties / trade / descriptionAdded value: +"Trade code, as listed by dispatch.index (e.g. plumbing, hvac, electrical)."
- Changed
dispatch.quote1 field changed- changed
Input schema / properties / trade / descriptionPrevious value: -"Trade code (plumbing, electrical, HVAC, etc.)"New value: +"Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index)."
1 tool update
- Changed
dispatch.quote5 fields changed- added
Input schema / properties / companyAdded value: +{ + "maxLength": 255, + "type": "string" +} - added
Input schema / properties / contact_emailAdded value: +{ + "description": "Only without a key: where a person replies with the quote. The request is filed for review.", + "format": "email", + "maxLength": 255, + "type": "string" +} - added
Input schema / properties / contact_nameAdded value: +{ + "maxLength": 255, + "type": "string" +} - changed
Output schema / descriptionPrevious value: -"A matched-contractor quote, a no-availability response, or a business/auth error passthrough from the downstream dispatch API."New value: +"A matched-contractor quote, a no-availability response, a filed keyless request, or a business/auth error passthrough from the downstream dispatch API." - changed
Output schema / oneOfPrevious value: -[ - { - "description": "A contractor was matched.", - "properties": { - "available": { - "const": true, - "type": "boolean" - }, - "next_steps": { - "properties": { - "contact": { - "type": "string" - }, - "dispatch": { - "type": "string" - }, - "docs": { - "type": "string" - } - }, - "type": "object" - }, - "quote": { - "properties": { - "alternates_count": { - "type": "integer" - }, - "best_match": { - "properties": { - "estimated_cost_cents": { - "type": "integer" - }, - "estimated_cost_usd": { - "type": "string" - }, - "estimated_response_minutes": { - "type": "number" - }, - "match_score": { - "type": "number" - } - }, - "type": "object" - }, - "estimated_eta": { - "type": "string" - }, - "generated_at": { - "type": "string" - }, - "location": { - "type": "object" - }, - "trade": { - "type": "string" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - }, - "valid_for_minutes": { - "type": "integer" - } - }, - "required": [ - "trade", - "location", - "urgency", - "estimated_eta", - "best_match", - "alternates_count", - "generated_at", - "valid_for_minutes" - ], - "type": "object" - } - }, - "required": [ - "available", - "quote", - "next_steps" - ], - "type": "object" - }, - { - "description": "No contractor is currently available for this trade/location.", - "properties": { - "available": { - "const": false, - "type": "boolean" - }, - "location": { - "type": "object" - }, - "message": { - "type": "string" - }, - "trade": { - "type": "string" - } - }, - "required": [ - "available", - "message", - "trade", - "location" - ], - "type": "object" - }, - { - "additionalProperties": true, - "description": "Business/rate-limit/auth error passthrough.", - "properties": { - "error": { - "type": "string" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "description": "A contractor was matched.", + "properties": { + "available": { + "const": true, + "type": "boolean" + }, + "next_steps": { + "properties": { + "contact": { + "type": "string" + }, + "dispatch": { + "type": "string" + }, + "docs": { + "type": "string" + } + }, + "type": "object" + }, + "quote": { + "properties": { + "alternates_count": { + "type": "integer" + }, + "best_match": { + "properties": { + "estimated_cost_cents": { + "type": "integer" + }, + "estimated_cost_usd": { + "type": "string" + }, + "estimated_response_minutes": { + "type": "number" + }, + "match_score": { + "type": "number" + } + }, + "type": "object" + }, + "estimated_eta": { + "type": "string" + }, + "generated_at": { + "type": "string" + }, + "location": { + "type": "object" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + }, + "valid_for_minutes": { + "type": "integer" + } + }, + "required": [ + "trade", + "location", + "urgency", + "estimated_eta", + "best_match", + "alternates_count", + "generated_at", + "valid_for_minutes" + ], + "type": "object" + } + }, + "required": [ + "available", + "quote", + "next_steps" + ], + "type": "object" + }, + { + "description": "No contractor is currently available for this trade/location.", + "properties": { + "available": { + "const": false, + "type": "boolean" + }, + "location": { + "type": "object" + }, + "message": { + "type": "string" + }, + "trade": { + "type": "string" + } + }, + "required": [ + "available", + "message", + "trade", + "location" + ], + "type": "object" + }, + { + "description": "Keyless request filed: a person replies to contact_email. Carries a modeled estimate when the trade is in the public rate card.", + "properties": { + "duplicate": { + "type": "boolean" + }, + "live_quotes": { + "type": "string" + }, + "location": { + "type": "object" + }, + "modeled_estimate": { + "type": "object" + }, + "next_step": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "status": { + "const": "request_received", + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "type": "string" + } + }, + "required": [ + "status", + "request_id", + "next_step" + ], + "type": "object" + }, + { + "additionalProperties": true, + "description": "Business/rate-limit/auth error passthrough.", + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
1 tool update
- Changed
dispatch.estimate1 field changed- changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "basis": { - "const": "modeled_customer_pricing", - "type": "string" - }, - "billed_estimate": { - "additionalProperties": false, - "description": "Modeled customer hourly rates, billable hours, labor and trip line items, total and range. Not a binding quote.", - "properties": { - "billed_hourly_rate_cents": { - "type": "integer" - }, - "billed_hourly_rate_routine_cents": { - "type": "integer" - }, - "currency": { - "const": "USD", - "type": "string" - }, - "labor_subtotal_cents": { - "type": "integer" - }, - "minimum_billable_hours": { - "type": "number" - }, - "range_high_cents": { - "type": [ - "integer", - "null" - ] - }, - "range_low_cents": { - "type": [ - "integer", - "null" - ] - }, - "total_cents": { - "type": "integer" - }, - "total_usd": { - "type": "number" - }, - "trip_fee_cents": { - "type": "integer" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - } - }, - "type": "object" - }, - "disclosure": { - "items": { - "type": "string" - }, - "type": "array" - }, - "estimated": { - "const": true, - "type": "boolean" - }, - "estimated_cost_cents": { - "description": "Alias of billed_estimate.total_cents.", - "type": "integer" - }, - "location": { - "additionalProperties": false, - "properties": { - "city": { - "type": "string" - }, - "state": { - "type": "string" - }, - "zip": { - "type": "string" - } - }, - "type": [ - "object", - "null" - ] - }, - "location_resolution": { - "additionalProperties": false, - "properties": { - "covered_metros": { - "items": { - "type": "string" - }, - "type": "array" - }, - "location_sensitive": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "requested": { - "additionalProperties": false, - "properties": { - "city": { - "type": [ - "string", - "null" - ] - }, - "state": { - "type": [ - "string", - "null" - ] - }, - "zip": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "resolved_metro": { - "type": [ - "string", - "null" - ] - }, - "resolved_metro_label": { - "type": [ - "string", - "null" - ] - }, - "scope": { - "enum": [ - "metro_cited", - "national_baseline", - "mena_coverage_beta" - ], - "type": "string" - }, - "zip_used": { - "const": false, - "type": "boolean" - } - }, - "type": "object" - }, - "measurement": { - "additionalProperties": false, - "properties": { - "billed_estimate": { - "const": "estimated", - "type": "string" - }, - "explanation": { - "type": "string" - }, - "wage_basis": { - "const": "estimated", - "type": "string" - } - }, - "type": "object" - }, - "rate_card": { - "additionalProperties": false, - "properties": { - "median_dollars": { - "type": "number" - }, - "p25_dollars": { - "type": [ - "number", - "null" - ] - }, - "p75_dollars": { - "type": [ - "number", - "null" - ] - } - }, - "type": "object" - }, - "rate_model_version": { - "type": "string" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "trade": { - "type": "string" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - }, - "wage_basis": { - "additionalProperties": false, - "description": "The cited hourly WAGE input — NOT the price.", - "properties": { - "annual_median_usd": { - "type": [ - "number", - "null" - ] - }, - "bls_occ_code": { - "type": "string" - }, - "dataset": { - "type": "string" - }, - "kind": { - "const": "hourly_wage", - "type": "string" - }, - "median_cents": { - "type": "integer" - }, - "note": { - "type": "string" - }, - "p25_cents": { - "type": [ - "integer", - "null" - ] - }, - "p75_cents": { - "type": [ - "integer", - "null" - ] - }, - "period": { - "type": "string" - }, - "release": { - "type": "string" - }, - "sample_size": { - "type": [ - "integer", - "null" - ] - }, - "scope": { - "enum": [ - "metro_cited", - "national_baseline", - "mena_coverage_beta" - ], - "type": "string" - }, - "scope_label": { - "type": "string" - }, - "source": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "trade_label": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "estimated", - "source", - "basis", - "rate_model_version", - "trade", - "urgency", - "location_resolution", - "wage_basis", - "billed_estimate", - "estimated_cost_cents", - "rate_card", - "disclosure" - ], - "type": "object" - }, - { - "description": "Trade was missing or not recognized. No number is fabricated.", - "properties": { - "error": { - "enum": [ - "unknown_trade", - "trade_required" - ], - "type": "string" - }, - "estimated": { - "const": false, - "type": "boolean" - }, - "known_trades": { - "items": { - "type": "string" - }, - "type": "array" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "trade": { - "type": [ - "string", - "null" - ] - }, - "valid_trades": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "estimated", - "source", - "error", - "trade", - "valid_trades", - "known_trades" - ], - "type": "object" - }, - { - "description": "A provided location.state is not a US state or DC code, or a MENA coverage country code. No number is fabricated; an omitted state is priced at the national baseline.", - "properties": { - "error": { - "const": "invalid_state", - "type": "string" - }, - "estimated": { - "const": false, - "type": "boolean" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "state": { - "type": [ - "string", - "null" - ] - }, - "valid_country_codes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "valid_states": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "estimated", - "source", - "error", - "state", - "valid_states", - "valid_country_codes" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "basis": { + "const": "modeled_customer_pricing", + "type": "string" + }, + "billed_estimate": { + "additionalProperties": false, + "description": "Modeled customer hourly rates, billable hours, labor and trip line items, total and range. Not a binding quote.", + "properties": { + "billed_hourly_rate_cents": { + "type": "integer" + }, + "billed_hourly_rate_routine_cents": { + "type": "integer" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "labor_subtotal_cents": { + "type": "integer" + }, + "minimum_billable_hours": { + "type": "number" + }, + "range_high_cents": { + "type": [ + "integer", + "null" + ] + }, + "range_low_cents": { + "type": [ + "integer", + "null" + ] + }, + "total_cents": { + "type": "integer" + }, + "total_usd": { + "type": "number" + }, + "trip_fee_cents": { + "type": "integer" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + } + }, + "type": "object" + }, + "binding": { + "const": false, + "type": "boolean" + }, + "disclosure": { + "items": { + "type": "string" + }, + "type": "array" + }, + "estimate_basis": { + "const": "national_median_reference", + "description": "Present when no covered metro matched (for example, no city supplied): the figures are a non-binding national reference.", + "type": "string" + }, + "estimated": { + "const": true, + "type": "boolean" + }, + "estimated_cost_cents": { + "description": "Alias of billed_estimate.total_cents.", + "type": "integer" + }, + "location": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "location_resolution": { + "additionalProperties": false, + "properties": { + "covered_metros": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location_sensitive": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "requested": { + "additionalProperties": false, + "properties": { + "city": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": [ + "string", + "null" + ] + }, + "zip": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "resolved_metro": { + "type": [ + "string", + "null" + ] + }, + "resolved_metro_label": { + "type": [ + "string", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + }, + "zip_used": { + "const": false, + "type": "boolean" + } + }, + "type": "object" + }, + "measurement": { + "additionalProperties": false, + "properties": { + "billed_estimate": { + "const": "estimated", + "type": "string" + }, + "explanation": { + "type": "string" + }, + "wage_basis": { + "const": "estimated", + "type": "string" + } + }, + "type": "object" + }, + "note": { + "type": "string" + }, + "rate_card": { + "additionalProperties": false, + "properties": { + "median_dollars": { + "type": "number" + }, + "p25_dollars": { + "type": [ + "number", + "null" + ] + }, + "p75_dollars": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "rate_model_version": { + "type": "string" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + }, + "wage_basis": { + "additionalProperties": false, + "description": "The cited hourly WAGE input — NOT the price.", + "properties": { + "annual_median_usd": { + "type": [ + "number", + "null" + ] + }, + "bls_occ_code": { + "type": "string" + }, + "dataset": { + "type": "string" + }, + "kind": { + "const": "hourly_wage", + "type": "string" + }, + "median_cents": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "p25_cents": { + "type": [ + "integer", + "null" + ] + }, + "p75_cents": { + "type": [ + "integer", + "null" + ] + }, + "period": { + "type": "string" + }, + "release": { + "type": "string" + }, + "sample_size": { + "type": [ + "integer", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + }, + "scope_label": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "trade_label": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "estimated", + "source", + "basis", + "rate_model_version", + "trade", + "urgency", + "location_resolution", + "wage_basis", + "billed_estimate", + "estimated_cost_cents", + "rate_card", + "disclosure" + ], + "type": "object" + }, + { + "description": "Trade was missing or not recognized. No number is fabricated.", + "properties": { + "error": { + "enum": [ + "unknown_trade", + "trade_required" + ], + "type": "string" + }, + "estimated": { + "const": false, + "type": "boolean" + }, + "known_trades": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": [ + "string", + "null" + ] + }, + "valid_trades": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "estimated", + "source", + "error", + "trade", + "valid_trades", + "known_trades" + ], + "type": "object" + }, + { + "description": "A provided location.state is not a US state or DC code, or a MENA coverage country code. No number is fabricated; an omitted state is priced at the national baseline.", + "properties": { + "error": { + "const": "invalid_state", + "type": "string" + }, + "estimated": { + "const": false, + "type": "boolean" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "state": { + "type": [ + "string", + "null" + ] + }, + "valid_country_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "valid_states": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "estimated", + "source", + "error", + "state", + "valid_states", + "valid_country_codes" + ], + "type": "object" + } +]
2 tool updates
- Changed
dispatch.estimate2 fields changed- changed
Output schema / descriptionPrevious value: -"Modeled customer pricing with wage benchmark provenance, or an unknown/missing trade error — never a fabricated number."New value: +"Modeled customer pricing with wage benchmark provenance, or an unknown/missing trade or invalid state error — never a fabricated number." - changed
Output schema / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "basis": { - "const": "modeled_customer_pricing", - "type": "string" - }, - "billed_estimate": { - "additionalProperties": false, - "description": "Modeled customer hourly rates, billable hours, labor and trip line items, total and range. Not a binding quote.", - "properties": { - "billed_hourly_rate_cents": { - "type": "integer" - }, - "billed_hourly_rate_routine_cents": { - "type": "integer" - }, - "currency": { - "const": "USD", - "type": "string" - }, - "labor_subtotal_cents": { - "type": "integer" - }, - "minimum_billable_hours": { - "type": "number" - }, - "range_high_cents": { - "type": [ - "integer", - "null" - ] - }, - "range_low_cents": { - "type": [ - "integer", - "null" - ] - }, - "total_cents": { - "type": "integer" - }, - "total_usd": { - "type": "number" - }, - "trip_fee_cents": { - "type": "integer" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - } - }, - "type": "object" - }, - "disclosure": { - "items": { - "type": "string" - }, - "type": "array" - }, - "estimated": { - "const": true, - "type": "boolean" - }, - "estimated_cost_cents": { - "description": "Alias of billed_estimate.total_cents.", - "type": "integer" - }, - "location": { - "additionalProperties": false, - "properties": { - "city": { - "type": "string" - }, - "state": { - "type": "string" - }, - "zip": { - "type": "string" - } - }, - "type": [ - "object", - "null" - ] - }, - "location_resolution": { - "additionalProperties": false, - "properties": { - "covered_metros": { - "items": { - "type": "string" - }, - "type": "array" - }, - "location_sensitive": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "requested": { - "additionalProperties": false, - "properties": { - "city": { - "type": [ - "string", - "null" - ] - }, - "state": { - "type": [ - "string", - "null" - ] - }, - "zip": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - "resolved_metro": { - "type": [ - "string", - "null" - ] - }, - "resolved_metro_label": { - "type": [ - "string", - "null" - ] - }, - "scope": { - "enum": [ - "metro_cited", - "national_baseline", - "mena_coverage_beta" - ], - "type": "string" - }, - "zip_used": { - "const": false, - "type": "boolean" - } - }, - "type": "object" - }, - "measurement": { - "additionalProperties": false, - "properties": { - "billed_estimate": { - "const": "estimated", - "type": "string" - }, - "explanation": { - "type": "string" - }, - "wage_basis": { - "const": "estimated", - "type": "string" - } - }, - "type": "object" - }, - "rate_card": { - "additionalProperties": false, - "properties": { - "median_dollars": { - "type": "number" - }, - "p25_dollars": { - "type": [ - "number", - "null" - ] - }, - "p75_dollars": { - "type": [ - "number", - "null" - ] - } - }, - "type": "object" - }, - "rate_model_version": { - "type": "string" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "trade": { - "type": "string" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - }, - "wage_basis": { - "additionalProperties": false, - "description": "The cited hourly WAGE input — NOT the price.", - "properties": { - "annual_median_usd": { - "type": [ - "number", - "null" - ] - }, - "bls_occ_code": { - "type": "string" - }, - "dataset": { - "type": "string" - }, - "kind": { - "const": "hourly_wage", - "type": "string" - }, - "median_cents": { - "type": "integer" - }, - "note": { - "type": "string" - }, - "p25_cents": { - "type": [ - "integer", - "null" - ] - }, - "p75_cents": { - "type": [ - "integer", - "null" - ] - }, - "period": { - "type": "string" - }, - "release": { - "type": "string" - }, - "sample_size": { - "type": [ - "integer", - "null" - ] - }, - "scope": { - "enum": [ - "metro_cited", - "national_baseline", - "mena_coverage_beta" - ], - "type": "string" - }, - "scope_label": { - "type": "string" - }, - "source": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "trade_label": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "estimated", - "source", - "basis", - "rate_model_version", - "trade", - "urgency", - "location_resolution", - "wage_basis", - "billed_estimate", - "estimated_cost_cents", - "rate_card", - "disclosure" - ], - "type": "object" - }, - { - "description": "Trade was missing or not recognized. No number is fabricated.", - "properties": { - "error": { - "enum": [ - "unknown_trade", - "trade_required" - ], - "type": "string" - }, - "estimated": { - "const": false, - "type": "boolean" - }, - "known_trades": { - "items": { - "type": "string" - }, - "type": "array" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "trade": { - "type": [ - "string", - "null" - ] - }, - "valid_trades": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "estimated", - "source", - "error", - "trade", - "valid_trades", - "known_trades" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "basis": { + "const": "modeled_customer_pricing", + "type": "string" + }, + "billed_estimate": { + "additionalProperties": false, + "description": "Modeled customer hourly rates, billable hours, labor and trip line items, total and range. Not a binding quote.", + "properties": { + "billed_hourly_rate_cents": { + "type": "integer" + }, + "billed_hourly_rate_routine_cents": { + "type": "integer" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "labor_subtotal_cents": { + "type": "integer" + }, + "minimum_billable_hours": { + "type": "number" + }, + "range_high_cents": { + "type": [ + "integer", + "null" + ] + }, + "range_low_cents": { + "type": [ + "integer", + "null" + ] + }, + "total_cents": { + "type": "integer" + }, + "total_usd": { + "type": "number" + }, + "trip_fee_cents": { + "type": "integer" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + } + }, + "type": "object" + }, + "disclosure": { + "items": { + "type": "string" + }, + "type": "array" + }, + "estimated": { + "const": true, + "type": "boolean" + }, + "estimated_cost_cents": { + "description": "Alias of billed_estimate.total_cents.", + "type": "integer" + }, + "location": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "location_resolution": { + "additionalProperties": false, + "properties": { + "covered_metros": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location_sensitive": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "requested": { + "additionalProperties": false, + "properties": { + "city": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": [ + "string", + "null" + ] + }, + "zip": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "resolved_metro": { + "type": [ + "string", + "null" + ] + }, + "resolved_metro_label": { + "type": [ + "string", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + }, + "zip_used": { + "const": false, + "type": "boolean" + } + }, + "type": "object" + }, + "measurement": { + "additionalProperties": false, + "properties": { + "billed_estimate": { + "const": "estimated", + "type": "string" + }, + "explanation": { + "type": "string" + }, + "wage_basis": { + "const": "estimated", + "type": "string" + } + }, + "type": "object" + }, + "rate_card": { + "additionalProperties": false, + "properties": { + "median_dollars": { + "type": "number" + }, + "p25_dollars": { + "type": [ + "number", + "null" + ] + }, + "p75_dollars": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "rate_model_version": { + "type": "string" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + }, + "wage_basis": { + "additionalProperties": false, + "description": "The cited hourly WAGE input — NOT the price.", + "properties": { + "annual_median_usd": { + "type": [ + "number", + "null" + ] + }, + "bls_occ_code": { + "type": "string" + }, + "dataset": { + "type": "string" + }, + "kind": { + "const": "hourly_wage", + "type": "string" + }, + "median_cents": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "p25_cents": { + "type": [ + "integer", + "null" + ] + }, + "p75_cents": { + "type": [ + "integer", + "null" + ] + }, + "period": { + "type": "string" + }, + "release": { + "type": "string" + }, + "sample_size": { + "type": [ + "integer", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + }, + "scope_label": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "trade_label": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "estimated", + "source", + "basis", + "rate_model_version", + "trade", + "urgency", + "location_resolution", + "wage_basis", + "billed_estimate", + "estimated_cost_cents", + "rate_card", + "disclosure" + ], + "type": "object" + }, + { + "description": "Trade was missing or not recognized. No number is fabricated.", + "properties": { + "error": { + "enum": [ + "unknown_trade", + "trade_required" + ], + "type": "string" + }, + "estimated": { + "const": false, + "type": "boolean" + }, + "known_trades": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": [ + "string", + "null" + ] + }, + "valid_trades": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "estimated", + "source", + "error", + "trade", + "valid_trades", + "known_trades" + ], + "type": "object" + }, + { + "description": "A provided location.state is not a US state or DC code, or a MENA coverage country code. No number is fabricated; an omitted state is priced at the national baseline.", + "properties": { + "error": { + "const": "invalid_state", + "type": "string" + }, + "estimated": { + "const": false, + "type": "boolean" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "state": { + "type": [ + "string", + "null" + ] + }, + "valid_country_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "valid_states": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "estimated", + "source", + "error", + "state", + "valid_states", + "valid_country_codes" + ], + "type": "object" + } +]
- Changed
dispatch.evals9 fields changed- changed
Output schema / properties / estimated / descriptionPrevious value: -"False only when goal-fulfillment rates are backed by fresh, sufficient production telemetry."New value: +"False only when every goal-fulfillment rate is backed by fresh, sufficient production telemetry. A rate without such telemetry is null, not an estimate." - added
Output schema / properties / goal_fulfillment / descriptionAdded value: +"Each rate is a live measurement or null. Null means unavailable (see provenance.by_field), not zero." - changed
Output schema / properties / goal_fulfillment / properties / completion_rate / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / goal_fulfillment / properties / human_override_rate / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / goal_fulfillment / properties / nte_accuracy / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / goal_fulfillment / properties / redispatch_rate / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / goal_fulfillment / properties / source / enumPrevious value: -[ - "live_telemetry", - "canonical_estimate" -]New value: +[ + "live_telemetry", + "unavailable" +] - added
Output schema / properties / operational / properties / latency_source / enumAdded value: +[ + "live_telemetry", + "unavailable" +] - changed
Output schema / properties / provenance / descriptionPrevious value: -"Per-field record of whether each published figure is measured or estimated."New value: +"Per-field record of whether each figure is measured (live_telemetry), a stated target or coverage statement (canonical_estimate), or unavailable (published as null)."
2 tool updates
- Changed
dispatch.estimate2 fields changed- changed
Output schema / descriptionPrevious value: -"A full wage-to-billed-rate estimate, or an unknown/missing trade error — never a fabricated number."New value: +"Modeled customer pricing with wage benchmark provenance, or an unknown/missing trade error — never a fabricated number." - changed
Output schema / oneOfPrevious value: -[ - { - "properties": { - "basis": { - "const": "wage_to_billed_rate_transform", - "type": "string" - }, - "billed_estimate": { - "additionalProperties": true, - "description": "What a buyer pays — every component of the arithmetic, re-derivable via formula.", - "properties": { - "billed_hourly_rate_cents": { - "type": "integer" - }, - "billed_hourly_rate_routine_cents": { - "type": "integer" - }, - "currency": { - "const": "USD", - "type": "string" - }, - "formula": { - "type": "string" - }, - "labor_burden_multiplier": { - "type": "number" - }, - "minimum_billable_hours": { - "type": "number" - }, - "total_cents": { - "type": "integer" - }, - "total_usd": { - "type": "number" - }, - "trip_fee_cents": { - "type": "integer" - }, - "urgency_multiplier": { - "type": "number" - } - }, - "type": "object" - }, - "disclosure": { - "items": { - "type": "string" - }, - "type": "array" - }, - "estimated": { - "const": true, - "type": "boolean" - }, - "estimated_cost_cents": { - "description": "Alias of billed_estimate.total_cents.", - "type": "integer" - }, - "location_resolution": { - "additionalProperties": true, - "properties": { - "location_sensitive": { - "type": "boolean" - }, - "reason": { - "type": "string" - }, - "resolved_metro": { - "type": [ - "string", - "null" - ] - }, - "resolved_metro_label": { - "type": [ - "string", - "null" - ] - }, - "scope": { - "enum": [ - "metro_cited", - "national_baseline", - "mena_coverage_beta" - ], - "type": "string" - } - }, - "type": "object" - }, - "rate_card": { - "properties": { - "median_dollars": { - "type": "number" - }, - "p25_dollars": { - "type": [ - "number", - "null" - ] - }, - "p75_dollars": { - "type": [ - "number", - "null" - ] - } - }, - "type": "object" - }, - "rate_model_version": { - "type": "string" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "trade": { - "type": "string" - }, - "urgency": { - "enum": [ - "emergency", - "urgent", - "routine", - "scheduled" - ], - "type": "string" - }, - "wage_basis": { - "additionalProperties": true, - "description": "The cited hourly WAGE input — NOT the price.", - "properties": { - "bls_occ_code": { - "type": "string" - }, - "kind": { - "const": "hourly_wage", - "type": "string" - }, - "median_cents": { - "type": "integer" - }, - "note": { - "type": "string" - }, - "p25_cents": { - "type": [ - "integer", - "null" - ] - }, - "p75_cents": { - "type": [ - "integer", - "null" - ] - }, - "scope_label": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "trade_label": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "estimated", - "source", - "basis", - "rate_model_version", - "trade", - "urgency", - "location_resolution", - "wage_basis", - "billed_estimate", - "estimated_cost_cents", - "rate_card", - "disclosure" - ], - "type": "object" - }, - { - "description": "Trade was missing or not recognized. No number is fabricated.", - "properties": { - "error": { - "enum": [ - "unknown_trade", - "trade_required" - ], - "type": "string" - }, - "estimated": { - "const": false, - "type": "boolean" - }, - "known_trades": { - "items": { - "type": "string" - }, - "type": "array" - }, - "source": { - "const": "public_rate_card", - "type": "string" - }, - "trade": { - "type": [ - "string", - "null" - ] - }, - "valid_trades": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "estimated", - "source", - "error", - "trade", - "valid_trades", - "known_trades" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "basis": { + "const": "modeled_customer_pricing", + "type": "string" + }, + "billed_estimate": { + "additionalProperties": false, + "description": "Modeled customer hourly rates, billable hours, labor and trip line items, total and range. Not a binding quote.", + "properties": { + "billed_hourly_rate_cents": { + "type": "integer" + }, + "billed_hourly_rate_routine_cents": { + "type": "integer" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "labor_subtotal_cents": { + "type": "integer" + }, + "minimum_billable_hours": { + "type": "number" + }, + "range_high_cents": { + "type": [ + "integer", + "null" + ] + }, + "range_low_cents": { + "type": [ + "integer", + "null" + ] + }, + "total_cents": { + "type": "integer" + }, + "total_usd": { + "type": "number" + }, + "trip_fee_cents": { + "type": "integer" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + } + }, + "type": "object" + }, + "disclosure": { + "items": { + "type": "string" + }, + "type": "array" + }, + "estimated": { + "const": true, + "type": "boolean" + }, + "estimated_cost_cents": { + "description": "Alias of billed_estimate.total_cents.", + "type": "integer" + }, + "location": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "location_resolution": { + "additionalProperties": false, + "properties": { + "covered_metros": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location_sensitive": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "requested": { + "additionalProperties": false, + "properties": { + "city": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": [ + "string", + "null" + ] + }, + "zip": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "resolved_metro": { + "type": [ + "string", + "null" + ] + }, + "resolved_metro_label": { + "type": [ + "string", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + }, + "zip_used": { + "const": false, + "type": "boolean" + } + }, + "type": "object" + }, + "measurement": { + "additionalProperties": false, + "properties": { + "billed_estimate": { + "const": "estimated", + "type": "string" + }, + "explanation": { + "type": "string" + }, + "wage_basis": { + "const": "estimated", + "type": "string" + } + }, + "type": "object" + }, + "rate_card": { + "additionalProperties": false, + "properties": { + "median_dollars": { + "type": "number" + }, + "p25_dollars": { + "type": [ + "number", + "null" + ] + }, + "p75_dollars": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "rate_model_version": { + "type": "string" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + }, + "wage_basis": { + "additionalProperties": false, + "description": "The cited hourly WAGE input — NOT the price.", + "properties": { + "annual_median_usd": { + "type": [ + "number", + "null" + ] + }, + "bls_occ_code": { + "type": "string" + }, + "dataset": { + "type": "string" + }, + "kind": { + "const": "hourly_wage", + "type": "string" + }, + "median_cents": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "p25_cents": { + "type": [ + "integer", + "null" + ] + }, + "p75_cents": { + "type": [ + "integer", + "null" + ] + }, + "period": { + "type": "string" + }, + "release": { + "type": "string" + }, + "sample_size": { + "type": [ + "integer", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + }, + "scope_label": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "trade_label": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "estimated", + "source", + "basis", + "rate_model_version", + "trade", + "urgency", + "location_resolution", + "wage_basis", + "billed_estimate", + "estimated_cost_cents", + "rate_card", + "disclosure" + ], + "type": "object" + }, + { + "description": "Trade was missing or not recognized. No number is fabricated.", + "properties": { + "error": { + "enum": [ + "unknown_trade", + "trade_required" + ], + "type": "string" + }, + "estimated": { + "const": false, + "type": "boolean" + }, + "known_trades": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": [ + "string", + "null" + ] + }, + "valid_trades": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "estimated", + "source", + "error", + "trade", + "valid_trades", + "known_trades" + ], + "type": "object" + } +]
- Changed
dispatch.index18 fields changed- added
Output schema / additionalPropertiesAdded value: +false - changed
Output schema / properties / trades / items / additionalPropertiesPrevious value: -trueNew value: +false - changed
Output schema / properties / trades / items / descriptionPrevious value: -"kind is always \"hourly_wage\" — medianRateDollars/p25/p75 (and their *Wage* aliases) are what a technician earns, NOT a price. billedHourlyRateRoutine* is what a buyer pays."New value: +"kind is always \"hourly_wage\" — medianRateDollars/p25/p75 (and their *Wage* aliases) are what a technician earns, NOT a price. billedHourlyRateRoutine* is a modeled customer hourly estimate." - added
Output schema / properties / trades / items / properties / blsOccCodeAdded value: +{ + "type": "string" +} - added
Output schema / properties / trades / items / properties / medianRateDollarsAdded value: +{ + "type": "number" +} - added
Output schema / properties / trades / items / properties / metroAdded value: +{ + "type": "string" +} - added
Output schema / properties / trades / items / properties / p25RateDollarsAdded value: +{ + "type": "number" +} - added
Output schema / properties / trades / items / properties / p75RateDollarsAdded value: +{ + "type": "number" +} - added
Output schema / properties / trades / items / properties / periodAdded value: +{ + "type": "string" +} - added
Output schema / properties / trades / items / properties / sampleSizeAdded value: +{ + "type": "integer" +} - added
Output schema / properties / trades / items / properties / stateAdded value: +{ + "type": "string" +} - added
Output schema / properties / trades / items / properties / tradeAdded value: +{ + "type": "string" +} - added
Output schema / properties / trades / items / properties / tradeLabelAdded value: +{ + "type": "string" +} - added
Output schema / properties / trades / items / properties / urgencyAdded value: +{ + "type": "string" +} - changed
Output schema / properties / wage_vs_billed / additionalPropertiesPrevious value: -trueNew value: +false - removed
Output schema / properties / wage_vs_billed / properties / formulaRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / wage_vs_billed / properties / labor_burden_multiplierRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / wage_vs_billed / properties / overhead_margin_markupRemoved value: -{ - "type": "number" -}
6 tool updates
- Changed
agentic.readiness_probe1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "Either a successful probe (ok=true, report + demo) or a business error (e.g. missing url) — never a fabricated report.", + "oneOf": [ + { + "properties": { + "demo": { + "properties": { + "hashSnippet": { + "type": "string" + }, + "id": { + "type": "string" + }, + "permalink": { + "type": "string" + }, + "persisted": { + "type": "boolean" + }, + "verifyPath": { + "type": "string" + } + }, + "required": [ + "id", + "permalink", + "verifyPath", + "hashSnippet", + "persisted" + ], + "type": "object" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "report": { + "properties": { + "checks": { + "items": { + "properties": { + "detail": { + "type": "string" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "status": { + "enum": [ + "pass", + "warn", + "fail", + "skip" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "status", + "detail" + ], + "type": "object" + }, + "type": "array" + }, + "grade": { + "enum": [ + "A", + "B", + "C", + "D", + "F" + ], + "type": "string" + }, + "host": { + "type": "string" + }, + "next": { + "properties": { + "flagship": { + "type": "string" + }, + "sample": { + "type": "string" + }, + "storeGuardBuy": { + "type": "string" + } + }, + "type": "object" + }, + "origin": { + "type": "string" + }, + "probedAt": { + "type": "string" + }, + "score": { + "type": "number" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "host", + "origin", + "score", + "grade", + "summary", + "checks", + "probedAt", + "next" + ], + "type": "object" + } + }, + "required": [ + "ok", + "report", + "demo" + ], + "type": "object" + }, + { + "additionalProperties": true, + "description": "Business error — e.g. missing/invalid url argument, rate limit.", + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
dispatch.estimate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "A full wage-to-billed-rate estimate, or an unknown/missing trade error — never a fabricated number.", + "oneOf": [ + { + "properties": { + "basis": { + "const": "wage_to_billed_rate_transform", + "type": "string" + }, + "billed_estimate": { + "additionalProperties": true, + "description": "What a buyer pays — every component of the arithmetic, re-derivable via formula.", + "properties": { + "billed_hourly_rate_cents": { + "type": "integer" + }, + "billed_hourly_rate_routine_cents": { + "type": "integer" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "formula": { + "type": "string" + }, + "labor_burden_multiplier": { + "type": "number" + }, + "minimum_billable_hours": { + "type": "number" + }, + "total_cents": { + "type": "integer" + }, + "total_usd": { + "type": "number" + }, + "trip_fee_cents": { + "type": "integer" + }, + "urgency_multiplier": { + "type": "number" + } + }, + "type": "object" + }, + "disclosure": { + "items": { + "type": "string" + }, + "type": "array" + }, + "estimated": { + "const": true, + "type": "boolean" + }, + "estimated_cost_cents": { + "description": "Alias of billed_estimate.total_cents.", + "type": "integer" + }, + "location_resolution": { + "additionalProperties": true, + "properties": { + "location_sensitive": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "resolved_metro": { + "type": [ + "string", + "null" + ] + }, + "resolved_metro_label": { + "type": [ + "string", + "null" + ] + }, + "scope": { + "enum": [ + "metro_cited", + "national_baseline", + "mena_coverage_beta" + ], + "type": "string" + } + }, + "type": "object" + }, + "rate_card": { + "properties": { + "median_dollars": { + "type": "number" + }, + "p25_dollars": { + "type": [ + "number", + "null" + ] + }, + "p75_dollars": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "rate_model_version": { + "type": "string" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + }, + "wage_basis": { + "additionalProperties": true, + "description": "The cited hourly WAGE input — NOT the price.", + "properties": { + "bls_occ_code": { + "type": "string" + }, + "kind": { + "const": "hourly_wage", + "type": "string" + }, + "median_cents": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "p25_cents": { + "type": [ + "integer", + "null" + ] + }, + "p75_cents": { + "type": [ + "integer", + "null" + ] + }, + "scope_label": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "trade_label": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "estimated", + "source", + "basis", + "rate_model_version", + "trade", + "urgency", + "location_resolution", + "wage_basis", + "billed_estimate", + "estimated_cost_cents", + "rate_card", + "disclosure" + ], + "type": "object" + }, + { + "description": "Trade was missing or not recognized. No number is fabricated.", + "properties": { + "error": { + "enum": [ + "unknown_trade", + "trade_required" + ], + "type": "string" + }, + "estimated": { + "const": false, + "type": "boolean" + }, + "known_trades": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source": { + "const": "public_rate_card", + "type": "string" + }, + "trade": { + "type": [ + "string", + "null" + ] + }, + "valid_trades": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "estimated", + "source", + "error", + "trade", + "valid_trades", + "known_trades" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
dispatch.evals1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "estimated": { + "description": "False only when goal-fulfillment rates are backed by fresh, sufficient production telemetry.", + "type": "boolean" + }, + "goal_fulfillment": { + "additionalProperties": true, + "properties": { + "completion_rate": { + "type": "number" + }, + "human_override_rate": { + "type": "number" + }, + "nte_accuracy": { + "type": "number" + }, + "redispatch_rate": { + "type": "number" + }, + "sampled_at": { + "type": "string" + }, + "source": { + "enum": [ + "live_telemetry", + "canonical_estimate" + ], + "type": "string" + } + }, + "type": "object" + }, + "methodology": { + "additionalProperties": true, + "description": "Metric definitions, named-period window, source-class vocabulary. Never a sample size.", + "type": "object" + }, + "operational": { + "additionalProperties": true, + "properties": { + "active_providers": { + "type": "null" + }, + "active_states": { + "type": "string" + }, + "avg_dispatch_latency_ms": { + "type": [ + "number", + "null" + ] + }, + "jobs_dispatched_30d": { + "type": "null" + }, + "latency_source": { + "type": "string" + }, + "p95_dispatch_latency_ms": { + "type": [ + "number", + "null" + ] + }, + "pricing_latency_p50_ms": { + "type": [ + "number", + "null" + ] + }, + "pricing_latency_p95_ms": { + "type": [ + "number", + "null" + ] + }, + "pricing_latency_sampled_at": { + "type": "string" + }, + "pricing_latency_source": { + "enum": [ + "live_telemetry", + "unavailable" + ], + "type": "string" + }, + "quote_turnaround_hours": { + "type": "number" + }, + "quote_turnaround_is_sla": { + "type": "boolean" + } + }, + "type": "object" + }, + "period": { + "enum": [ + "rolling_7d", + "rolling_30d", + "rolling_90d" + ], + "type": "string" + }, + "provenance": { + "additionalProperties": true, + "description": "Per-field record of whether each published figure is measured or estimated.", + "type": "object" + }, + "schema_version": { + "type": "string" + }, + "trust_signals": { + "properties": { + "build_hash": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "schema_version", + "period", + "estimated", + "goal_fulfillment", + "operational", + "trust_signals", + "provenance", + "methodology" + ], + "type": "object" +}
- Changed
dispatch.index1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "model_assumptions": { + "type": "string" + }, + "note": { + "type": "string" + }, + "rate_model_version": { + "type": "string" + }, + "source_period": { + "type": "string" + }, + "trades": { + "items": { + "additionalProperties": true, + "description": "kind is always \"hourly_wage\" — medianRateDollars/p25/p75 (and their *Wage* aliases) are what a technician earns, NOT a price. billedHourlyRateRoutine* is what a buyer pays.", + "properties": { + "billedHourlyRateRoutineCents": { + "type": "integer" + }, + "billedHourlyRateRoutineDollars": { + "type": "number" + }, + "kind": { + "const": "hourly_wage", + "type": "string" + }, + "medianWageDollars": { + "type": "number" + }, + "p25WageDollars": { + "type": "number" + }, + "p75WageDollars": { + "type": "number" + } + }, + "required": [ + "kind", + "medianWageDollars", + "p25WageDollars", + "p75WageDollars", + "billedHourlyRateRoutineCents", + "billedHourlyRateRoutineDollars" + ], + "type": "object" + }, + "type": "array" + }, + "updated_at": { + "type": "string" + }, + "wage_vs_billed": { + "additionalProperties": true, + "properties": { + "billed_fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "formula": { + "type": "string" + }, + "full_estimate_tool": { + "type": "string" + }, + "labor_burden_multiplier": { + "type": "number" + }, + "overhead_margin_markup": { + "type": "number" + }, + "wage_fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "warning": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "trades", + "wage_vs_billed", + "note", + "model_assumptions", + "updated_at", + "source_period", + "rate_model_version" + ], + "type": "object" +}
- Changed
dispatch.order1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "A recorded work order — fulfilled (contractor matched, HTTP 201) or accepted_pending_fulfilment (no contractor yet, HTTP 202) — or a business/entitlement error passthrough.", + "oneOf": [ + { + "properties": { + "accepted": { + "const": true, + "type": "boolean" + }, + "created": { + "const": true, + "type": "boolean" + }, + "fulfilled": { + "type": "boolean" + }, + "fulfilment": { + "description": "Present only when fulfilled=false.", + "properties": { + "assigned": { + "const": false, + "type": "boolean" + }, + "detail": { + "type": "string" + }, + "escalation_contact": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "type": "object" + }, + "order": { + "additionalProperties": true, + "properties": { + "assigned_contractor_ref": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": "string" + }, + "estimated_response_minutes": { + "type": [ + "number", + "null" + ] + }, + "id": { + "type": "string" + }, + "location": { + "type": "object" + }, + "quoted_cost_cents": { + "type": [ + "integer", + "null" + ] + }, + "quoted_cost_usd": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "pending_dispatch", + "accepted_pending_fulfilment" + ], + "type": "string" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + } + }, + "required": [ + "id", + "status", + "trade", + "location", + "urgency", + "created_at" + ], + "type": "object" + }, + "tracking": { + "properties": { + "auth": { + "type": "string" + }, + "status_url": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "created", + "accepted", + "fulfilled", + "order", + "tracking" + ], + "type": "object" + }, + { + "additionalProperties": true, + "description": "Business/rate-limit/entitlement error passthrough.", + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } + ], + "type": "object" +}
- Changed
dispatch.quote1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "A matched-contractor quote, a no-availability response, or a business/auth error passthrough from the downstream dispatch API.", + "oneOf": [ + { + "description": "A contractor was matched.", + "properties": { + "available": { + "const": true, + "type": "boolean" + }, + "next_steps": { + "properties": { + "contact": { + "type": "string" + }, + "dispatch": { + "type": "string" + }, + "docs": { + "type": "string" + } + }, + "type": "object" + }, + "quote": { + "properties": { + "alternates_count": { + "type": "integer" + }, + "best_match": { + "properties": { + "estimated_cost_cents": { + "type": "integer" + }, + "estimated_cost_usd": { + "type": "string" + }, + "estimated_response_minutes": { + "type": "number" + }, + "match_score": { + "type": "number" + } + }, + "type": "object" + }, + "estimated_eta": { + "type": "string" + }, + "generated_at": { + "type": "string" + }, + "location": { + "type": "object" + }, + "trade": { + "type": "string" + }, + "urgency": { + "enum": [ + "emergency", + "urgent", + "routine", + "scheduled" + ], + "type": "string" + }, + "valid_for_minutes": { + "type": "integer" + } + }, + "required": [ + "trade", + "location", + "urgency", + "estimated_eta", + "best_match", + "alternates_count", + "generated_at", + "valid_for_minutes" + ], + "type": "object" + } + }, + "required": [ + "available", + "quote", + "next_steps" + ], + "type": "object" + }, + { + "description": "No contractor is currently available for this trade/location.", + "properties": { + "available": { + "const": false, + "type": "boolean" + }, + "location": { + "type": "object" + }, + "message": { + "type": "string" + }, + "trade": { + "type": "string" + } + }, + "required": [ + "available", + "message", + "trade", + "location" + ], + "type": "object" + }, + { + "additionalProperties": true, + "description": "Business/rate-limit/auth error passthrough.", + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } + ], + "type": "object" +}
Related MCP Connectors
EQ scoring plus a read-only Storelayer matcher and guarded self-install; no website credentials
Verified Booqer shops. A keyless consult is confirmed when the slot is open.
Read-only audit of any local service business, Open Service Profile conformance first.
Remote MCP storefront for agent routing, verification, web extraction and x402-paid tools.
Related MCP Servers
- AlicenseAqualityCmaintenanceConnects conversational AI agents to live inventories of verified neighborhood retail stores through GPS-radius catalog search, zero-PII order reservations with direct merchant checkout links, real-time fulfillment tracking, and store trust reporting. Shoppers settle payment directly with merchants while orders trigger counter terminals and courier dispatch slips.241MIT
- AlicenseAqualityCmaintenanceAn MCP server that lets agents run free, keyless lead-leak audits on UK local service businesses — detecting form platforms and their outreach implications, checking whether phone numbers are tappable tel: links, comparing phone numbers across a site and free directories, screening website hygiene, and locating a business's own site. It also bundles these into a single full audit that returns a prioritised list of fixable issues alongside top local competitors.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables Alexa+ agents to monitor front-door activity, identify deliveries, speak to visitors, issue temporary smart-lock PINs, escalate threats, and query daily analytics through MCP tools.MIT
- AlicenseNot gradedqualityCmaintenanceEnables agents to submit a storefront URL and receive an A–F conversion-readiness grade across 20 weighted checks, including specific failing checks. Calls are paid per use in USDC via x402, requiring no accounts or API keys.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.