mcp
Precision Concrete Coating MCP for services, estimates, scheduling, and business information.
使うべきか
品質と安全性
検出事項(1)
- LOWget_estimate_intake_requirements 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"mcp": {
"url": "https://app.precision-concretecoating.com/api/public/mcp"
}
}
}リモートエンドポイント
https://app.precision-concretecoating.com/api/public/mcpstreamable-httpできること
ツール一覧
ツール(33)
🟢get_company_information
Returns the approved public profile of Precision Concrete Coating: organization identity, owner, services and verified context records. Sourced from the Approved Knowledge database.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_business_status
Returns the current scheduling availability of the business plus the standard project turnaround statements. Reflects the Current Availability control in Approved Knowledge.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_service_areas
Returns the approved service areas together with the headquarters, primary city, state, county and overall service region.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_faq
Returns every approved public question-and-answer pair collected from Approved Knowledge, the Warranty Center, Installation Standards and Inspection Standards.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_pricing
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.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_warranty
Returns the approved public warranty knowledge graph: the derived summary plus coverage, exclusions, maintenance requirements, claims process, transfer policy and warranty FAQ records.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_maintenance_care(section)
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.
入力スキーマ
{
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Restrict the response to a single care section, for example routine_cleaning."
}
},
"additionalProperties": false
}🟢get_business_operations(section)
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.
入力スキーマ
{
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Restrict the response to a single lifecycle section, for example scheduling_process."
}
},
"additionalProperties": false
}🟢search_knowledge(q, module, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search terms. When omitted the complete published record index is returned."
},
"module": {
"type": "string",
"enum": [
"company",
"services",
"service_areas",
"approved_knowledge",
"warranty",
"installation_standards",
"inspection_standards",
"failure_analysis",
"maintenance_care",
"business_operations"
],
"description": "Restrict results to a single knowledge module."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "Maximum number of results (1–50). Defaults to 10."
}
},
"additionalProperties": false
}🟢get_knowledge_relationships(subject, relationship)
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.
入力スキーマ
{
"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
}🟢explain_knowledge_reasoning(question, subject, goal, max_depth, max_paths)
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.
入力スキーマ
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The question to reason about. Used to choose starting records and rank paths."
},
"subject": {
"type": "string",
"description": "Optional explicit starting record title."
},
"goal": {
"type": "string",
"description": "Optional destination topic. Paths that reach it rank higher."
},
"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
}🟢describe_platform(tool)
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.
入力スキーマ
{
"type": "object",
"properties": {
"tool": {
"type": "string",
"description": "Return the documentation for a single registered tool instead of the whole catalog."
}
},
"additionalProperties": false
}🟢get_public_entities(entity_type, verification_status, limit, offset)
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.
入力スキーマ
{
"type": "object",
"properties": {
"entity_type": {
"type": "string",
"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"
],
"description": "Restrict the result to one public entity type."
},
"verification_status": {
"type": "string",
"enum": [
"verified",
"needs_review",
"unverified"
],
"description": "Restrict the result to a verification status. Published entities are always `verified`."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50,
"description": "Maximum number of entities to return (1-200, default 50)."
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Zero-based offset for pagination."
}
},
"additionalProperties": false
}🟢get_public_entity(id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Canonical public id (`pcc:service/garage-floor-coatings`), canonical URI, slug or alias."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢search_public_entities(q, entity_type, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "Search text."
},
"entity_type": {
"type": "string",
"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"
],
"description": "Restrict the search to one public entity type."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "Maximum number of matches (1-50, default 10)."
}
},
"required": [
"q"
],
"additionalProperties": false
}🟢get_entity_relationships(entity, relationship)
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.
入力スキーマ
{
"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
}🟢get_standards(organization, topic, lifecycle, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"organization": {
"type": "string",
"maxLength": 100,
"description": "Restrict to one issuing organization (for example `ASTM`, `ICRI`, `OSHA`)."
},
"topic": {
"type": "string",
"maxLength": 100,
"description": "Restrict to standards tagged with a topic such as `moisture`, `surface-preparation`, `adhesion`, `safety`."
},
"lifecycle": {
"type": "string",
"enum": [
"active",
"superseded",
"withdrawn"
],
"description": "Restrict to a lifecycle state."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50,
"description": "Maximum number of standards to return (1-200, default 50)."
}
},
"additionalProperties": false
}🟢get_standard(id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "Canonical public id (`pcc:standard/astm-f2170`), standard number (`ASTM F2170`) or alias."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢search_standards(q, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"description": "Search text."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "Maximum matches (1-50, default 10)."
}
},
"required": [
"q"
],
"additionalProperties": false
}🟢get_record_standards(record, record_kind)
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.
入力スキーマ
{
"type": "object",
"properties": {
"record": {
"type": "string",
"minLength": 2,
"maxLength": 200,
"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`)."
}
},
"required": [
"record"
],
"additionalProperties": false
}🟢get_standard_relationships(standard, predicate)
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.
入力スキーマ
{
"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
}🟢get_estimate_intake_requirements
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.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡create_estimate_request(customer_name, phone, email, project_address, project_city, ...)
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.
入力スキーマ
{
"type": "object",
"properties": {
"customer_name": {
"type": "string",
"description": "Customer name"
},
"phone": {
"type": "string",
"description": "Phone"
},
"email": {
"type": "string",
"description": "Email"
},
"project_address": {
"type": "string",
"description": "Project street address"
},
"project_city": {
"type": "string",
"description": "Project city"
},
"project_state": {
"type": "string",
"description": "Project state"
},
"postal_code": {
"type": "string",
"description": "ZIP code"
},
"project_type": {
"type": "string",
"description": "Project type",
"enum": [
"garage",
"patio",
"commercial",
"driveway",
"pool_deck",
"warehouse",
"showroom",
"other"
]
},
"approximate_square_feet": {
"type": "integer",
"description": "Approximate square feet"
},
"existing_surface": {
"type": "string",
"description": "Existing surface",
"enum": [
"bare_concrete",
"paint",
"epoxy",
"tile",
"adhesive",
"unknown"
]
},
"surface_condition": {
"type": "string",
"description": "Surface condition"
},
"requested_system": {
"type": "string",
"description": "Requested coating system",
"enum": [
"full_flake",
"metallic",
"solid_color",
"commercial_system",
"urethane_cement",
"unsure"
]
},
"project_timeline": {
"type": "string",
"description": "Project timeline"
},
"preferred_contact_method": {
"type": "string",
"description": "Preferred contact method",
"enum": [
"phone",
"text",
"email"
]
},
"customer_notes": {
"type": "string",
"description": "Customer notes"
},
"consent_to_contact": {
"type": "boolean",
"description": "Consent to be contacted"
},
"timezone": {
"type": "string",
"description": "Timezone (IANA)"
},
"source": {
"type": "string",
"description": "Source",
"enum": [
"ai_assistant",
"website",
"developer_api"
]
},
"external_reference_id": {
"type": "string",
"description": "External reference id"
},
"scheduling_preferences": {
"type": "object",
"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.",
"properties": {
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"type": "string",
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
]
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
]
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
}
},
"additionalProperties": false
},
"customer_statement": {
"type": "string",
"description": "The customer's own words for this step, stored verbatim as the evidence trail."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
},
"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."
},
"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."
}
},
"required": [
"customer_name",
"phone",
"project_city",
"project_state",
"project_type",
"consent_to_contact"
],
"additionalProperties": false
}🟡update_estimate_request(request_id, customer_access_token, updates, scheduling_preferences, customer_statement, ...)
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.
入力スキーマ
{
"type": "object",
"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."
},
"updates": {
"type": "object",
"description": "The fields to change.",
"properties": {
"customer_name": {
"type": "string",
"description": "Customer name"
},
"phone": {
"type": "string",
"description": "Phone"
},
"email": {
"type": "string",
"description": "Email"
},
"project_address": {
"type": "string",
"description": "Project street address"
},
"project_city": {
"type": "string",
"description": "Project city"
},
"project_state": {
"type": "string",
"description": "Project state"
},
"postal_code": {
"type": "string",
"description": "ZIP code"
},
"project_type": {
"type": "string",
"description": "Project type",
"enum": [
"garage",
"patio",
"commercial",
"driveway",
"pool_deck",
"warehouse",
"showroom",
"other"
]
},
"approximate_square_feet": {
"type": "integer",
"description": "Approximate square feet"
},
"existing_surface": {
"type": "string",
"description": "Existing surface",
"enum": [
"bare_concrete",
"paint",
"epoxy",
"tile",
"adhesive",
"unknown"
]
},
"surface_condition": {
"type": "string",
"description": "Surface condition"
},
"requested_system": {
"type": "string",
"description": "Requested coating system",
"enum": [
"full_flake",
"metallic",
"solid_color",
"commercial_system",
"urethane_cement",
"unsure"
]
},
"project_timeline": {
"type": "string",
"description": "Project timeline"
},
"preferred_contact_method": {
"type": "string",
"description": "Preferred contact method",
"enum": [
"phone",
"text",
"email"
]
},
"customer_notes": {
"type": "string",
"description": "Customer notes"
},
"consent_to_contact": {
"type": "boolean",
"description": "Consent to be contacted"
},
"timezone": {
"type": "string",
"description": "Timezone (IANA)"
}
},
"additionalProperties": false
},
"scheduling_preferences": {
"type": "object",
"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.",
"properties": {
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"type": "string",
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
]
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
]
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
}
},
"additionalProperties": false
},
"customer_statement": {
"type": "string",
"description": "The customer's own words for this step, stored verbatim as the evidence trail."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token",
"updates"
],
"additionalProperties": false
}🟢get_estimate_request_status(request_id, customer_access_token)
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.
入力スキーマ
{
"type": "object",
"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."
}
},
"required": [
"request_id",
"customer_access_token"
],
"additionalProperties": false
}🟡submit_estimate_for_review(request_id, customer_access_token, customer_statement, idempotency_key)
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.
入力スキーマ
{
"type": "object",
"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."
},
"customer_statement": {
"type": "string",
"description": "The customer's own words for this step, stored verbatim as the evidence trail."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token"
],
"additionalProperties": false
}⚪request_estimate_appointment(request_id, customer_access_token, scheduling_preferences, timezone, customer_authorized_scheduling, ...)
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.
入力スキーマ
{
"type": "object",
"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."
},
"scheduling_preferences": {
"type": "object",
"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.",
"properties": {
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"type": "string",
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
]
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
]
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
}
},
"additionalProperties": false
},
"timezone": {
"type": "string",
"description": "IANA timezone for all appointment dates and times, e.g. America/Chicago. Defaults to America/Chicago."
},
"customer_authorized_scheduling": {
"type": "boolean",
"description": "Must be true. Confirms the customer explicitly asked for an appointment to be scheduled."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token",
"customer_authorized_scheduling"
],
"additionalProperties": false
}⚪confirm_estimate_appointment(request_id, customer_access_token, proposal_id, customer_confirmation, idempotency_key)
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.
入力スキーマ
{
"type": "object",
"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."
},
"proposal_id": {
"type": "string",
"description": "The proposal_id returned with the proposed appointment."
},
"customer_confirmation": {
"type": "boolean",
"description": "Must be true. The customer accepted the proposed time."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token",
"proposal_id",
"customer_confirmation"
],
"additionalProperties": false
}⚪request_appointment_reschedule(request_id, customer_access_token, new_scheduling_preferences, timezone, reason, ...)
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.
入力スキーマ
{
"type": "object",
"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."
},
"new_scheduling_preferences": {
"type": "object",
"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.",
"properties": {
"preferred_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
},
"description": "Specific acceptable dates."
},
"earliest_date": {
"type": "string",
"description": "Earliest acceptable date (YYYY-MM-DD)."
},
"latest_date": {
"type": "string",
"description": "Latest acceptable date (YYYY-MM-DD)."
},
"preferred_weekdays": {
"type": "array",
"items": {
"type": "string",
"enum": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday"
]
}
},
"preferred_dayparts": {
"type": "array",
"items": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
]
}
},
"preferred_start_time": {
"type": "string",
"description": "Earliest local start time (HH:MM, 24h)."
},
"preferred_end_time": {
"type": "string",
"description": "Latest local end time (HH:MM, 24h)."
},
"unavailable_dates": {
"type": "array",
"items": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"notes": {
"type": "string",
"description": "Access notes, gate codes to expect, pets, parking — anything the estimator should know."
}
},
"additionalProperties": false
},
"timezone": {
"type": "string",
"description": "IANA timezone for all appointment dates and times, e.g. America/Chicago. Defaults to America/Chicago."
},
"reason": {
"type": "string",
"description": "Why the customer needs a different time."
},
"customer_authorized_reschedule": {
"type": "boolean",
"description": "Must be true. The customer asked to reschedule."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token",
"customer_authorized_reschedule"
],
"additionalProperties": false
}🔴cancel_estimate_appointment(request_id, customer_access_token, reason, customer_authorized_cancellation, idempotency_key)
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.
入力スキーマ
{
"type": "object",
"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."
},
"reason": {
"type": "string",
"description": "Why the customer is cancelling."
},
"customer_authorized_cancellation": {
"type": "boolean",
"description": "Must be true. The customer asked to cancel."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token",
"customer_authorized_cancellation"
],
"additionalProperties": false
}🟢get_next_estimate_question(request_id, customer_access_token)
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.
入力スキーマ
{
"type": "object",
"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."
}
},
"required": [
"request_id",
"customer_access_token"
],
"additionalProperties": false
}⚪attach_estimate_photos(request_id, customer_access_token, photos, fields, idempotency_key)
Attaches photo references (public https URLs) to an estimate request. Photos support the estimator's preparation; they never replace the on-site inspection.
入力スキーマ
{
"type": "object",
"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."
},
"photos": {
"type": "array",
"maxItems": 12,
"description": "Photo references to attach.",
"items": {
"type": "object",
"properties": {
"file_reference": {
"type": "string",
"description": "A public https image URL."
},
"note": {
"type": "string",
"description": "What the customer said about this photo."
}
},
"required": [
"file_reference"
]
}
},
"fields": {
"type": "object",
"description": "Legacy internal-schema field bag. Prefer the top-level public fields; unknown keys are rejected. Never include pricing.",
"properties": {
"customer_name": {
"type": "string",
"description": "Name"
},
"email": {
"type": "string",
"description": "Email"
},
"phone": {
"type": "string",
"description": "Phone"
},
"preferred_contact_method": {
"type": "string",
"description": "Preferred contact method",
"enum": [
"phone",
"text",
"email"
]
},
"service_address": {
"type": "string",
"description": "Service address"
},
"city": {
"type": "string",
"description": "City"
},
"state": {
"type": "string",
"description": "State"
},
"postal_code": {
"type": "string",
"description": "ZIP code"
},
"residential_or_commercial": {
"type": "string",
"description": "Residential or commercial",
"enum": [
"residential",
"commercial"
]
},
"project_type": {
"type": "string",
"description": "Project type",
"enum": [
"garage_floor",
"patio",
"driveway",
"basement",
"commercial_floor",
"warehouse",
"shop_floor",
"pool_deck",
"walkway",
"other"
]
},
"project_subtype": {
"type": "string",
"description": "Project detail"
},
"approximate_square_feet": {
"type": "number",
"description": "Approximate square feet"
},
"length": {
"type": "number",
"description": "Length (ft)"
},
"width": {
"type": "number",
"description": "Width (ft)"
},
"number_of_areas": {
"type": "integer",
"description": "Number of areas"
},
"current_surface": {
"type": "string",
"description": "Current surface",
"enum": [
"bare_concrete",
"painted_concrete",
"coated_concrete",
"tile",
"carpet",
"other",
"unknown"
]
},
"existing_coating": {
"type": "boolean",
"description": "Existing coating present"
},
"existing_coating_type": {
"type": "string",
"description": "Existing coating type"
},
"coating_removal_required": {
"type": "boolean",
"description": "Removal likely required"
},
"oil_or_grease_staining": {
"type": "boolean",
"description": "Oil or grease staining"
},
"cracks_present": {
"type": "boolean",
"description": "Cracks present"
},
"crack_description": {
"type": "string",
"description": "Crack description"
},
"spalling_present": {
"type": "boolean",
"description": "Spalling or pitting"
},
"moisture_concern": {
"type": "boolean",
"description": "Moisture concern"
},
"tile_or_adhesive_present": {
"type": "boolean",
"description": "Tile or adhesive present"
},
"concrete_age": {
"type": "string",
"description": "Concrete age"
},
"access_conditions": {
"type": "string",
"description": "Access conditions"
},
"occupied_or_empty": {
"type": "string",
"description": "Occupied or empty",
"enum": [
"empty",
"partially_occupied",
"fully_occupied"
]
},
"customer_goal": {
"type": "string",
"description": "Customer goal"
},
"preferred_finish": {
"type": "string",
"description": "Preferred finish"
},
"desired_color_or_flake": {
"type": "string",
"description": "Desired color or flake"
},
"desired_timeline": {
"type": "string",
"description": "Desired timeline"
},
"budget_range_optional": {
"type": "string",
"description": "Budget range (optional)"
},
"customer_notes": {
"type": "string",
"description": "Notes"
}
},
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token",
"photos"
],
"additionalProperties": false
}🟢analyze_estimate_photos(request_id, customer_access_token, idempotency_key)
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.
入力スキーマ
{
"type": "object",
"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."
},
"idempotency_key": {
"type": "string",
"description": "Optional client-supplied key. Repeating a call with the same key never duplicates work."
}
},
"required": [
"request_id",
"customer_access_token"
],
"additionalProperties": false
}コミュニティ
エビデンス