MCP tools reference

PolicyFast AI exposes an MCP server so assistants like Claude, ChatGPT, Cursor and Lovable can run address audits and manage underwriting packets on a broker's behalf. Each assistant signs in as the broker over OAuth 2.1 and only gets the tools approved on the consent screen.

Connecting

Endpoint: https://policyfastai.com/mcp (Streamable HTTP)

Auth: OAuth 2.1 with dynamic client registration. Unauthenticated calls return 401 with a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource.

Scopes: the broker ticks which tools an assistant may use during consent. A call to a tool that was not granted returns an error result naming the granted tools instead of running.

{
  "mcpServers": {
    "policyfast-ai": { "url": "https://policyfastai.com/mcp" }
  }
}

Tools

audit_address
read
requires sign-in

Scores a commercial property address: construction, occupancy, protection and exposure signals, estimated TIV and premium, plus address-validation issues that would block a packet.

Inputs

  • addressstring (min 5)· requiredFull street address of the commercial property.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "audit_address",
    "arguments": {
      "address": "1200 N Robinson Ave, Oklahoma City, OK 73103"
    }
  }
}

Example response

{
  "structuredContent": {
    "intel": {
      "construction": "Joisted Masonry",
      "occupancy": "Office",
      "yearBuilt": 1998,
      "squareFeet": 42000,
      "tivEstimate": 8400000,
      "premiumEstimate": 31500
    },
    "validation": {
      "ok": true,
      "issues": []
    }
  }
}
list_submissions
read
requires sign-in

Returns the signed-in broker's submissions newest first, optionally filtered by pipeline status or state.

Inputs

  • status"Draft" | "Submitted" | "Bound"· optionalOnly return submissions in this pipeline stage.
  • statestring (2 chars)· optionalTwo-letter US state code, e.g. OK.
  • limitinteger 1–100 (default 25)· optionalMaximum submissions to return.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "list_submissions",
    "arguments": {
      "status": "Draft",
      "state": "OK",
      "limit": 10
    }
  }
}

Example response

{
  "structuredContent": {
    "count": 1,
    "submissions": [
      {
        "id": "6f0a1f2e-6f2c-4d0a-9a30-1f4a2f0b7c11",
        "address": "1200 N Robinson Ave",
        "client_name": "Redbud Logistics",
        "carrier": "Chubb",
        "status": "Draft",
        "state": "OK",
        "premium_estimate": 31500
      }
    ]
  }
}
create_submission
write
requires sign-in

Creates a new Draft submission for the signed-in broker from an address and optional client, carrier and effective date.

Inputs

  • addressstring (min 5)· requiredStreet address of the insured property.
  • clientNamestring· optionalNamed insured / prospect company.
  • citystring· optionalCity.
  • statestring (2 chars)· optionalTwo-letter US state code.
  • postalCodestring· optionalZIP code.
  • carrierstring· optionalTarget carrier or market.
  • effectiveDatestring YYYY-MM-DD· optionalDesired policy effective date.
  • premiumEstimatenumber ≥ 0· optionalTarget or modelled annual premium in USD.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "create_submission",
    "arguments": {
      "address": "1200 N Robinson Ave",
      "clientName": "Redbud Logistics",
      "city": "Oklahoma City",
      "state": "OK",
      "postalCode": "73103",
      "carrier": "Chubb",
      "effectiveDate": "2026-10-01"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "Created Draft submission for 1200 N Robinson Ave (id 6f0a1f2e-…)."
    }
  ],
  "structuredContent": {
    "submission": {
      "id": "6f0a1f2e-…",
      "status": "Draft"
    }
  }
}
update_submission_status
write
requires sign-in

Changes an existing submission's stage to Draft, Submitted or Bound. Only the broker's own submissions can be updated.

Inputs

  • submissionIduuid· requiredThe submission id returned by list_submissions.
  • status"Draft" | "Submitted" | "Bound"· requiredNew pipeline stage.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "update_submission_status",
    "arguments": {
      "submissionId": "6f0a1f2e-…",
      "status": "Submitted"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "1200 N Robinson Ave is now Submitted."
    }
  ],
  "structuredContent": {
    "submission": {
      "id": "6f0a1f2e-…",
      "status": "Submitted"
    }
  }
}
get_submission
read
requires sign-in

Returns a single submission with its packet template id/version, the full underwriter status history (Draft → Submitted → Bound with timestamps) and the state compliance pack applied to its packet.

Inputs

  • submissionIduuid· requiredThe submission id returned by list_submissions.
  • includeHistoryboolean (default true)· optionalInclude the status-history timeline.
  • historyLimitinteger 1–200 (default 25)· optionalStatus-history page size.
  • historyOffsetinteger ≥ 0 (default 0)· optionalStatus-history entries to skip.
  • historyOrder"asc" | "desc" (default desc)· optionalOldest-first or newest-first history.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "get_submission",
    "arguments": {
      "submissionId": "6f0a1f2e-6f2c-4d0a-9a30-1f4a2f0b7c11"
    }
  }
}

Example response

{
  "structuredContent": {
    "submission": {
      "id": "6f0a1f2e-…",
      "address": "1200 N Robinson Ave",
      "status": "Submitted",
      "state": "OK"
    },
    "template": {
      "id": "standard-2016",
      "label": "ACORD Standard",
      "version": "v2016.3",
      "formats": [
        "pdf",
        "docx",
        "csv"
      ]
    },
    "statusHistory": [
      {
        "from_status": "Draft",
        "to_status": "Submitted",
        "created_at": "2026-08-21T09:41:03Z"
      },
      {
        "from_status": null,
        "to_status": "Draft",
        "created_at": "2026-08-19T14:02:11Z"
      }
    ],
    "historyPage": {
      "limit": 25,
      "offset": 0,
      "order": "desc",
      "total": 2,
      "hasMore": false
    },
    "compliance": {
      "surplusLinesTax": "6% surplus lines tax plus stamping fee."
    }
  }
}
export_submissions
read
requires sign-in

Bundles the broker's dashboard submissions into a CSV file and a printable PDF summary. Supports filtering, sorting and pagination for exporting a specific subset, plus an async mode that returns a job_id to poll with get_export_job.

Inputs

  • status"Draft" | "Submitted" | "Bound"· optionalOnly export submissions in this pipeline stage.
  • statestring (2 chars)· optionalOnly export submissions in this state.
  • limitinteger 1–500 (default 200)· optionalPage size.
  • offsetinteger ≥ 0 (default 0)· optionalSubmissions to skip before the page starts.
  • sortBy"updated_at" | "created_at" | "premium_estimate" | "client_name" | "status" | "state"· optionalSort field (default updated_at).
  • sortOrder"asc" | "desc" (default desc)· optionalSort direction.
  • formatsarray of "csv" | "pdf" (default both)· optionalWhich files to produce.
  • asyncboolean (default false)· optionalQueue as a job and return a job_id instead of inline files.
  • idempotencyKeystring 8–128 chars· optionalRetry-safe key: repeating the same key returns the original job instead of creating a duplicate.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "export_submissions",
    "arguments": {
      "state": "OK",
      "limit": 50,
      "offset": 50,
      "sortBy": "premium_estimate",
      "sortOrder": "desc",
      "formats": [
        "csv",
        "pdf"
      ]
    }
  }
}

Example response

{
  "structuredContent": {
    "count": 50,
    "total": 214,
    "offset": 50,
    "hasMore": true,
    "files": [
      {
        "filename": "policyfast-submissions-2026-08-21.csv",
        "mimeType": "text/csv",
        "base64": "QWRkcmVzcy…"
      },
      {
        "filename": "policyfast-submissions-2026-08-21.pdf",
        "mimeType": "application/pdf",
        "base64": "JVBERi0xLjQ…"
      }
    ]
  }
}
get_export_job
read
requires sign-in

Polls an async export started with export_submissions(async=true). Returns the job status and, once completed, the base64 CSV/PDF payloads (or just a file manifest with includeFiles=false).

Inputs

  • jobIduuid· requiredThe job_id returned by export_submissions.
  • includeFilesboolean (default true)· optionalInclude base64 payloads, or manifest only.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "get_export_job",
    "arguments": {
      "jobId": "9a1c7e40-…",
      "includeFiles": false
    }
  }
}

Example response

{
  "structuredContent": {
    "jobId": "9a1c7e40-…",
    "status": "completed",
    "count": 214,
    "completedAt": "2026-08-21T09:44:10Z",
    "files": [
      {
        "filename": "policyfast-submissions-2026-08-21.csv",
        "mimeType": "text/csv",
        "bytes": 48210
      }
    ]
  }
}
manage_webhooks
write
requires sign-in

Registers, lists, updates, deletes or tests HTTPS endpoints that PolicyFast AI calls on export.completed, export.failed and audit.completed, and inspects the delivery queue. Every POST carries X-PolicyFast-Signature: sha256=<HMAC-SHA256 of the raw body> plus X-PolicyFast-Delivery and X-PolicyFast-Attempt. Failed deliveries retry with exponential backoff (30s, 2m, 8m, 32m, 2h, 6h) for up to 6 attempts, then move to the dead-letter queue where they can be replayed.

Inputs

  • action"list" | "create" | "update" | "delete" | "test" | "deliveries" | "retry" | "replay"· requiredEndpoint operation, or deliveries/retry/replay for the delivery queue.
  • iduuid· optionalEndpoint id — required for update, delete and test.
  • urlhttps URL· optionalEndpoint to call. Required for create.
  • eventsarray of "export.completed" | "export.failed" | "audit.completed"· optionalEvents the endpoint receives.
  • descriptionstring· optionalLabel for the endpoint.
  • activeboolean· optionalPause or resume delivery.
  • deliveryStatus"pending" | "delivered" | "dead_letter"· optionalFilter the delivery queue (action=deliveries).
  • limitinteger 1–100 (default 25)· optionalMax delivery records to list or retry.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "manage_webhooks",
    "arguments": {
      "action": "create",
      "url": "https://hooks.example.com/policyfast",
      "events": [
        "export.completed",
        "audit.completed"
      ]
    }
  }
}

Example response

{
  "structuredContent": {
    "webhook": {
      "id": "3b7f…",
      "url": "https://hooks.example.com/policyfast",
      "events": [
        "export.completed",
        "audit.completed"
      ],
      "active": true
    },
    "signatureHeader": "X-PolicyFast-Signature: sha256=<hmac of raw body>"
  }
}
get_state_compliance
read
requires sign-in

Returns licensing notes, surplus-lines and wind/hail disclosures, and packet requirements for a US state.

Inputs

  • statestring (2 chars)· requiredTwo-letter US state code, e.g. OK.

Example request

{
  "method": "tools/call",
  "params": {
    "name": "get_state_compliance",
    "arguments": {
      "state": "OK"
    }
  }
}

Example response

{
  "structuredContent": {
    "state": "OK",
    "compliance": {
      "licensing": "Resident or non-resident P&C producer license required.",
      "surplusLinesTax": "6% surplus lines tax plus stamping fee.",
      "packetRequirements": [
        "Wind/hail deductible disclosure",
        "Signed fraud warning"
      ]
    }
  }
}

Need the product view instead? Back to PolicyFast AI.