Server definition
- Hash
- sha256:340d0d902c7299aa22e5c141c64d352c6b486c7e32bc0378fff89ee4966abaf4
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "SecondAppraisal helps vehicle owners whose insurer declared their car a total loss get a fair settlement.\nUse `submit_total_loss_intake` when a user wants help with a total-loss offer: send at least a phone or email, plus whatever vehicle / loss / offer details you have. Read `customer_message` back to the user verbatim — it carries the confirm link and tells them we will call to confirm.\nContact policy, stated to the customer: \"We will attempt to call you to confirm that you want our free appraisal consultation and to confirm this request came from you or your representative/agent.\"\nUse `get_preliminary_estimate` for a no-commitment market read before submitting, and `get_state_total_loss_rules` to answer state-specific questions (thresholds, appraisal-clause rights, hotlines).",
"tools": [
{
"description": "Fetch the current receipt for a submitted intake (status, confirm link while still confirmable, preliminary).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"intake_id": {
"description": "The `intake_id` from a previous submission.",
"minLength": 1,
"type": "string"
},
"poll_token": {
"description": "The `poll_token` returned once on that submission.",
"minLength": 1,
"type": "string"
}
},
"required": [
"intake_id",
"poll_token"
],
"type": "object"
},
"name": "get_intake_status",
"outputSchema": null
},
{
"description": "A no-commitment early market read for a vehicle: comparable listing prices near the customer (10th percentile / median / 90th), an odometer-adjusted mid, and the gap vs the insurer's offer. Not an appraisal. Nothing is stored about the customer.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"acv_offer_cents": {
"description": "Insurer's offer in cents, to report the gap.",
"minimum": 0,
"type": "integer"
},
"make": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"model": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"odometer": {
"maximum": 2000000,
"minimum": 0,
"type": "integer"
},
"state": {
"description": "Two-letter state; used when no zip is given.",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"trim": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"year": {
"maximum": 2100,
"minimum": 1900,
"type": "integer"
},
"zip": {
"description": "Preferred; searches comparables near here.",
"pattern": "^\\d{5}(-\\d{4})?$",
"type": "string"
}
},
"required": [
"year",
"make",
"model"
],
"type": "object"
},
"name": "get_preliminary_estimate",
"outputSchema": null
},
{
"description": "State-specific total-loss facts: threshold and method, whether an independent appraiser must be licensed there, whether third-party appraisals are allowed, statute citations, must-know rights, common pitfalls, and the consumer hotline.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"state": {
"description": "Two-letter code (TX) or state name (Texas).",
"maxLength": 40,
"minLength": 2,
"type": "string"
}
},
"required": [
"state"
],
"type": "object"
},
"name": "get_state_total_loss_rules",
"outputSchema": null
},
{
"description": "Submit a vehicle owner's total-loss situation to SecondAppraisal on their behalf. Minimum: one of customer.phone / customer.email, your `agent` self-identification, and a `consent.attestation`. Returns a receipt with `customer_confirmation_url` (one tap confirms), a relayable `customer_message`, an optional `preliminary` market read, `contact_policy` (we will email/text a welcome and a person will call to confirm the request came from the customer or their agent), and `pricing` — the consultation is free; if the owner wants more, Appraisal Research is $199 (paid up front, no guarantee) or Appraisal Research + Negotiation is $495 with a $25 discount for customers you send ($470; a card HOLD captured only after the settlement improves by $1,000+, otherwise nothing is charged). The $25 applies to representation only. You may quote `pricing` verbatim; payment always happens on our site by the customer's own click (`checkout` links appear once they have confirmed) — never collect card details. Read `customer_message` to the user verbatim.",
"inputSchema": {
"additionalProperties": false,
"description": "Submit a vehicle owner's total-loss situation on their behalf.",
"properties": {
"agent": {
"additionalProperties": false,
"description": "Who is calling. Required — an intake without self-identification is refused.",
"properties": {
"name": {
"allOf": [
{
"maxLength": 120,
"type": "string"
},
{
"maxLength": 120,
"minLength": 1,
"type": "string"
}
],
"description": "Human-readable name of the agent or product submitting on the customer's behalf (e.g. \"OpenClaw\", \"Acme Claims Copilot\"). Shown to the customer."
},
"operator_url": {
"description": "Homepage or documentation URL of the agent operator.",
"format": "uri",
"maxLength": 300,
"type": "string"
},
"platform": {
"description": "Platform slug for attribution. Known values: openclaw, chatgpt, claude, gemini, copilot, perplexity, custom. Any lowercase slug is accepted.",
"pattern": "^[a-z0-9][a-z0-9-]{0,59}$",
"type": "string"
},
"version": {
"description": "Agent / integration version string.",
"maxLength": 60,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"platform"
],
"type": "object"
},
"consent": {
"additionalProperties": false,
"description": "Consent basis. Attestation wording version 2026-09-16.1.",
"properties": {
"attestation": {
"description": "The agent's attestation, in its own words, that the customer asked for this submission and knows SecondAppraisal will email/text and call to confirm. Stored verbatim on the intake.",
"maxLength": 1000,
"minLength": 20,
"type": "string"
},
"attestor_name": {
"allOf": [
{
"maxLength": 120,
"type": "string"
},
{
"maxLength": 120,
"minLength": 1,
"type": "string"
}
],
"description": "Who is attesting (the agent, or the person operating it)."
},
"mode": {
"default": "customer_directed",
"description": "customer_directed: the customer asked their agent to submit this. warm_handoff: a registered agent attests the customer asked to be contacted now (priority callback; requires an API key).",
"enum": [
"customer_directed",
"warm_handoff"
],
"type": "string"
},
"notify_customer": {
"default": true,
"description": "true (default): we send the customer our welcome email/text with the confirm link. false: you relay `customer_message` and `customer_confirmation_url` yourself and we send nothing until they confirm or we call.",
"type": "boolean"
}
},
"required": [
"attestation"
],
"type": "object"
},
"customer": {
"additionalProperties": false,
"description": "The vehicle owner. At least one of email / phone is required; everything else is optional.",
"properties": {
"email": {
"description": "Customer email address.",
"format": "email",
"maxLength": 254,
"type": "string"
},
"first_name": {
"allOf": [
{
"maxLength": 80,
"type": "string"
},
{
"maxLength": 80,
"minLength": 1,
"type": "string"
}
]
},
"last_name": {
"allOf": [
{
"maxLength": 80,
"type": "string"
},
{
"maxLength": 80,
"minLength": 1,
"type": "string"
}
]
},
"phone": {
"allOf": [
{
"type": "string"
},
{
"pattern": "^[2-9]\\d{9}$",
"type": "string"
}
],
"description": "US mobile or landline number. Punctuation and a leading +1 are tolerated."
}
},
"type": "object"
},
"external_ref": {
"description": "Your reference id; echoed in every response.",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"idempotency_key": {
"description": "Any unique string per logical submission; a replay returns the original receipt.",
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"loss": {
"additionalProperties": false,
"description": "When and where the loss happened.",
"properties": {
"date_of_loss": {
"description": "Calendar date, YYYY-MM-DD.",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"insurance_path": {
"description": "Whose insurance is handling it: own (customer's carrier), at-fault (the other driver's carrier), unknown, or none (no insurance claim — valuation only).",
"enum": [
"own",
"at-fault",
"unknown",
"none"
],
"type": "string"
},
"loss_state": {
"description": "State where the loss occurred / the policy is written.",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"zip": {
"description": "US ZIP code (5 or 5+4). Used to search comparable vehicles near the customer.",
"pattern": "^\\d{5}(-\\d{4})?$",
"type": "string"
}
},
"type": "object"
},
"offer": {
"additionalProperties": false,
"description": "The insurer's position so far, if any.",
"properties": {
"acv_offer": {
"description": "Insurer's Actual Cash Value offer in dollars. Converted to cents server-side.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"acv_offer_cents": {
"description": "Insurer's Actual Cash Value offer in cents. `acv_offer` (dollars) is also accepted.",
"maximum": 100000000,
"minimum": 0,
"type": "integer"
},
"claim_number": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"insurer": {
"allOf": [
{
"maxLength": 120,
"type": "string"
},
{
"maxLength": 120,
"minLength": 1,
"type": "string"
}
],
"description": "Insurance company handling the total loss."
}
},
"type": "object"
},
"vehicle": {
"additionalProperties": false,
"description": "The vehicle. A VIN (or plate + plate_state) is best; year/make/model works too.",
"properties": {
"make": {
"allOf": [
{
"maxLength": 60,
"type": "string"
},
{
"maxLength": 60,
"minLength": 1,
"type": "string"
}
]
},
"model": {
"allOf": [
{
"maxLength": 80,
"type": "string"
},
{
"maxLength": 80,
"minLength": 1,
"type": "string"
}
]
},
"odometer": {
"description": "Odometer reading in miles at the time of loss.",
"maximum": 2000000,
"minimum": 0,
"type": "integer"
},
"plate": {
"description": "License plate. Requires plate_state to resolve a VIN.",
"maxLength": 12,
"minLength": 1,
"type": "string"
},
"plate_state": {
"description": "Two-letter US state code, e.g. TX.",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"trim": {
"allOf": [
{
"maxLength": 80,
"type": "string"
},
{
"maxLength": 80,
"minLength": 1,
"type": "string"
}
]
},
"vin": {
"allOf": [
{
"type": "string"
},
{
"maxLength": 17,
"minLength": 11,
"type": "string"
}
],
"description": "Vehicle Identification Number. A full 17-character VIN lets us decode year/make/model/trim."
},
"year": {
"maximum": 2100,
"minimum": 1900,
"type": "integer"
}
},
"type": "object"
}
},
"required": [
"agent",
"customer",
"consent"
],
"type": "object"
},
"name": "submit_total_loss_intake",
"outputSchema": null
},
{
"description": "Attach the insurer's Market Valuation Report (CCC / Mitchell PDF) to a submitted intake. We parse it (vehicle, mileage, offer, insurer, loss date) and refresh the preliminary. Allow up to two minutes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"file_base64": {
"description": "The PDF bytes, base64-encoded (standard or URL-safe alphabet). Up to 15 MB decoded.",
"minLength": 1,
"type": "string"
},
"file_name": {
"description": "Original file name, e.g. valuation-report.pdf.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"intake_id": {
"description": "The `intake_id` from a previous submission.",
"minLength": 1,
"type": "string"
},
"poll_token": {
"description": "The `poll_token` returned once on that submission.",
"minLength": 1,
"type": "string"
}
},
"required": [
"intake_id",
"poll_token",
"file_name",
"file_base64"
],
"type": "object"
},
"name": "upload_valuation_report",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:340d0d902c7299aa22e5c141c64d352c6b486c7e32bc0378fff89ee4966abaf4 | sha256sum