Read the trade catalog.
curl --fail-with-body --silent --show-error \
https://steadywrk.app/api/dispatch/indexExpect HTTP 200 with JSON: trade definitions, wage and billed-rate context, and source-period fields.
Open catalog JSONSTEADYWRK
Loading developer reference…
▸ Developer Hub · steadywrk.dev
Connect your app or agent to the dispatch API. Start with the public trade catalog — no account, API key, or client library required.
curl --fail-with-body --silent --show-error \
https://steadywrk.app/api/dispatch/indexExpect HTTP 200 with JSON: trade definitions, wage and billed-rate context, and source-period fields.
Open catalog JSON▸ Install
Streamable HTTP at https://steadywrk.app/api/mcp. List tools and call dispatch.index, dispatch.estimate, dispatch.evals, or agentic.readiness_probe without a key. Quotes require a client credential; orders require provisioned integration access.
▸ Agent discovery
Eight public paths, a scored sample at Index Edition 3, and keyless JSON at /api/public/agent-discovery. Completeness is not quality. Read the evaluation documentation for field definitions and source labels.
▸ Integration surfaces
Same dispatch engine underneath. Pick the surface that fits your stack.
Full OpenAPI 3.1 spec. The public dispatch surface — evals, trade index, quote, and order — is documented, versioned, and testable from the spec playground. JSON over HTTPS, x-api-key auth on writes.
POST /api/dispatch/v1/quote HTTP/1.1
Host: steadywrk.app
x-api-key: swrk_live_...
Content-Type: application/json
{
"trade": "hvac",
"location": { "state": "CO", "zip": "80302" },
"urgency": "routine",
"nte_cents": 85000
}Four dispatch primitives as native MCP tools. Point Claude Desktop, Cursor, or any MCP client at the live Streamable-HTTP endpoint and your agent can quote, order, and read evals in one tool call.
// claude_desktop_config.json
{
"mcpServers": {
"steadywrk-dispatch": {
"type": "http",
"url": "https://steadywrk.app/api/mcp"
}
}
}STEADYWRK publishes no package on npm or PyPI. The OpenAPI 3.1 spec is the client surface: generate a typed client in any language, or call the REST endpoints directly. An MCP client needs neither.
# No STEADYWRK package exists on npm or PyPI.
# Generate a typed client from the spec instead:
#
# npx @openapitools/openapi-generator-cli generate # -i https://steadywrk.app/openapi.yaml -g typescript-fetch
#
# Available today:
# OpenAPI 3.1 spec → /openapi.yaml
# (generate a typed client in any language)
# MCP endpoint → /api/mcp▸ MCP reference
Each tool follows the MCP JSON-Schema spec. dispatch.evals and dispatch.index are public read-only — no key required.
| Tool | Args | Returns | Auth |
|---|---|---|---|
| dispatch.quote | { trade, location{ state, city?, zip? }, urgency?, nte_cents? } | Matched contractor · estimated cost (cents) · ETA tier · quote validity | Client credential |
| dispatch.estimate | { trade, location{ state, city?, zip? }, urgency? } | Keyless billed-cost estimate — wage_basis + billed_estimate breakdown, not a matched quote | Public |
| dispatch.order | { trade, location{ state, … }, description, urgency?, nte_cents?, reference_id? } | Order ID · masked contractor reference · status URL | Provisioned key |
| dispatch.evals | { period?: "rolling_30d" } | Evaluation fields · source labels · methodology | Public |
| dispatch.index | {} | 8 trade verticals · BLS wage + billed routine rate | Public |
| agentic.readiness_probe | { url } | Storefront readiness snapshot · not an attested Store Guard grade | Public |
▸ Quickstart
With provisioned integration access, request a quote and review the exact order before explicitly confirming it. The order call writes production data. The examples below require your own credential.
// 1. Get a quote — tools/call dispatch.quote
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "dispatch.quote",
"arguments": {
"trade": "plumbing",
"location": { "state": "AZ", "zip": "85001" },
"urgency": "routine",
"nte_cents": 120000
}
}
}
// → matched contractor, estimated cost, ETA tier
// 2. Create the work order — tools/call dispatch.order
// { trade, location, description, reference_id? }
// → order id, masked contractor ref, status URL
// 3. Read the evaluation response — tools/call dispatch.evals
// { "period": "rolling_30d" } — public, no key
// No SDK required — any MCP client speaks this directly.
// Access requirements: /developers/mcp#dcr# 1. Quote
curl -X POST https://steadywrk.app/api/dispatch/v1/quote \
-H "x-api-key: <provisioned_integration_key>" \
-H "Content-Type: application/json" \
-d '{
"trade": "plumbing",
"location": { "state": "AZ", "zip": "85001" },
"urgency": "routine",
"nte_cents": 120000
}'
# → matched contractor, estimated cost (cents),
# ETA tier, valid_for_minutes
# 2. Order
curl -X POST https://steadywrk.app/api/dispatch/v1/order \
-H "x-api-key: <provisioned_integration_key>" \
-H "Content-Type: application/json" \
-d '{
"trade": "plumbing",
"location": { "state": "AZ", "zip": "85001" },
"description": "Leaking supply line, suite 210"
}'▸ Authentication
Public tools need no credential. dispatch.quote requires a client credential; dispatch.order requires a provisioned integration key. When self-serve OAuth registration is enabled, its tokens permit quotes only, never ordering. The server does not supply a key for anonymous quote or order calls.
Header format
x-api-key: <provisioned_integration_key>MCP endpoint — public tools need no key; send your own credential for quote or order
"steadywrk-dispatch": { "type": "http", "url": "https://steadywrk.app/api/mcp" }▸ For AI agents
The agent card at /.well-known/agent-card.json exposes four skills. dispatch.evals and dispatch.index are public read-only — no key, no auth.
▸ Evaluation response guide
Read provenance.by_field alongside methodology before interpreting an evaluation response. Source labels distinguish estimates, measurements and unavailable readings; the summary flag does not describe every field.
dispatch.evalsPublicReturn evaluation fields with source labels, methodology and revision information. Read field-level provenance before interpreting a response.
{"skill":"dispatch.evals","input":{"period":"rolling_30d"}}dispatch.indexPublicReturn the catalog of 8 dispatch trade verticals. Per trade: the BLS OES hourly WAGE (medianRateDollars/p25/p75 — what a technician earns, NOT a price) alongside billedHourlyRateRoutineDollars, what a buyer pays hourly at routine urgency, derived by the same wage→billed transform dispatch.estimate uses. See the wage_vs_billed block.
{"skill":"dispatch.index","input":{}}dispatch.quotex-api-keyReturn an instant dispatch quote for a field-service job: accepts trade + location + urgency, returns matched contractor availability, estimated cost, ETA tier, and quote validity.
{"skill":"dispatch.quote","input":{"trade":"plumbing","location":{"state":"MO"},"urgency":"routine"}}dispatch.orderx-api-keyCreate a tracked dispatch work order. Auto-matches a contractor from the active pool and returns a masked contractor reference, order id, and status URL.
{"skill":"dispatch.order","input":{"trade":"electrical","location":{"state":"AZ"},"description":"breaker panel fault"}}Public tools are ready to use. For ordering, request provisioned integration access and describe the workflow you want to connect.