Precision Concrete Coating MCP for services, estimates, scheduling, and business information.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Runs visual observation over any unreviewed photos. Returns non-diagnostic observations from a fixed vocabulary with confidence values. Observations are impressions only and are always marked as requiring field verification.
The request_id returned by create_estimate_request.
The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued.
Optional client-supplied key. Repeating a call with the same key never duplicates work.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Runs visual observation over any unreviewed photos. Returns non-diagnostic observations from a fixed vocabulary with confidence values. Observations are impressions only and are always marked as requiring field verification.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token"
],
"properties": {
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
}
},
"additionalProperties": false
}Attaches photo references (public https URLs) to an estimate request. Photos support the estimator's preparation; they never replace the on-site inspection.
| Argument | Type | Description |
|---|---|---|
| fields | object | Legacy internal-schema field bag. Prefer the top-level public fields; unknown keys are rejected. Never include pricing. |
| photos* | array | Photo references to attach. |
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token",
"photos"
],
"properties": {
"fields": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City"
},
"email": {
"type": "string",
"description": "Email"
},
"phone": {
"type": "string",
"description": "Phone"
},
"state": {
"type": "string",
"description": "State"
},
"width": {
"type": "number",
"description": "Width (ft)"
},
"length": {
"type": "number",
"description": "Length (ft)"
},
"postal_code": {
"type": "string",
"description": "ZIP code"
},
"concrete_age": {
"type": "string",
"description": "Concrete age"
},
"project_type": {
"enum": [
"garage_floor",
"patio",
"driveway",
"basement",
"commercial_floor",
"warehouse",
"shop_floor",
"pool_deck",
"walkway",
"other"
],
"type": "string",
"description": "Project type"
},
"customer_goal": {
"type": "string",
"description": "Customer goal"
},
"customer_name": {
"type": "string",
"description": "Name"
},
"cracks_present": {
"type": "boolean",
"description": "Cracks present"
},
"customer_notes": {
"type": "string",
"description": "Notes"
},
"current_surface": {
"enum": [
"bare_concrete",
"painted_concrete",
"coated_concrete",
"tile",
"carpet",
"other",
"unknown"
],
"type": "string",
"description": "Current surface"
},
"number_of_areas": {
"type": "integer",
"description": "Number of areas"
},
"project_subtype": {
"type": "string",
"description": "Project detail"
},
"service_address": {
"type": "string",
"description": "Service address"
},
"desired_timeline": {
"type": "string",
"description": "Desired timeline"
},
"existing_coating": {
"type": "boolean",
"description": "Existing coating present"
},
"moisture_concern": {
"type": "boolean",
"description": "Moisture concern"
},
"preferred_finish": {
"type": "string",
"description": "Preferred finish"
},
"spalling_present": {
"type": "boolean",
"description": "Spalling or pitting"
},
"access_conditions": {
"type": "string",
"description": "Access conditions"
},
"crack_description": {
"type": "string",
"description": "Crack description"
},
"occupied_or_empty": {
"enum": [
"empty",
"partially_occupied",
"fully_occupied"
],
"type": "string",
"description": "Occupied or empty"
},
"budget_range_optional": {
"type": "string",
"description": "Budget range (optional)"
},
"existing_coating_type": {
"type": "string",
"description": "Existing coating type"
},
"desired_color_or_flake": {
"type": "string",
"description": "Desired color or flake"
},
"oil_or_grease_staining": {
"type": "boolean",
"description": "Oil or grease staining"
},
"approximate_square_feet": {
"type": "number",
"description": "Approximate square feet"
},
"coating_removal_required": {
"type": "boolean",
"description": "Removal likely required"
},
"preferred_contact_method": {
"enum": [
"phone",
"text",
"email"
],
"type": "string",
"description": "Preferred contact method"
},
"tile_or_adhesive_present": {
"type": "boolean",
"description": "Tile or adhesive present"
},
"residential_or_commercial": {
"enum": [
"residential",
"commercial"
],
"type": "string",
"description": "Residential or commercial"
}
},
"description": "Legacy internal-schema field bag. Prefer the top-level public fields; unknown keys are rejected. Never include pricing.",
"additionalProperties": false
},
"photos": {
"type": "array",
"items": {
"type": "object",
"required": [
"file_reference"
],
"properties": {
"note": {
"type": "string",
"description": "What the customer said about this photo."
},
"file_reference": {
"type": "string",
"description": "A public https image URL."
}
}
},
"maxItems": 12,
"description": "Photo references to attach."
},
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
}
},
"additionalProperties": false
}Cancels a proposed or confirmed walkthrough, releases the held time back to Precision and notifies the office. The estimate request itself stays open, so a new appointment can be requested later.
| Argument | Type | Description |
|---|---|---|
| reason | string | Why the customer is cancelling. |
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
| customer_authorized_cancellation* | boolean | Must be true. The customer asked to cancel. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token",
"customer_authorized_cancellation"
],
"properties": {
"reason": {
"type": "string",
"description": "Why the customer is cancelling."
},
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
},
"customer_authorized_cancellation": {
"type": "boolean",
"description": "Must be true. The customer asked to cancel."
}
},
"additionalProperties": false
}Confirms the appointment Precision proposed, using the proposal_id from the proposal. Only an unexpired proposal on this request can be confirmed. On success the walkthrough is booked, the office is notified and preparation instructions are returned.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request_id returned by create_estimate_request. |
| proposal_id* | string | The proposal_id returned with the proposed appointment. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
| customer_confirmation* | boolean | Must be true. The customer accepted the proposed time. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token",
"proposal_id",
"customer_confirmation"
],
"properties": {
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"proposal_id": {
"type": "string",
"description": "The proposal_id returned with the proposed appointment."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
},
"customer_confirmation": {
"type": "boolean",
"description": "Must be true. The customer accepted the proposed time."
}
},
"additionalProperties": false
}Creates a governed estimate request and returns a request_id plus a one-time customer_access_token. Required to create: customer_name, phone, project_city, project_state, project_type, consent_to_contact. Additionally required before submit_estimate_for_review: approximate_square_feet — these may be collected turn by turn with update_estimate_request. Every other field is genuinely optional.
| Argument | Type | Description |
|---|---|---|
| string | ||
| phone* | string | Phone |
| source | string | Source |
| timezone | string | Timezone (IANA) |
| test_mode | boolean | Diagnostics only. Marks the request as a synthetic smoke-test record: it is excluded from reporting, never holds real calendar availability and never notifies the office. Never set this for a real customer. |
| postal_code | string | ZIP code |
| test_run_id | string | Diagnostics only. Correlates a synthetic test record with one automated smoke-test run. Ignored unless test_mode is true. |
| project_city* | string | Project city |
Self-documenting endpoint. Returns everything an AI agent or developer needs to use Precision OS correctly: platform identity and versions, authentication and read-only status, transports and capabilities, the complete auto-generated documentation for every registered tool, plus best practices, limitations, security model, privacy guarantees and data freshness. Generated dynamically from the live tool registry, so it never goes out of date.
| Argument | Type | Description |
|---|---|---|
| tool | string | Return the documentation for a single registered tool instead of the whole catalog. |
{
"type": "object",
"properties": {
"tool": {
"type": "string",
"description": "Return the documentation for a single registered tool instead of the whole catalog."
}
},
"additionalProperties": false
}Answers a question by traversing the published knowledge graph and returning ranked reasoning paths instead of disconnected records. Each path is an ordered chain of relationships with a path score, a path confidence, the supporting evidence, the relationship types used and a plain-language explanation of every transition. Traversal respects relationship weight, evidence strength, concept ontology, semantic clusters and inverse relationships, and prunes weak branches automatically.
| Argument | Type | Description |
|---|---|---|
| goal | string | Optional destination topic. Paths that reach it rank higher. |
| subject | string | Optional explicit starting record title. |
| question | string | The question to reason about. Used to choose starting records and rank paths. |
| max_depth | integer | Maximum hops per reasoning path, 1–6. Default 4. |
| max_paths | integer | Maximum ranked paths returned, 1–12. Default 5. |
{
"type": "object",
"properties": {
"goal": {
"type": "string",
"description": "Optional destination topic. Paths that reach it rank higher."
},
"subject": {
"type": "string",
"description": "Optional explicit starting record title."
},
"question": {
"type": "string",
"description": "The question to reason about. Used to choose starting records and rank paths."
},
"max_depth": {
"type": "integer",
"description": "Maximum hops per reasoning path, 1–6. Default 4."
},
"max_paths": {
"type": "integer",
"description": "Maximum ranked paths returned, 1–12. Default 5."
}
},
"additionalProperties": false
}Returns the approved public Business Operations & Project Lifecycle knowledge: how projects are quoted, scheduled, communicated, installed, completed, documented and supported. Company process knowledge, not coating science.
| Argument | Type | Description |
|---|---|---|
| section | string | Restrict the response to a single lifecycle section, for example scheduling_process. |
{
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Restrict the response to a single lifecycle section, for example scheduling_process."
}
},
"additionalProperties": false
}Returns the current scheduling availability of the business plus the standard project turnaround statements. Reflects the Current Availability control in Approved Knowledge.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns the approved public profile of Precision Concrete Coating: organization identity, owner, services and verified context records. Sourced from the Approved Knowledge database.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns the approved relationship edges of the public entity graph, optionally filtered to one entity or one relationship type. Every edge references stable canonical entity ids on both sides; edges that touch an unpublished record are never returned.
| Argument | Type | Description |
|---|---|---|
| entity | string | Canonical public id, slug or alias to centre the graph on. |
| relationship | string | Restrict the result to one relationship type. |
{
"type": "object",
"properties": {
"entity": {
"type": "string",
"maxLength": 200,
"description": "Canonical public id, slug or alias to centre the graph on."
},
"relationship": {
"type": "string",
"maxLength": 100,
"description": "Restrict the result to one relationship type."
}
},
"additionalProperties": false
}Read-only discovery. Returns every field the public estimate workflow accepts, which are required, the allowed enum values, the workflow states, the scheduling model and the guardrails. Call this first so no field name, enum value or state is ever guessed.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns the public projection of one estimate request: the workflow state, a customer-friendly status, what information is still missing, the recommended next question and the appointment (date, time window, timezone and confirmation status) if one exists. No internal notes, staff data or calendar availability is ever included.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request_id returned by create_estimate_request. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token"
],
"properties": {
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
}
},
"additionalProperties": false
}Returns every approved public question-and-answer pair collected from Approved Knowledge, the Warranty Center, Installation Standards and Inspection Standards.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns the directional relationships between published Precision knowledge records — for example which installation standard mitigates which coating failure, or which warranty covers which service. Only relationships whose records are both approved and public are returned.
| Argument | Type | Description |
|---|---|---|
| subject | string | Filter to relationships whose subject or object matches this text. |
| relationship | string | Filter to a single relationship type, e.g. mitigates, governed_by, verifies. |
{
"type": "object",
"properties": {
"subject": {
"type": "string",
"description": "Filter to relationships whose subject or object matches this text."
},
"relationship": {
"type": "string",
"description": "Filter to a single relationship type, e.g. mitigates, governed_by, verifies."
}
},
"additionalProperties": false
}Returns the approved public Maintenance & Care Center knowledge: how coated concrete should be cleaned, maintained, protected and inspected, including recommended methods, frequencies, prohibited products, common mistakes and warranty impact.
| Argument | Type | Description |
|---|---|---|
| section | string | Restrict the response to a single care section, for example routine_cleaning. |
{
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Restrict the response to a single care section, for example routine_cleaning."
}
},
"additionalProperties": false
}Returns the single highest-value question still unanswered, in natural language, along with why it matters. Ask one question at a time and send the answer back through update_estimate_request.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request_id returned by create_estimate_request. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token"
],
"properties": {
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
}
},
"additionalProperties": false
}Returns approved public pricing statements and the services they apply to. No quoted amounts are generated: Precision Concrete Coating prices every project after an on-site inspection.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns the approved Public Entity Layer: every organization, person, service, service area, coating system, preparation method, trust signal, expertise and community involvement record Precision publishes, each with a stable canonical id, aliases, verification status, review metadata and sameAs references. Internal identifiers are never exposed.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of entities to return (1-200, default 50). |
| offset | integer | Zero-based offset for pagination. |
| entity_type | string | Restrict the result to one public entity type. |
| verification_status | string | Restrict the result to a verification status. Published entities are always `verified`. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "Maximum number of entities to return (1-200, default 50)."
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Zero-based offset for pagination."
},
"entity_type": {
"enum": [
"organization",
"person",
"service",
"service_area",
"coating_system",
"preparation_method",
"trust_signal",
"expertise",
"community_involvement",
"standard",
"manufacturer_standard",
"manufacturer",
"product",
"manufacturer_document",
"failure_mode",
"warranty_term",
"maintenance_practice",
"material"
],
"type": "string",
"description": "Restrict the result to one public entity type."
},
"verification_status": {
"enum": [
"verified",
"needs_review",
"unverified"
],
"type": "string",
"description": "Restrict the result to a verification status. Published entities are always `verified`."
}
},
"additionalProperties": false
}Returns a single published public entity by canonical id, canonical URI, slug or alias, together with its incoming and outgoing approved relationships and the schema.org JSON-LD node generated from the same record.
| Argument | Type | Description |
|---|---|---|
| id* | string | Canonical public id (`pcc:service/garage-floor-coatings`), canonical URI, slug or alias. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Canonical public id (`pcc:service/garage-floor-coatings`), canonical URI, slug or alias."
}
},
"additionalProperties": false
}Returns the approved standards that a specific Precision knowledge record references, with the relationship predicate (`tested_per`, `guided_by`, `measured_by`, `references`, …) and an applicability summary explaining why the standard is relevant. Answers "what is this practice based on?" with citable provenance.
| Argument | Type | Description |
|---|---|---|
| record* | string | Record slug or canonical public entity id (`pcc:preparation-method/diamond-grinding`). |
| record_kind | string | Optional record family filter (`installation_standard`, `inspection_standard`, `failure_analysis`, `warranty_term`, `maintenance_record`, `knowledge_entry`). |
{
"type": "object",
"required": [
"record"
],
"properties": {
"record": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Record slug or canonical public entity id (`pcc:preparation-method/diamond-grinding`)."
},
"record_kind": {
"type": "string",
"maxLength": 60,
"description": "Optional record family filter (`installation_standard`, `inspection_standard`, `failure_analysis`, `warranty_term`, `maintenance_record`, `knowledge_entry`)."
}
},
"additionalProperties": false
}Returns the approved service areas together with the headquarters, primary city, state, county and overall service region.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Returns a single referenced standard by canonical public id, standard number or alias, with its provenance (official source URL, edition, last verified date), lifecycle warnings, supersession chain and the Precision records that reference it.
| Argument | Type | Description |
|---|---|---|
| id* | string | Canonical public id (`pcc:standard/astm-f2170`), standard number (`ASTM F2170`) or alias. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Canonical public id (`pcc:standard/astm-f2170`), standard number (`ASTM F2170`) or alias."
}
},
"additionalProperties": false
}Returns the approved edges that connect Precision entities and knowledge records to referenced standards, including the predicate and the applicability summary. Use it to traverse the provenance layer of the knowledge graph.
| Argument | Type | Description |
|---|---|---|
| standard | string | Canonical standard id or standard number to centre on. |
| predicate | string | Restrict to one predicate. |
{
"type": "object",
"properties": {
"standard": {
"type": "string",
"maxLength": 200,
"description": "Canonical standard id or standard number to centre on."
},
"predicate": {
"type": "string",
"maxLength": 60,
"description": "Restrict to one predicate."
}
},
"additionalProperties": false
}Returns the approved external technical standards Precision's published knowledge references — ASTM, ICRI, ACI, ANSI, OSHA, EPA and manufacturer technical documents. Each record carries the standard number, official title, issuing organization, edition, official source URL, an original scope summary and lifecycle status. Reference metadata only: the text of a standard is never reproduced, and a reference is not a certification or compliance claim.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of standards to return (1-200, default 50). |
| topic | string | Restrict to standards tagged with a topic such as `moisture`, `surface-preparation`, `adhesion`, `safety`. |
| lifecycle | string | Restrict to a lifecycle state. |
| organization | string | Restrict to one issuing organization (for example `ASTM`, `ICRI`, `OSHA`). |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "Maximum number of standards to return (1-200, default 50)."
},
"topic": {
"type": "string",
"maxLength": 100,
"description": "Restrict to standards tagged with a topic such as `moisture`, `surface-preparation`, `adhesion`, `safety`."
},
"lifecycle": {
"enum": [
"active",
"superseded",
"withdrawn"
],
"type": "string",
"description": "Restrict to a lifecycle state."
},
"organization": {
"type": "string",
"maxLength": 100,
"description": "Restrict to one issuing organization (for example `ASTM`, `ICRI`, `OSHA`)."
}
},
"additionalProperties": false
}Returns the approved public warranty knowledge graph: the derived summary plus coverage, exclusions, maintenance requirements, claims process, transfer policy and warranty FAQ records.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Asks internal JoJo for a different walkthrough time using new preferences. The existing hold stays in place until JoJo replaces it, so a duplicate appointment is never created and the customer is never left without one.
| Argument | Type | Description |
|---|---|---|
| reason | string | Why the customer needs a different time. |
| timezone | string | IANA timezone for all appointment dates and times, e.g. America/Chicago. Defaults to America/Chicago. |
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
| new_scheduling_preferences | object | What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly. |
| customer_authorized_reschedule* | boolean |
Asks Precision's internal JoJo scheduler to reserve an authorized on-site walkthrough that fits the customer's stated preferences. The caller never sees or selects calendar availability: JoJo reads the private calendar, applies the preferences and returns exactly one proposed time awaiting customer confirmation. If nothing matches, the response says so and asks for wider preferences.
| Argument | Type | Description |
|---|---|---|
| timezone | string | IANA timezone for all appointment dates and times, e.g. America/Chicago. Defaults to America/Chicago. |
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
| scheduling_preferences | object | What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly. |
| customer_authorized_scheduling* | boolean | Must be true. Confirms the customer explicitly asked for an appointment to be scheduled. |
Full-text style search across every published Approved Knowledge record — company, services, service areas, warranty, installation, inspection, failure-analysis, maintenance and business operations knowledge. Omit the query to receive the full index.
| Argument | Type | Description |
|---|---|---|
| q | string | Search terms. When omitted the complete published record index is returned. |
| limit | integer | Maximum number of results (1–50). Defaults to 10. |
| module | string | Restrict results to a single knowledge module. |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search terms. When omitted the complete published record index is returned."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of results (1–50). Defaults to 10."
},
"module": {
"enum": [
"company",
"services",
"service_areas",
"approved_knowledge",
"warranty",
"installation_standards",
"inspection_standards",
"failure_analysis",
"maintenance_care",
"business_operations"
],
"type": "string",
"description": "Restrict results to a single knowledge module."
}
},
"additionalProperties": false
}Ranked search over published public entity names, aliases, canonical ids and descriptions. Use it to resolve a free-form mention ("Conroe", "flake floor") to a stable canonical Precision entity id.
| Argument | Type | Description |
|---|---|---|
| q* | string | Search text. |
| limit | integer | Maximum number of matches (1-50, default 10). |
| entity_type | string | Restrict the search to one public entity type. |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search text."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of matches (1-50, default 10)."
},
"entity_type": {
"enum": [
"organization",
"person",
"service",
"service_area",
"coating_system",
"preparation_method",
"trust_signal",
"expertise",
"community_involvement",
"standard",
"manufacturer_standard",
"manufacturer",
"product",
"manufacturer_document",
"failure_mode",
"warranty_term",
"maintenance_practice",
"material"
],
"type": "string",
"description": "Restrict the search to one public entity type."
}
},
"additionalProperties": false
}Ranked search over standard numbers, titles, aliases, topics and scope summaries. Use it to resolve a free-form mention such as "in-situ RH test" or "CSP profile" to the canonical standard Precision references.
| Argument | Type | Description |
|---|---|---|
| q* | string | Search text. |
| limit | integer | Maximum matches (1-50, default 10). |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search text."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum matches (1-50, default 10)."
}
},
"additionalProperties": false
}Submits the request to Precision's internal JoJo review layer and the office, creating or linking the customer record and notifying staff. Every field in required_to_submit must be present first (customer_name, phone, project_city, project_state, project_type, approximate_square_feet, consent_to_contact), along with a contact method and consent. Submitting requests a visit; it does not confirm pricing, scope or a time.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_statement | string | The customer's own words for this step, stored verbatim as the evidence trail. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token"
],
"properties": {
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_statement": {
"type": "string",
"description": "The customer's own words for this step, stored verbatim as the evidence trail."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
}
},
"additionalProperties": false
}Token-scoped update. Adds or corrects customer-provided details on an existing request. Values are validated against the shared schema and every change is audited with the calling channel.
| Argument | Type | Description |
|---|---|---|
| updates* | object | The fields to change. |
| request_id* | string | The request_id returned by create_estimate_request. |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| customer_statement | string | The customer's own words for this step, stored verbatim as the evidence trail. |
| customer_access_token* | string | The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued. |
| scheduling_preferences | object | What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token",
"updates"
],
"properties": {
"updates": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email"
},
"phone": {
"type": "string",
"description": "Phone"
},
"timezone": {
"type": "string",
"description": "Timezone (IANA)"
},
"postal_code": {
"type": "string",
"description": "ZIP code"
},
"project_city": {
"type": "string",
"description": "Project city"
},
"project_type": {
"enum": [
"garage",
"patio",
"commercial",
"driveway",
"pool_deck",
"warehouse",
"showroom",
"other"
],
"type": "string",
"description": "Project type"
},
"customer_name": {
"type": "string",
"description": "Customer name"
},
"project_state": {
"type": "string",
"description": "Project state"
},
"customer_notes": {
"type": "string",
"description": "Customer notes"
},
"project_address": {
"type": "string",
"description": "Project street address"
},
"existing_surface": {
"enum": [
"bare_concrete",
"paint",
"epoxy",
"tile",
"adhesive",
"unknown"
],
"type": "string",
"description": "Existing surface"
},
"project_timeline": {
"type": "string",
"description": "Project timeline"
},
"requested_system": {
"enum": [
"full_flake",
"metallic",
"solid_color",
"commercial_system",
"urethane_cement",
"unsure"
],
"type": "string",
"description": "Requested coating system"
},
"surface_condition": {
"type": "string",
"description": "Surface condition"
},
"consent_to_contact": {
"type": "boolean",
"description": "Consent to be contacted"
},
"approximate_square_feet": {
"type": "integer",
"description": "Approximate square feet"
},
"preferred_contact_method": {
"enum": [
"phone",
"text",
"email"
],
"type": "string",
"description": "Preferred contact method"
}
},
"description": "The fields to change.",
"additionalProperties": false
},
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_statement": {
"type": "string",
"description": "The customer's own words for this step, stored verbatim as the evidence trail."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
},
"scheduling_preferences": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
}
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
],
"type": "string"
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
}
},
"description": "What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly.",
"additionalProperties": false
}
},
"additionalProperties": false
}| project_type* |
| string |
| Project type |
| customer_name* | string | Customer name |
| project_state* | string | Project state |
| customer_notes | string | Customer notes |
| idempotency_key | string | Optional client-supplied key. Repeating a call with the same key never duplicates work. |
| project_address | string | Project street address |
| existing_surface | string | Existing surface |
| project_timeline | string | Project timeline |
| requested_system | string | Requested coating system |
| surface_condition | string | Surface condition |
| consent_to_contact* | boolean | Consent to be contacted |
| customer_statement | string | The customer's own words for this step, stored verbatim as the evidence trail. |
| external_reference_id | string | External reference id |
| scheduling_preferences | object | What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly. |
| approximate_square_feet | integer | Approximate square feet |
| preferred_contact_method | string | Preferred contact method |
{
"type": "object",
"required": [
"customer_name",
"phone",
"project_city",
"project_state",
"project_type",
"consent_to_contact"
],
"properties": {
"email": {
"type": "string",
"description": "Email"
},
"phone": {
"type": "string",
"description": "Phone"
},
"source": {
"enum": [
"ai_assistant",
"website",
"developer_api"
],
"type": "string",
"description": "Source"
},
"timezone": {
"type": "string",
"description": "Timezone (IANA)"
},
"test_mode": {
"type": "boolean",
"description": "Diagnostics only. Marks the request as a synthetic smoke-test record: it is excluded from reporting, never holds real calendar availability and never notifies the office. Never set this for a real customer."
},
"postal_code": {
"type": "string",
"description": "ZIP code"
},
"test_run_id": {
"type": "string",
"format": "uuid",
"description": "Diagnostics only. Correlates a synthetic test record with one automated smoke-test run. Ignored unless test_mode is true."
},
"project_city": {
"type": "string",
"description": "Project city"
},
"project_type": {
"enum": [
"garage",
"patio",
"commercial",
"driveway",
"pool_deck",
"warehouse",
"showroom",
"other"
],
"type": "string",
"description": "Project type"
},
"customer_name": {
"type": "string",
"description": "Customer name"
},
"project_state": {
"type": "string",
"description": "Project state"
},
"customer_notes": {
"type": "string",
"description": "Customer notes"
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"project_address": {
"type": "string",
"description": "Project street address"
},
"existing_surface": {
"enum": [
"bare_concrete",
"paint",
"epoxy",
"tile",
"adhesive",
"unknown"
],
"type": "string",
"description": "Existing surface"
},
"project_timeline": {
"type": "string",
"description": "Project timeline"
},
"requested_system": {
"enum": [
"full_flake",
"metallic",
"solid_color",
"commercial_system",
"urethane_cement",
"unsure"
],
"type": "string",
"description": "Requested coating system"
},
"surface_condition": {
"type": "string",
"description": "Surface condition"
},
"consent_to_contact": {
"type": "boolean",
"description": "Consent to be contacted"
},
"customer_statement": {
"type": "string",
"description": "The customer's own words for this step, stored verbatim as the evidence trail."
},
"external_reference_id": {
"type": "string",
"description": "External reference id"
},
"scheduling_preferences": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
}
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
],
"type": "string"
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
}
},
"description": "What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly.",
"additionalProperties": false
},
"approximate_square_feet": {
"type": "integer",
"description": "Approximate square feet"
},
"preferred_contact_method": {
"enum": [
"phone",
"text",
"email"
],
"type": "string",
"description": "Preferred contact method"
}
},
"additionalProperties": false
}| Must be true. The customer asked to reschedule. |
{
"type": "object",
"required": [
"request_id",
"customer_access_token",
"customer_authorized_reschedule"
],
"properties": {
"reason": {
"type": "string",
"description": "Why the customer needs a different time."
},
"timezone": {
"type": "string",
"description": "IANA timezone for all appointment dates and times, e.g. America/Chicago. Defaults to America/Chicago."
},
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
},
"new_scheduling_preferences": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
}
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
],
"type": "string"
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
}
},
"description": "What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly.",
"additionalProperties": false
},
"customer_authorized_reschedule": {
"type": "boolean",
"description": "Must be true. The customer asked to reschedule."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"request_id",
"customer_access_token",
"customer_authorized_scheduling"
],
"properties": {
"timezone": {
"type": "string",
"description": "IANA timezone for all appointment dates and times, e.g. America/Chicago. Defaults to America/Chicago."
},
"request_id": {
"type": "string",
"description": "The request_id returned by create_estimate_request."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"customer_access_token": {
"type": "string",
"description": "The one-time customer_access_token returned by create_estimate_request. Required with request_id for every follow-up call. Stored hashed at rest and never re-issued."
},
"scheduling_preferences": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
}
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
],
"type": "string"
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
}
},
"description": "What the customer prefers. Precision's internal JoJo scheduler decides the actual time from authorized calendar availability — no external caller ever reads or writes the calendar directly.",
"additionalProperties": false
},
"customer_authorized_scheduling": {
"type": "boolean",
"description": "Must be true. Confirms the customer explicitly asked for an appointment to be scheduled."
}
},
"additionalProperties": false
}