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.
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
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)· required — Full 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": []
}
}
}Returns the signed-in broker's submissions newest first, optionally filtered by pipeline status or state.
Inputs
status"Draft" | "Submitted" | "Bound"· optional — Only return submissions in this pipeline stage.statestring (2 chars)· optional — Two-letter US state code, e.g. OK.limitinteger 1–100 (default 25)· optional — Maximum 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
}
]
}
}Creates a new Draft submission for the signed-in broker from an address and optional client, carrier and effective date.
Inputs
addressstring (min 5)· required — Street address of the insured property.clientNamestring· optional — Named insured / prospect company.citystring· optional — City.statestring (2 chars)· optional — Two-letter US state code.postalCodestring· optional — ZIP code.carrierstring· optional — Target carrier or market.effectiveDatestring YYYY-MM-DD· optional — Desired policy effective date.premiumEstimatenumber ≥ 0· optional — Target 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"
}
}
}Changes an existing submission's stage to Draft, Submitted or Bound. Only the broker's own submissions can be updated.
Inputs
submissionIduuid· required — The submission id returned by list_submissions.status"Draft" | "Submitted" | "Bound"· required — New 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"
}
}
}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· required — The submission id returned by list_submissions.includeHistoryboolean (default true)· optional — Include the status-history timeline.historyLimitinteger 1–200 (default 25)· optional — Status-history page size.historyOffsetinteger ≥ 0 (default 0)· optional — Status-history entries to skip.historyOrder"asc" | "desc" (default desc)· optional — Oldest-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."
}
}
}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"· optional — Only export submissions in this pipeline stage.statestring (2 chars)· optional — Only export submissions in this state.limitinteger 1–500 (default 200)· optional — Page size.offsetinteger ≥ 0 (default 0)· optional — Submissions to skip before the page starts.sortBy"updated_at" | "created_at" | "premium_estimate" | "client_name" | "status" | "state"· optional — Sort field (default updated_at).sortOrder"asc" | "desc" (default desc)· optional — Sort direction.formatsarray of "csv" | "pdf" (default both)· optional — Which files to produce.asyncboolean (default false)· optional — Queue as a job and return a job_id instead of inline files.idempotencyKeystring 8–128 chars· optional — Retry-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…"
}
]
}
}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· required — The job_id returned by export_submissions.includeFilesboolean (default true)· optional — Include 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
}
]
}
}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"· required — Endpoint operation, or deliveries/retry/replay for the delivery queue.iduuid· optional — Endpoint id — required for update, delete and test.urlhttps URL· optional — Endpoint to call. Required for create.eventsarray of "export.completed" | "export.failed" | "audit.completed"· optional — Events the endpoint receives.descriptionstring· optional — Label for the endpoint.activeboolean· optional — Pause or resume delivery.deliveryStatus"pending" | "delivered" | "dead_letter"· optional — Filter the delivery queue (action=deliveries).limitinteger 1–100 (default 25)· optional — Max 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>"
}
}Returns licensing notes, surplus-lines and wind/hail disclosures, and packet requirements for a US state.
Inputs
statestring (2 chars)· required — Two-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.
