Keyless storefront readiness probe linking a Store Guard audit, plus dispatch estimates and quotes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. agentic.readiness_probe, dispatch.estimate, dispatch.evals, dispatch.index and dispatch.quote with a contact_email need no key. A provisioned key is needed only for keyed quotes, dispatch.order and dispatch.order_status: request one at https://steadywrk.app/developers/keys.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Public store URL or domain, e.g. shop.example.com
The discovery document's JSON text, checked without any fetch
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.
| Argument | Type | Description |
|---|---|---|
| url | string | Public store URL or domain, e.g. shop.example.com |
| document | string | The discovery document's JSON text, checked without any fetch |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 255,
"description": "Public store URL or domain, e.g. shop.example.com"
},
"document": {
"type": "string",
"maxLength": 262144,
"description": "The discovery document's JSON text, checked without any fetch"
}
},
"description": "Send exactly one of url or document."
}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.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public storefront URL or domain |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 255,
"description": "Public storefront URL or domain"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| trade* | string | Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index). |
| urgency | string | |
| location* | object |
{
"type": "object",
"required": [
"trade",
"location"
],
"properties": {
"trade": {
"type": "string",
"description": "Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index)."
},
"urgency": {
"enum": [
"emergency",
"urgent",
"routine",
"scheduled"
],
"type": "string",
"default": "routine"
},
"location": {
"type": "object",
"required": [
"state"
],
"properties": {
"zip": {
"type": "string",
"maxLength": 10
},
"city": {
"type": "string",
"maxLength": 255
},
"state": {
"type": "string",
"maxLength": 2,
"minLength": 2
}
}
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| period | string |
{
"type": "object",
"properties": {
"period": {
"enum": [
"rolling_7d",
"rolling_30d",
"rolling_90d"
],
"type": "string",
"default": "rolling_30d"
}
}
}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.
No arguments.
{
"type": "object",
"properties": {}
}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: [email protected].
| Argument | Type | Description |
|---|---|---|
| trade* | string | Trade code, as listed by dispatch.index (e.g. plumbing, hvac, electrical). |
| urgency | string | |
| location* | object | |
| nte_cents | integer | |
| test_mode | boolean | 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* | string |
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: [email protected].
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order.id returned by dispatch.order. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"maxLength": 36,
"minLength": 1,
"description": "The order.id returned by dispatch.order."
}
}
}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: [email protected]. 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.
| Argument | Type | Description |
|---|---|---|
| trade* | string | Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index). |
| company | string | |
| urgency | string | |
| location* | object | |
| nte_cents | integer | |
| test_mode | boolean | 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. |
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.
| Argument | Type | Description |
|---|---|---|
| url | string | Public store URL or domain, e.g. shop.example.com |
| document | string | The discovery document's JSON text, checked without any fetch |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 255,
"description": "Public store URL or domain, e.g. shop.example.com"
},
"document": {
"type": "string",
"maxLength": 262144,
"description": "The discovery document's JSON text, checked without any fetch"
}
},
"description": "Send exactly one of url or document."
}| callback_url | string |
| reference_id | string |
{
"type": "object",
"required": [
"trade",
"location",
"description"
],
"properties": {
"trade": {
"type": "string",
"description": "Trade code, as listed by dispatch.index (e.g. plumbing, hvac, electrical)."
},
"urgency": {
"enum": [
"emergency",
"urgent",
"routine",
"scheduled"
],
"type": "string",
"default": "routine"
},
"location": {
"type": "object",
"required": [
"state"
],
"properties": {
"zip": {
"type": "string",
"maxLength": 10
},
"city": {
"type": "string",
"maxLength": 255
},
"name": {
"type": "string",
"maxLength": 500
},
"state": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"address": {
"type": "string",
"maxLength": 1000
}
}
},
"nte_cents": {
"type": "integer",
"maximum": 5000000,
"minimum": 2500
},
"test_mode": {
"type": "boolean",
"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."
},
"description": {
"type": "string",
"maxLength": 5000,
"minLength": 1
},
"callback_url": {
"type": "string",
"format": "uri"
},
"reference_id": {
"type": "string",
"maxLength": 255
}
}
}| description |
| string |
| contact_name | string |
| contact_email | string | Only without a key: where a person replies with the quote. The request is filed for review. |
{
"type": "object",
"required": [
"trade",
"location"
],
"properties": {
"trade": {
"type": "string",
"description": "Trade code: hvac, plumbing, electrical, general_maintenance, roofing, painting, carpentry or locksmith (see dispatch.index)."
},
"company": {
"type": "string",
"maxLength": 255
},
"urgency": {
"enum": [
"emergency",
"urgent",
"routine",
"scheduled"
],
"type": "string",
"default": "routine"
},
"location": {
"type": "object",
"required": [
"state"
],
"properties": {
"zip": {
"type": "string",
"maxLength": 10
},
"city": {
"type": "string",
"maxLength": 255
},
"state": {
"type": "string",
"maxLength": 2,
"minLength": 2
}
}
},
"nte_cents": {
"type": "integer",
"minimum": 1
},
"test_mode": {
"type": "boolean",
"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."
},
"description": {
"type": "string",
"maxLength": 2000
},
"contact_name": {
"type": "string",
"maxLength": 255
},
"contact_email": {
"type": "string",
"format": "email",
"maxLength": 255,
"description": "Only without a key: where a person replies with the quote. The request is filed for review."
}
}
}