Koskamo

CarrierScore MCP

An MCP server providing FMCSA motor-carrier risk intelligence, including longitudinal risk scores, continuous monitoring, and timestamped carrier-selection evidence reports based on public safety data.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

CarrierScore MCP logo, by SYMBOLIQ LLCVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by SYMBOLIQ LLC
You need:Auth: `X-API-Key` header (paid tiers)
MCP endpoint (Streamable HTTP)
https://mcp.carrierscore.io/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

8 of 8 have a description · 8 of 8 declare behavior hints · 8 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to carrierscore.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Perform carrier identity lookups by USDOT number
  • Retrieve risk scores with component breakdowns
  • Generate timestamped carrier-selection evidence reports
  • Monitor batches of carriers for risk changes

Source and maintenance

Vendor evidenceRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
carrierscore-mcp-server 0.4.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

8 advertised

carrier_lookup — Look Up Carrier Identity
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Look up an FMCSA-registered motor carrier's identity by US DOT number: legal name, DBA, operating status, FMCSA safety rating, fleet size (power units, drivers), physical address, and registration dates. Use this first when a booking/dispatch agent needs to confirm WHO a carrier is — that a DOT number is real, active, and matches the company name on a rate confirmation. It does not return risk indices (use carrier_score for those). Returns JSON: { dot_number, legal_name, dba_name, status_code, safety_rating, power_units, total_drivers, phy_street, phy_city, phy_state, phy_zip, add_date, mcs150_date }. Errors: 404 if the DOT is not in the FMCSA census (likely a typo or a fraudulent/never-registered carrier — treat as a red flag for booking).

carrier_lookup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "dot_number"
  ],
  "properties": {
    "dot_number": {
      "type": "string",
      "pattern": "^\\d{1,8}$",
      "description": "US DOT number of the carrier, digits only (e.g. \"1234567\")"
    }
  },
  "additionalProperties": false
}
carrier_lookup output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "dot_number"
  ],
  "properties": {
    "phy_zip": {
      "$ref": "#/properties/phy_street"
    },
    "add_date": {
      "$ref": "#/properties/legal_name",
      "description": "Date added to the FMCSA census (YYYY-MM-DD)"
    },
    "dba_name": {
      "$ref": "#/properties/legal_name",
      "description": "Doing-business-as name, if any"
    },
    "phy_city": {
      "$ref": "#/properties/phy_street"
    },
    "phy_state": {
      "$ref": "#/properties/phy_street"
    },
    "dot_number": {
      "type": "string",
      "description": "US DOT number"
    },
    "legal_name": {
      "type": [
        "string",
        "null"
      ],
      "description": "Registered legal name"
    },
    "phy_street": {
      "$ref": "#/properties/legal_name"
    },
    "mcs150_date": {
      "$ref": "#/properties/legal_name",
      "description": "Latest MCS-150 filing date (YYYY-MM-DD)"
    },
    "power_units": {
      "type": [
        "number",
        "null"
      ],
      "description": "Fleet size: number of power units"
    },
    "status_code": {
      "$ref": "#/properties/legal_name",
      "description": "FMCSA operating status code (e.g. \"A\" = active)"
    },
    "safety_rating": {
      "$ref": "#/properties/legal_name",
      "description": "FMCSA safety rating code (e.g. \"S\" = satisfactory)"
    },
    "total_drivers": {
      "$ref": "#/properties/power_units",
      "description": "Total drivers reported"
    }
  },
  "additionalProperties": false
}
carrier_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
carrier_score — Get Carrier Risk Indices
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the CarrierScore risk indices for a carrier by US DOT number: two first-class, separately validated indices (0-100, HIGHER = RISKIER), each with a full component breakdown. This is the core "is this carrier safe to book?" signal for AI booking agents. Served methodology v0.5 returns TWO indices, both population-relative and built from point-in-time public FMCSA data: - inspection_risk — inspection / compliance risk: violations and out-of-service rates per roadside inspection (24-month chronic, 6-month acute). Historically validated against the carrier's future out-of-service rate (validation block on the index). - crash_risk — crash risk: reportable crashes, fatal/injury crashes and tow-away crashes per roadside inspection (24 months). Historically validated against future reportable crashes (validation block on the index). Present BOTH indices; do not collapse them into one number. Hard flags (active out-of-service order, no active insurance filing, high-confidence reincarnated-carrier link) add explicit surcharges — a carrier with any flag deserves extra scrutiny regardless of index values. Returns JSON: { dot_number, legal_name, inspection_risk: { label, description, score, base, surcharge, percentile_basis, band, band_note, data_sufficiency, components: { <name>: { label, value, percentile, weight } }, validation: { auc_holdout, label, holdout_origins, post_selection_origin, source, text } }, crash_risk: { ...same shape... }, legacy_composite: { score, base_score, surcharge, rule, rule_text, validated: false, note }, carrier_score (backward-compatible: == legacy_composite.score under v0.5), base_score, surcharge, score_version ("0.5"), methodology_note, components (flat, backward-compatible), flags: string[], data_sufficiency (0-1, share of the components resting on observed vs neutral-imputed data), scored_as_of, disclaimer }. Older opt-in methodologies keep their shapes: v0 (six components), v0.3 (sub_indices), v0.4 (indices + composite). Interpreting for booking decisions: treat the indices as documented decision-support evidence, not an approve/deny verdict. legacy_composite / carrier_score is NOT validated and is kept only so older integrations keep working — never present it as the carrier's risk score. Low data_sufficiency means limited inspection history — common for new carriers, itself a risk signal. Always relay each index's validation text and the disclaimer when presenting the result. Errors: 404 if the DOT is not in the scored population; 503 if scores have not been computed yet.

carrier_score input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "dot_number"
  ],
  "properties": {
    "dot_number": {
      "type": "string",
      "pattern": "^\\d{1,8}$",
      "description": "US DOT number of the carrier, digits only (e.g. \"1234567\")"
    }
  },
  "additionalProperties": false
}
carrier_score output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "dot_number",
    "components",
    "flags"
  ],
  "properties": {
    "flags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Hard flags (OOS order, no insurance, reincarnation link)"
    },
    "indices": {
      "type": "object",
      "description": "v0.4 only: inspection_risk / crash_risk first-class indices (0-100), each with components, percentile basis and band",
      "additionalProperties": {
        "$ref": "#/properties/inspection_risk"
      }
    },
    "composite": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        },
        "rule_text": {
          "type": "string"
        },
        "surcharge": {
          "type": [
            "number",
            "null"
          ]
        },
        "base_score": {
          "type": [
            "number",
            "null"
          ]
        },
        "carrier_score": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "description": "v0.4 only: how the headline carrier_score is derived from the two indices",
      "additionalProperties": true
    },
    "surcharge": {
      "$ref": "#/properties/carrier_score",
      "description": "Additional points from hard flags"
    },
    "base_score": {
      "$ref": "#/properties/carrier_score",
      "description": "Score before hard-flag surcharges (v0.5: legacy composite base)"
    },
    "components": {
      "type": "object",
      "description": "Flat component map keyed by component name (v0.5: within-index weights of both indices, for backward compatibility; the per-index components live under inspection_risk / crash_risk)",
      "additionalProperties": {
        "$ref": "#/properties/inspection_risk/properties/components/additionalProperties"
      }
    },
    "crash_risk": {
      "$ref": "#/properties/inspection_risk",
      "description": "v0.5 (served default): CRASH RISK index 0-100 (higher = riskier) — crashes, fatal/injury and tow-away crashes per roadside inspection relative to the population; validated against future reportable crashes. Read this second."
    },
    "disclaimer": {
      "type": "string",
      "description": "Methodology disclaimer — relay verbatim"
    },
    "dot_number": {
      "type": "string",
      "description": "US DOT number"
    },
    "legal_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "sub_indices": {
      "type": "object",
      "description": "v0.3 only: inspection_risk / crash_risk sub-indices (0-100) and their weights",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Sub-index 0-100, population-relative"
          },
          "weight": {
            "type": "number",
            "description": "Sub-index weight in the composite"
          }
        },
        "additionalProperties": true
      }
    },
    "scored_as_of": {
      "$ref": "#/properties/legal_name",
      "description": "Date of the scoring run (YYYY-MM-DD)"
    },
    "carrier_score": {
      "type": [
        "number",
        "null"
      ],
      "description": "0-100, higher = riskier. Under v0.5 this equals legacy_composite.score (kept for backward compatibility); under v0/v0.3/v0.4 it is that version's headline score"
    },
    "score_version": {
      "$ref": "#/properties/legal_name",
      "description": "Documented methodology version (\"0.5\" is the served default; \"0\", \"0.3\", \"0.4\" are opt-in)"
    },
    "inspection_risk": {
      "type": "object",
      "properties": {
        "band": {
          "type": [
            "string",
            "null"
          ],
          "description": "Carrier's 24m inspection-count band"
        },
        "base": {
          "type": [
            "number",
            "null"
          ],
          "description": "Percentile blend before surcharge (0-100)"
        },
        "label": {
          "type": "string"
        },
        "score": {
          "type": [
            "number",
            "null"
          ],
          "description": "Index 0-100 incl. its own surcharge, higher = riskier"
        },
        "band_note": {
          "type": "string"
        },
        "surcharge": {
          "type": [
            "number",
            "null"
          ]
        },
        "components": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "required": [
              "label"
            ],
            "properties": {
              "label": {
                "type": "string",
                "description": "Human-readable component label"
              },
              "value": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Raw component value"
              },
              "weight": {
                "type": "number",
                "description": "Component weight in the base score"
              },
              "percentile": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Population percentile of the value, 0-1"
              }
            },
            "additionalProperties": true
          }
        },
        "validation": {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "description": "One-line validation statement — relay with the index"
            },
            "label": {
              "type": "string",
              "description": "The future outcome the index was validated against"
            },
            "source": {
              "type": "string",
              "description": "Path of the validation report in docs/research"
            },
            "auc_holdout": {
              "type": "string",
              "description": "Held-out AUC range on the index's own outcome"
            },
            "holdout_origins": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "top_decile_lift": {
              "type": "string"
            },
            "post_selection_origin": {
              "type": [
                "string",
                "null"
              ]
            },
            "auc_post_selection_holdout": {
              "type": "string"
            }
          },
          "description": "v0.5: this index's own historical validation (point-in-time backtest, held-out cohorts)",
          "additionalProperties": true
        },
        "description": {
          "type": "string"
        },
        "data_sufficiency": {
          "type": [
            "number",
            "null"
          ]
        },
        "percentile_basis": {
          "type": "string",
          "description": "\"global\" or \"banded\" (24m inspection-activity band)"
        },
        "surcharges_applied": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "v0.5 (served default): INSPECTION / COMPLIANCE RISK index 0-100 (higher = riskier) — violations and out-of-service rates per roadside inspection relative to the population; validated against future out-of-service rate. Read this first.",
      "additionalProperties": true
    },
    "data_sufficiency": {
      "$ref": "#/properties/carrier_score",
      "description": "0-1: share of the score resting on observed vs neutral-imputed data"
    },
    "legacy_composite": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        },
        "score": {
          "type": [
            "number",
            "null"
          ],
          "description": "Legacy composite 0-100 (== top-level carrier_score)"
        },
        "rule_text": {
          "type": "string"
        },
        "surcharge": {
          "type": [
            "number",
            "null"
          ]
        },
        "validated": {
          "type": "boolean",
          "description": "Always false: the composite is not validated or gated"
        },
        "base_score": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "description": "v0.5: backward-compatible legacy composite (0.70 x higher index + 0.30 x lower index + surcharges). Not validated, not the headline — do not present it as the carrier's risk score.",
      "additionalProperties": true
    },
    "methodology_note": {
      "$ref": "#/properties/legal_name",
      "description": "One-line description of the weighting used"
    }
  },
  "additionalProperties": false
}
carrier_score annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
montgomery_file — Generate Montgomery Evidence File
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Generate a timestamped Montgomery file — a carrier-selection evidence report — for a carrier by US DOT number. Since Montgomery v. Caribe Transport II (SCOTUS, May 2026), freight brokers are exposed to state-law negligent-selection claims and need documented, timestamped, safety-data-based carrier selection. This report is that artifact: the two risk indices (inspection / compliance risk and crash risk, each with its components, percentiles, activity-band context and its own historical-validation line), the legacy composite (labelled backward-compatibility only), hard flags, FMCSA safety rating, and the methodology disclaimer, dated as of the scoring run. A booking agent should generate and retain this file at the moment a carrier is selected for a load. Args: - dot_number: US DOT number, digits only - format: "text" (default; the filing-ready plain-text report, available on the free tier) or "json" (structured fields; requires an API key on the monitor or compliance tier) Returns: format="text" gives the plain-text report (structured field report_text); format="json" gives structured fields { report, generated, dot_number, legal_name, dba_name, safety_rating, status_code, power_units, inspection_risk, crash_risk, legacy_composite (v0.5), carrier_score (backward-compatible), components, flags, data_sufficiency, score_version, scored_as_of, disclaimer } (v0.4 parquets return indices + composite instead). Every report embeds the disclaimer verbatim — keep it when storing or quoting the report. Audit archive (paid tiers): every report generated with an API key is stored immutably server-side and the result carries audit_entry_id + sha256 (SHA-256 of the plain-text report). Quote both when citing the report; later, verify_evidence(entry_id) proves the archived copy is unchanged and audit_entries lists what was generated. Monitor keys can retrieve the last 90 days (2,000 reports/month); Compliance keys have unlimited retention and reports. Errors: 403 if format=json without an API key; 404 unknown DOT; 429 if a Monitor key has used its 2,000 reports this month (upgrade hint in the message); 503 if scores are not computed yet.

montgomery_file input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "dot_number"
  ],
  "properties": {
    "format": {
      "enum": [
        "text",
        "json"
      ],
      "type": "string",
      "default": "text",
      "description": "\"text\" = filing-ready report (free tier); \"json\" = structured fields (requires API key)"
    },
    "dot_number": {
      "type": "string",
      "pattern": "^\\d{1,8}$",
      "description": "US DOT number of the carrier, digits only (e.g. \"1234567\")"
    }
  },
  "additionalProperties": false
}
montgomery_file output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "flags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "report": {
      "type": "string",
      "description": "Report title line (format=\"json\")"
    },
    "sha256": {
      "type": "string",
      "description": "Paid tiers: SHA-256 of the archived plain-text report — cite it alongside the entry id"
    },
    "indices": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/properties/inspection_risk"
      }
    },
    "dba_name": {
      "$ref": "#/properties/legal_name"
    },
    "composite": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        },
        "rule_text": {
          "type": "string"
        },
        "surcharge": {
          "type": [
            "number",
            "null"
          ]
        },
        "base_score": {
          "type": [
            "number",
            "null"
          ]
        },
        "carrier_score": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": true
    },
    "generated": {
      "type": [
        "string",
        "null"
      ],
      "description": "Report generation date (YYYY-MM-DD)"
    },
    "surcharge": {
      "$ref": "#/properties/power_units"
    },
    "base_score": {
      "$ref": "#/properties/power_units"
    },
    "components": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/properties/inspection_risk/properties/components/additionalProperties"
      }
    },
    "crash_risk": {
      "$ref": "#/properties/inspection_risk",
      "description": "v0.5: crash risk index with components and validation"
    },
    "disclaimer": {
      "type": "string"
    },
    "dot_number": {
      "type": "string"
    },
    "legal_name": {
      "$ref": "#/properties/generated"
    },
    "power_units": {
      "type": [
        "number",
        "null"
      ]
    },
    "report_text": {
      "type": "string",
      "description": "Filing-ready plain-text evidence report (format=\"text\")"
    },
    "status_code": {
      "$ref": "#/properties/legal_name"
    },
    "sub_indices": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Sub-index 0-100, population-relative"
          },
          "weight": {
            "type": "number",
            "description": "Sub-index weight in the composite"
          }
        },
        "additionalProperties": true
      }
    },
    "scored_as_of": {
      "$ref": "#/properties/legal_name"
    },
    "carrier_score": {
      "$ref": "#/properties/power_units",
      "description": "0-100, higher = riskier (v0.5: == legacy_composite.score)"
    },
    "safety_rating": {
      "$ref": "#/properties/legal_name"
    },
    "score_version": {
      "$ref": "#/properties/legal_name"
    },
    "audit_entry_id": {
      "type": "string",
      "description": "Paid tiers: id of the immutable archived copy of this report (use with verify_evidence / audit_entries)"
    },
    "inspection_risk": {
      "type": "object",
      "properties": {
        "band": {
          "type": [
            "string",
            "null"
          ],
          "description": "Carrier's 24m inspection-count band"
        },
        "base": {
          "type": [
            "number",
            "null"
          ],
          "description": "Percentile blend before surcharge (0-100)"
        },
        "label": {
          "type": "string"
        },
        "score": {
          "type": [
            "number",
            "null"
          ],
          "description": "Index 0-100 incl. its own surcharge, higher = riskier"
        },
        "band_note": {
          "type": "string"
        },
        "surcharge": {
          "type": [
            "number",
            "null"
          ]
        },
        "components": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "required": [
              "label"
            ],
            "properties": {
              "label": {
                "type": "string",
                "description": "Human-readable component label"
              },
              "value": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Raw component value"
              },
              "weight": {
                "type": "number",
                "description": "Component weight in the base score"
              },
              "percentile": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Population percentile of the value, 0-1"
              }
            },
            "additionalProperties": true
          }
        },
        "validation": {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "description": "One-line validation statement — relay with the index"
            },
            "label": {
              "type": "string",
              "description": "The future outcome the index was validated against"
            },
            "source": {
              "type": "string",
              "description": "Path of the validation report in docs/research"
            },
            "auc_holdout": {
              "type": "string",
              "description": "Held-out AUC range on the index's own outcome"
            },
            "holdout_origins": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "top_decile_lift": {
              "type": "string"
            },
            "post_selection_origin": {
              "type": [
                "string",
                "null"
              ]
            },
            "auc_post_selection_holdout": {
              "type": "string"
            }
          },
          "description": "v0.5: this index's own historical validation (point-in-time backtest, held-out cohorts)",
          "additionalProperties": true
        },
        "description": {
          "type": "string"
        },
        "data_sufficiency": {
          "type": [
            "number",
            "null"
          ]
        },
        "percentile_basis": {
          "type": "string",
          "description": "\"global\" or \"banded\" (24m inspection-activity band)"
        },
        "surcharges_applied": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "description": "v0.5: inspection / compliance risk index with components and validation",
      "additionalProperties": true
    },
    "data_sufficiency": {
      "$ref": "#/properties/power_units"
    },
    "legacy_composite": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        },
        "score": {
          "type": [
            "number",
            "null"
          ],
          "description": "Legacy composite 0-100 (== top-level carrier_score)"
        },
        "rule_text": {
          "type": "string"
        },
        "surcharge": {
          "type": [
            "number",
            "null"
          ]
        },
        "validated": {
          "type": "boolean",
          "description": "Always false: the composite is not validated or gated"
        },
        "base_score": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "description": "v0.5: legacy composite, backward compatibility only",
      "additionalProperties": true
    },
    "methodology_note": {
      "$ref": "#/properties/legal_name"
    }
  },
  "additionalProperties": false
}
montgomery_file annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
monitor_carriers — Monitor Carrier List
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Batch risk check for a list of carriers by US DOT number (max 100 per call): score summary and hard flags for each. Use when an agent is screening multiple candidate carriers for a load, or re-checking a broker's active carrier roster ("did any of my carriers pick up an out-of-service order or drop insurance?"). For a full breakdown of any single carrier that looks risky here, follow up with carrier_score or montgomery_file. Args: - dot_numbers: array of DOT number strings, 1-100 entries Returns JSON: { scored_as_of, requested, found, carriers: [{ dot_number, legal_name, inspection_risk (0-100 inspection / compliance risk index, higher = riskier), crash_risk (0-100 crash risk index), carrier_score (legacy composite under v0.5 — backward compatibility only; use the two indices), data_sufficiency, flags: string[] }], not_found: string[], disclaimer }. DOTs in not_found are absent from the scored population — verify them with carrier_lookup; an unknown DOT on your roster is itself a red flag. Errors: 400 if the list is empty or exceeds 100 (split into batches); 503 if scores are not computed yet.

monitor_carriers input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "dot_numbers"
  ],
  "properties": {
    "dot_numbers": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^\\d{1,8}$",
        "description": "US DOT number of the carrier, digits only (e.g. \"1234567\")"
      },
      "maxItems": 100,
      "minItems": 1,
      "description": "US DOT numbers to check, 1-100 per call"
    }
  },
  "additionalProperties": false
}
monitor_carriers output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "requested",
    "found",
    "carriers",
    "not_found"
  ],
  "properties": {
    "found": {
      "type": "number",
      "description": "How many were found in the scored population"
    },
    "carriers": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "dot_number"
        ],
        "properties": {
          "flags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "crash_risk": {
            "type": [
              "number",
              "null"
            ],
            "description": "Crash risk index 0-100 (v0.5 headline; also present for v0.3/v0.4 parquets)"
          },
          "dot_number": {
            "type": "string"
          },
          "legal_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "carrier_score": {
            "type": [
              "number",
              "null"
            ],
            "description": "0-100, higher = riskier (v0.5: legacy composite, backward compatibility only — use the two indices)"
          },
          "inspection_risk": {
            "type": [
              "number",
              "null"
            ],
            "description": "Inspection / compliance risk index 0-100 (v0.5 headline; also present for v0.3/v0.4 parquets)"
          },
          "data_sufficiency": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "additionalProperties": true
      },
      "description": "Score summary per found carrier"
    },
    "not_found": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Requested DOTs absent from the scored population"
    },
    "requested": {
      "type": "number",
      "description": "How many DOT numbers were requested"
    },
    "disclaimer": {
      "type": "string",
      "description": "Methodology disclaimer — relay verbatim"
    },
    "scored_as_of": {
      "type": [
        "string",
        "null"
      ],
      "description": "Date of the scoring run (YYYY-MM-DD)"
    }
  },
  "additionalProperties": false
}
monitor_carriers annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
save_carrier_list — Save Carrier List for Daily Monitoring
Advertised by the server during the last successful anonymous check.
Open-world

Save a named list of carriers (by US DOT number) for continuous monitoring. Requires a paid CarrierScore API key (Monitor or Compliance tier) — connect with your key via OAuth (or set CARRIERSCORE_API_KEY on a self-hosted server); the free tier gets a 403 with an upgrade link. Once saved, CarrierScore diffs every carrier on the list against the previous day's scoring run after each daily run and records alerts: new out-of-service order (critical), operating authority lost (critical), insurance filing lapsed (high), operating status leaving Active (high), risk score up 10+ points (medium), high-confidence reincarnated-carrier link appearing (medium). Alerts are always retrievable with list_alerts; optionally they are also pushed to a webhook (JSON POST, HMAC-signed via the X-CarrierScore-Signature header with the per-key secret from GET /v1/lists) and/or summarized in one daily digest email. Use this when a broker asks to "watch" or "keep an eye on" their carrier roster. Caps: 500 DOTs total across all lists on the Monitor tier, 5000 on Compliance; up to 50 lists per key. Saving the same DOT twice in one list is deduped. Args: - name: short label for the list (1-100 chars) - dot_numbers: array of DOT number strings (1-8 digits each) - webhook_url (optional): https URL to POST new alerts to - email (optional): address for the daily digest Returns JSON: { list_id, name, dots, created, updated, webhook_url?, email? }. Keep list_id — list_alerts needs it. Errors: 403 without a paid key; 400 on invalid DOTs, empty list, or exceeding the tier cap (message says which); 401 bad key.

save_carrier_list input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name",
    "dot_numbers"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "List name, e.g. \"Active roster Q3\""
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Optional daily digest email"
    },
    "dot_numbers": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^\\d{1,8}$",
        "description": "US DOT number of the carrier, digits only (e.g. \"1234567\")"
      },
      "maxItems": 5000,
      "minItems": 1,
      "description": "US DOT numbers to monitor"
    },
    "webhook_url": {
      "type": "string",
      "format": "uri",
      "description": "Optional https URL to receive alert POSTs"
    }
  },
  "additionalProperties": false
}
save_carrier_list output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "list_id",
    "name",
    "dots"
  ],
  "properties": {
    "dots": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "US DOT numbers on the list (deduped)"
    },
    "name": {
      "type": "string",
      "description": "List name"
    },
    "email": {
      "type": "string",
      "description": "Daily digest email, if configured"
    },
    "created": {
      "type": "string",
      "description": "Creation timestamp (ISO 8601 UTC)"
    },
    "list_id": {
      "type": "string",
      "description": "Saved list id (lst_...) — use with list_alerts"
    },
    "updated": {
      "type": "string",
      "description": "Last update timestamp (ISO 8601 UTC)"
    },
    "webhook_url": {
      "type": "string",
      "description": "Alert webhook URL, if configured"
    }
  },
  "additionalProperties": false
}
save_carrier_list annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_alerts — Get Alerts for a Saved Carrier List
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Retrieve the alert history for a saved carrier list (see save_carrier_list), newest first. Requires the same paid API key that saved the list. Each alert records one change detected between consecutive daily scoring runs for one carrier: type (oos_order_activated, authority_lost, insurance_lapsed, status_changed, inspection_risk_jump, crash_risk_jump, score_jump, reincarnation_link), severity (critical / high / medium / low), the field that changed with its before/after values, the DOT and legal name, and the scoring dates compared. inspection_risk_jump / crash_risk_jump (index base up >= 10 points, medium) are the primary deterioration signals; score_jump on the legacy composite is emitted at low severity for backward compatibility. Use it to answer "did anything change on my carrier list?" — critical alerts (new OOS order, authority lost) mean the carrier should not be dispatched until verified; follow up with carrier_score or montgomery_file for the full picture. Args: - list_id: the lst_... id returned by save_carrier_list - since (optional): YYYY-MM-DD; only alerts from scoring runs on/after this date Returns JSON: { list_id, since, count, alerts: [{ ts, as_of, prev_as_of, list_id, list_name, dot, legal_name, type, severity, field, before, after }] }. An empty alerts array means no monitored change since the given date (alerts only exist once two daily scoring runs have happened). Errors: 403 without a paid key; 404 if the list id is unknown for this key; 400 if since is not YYYY-MM-DD.

list_alerts input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "list_id"
  ],
  "properties": {
    "since": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Only alerts from scoring runs on/after this date (YYYY-MM-DD)"
    },
    "list_id": {
      "type": "string",
      "pattern": "^lst_[A-Za-z0-9_-]+$",
      "description": "Saved list id from save_carrier_list"
    }
  },
  "additionalProperties": false
}
list_alerts output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "list_id",
    "count",
    "alerts"
  ],
  "properties": {
    "count": {
      "type": "number",
      "description": "Number of alerts returned"
    },
    "since": {
      "type": [
        "string",
        "null"
      ],
      "description": "Lower bound applied (YYYY-MM-DD) or null"
    },
    "alerts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "ts",
          "as_of",
          "list_id",
          "dot",
          "type",
          "severity"
        ],
        "properties": {
          "ts": {
            "type": "string",
            "description": "When the alert was recorded (ISO 8601 UTC)"
          },
          "dot": {
            "type": "string",
            "description": "US DOT number"
          },
          "type": {
            "type": "string",
            "description": "oos_order_activated | authority_lost | insurance_lapsed | status_changed | score_jump | reincarnation_link"
          },
          "after": {
            "description": "Value in the current scoring run"
          },
          "as_of": {
            "type": "string",
            "description": "Scoring run date that surfaced the change (YYYY-MM-DD)"
          },
          "field": {
            "type": "string",
            "description": "Score field that changed"
          },
          "before": {
            "description": "Value in the previous scoring run"
          },
          "list_id": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "description": "critical | high | medium"
          },
          "list_name": {
            "type": "string"
          },
          "legal_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "prev_as_of": {
            "type": "string",
            "description": "Previous scoring run date compared against"
          }
        },
        "additionalProperties": true
      },
      "description": "Alert history, newest first"
    },
    "list_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
list_alerts annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
audit_entries — List Archived Evidence Reports
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the immutable audit-archive entries for the caller's API key: every Montgomery evidence report the key generated (text or json), newest first, each with its entry id, generation timestamp, DOT number, scoring date, methodology version and the SHA-256 of the archived report text. Requires a paid CarrierScore API key. Use it to answer "which carriers did we generate evidence for, and when?" and to find the entry id to cite or verify for a given carrier and date. Monitor keys see the last 90 days; Compliance keys see everything ever archived. Args: - dot_number (optional): only entries for this US DOT number - since (optional): YYYY-MM-DD; only entries generated on/after this date (UTC) - limit (optional): 1-500, default 50 Returns JSON: { tier, retention_days, total_entries, matched, count, entries: [{ entry_id, generated_at, dot_number, sha256, format_requested, scored_as_of, score_version }] }. Errors: 403 without a paid key; 400 if since is malformed.

audit_entries input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "Max entries to return (default 50)"
    },
    "since": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Only entries generated on/after this date (YYYY-MM-DD, UTC)"
    },
    "dot_number": {
      "type": "string",
      "pattern": "^\\d{1,8}$",
      "description": "US DOT number of the carrier, digits only (e.g. \"1234567\")"
    }
  },
  "additionalProperties": false
}
audit_entries output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "tier",
    "retention_days",
    "total_entries",
    "matched",
    "count",
    "entries"
  ],
  "properties": {
    "tier": {
      "type": "string",
      "description": "Caller's tier (monitor / compliance)"
    },
    "count": {
      "type": "number",
      "description": "Entries returned (<= limit)"
    },
    "entries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "entry_id",
          "generated_at",
          "dot_number",
          "sha256"
        ],
        "properties": {
          "tier": {
            "type": "string"
          },
          "sha256": {
            "type": "string",
            "description": "SHA-256 of the archived plain-text report"
          },
          "entry_id": {
            "type": "string",
            "description": "Archive entry id: <dot>_<UTC timestamp>_<sha8>"
          },
          "dot_number": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "description": "When the report was generated (ISO 8601 UTC)"
          },
          "scored_as_of": {
            "type": [
              "string",
              "null"
            ],
            "description": "Scoring run the report was built from"
          },
          "score_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "format_requested": {
            "type": "string",
            "description": "\"text\" or \"json\" as originally requested"
          }
        },
        "additionalProperties": true
      },
      "description": "Newest first"
    },
    "matched": {
      "type": "number",
      "description": "Entries matching the filters within the retention window"
    },
    "total_entries": {
      "type": "number",
      "description": "All entries ever archived for this key"
    },
    "retention_days": {
      "type": [
        "number",
        "null"
      ],
      "description": "Retrieval window in days (monitor 90; compliance null = unlimited)"
    }
  },
  "additionalProperties": false
}
audit_entries annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_evidence — Verify Archived Evidence Report Hash
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Verify an archived Montgomery evidence report by its audit entry id: CarrierScore re-reads the immutable stored copy, recomputes its SHA-256 and reports whether it matches the hash recorded at generation time (and, optionally, a hash the caller supplies — e.g. the sha256 printed on a broker's filed copy). Requires the same paid API key that generated the report. Use it when a broker or auditor needs to prove that a filed evidence report is exactly what CarrierScore produced on the stated date. match=true means the archived report is byte-identical to what was served; match_supplied compares against the caller's own hash. Follow up with the audit_entries list to find ids, or with montgomery_file to generate a fresh report. Args: - entry_id: the audit_entry_id returned by montgomery_file (also listed by audit_entries) - sha256 (optional): a 64-hex SHA-256 to compare against the archived report (text or canonical json) Returns JSON: { entry_id, dot_number, generated_at, scored_as_of, score_version, format_requested, sha256_stored, sha256_computed, match, sha256_json_stored, sha256_json_computed, match_json, sha256_supplied?, match_supplied? }. Errors: 403 without a paid key, or (Monitor tier) if the entry is older than the 90-day retrieval window; 404 if the entry id is unknown for this key.

verify_evidence input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "entry_id"
  ],
  "properties": {
    "sha256": {
      "type": "string",
      "pattern": "^[0-9a-fA-F]{64}$",
      "description": "Optional SHA-256 to compare against the archived report"
    },
    "entry_id": {
      "type": "string",
      "pattern": "^\\d{1,8}_\\d{8}T\\d{12}Z_[0-9a-f]{8}$",
      "description": "Audit entry id from montgomery_file / audit_entries"
    }
  },
  "additionalProperties": false
}
verify_evidence output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "entry_id",
    "sha256_computed",
    "match"
  ],
  "properties": {
    "match": {
      "type": "boolean",
      "description": "true = the archived report is byte-identical to what was served"
    },
    "entry_id": {
      "type": "string"
    },
    "dot_number": {
      "type": [
        "string",
        "null"
      ]
    },
    "match_json": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "generated_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "scored_as_of": {
      "type": [
        "string",
        "null"
      ]
    },
    "score_version": {
      "type": [
        "string",
        "null"
      ]
    },
    "sha256_stored": {
      "type": [
        "string",
        "null"
      ],
      "description": "Hash recorded when the report was archived"
    },
    "match_supplied": {
      "type": "boolean",
      "description": "Whether the supplied hash matches the archived report"
    },
    "sha256_computed": {
      "type": "string",
      "description": "Hash recomputed now from the stored report text"
    },
    "sha256_supplied": {
      "type": "string",
      "description": "Echo of the hash the caller supplied, if any"
    },
    "format_requested": {
      "type": [
        "string",
        "null"
      ]
    },
    "sha256_json_stored": {
      "type": [
        "string",
        "null"
      ]
    },
    "sha256_json_computed": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
verify_evidence annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
671 ms
95th percentile latency
671 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 671 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http carrierscore-mcp https://mcp.carrierscore.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add carrierscore-mcp --url https://mcp.carrierscore.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable carrierscore-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "carrierscore-mcp": {
      "url": "https://mcp.carrierscore.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "carrierscore-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.carrierscore.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start carrierscore-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "carrierscore-mcp": {
      "type": "http",
      "url": "https://mcp.carrierscore.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http carrierscore-mcp https://mcp.carrierscore.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.carrierscore.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "carrierscore-mcp": {
      "serverUrl": "https://mcp.carrierscore.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like CarrierScore MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run CarrierScore MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing