MCP Server

STEADYWRK Field Service Dispatch

app.steadywrk/mcp-dispatch
Business & Operations Public & reachable MCP 2026-07-28

What this MCP does

Estimates, quotes, and creates field-service dispatch work orders across multiple trade categories.

agentic.readiness_probe
Inspect storefront readiness
Free multi-surface storefront readiness snapshot (UCP/ACP discovery, product schema, robots, answer-engine maps). Not an attested Store Guard grade. Response includes a Store Guard $149 CTA. No API key required.
Open world
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'maxLength': 255, 'description': 'Public storefront URL or domain'}}}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['ok', 'report', 'demo'], 'properties': {'ok': {'type': 'boolean', 'const': True}, 'demo': {'type': 'object', 'required': ['id', 'permalink', 'verifyPath', 'hashSnippet', 'persisted'], 'properties': {'id': {'type': 'string'}, 'permalink': {'type': 'string'}, 'persisted': {'type': 'boolean'}, 'verifyPath': {'type': 'string'}, 'hashSnippet': {'type': 'string'}}}, 'report': {'type': 'object', 'required': ['host', 'origin', 'score', 'grade', 'summary', 'checks', 'probedAt', 'next'], 'properties': {'host': {'type': 'string'}, 'next': {'type': 'object', 'properties': {'sample': {'type': 'string'}, 'flagship': {'type': 'string'}, 'storeGuardBuy': {'type': 'string'}}}, 'grade': {'enum': ['A', 'B', 'C', 'D', 'F'], 'type': 'string'}, 'score': {'type': 'number'}, 'checks': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'status', 'detail'], 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'detail': {'type': 'string'}, 'status': {'enum': ['pass', 'warn', 'fail', 'skip'], 'type': 'string'}}}}, 'origin': {'type': 'string'}, 'summary': {'type': 'string'}, 'probedAt': {'type': 'string'}}}}}, {'type': 'object', 'required': ['error'], 'properties': {'error': {'type': 'string'}}, 'description': 'Business error — e.g. missing/invalid url argument, rate limit.', 'additionalProperties': True}], 'description': 'Either a successful probe (ok=true, report + demo) or a business error (e.g. missing url) — never a fabricated report.'}
dispatch.estimate
Estimate dispatch cost
Public modeled field-service price estimate using cited BLS wage data and disclosed model assumptions. Returns wage_basis and billed_estimate so callers can inspect the calculation and geographic basis. The response identifies estimates based on a national baseline and distinguishes model assumptions from observed prices. Use dispatch.quote with an accepted credential to request a quote. No API key required.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['trade', 'location'], 'properties': {'trade': {'type': 'string', 'description': 'Trade code (plumbing, electrical, HVAC, etc.)'}, '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}}}}}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['estimated', 'source', 'basis', 'rate_model_version', 'trade', 'urgency', 'location_resolution', 'wage_basis', 'billed_estimate', 'estimated_cost_cents', 'rate_card', 'disclosure'], 'properties': {'basis': {'type': 'string', 'const': 'wage_to_billed_rate_transform'}, 'trade': {'type': 'string'}, 'source': {'type': 'string', 'const': 'public_rate_card'}, 'urgency': {'enum': ['emergency', 'urgent', 'routine', 'scheduled'], 'type': 'string'}, 'estimated': {'type': 'boolean', 'const': True}, 'rate_card': {'type': 'object', 'properties': {'p25_dollars': {'type': ['number', 'null']}, 'p75_dollars': {'type': ['number', 'null']}, 'median_dollars': {'type': 'number'}}}, 'disclosure': {'type': 'array', 'items': {'type': 'string'}}, 'wage_basis': {'type': 'object', 'properties': {'kind': {'type': 'string', 'const': 'hourly_wage'}, 'note': {'type': 'string'}, 'p25_cents': {'type': ['integer', 'null']}, 'p75_cents': {'type': ['integer', 'null']}, 'source_url': {'type': 'string'}, 'scope_label': {'type': 'string'}, 'trade_label': {'type': 'string'}, 'bls_occ_code': {'type': 'string'}, 'median_cents': {'type': 'integer'}}, 'description': 'The cited hourly WAGE input — NOT the price.', 'additionalProperties': True}, 'billed_estimate': {'type': 'object', 'properties': {'formula': {'type': 'string'}, 'currency': {'type': 'string', 'const': 'USD'}, 'total_usd': {'type': 'number'}, 'total_cents': {'type': 'integer'}, 'trip_fee_cents': {'type': 'integer'}, 'urgency_multiplier': {'type': 'number'}, 'minimum_billable_hours': {'type': 'number'}, 'labor_burden_multiplier': {'type': 'number'}, 'billed_hourly_rate_cents': {'type': 'integer'}, 'billed_hourly_rate_routine_cents': {'type': 'integer'}}, 'description': 'What a buyer pays — every component of the arithmetic, re-derivable via formula.', 'additionalProperties': True}, 'rate_model_version': {'type': 'string'}, 'location_resolution': {'type': 'object', 'properties': {'scope': {'enum': ['metro_cited', 'national_baseline', 'mena_coverage_beta'], 'type': 'string'}, 'reason': {'type': 'string'}, 'resolved_metro': {'type': ['string', 'null']}, 'location_sensitive': {'type': 'boolean'}, 'resolved_metro_label': {'type': ['string', 'null']}}, 'additionalProperties': True}, 'estimated_cost_cents': {'type': 'integer', 'description': 'Alias of billed_estimate.total_cents.'}}}, {'type': 'object', 'required': ['estimated', 'source', 'error', 'trade', 'valid_trades', 'known_trades'], 'properties': {'error': {'enum': ['unknown_trade', 'trade_required'], 'type': 'string'}, 'trade': {'type': ['string', 'null']}, 'source': {'type': 'string', 'const': 'public_rate_card'}, 'estimated': {'type': 'boolean', 'const': False}, 'known_trades': {'type': 'array', 'items': {'type': 'string'}}, 'valid_trades': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'Trade was missing or not recognized. No number is fabricated.'}], 'description': 'A full wage-to-billed-rate estimate, or an unknown/missing trade error — never a fabricated number.'}
dispatch.evals
Read dispatch evaluations
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.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {'period': {'enum': ['rolling_7d', 'rolling_30d', 'rolling_90d'], 'type': 'string', 'default': 'rolling_30d'}}}
Output schema
{'type': 'object', 'required': ['schema_version', 'period', 'estimated', 'goal_fulfillment', 'operational', 'trust_signals', 'provenance', 'methodology'], 'properties': {'period': {'enum': ['rolling_7d', 'rolling_30d', 'rolling_90d'], 'type': 'string'}, 'estimated': {'type': 'boolean', 'description': 'False only when goal-fulfillment rates are backed by fresh, sufficient production telemetry.'}, 'provenance': {'type': 'object', 'description': 'Per-field record of whether each published figure is measured or estimated.', 'additionalProperties': True}, 'methodology': {'type': 'object', 'description': 'Metric definitions, named-period window, source-class vocabulary. Never a sample size.', 'additionalProperties': True}, 'operational': {'type': 'object', 'properties': {'active_states': {'type': 'string'}, 'latency_source': {'type': 'string'}, 'active_providers': {'type': 'null'}, 'jobs_dispatched_30d': {'type': 'null'}, 'pricing_latency_p50_ms': {'type': ['number', 'null']}, 'pricing_latency_p95_ms': {'type': ['number', 'null']}, 'pricing_latency_source': {'enum': ['live_telemetry', 'unavailable'], 'type': 'string'}, 'quote_turnaround_hours': {'type': 'number'}, 'avg_dispatch_latency_ms': {'type': ['number', 'null']}, 'p95_dispatch_latency_ms': {'type': ['number', 'null']}, 'quote_turnaround_is_sla': {'type': 'boolean'}, 'pricing_latency_sampled_at': {'type': 'string'}}, 'additionalProperties': True}, 'trust_signals': {'type': 'object', 'properties': {'build_hash': {'type': 'string'}}}, 'schema_version': {'type': 'string'}, 'goal_fulfillment': {'type': 'object', 'properties': {'source': {'enum': ['live_telemetry', 'canonical_estimate'], 'type': 'string'}, 'sampled_at': {'type': 'string'}, 'nte_accuracy': {'type': 'number'}, 'completion_rate': {'type': 'number'}, 'redispatch_rate': {'type': 'number'}, 'human_override_rate': {'type': 'number'}}, 'additionalProperties': True}}}
dispatch.index
Read the dispatch trade catalog
Return 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. No API key required.
Read only Idempotent
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'required': ['trades', 'wage_vs_billed', 'note', 'model_assumptions', 'updated_at', 'source_period', 'rate_model_version'], 'properties': {'note': {'type': 'string'}, 'trades': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'medianWageDollars', 'p25WageDollars', 'p75WageDollars', 'billedHourlyRateRoutineCents', 'billedHourlyRateRoutineDollars'], 'properties': {'kind': {'type': 'string', 'const': 'hourly_wage'}, 'p25WageDollars': {'type': 'number'}, 'p75WageDollars': {'type': 'number'}, 'medianWageDollars': {'type': 'number'}, 'billedHourlyRateRoutineCents': {'type': 'integer'}, 'billedHourlyRateRoutineDollars': {'type': 'number'}}, '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.', 'additionalProperties': True}}, 'updated_at': {'type': 'string'}, 'source_period': {'type': 'string'}, 'wage_vs_billed': {'type': 'object', 'properties': {'formula': {'type': 'string'}, 'warning': {'type': 'string'}, 'wage_fields': {'type': 'array', 'items': {'type': 'string'}}, 'billed_fields': {'type': 'array', 'items': {'type': 'string'}}, 'full_estimate_tool': {'type': 'string'}, 'overhead_margin_markup': {'type': 'number'}, 'labor_burden_multiplier': {'type': 'number'}}, 'additionalProperties': True}, 'model_assumptions': {'type': 'string'}, 'rate_model_version': {'type': 'string'}}}
dispatch.order
Create a dispatch work order
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. Provisioning contact: hello@steadywrk.app.
Destructive Open world
Input schema
{'type': 'object', 'required': ['trade', 'location', 'description'], 'properties': {'trade': {'type': 'string'}, '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', 'minimum': 1}, 'description': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'callback_url': {'type': 'string', 'format': 'uri'}, 'reference_id': {'type': 'string', 'maxLength': 255}}}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['created', 'accepted', 'fulfilled', 'order', 'tracking'], 'properties': {'order': {'type': 'object', 'required': ['id', 'status', 'trade', 'location', 'urgency', 'created_at'], 'properties': {'id': {'type': 'string'}, 'trade': {'type': 'string'}, 'status': {'enum': ['pending_dispatch', 'accepted_pending_fulfilment'], 'type': 'string'}, 'urgency': {'enum': ['emergency', 'urgent', 'routine', 'scheduled'], 'type': 'string'}, 'location': {'type': 'object'}, 'created_at': {'type': 'string'}, 'quoted_cost_usd': {'type': ['string', 'null']}, 'quoted_cost_cents': {'type': ['integer', 'null']}, 'assigned_contractor_ref': {'type': ['string', 'null']}, 'estimated_response_minutes': {'type': ['number', 'null']}}, 'additionalProperties': True}, 'created': {'type': 'boolean', 'const': True}, 'accepted': {'type': 'boolean', 'const': True}, 'tracking': {'type': 'object', 'properties': {'auth': {'type': 'string'}, 'status_url': {'type': 'string'}}}, 'fulfilled': {'type': 'boolean'}, 'fulfilment': {'type': 'object', 'properties': {'detail': {'type': 'string'}, 'reason': {'type': 'string'}, 'assigned': {'type': 'boolean', 'const': False}, 'escalation_contact': {'type': 'string'}}, 'description': 'Present only when fulfilled=false.'}}}, {'type': 'object', 'required': ['error'], 'properties': {'error': {'type': 'string'}}, 'description': 'Business/rate-limit/entitlement error passthrough.', 'additionalProperties': True}], '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.'}
dispatch.quote
Get a dispatch quote
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 a key at hello@steadywrk.app. Anonymous callers receive HTTP 401 with WWW-Authenticate. Public modeled pricing is available through dispatch.estimate.
Open world
Input schema
{'type': 'object', 'required': ['trade', 'location'], 'properties': {'trade': {'type': 'string', 'description': 'Trade code (plumbing, electrical, HVAC, etc.)'}, '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}, 'description': {'type': 'string', 'maxLength': 2000}}}
Output schema
{'type': 'object', 'oneOf': [{'type': 'object', 'required': ['available', 'quote', 'next_steps'], 'properties': {'quote': {'type': 'object', 'required': ['trade', 'location', 'urgency', 'estimated_eta', 'best_match', 'alternates_count', 'generated_at', 'valid_for_minutes'], 'properties': {'trade': {'type': 'string'}, 'urgency': {'enum': ['emergency', 'urgent', 'routine', 'scheduled'], 'type': 'string'}, 'location': {'type': 'object'}, 'best_match': {'type': 'object', 'properties': {'match_score': {'type': 'number'}, 'estimated_cost_usd': {'type': 'string'}, 'estimated_cost_cents': {'type': 'integer'}, 'estimated_response_minutes': {'type': 'number'}}}, 'generated_at': {'type': 'string'}, 'estimated_eta': {'type': 'string'}, 'alternates_count': {'type': 'integer'}, 'valid_for_minutes': {'type': 'integer'}}}, 'available': {'type': 'boolean', 'const': True}, 'next_steps': {'type': 'object', 'properties': {'docs': {'type': 'string'}, 'contact': {'type': 'string'}, 'dispatch': {'type': 'string'}}}}, 'description': 'A contractor was matched.'}, {'type': 'object', 'required': ['available', 'message', 'trade', 'location'], 'properties': {'trade': {'type': 'string'}, 'message': {'type': 'string'}, 'location': {'type': 'object'}, 'available': {'type': 'boolean', 'const': False}}, 'description': 'No contractor is currently available for this trade/location.'}, {'type': 'object', 'required': ['error'], 'properties': {'error': {'type': 'string'}}, 'description': 'Business/rate-limit/auth error passthrough.', 'additionalProperties': True}], 'description': 'A matched-contractor quote, a no-availability response, or a business/auth error passthrough from the downstream dispatch API.'}
Added
dispatch.index
Sept. 17, 2026, 7:58 a.m.
Added
dispatch.evals
Sept. 17, 2026, 7:58 a.m.
Added
dispatch.order
Sept. 17, 2026, 7:58 a.m.
Added
dispatch.estimate
Sept. 17, 2026, 7:58 a.m.
Added
dispatch.quote
Sept. 17, 2026, 7:58 a.m.
Added
agentic.readiness_probe
Sept. 17, 2026, 7:58 a.m.