ProveCart MCP
ProveCart is a verification service for agent commerce that compares customer requests against agent-built orders before payment. The MCP server provides tools for agent certification, exam management, scoreboard access, and transaction verification (orders, bookings, reservations) to prevent payment mistakes.
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.
https://api.provecart.com/mcpWhat its tools do
10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
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 provecart.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Sign up an agent for certification
- Start and answer certification exams
- Check agent scoreboard and certification status
- Verify orders, bookings, and reservations before payment
Source and maintenance
Protocol and capabilities
- Server
- provecart 1.0.2
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 10 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
10 advertised
provecart_check_order — ProveCart: check an order before payment
Check a shopping cart against the customer's instruction before the payment is captured. Call this before completing a purchase: pass the customer's mandate (the item, price limit, and merchant rules they set) — or the id of a mandate already created — and the cart you built. ProveCart returns a signed verdict: MATCH (the cart matches; proceed), REVIEW (something is genuinely in-between; the response names exactly what to fix, so correct it and resubmit), or BLOCK (a clear mismatch; do not pay). Every check leaves a sealed evidence record. ProveCart never holds or moves money. Non-MATCH responses follow the Agent Correction Format (ACF): a machine-readable corrections array (dimension, action, expected, actual, reason), a retry budget, and a sealed evidence pointer — spec: https://provecart.com/standards/correction-format. Requires an integrator API key in the X-API-Key header of the MCP request.
{
"type": "object",
"$defs": {
"CartItem": {
"type": "object",
"title": "CartItem",
"required": [
"name",
"unit_price"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand",
"default": null
},
"variant": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Variant",
"default": null
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null
},
"quantity": {
"type": "integer",
"title": "Quantity",
"default": 1,
"minimum": 1
},
"unit_price": {
"type": "number",
"title": "Unit Price",
"minimum": 0
}
}
},
"MerchantIn": {
"type": "object",
"title": "MerchantIn",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Domain",
"default": null
}
}
}
},
"anyOf": [
{
"required": [
"mandate"
]
},
{
"required": [
"mandate_id"
]
}
],
"required": [
"cart"
],
"properties": {
"cart": {
"type": "object",
"title": "VerifyIn",
"required": [
"merchant",
"items",
"total_price"
],
"properties": {
"tax": {
"type": "number",
"title": "Tax",
"default": 0,
"minimum": 0
},
"fees": {
"type": "number",
"title": "Fees",
"default": 0,
"minimum": 0
},
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/CartItem"
},
"title": "Items"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"merchant": {
"$ref": "#/$defs/MerchantIn"
},
"shipping": {
"type": "number",
"title": "Shipping",
"default": 0,
"minimum": 0
},
"total_price": {
"type": "number",
"title": "Total Price",
"minimum": 0
},
"cart_changed": {
"type": "boolean",
"title": "Cart Changed",
"default": false
},
"previous_record_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Previous Record Id",
"default": null
}
},
"description": "The cart the agent built: merchant, items, total_price, currency, tax, shipping, fees (the shape of POST /verify, without mandate_id)."
},
"mandate": {
"type": "object",
"title": "MandateIn",
"required": [
"user_id",
"item_description",
"category",
"max_total_price",
"expires_at"
],
"properties": {
"type": {
"type": "string",
"title": "Type",
"default": "single_purchase"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand",
"default": null
},
"user_id": {
"type": "string",
"title": "User Id"
},
"category": {
"type": "string",
"title": "Category"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"expires_at": {
"type": "string",
"title": "Expires At"
},
"period_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Period End",
"default": null
},
"price_basis": {
"type": "string",
"title": "Price Basis",
"default": "grand_total"
},
"max_quantity": {
"type": "integer",
"title": "Max Quantity",
"default": 1
},
"period_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Period Start",
"default": null
},
"item_keywords": {
"type": "array",
"items": {
"type": "string"
},
"title": "Item Keywords"
},
"period_budget": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Period Budget",
"default": null
},
"max_total_price": {
"type": "number",
"title": "Max Total Price"
},
"item_description": {
"type": "string",
"title": "Item Description"
},
"category_required": {
"type": "boolean",
"title": "Category Required",
"default": false
},
"merchant_allowlist": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Merchant Allowlist",
"default": null
},
"merchant_blocklist": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Merchant Blocklist",
"default": null
},
"variant_constraints": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Variant Constraints",
"default": null
}
},
"description": "The customer's instruction as a mandate object (the shape of the REST mandate endpoint for this kind). Provide either 'mandate' or 'mandate_id'."
},
"mandate_id": {
"type": "string",
"description": "The id of a mandate already created through the REST API. Provide either 'mandate' or 'mandate_id'."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_check_booking — ProveCart: check a booking before payment or ticketing
Check a travel booking against the customer's instruction before the payment is captured or a ticket is issued. Call this before paying or ticketing: pass the customer's booking mandate (travelers, route, dates, cabin, fare terms, price limit) — or the id of a mandate already created — and the booking you built. ProveCart returns a signed verdict: MATCH (proceed), REVIEW (pause; the response names exactly what to fix), or BLOCK (do not pay or issue). Every check leaves a sealed evidence record. ProveCart never holds or moves money. Non-MATCH responses follow the Agent Correction Format (ACF): a machine-readable corrections array (dimension, action, expected, actual, reason), a retry budget, and a sealed evidence pointer — spec: https://provecart.com/standards/correction-format. Requires an integrator API key in the X-API-Key header of the MCP request.
{
"type": "object",
"$defs": {
"MerchantIn": {
"type": "object",
"title": "MerchantIn",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Domain",
"default": null
}
}
},
"BookingLegIn": {
"type": "object",
"title": "BookingLegIn",
"required": [
"from_airport",
"to_airport",
"depart_at",
"arrive_at"
],
"properties": {
"carrier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Carrier",
"default": null
},
"arrive_at": {
"type": "string",
"title": "Arrive At"
},
"depart_at": {
"type": "string",
"title": "Depart At"
},
"to_airport": {
"type": "string",
"title": "To Airport"
},
"from_airport": {
"type": "string",
"title": "From Airport"
},
"flight_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Flight Number",
"default": null
}
}
},
"BookingFareIn": {
"type": "object",
"title": "BookingFareIn",
"properties": {
"cabin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cabin",
"default": null
},
"change_fee": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Change Fee",
"default": null
},
"fare_class": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Fare Class",
"default": null
},
"refundability": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Refundability",
"default": null
}
}
},
"BookingStayIn": {
"type": "object",
"title": "BookingStayIn",
"required": [
"check_in",
"check_out"
],
"properties": {
"bedding": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Bedding",
"default": null
},
"check_in": {
"type": "string",
"title": "Check In"
},
"check_out": {
"type": "string",
"title": "Check Out"
},
"occupancy": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Occupancy",
"default": null
},
"room_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Room Type",
"default": null
},
"property_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Property Name",
"default": null
}
}
},
"BookingPriceIn": {
"type": "object",
"title": "BookingPriceIn",
"required": [
"total"
],
"properties": {
"taxes": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Taxes",
"default": null
},
"total": {
"type": "number",
"title": "Total",
"minimum": 0
},
"base_fare": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Base Fare",
"default": null
},
"ancillaries": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Ancillaries",
"default": null
},
"carrier_fees": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"title": "Carrier Fees",
"default": null
}
}
},
"BookingEndpointIn": {
"type": "object",
"title": "BookingEndpointIn",
"properties": {
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "City",
"default": null
},
"airport": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Airport",
"default": null
}
}
},
"BookingTravelerIn": {
"type": "object",
"title": "BookingTravelerIn",
"required": [
"name"
],
"properties": {
"dob": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dob",
"default": null
},
"name": {
"type": "string",
"title": "Name"
}
}
}
},
"anyOf": [
{
"required": [
"mandate"
]
},
{
"required": [
"mandate_id"
]
}
],
"required": [
"booking"
],
"properties": {
"booking": {
"type": "object",
"title": "BookingVerifyIn",
"required": [
"merchant",
"price"
],
"properties": {
"fare": {
"anyOf": [
{
"$ref": "#/$defs/BookingFareIn"
},
{
"type": "null"
}
],
"default": null
},
"legs": {
"type": "array",
"items": {
"$ref": "#/$defs/BookingLegIn"
},
"title": "Legs"
},
"price": {
"$ref": "#/$defs/BookingPriceIn"
},
"stays": {
"type": "array",
"items": {
"$ref": "#/$defs/BookingStayIn"
},
"title": "Stays"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"merchant": {
"$ref": "#/$defs/MerchantIn"
},
"travelers": {
"type": "array",
"items": {
"type": "string"
},
"title": "Travelers"
},
"booking_changed": {
"type": "boolean",
"title": "Booking Changed",
"default": false
},
"previous_record_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Previous Record Id",
"default": null
}
},
"description": "The booking the agent built: travelers, legs, stays, fare, price, currency (the shape of POST /verify-booking, without mandate_id)."
},
"mandate": {
"type": "object",
"title": "BookingMandateIn",
"required": [
"user_id",
"travelers",
"origin",
"destination",
"departure_date",
"max_total_price",
"expires_at"
],
"properties": {
"cabin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cabin",
"default": null
},
"hotel": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Hotel",
"default": null
},
"origin": {
"$ref": "#/$defs/BookingEndpointIn"
},
"user_id": {
"type": "string",
"title": "User Id"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"travelers": {
"type": "array",
"items": {
"$ref": "#/$defs/BookingTravelerIn"
},
"title": "Travelers"
},
"expires_at": {
"type": "string",
"title": "Expires At"
},
"fare_terms": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Fare Terms",
"default": null
},
"destination": {
"$ref": "#/$defs/BookingEndpointIn"
},
"price_basis": {
"type": "string",
"title": "Price Basis",
"default": "all_in"
},
"return_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Return Date",
"default": null
},
"date_flex_days": {
"type": "integer",
"title": "Date Flex Days",
"default": 0
},
"departure_date": {
"type": "string",
"title": "Departure Date"
},
"max_connections": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Connections",
"default": null
},
"max_total_price": {
"type": "number",
"title": "Max Total Price"
},
"departure_window": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Departure Window",
"default": null
},
"merchant_allowlist": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Merchant Allowlist",
"default": null
},
"merchant_blocklist": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Merchant Blocklist",
"default": null
},
"max_layover_minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Layover Minutes",
"default": null
},
"airport_substitution": {
"type": "string",
"title": "Airport Substitution",
"default": "review"
},
"min_connection_minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Connection Minutes",
"default": null
},
"allow_overnight_layover": {
"type": "boolean",
"title": "Allow Overnight Layover",
"default": true
},
"acceptable_alternates_origin": {
"type": "array",
"items": {
"type": "string"
},
"title": "Acceptable Alternates Origin"
},
"allow_airport_change_connection": {
"type": "boolean",
"title": "Allow Airport Change Connection",
"default": true
},
"acceptable_alternates_destination": {
"type": "array",
"items": {
"type": "string"
},
"title": "Acceptable Alternates Destination"
}
},
"description": "The customer's instruction as a mandate object (the shape of the REST mandate endpoint for this kind). Provide either 'mandate' or 'mandate_id'."
},
"mandate_id": {
"type": "string",
"description": "The id of a mandate already created through the REST API. Provide either 'mandate' or 'mandate_id'."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_check_reservation — ProveCart: check a reservation before payment
Check a service reservation against the customer's instruction before the payment. Call this before confirming a reservation: pass the customer's reservation mandate (provider, location, date, time, party size, deposit and total limits, cancellation terms) — or the id of a mandate already created — and the reservation you built. ProveCart returns a signed verdict: MATCH (proceed), REVIEW (pause; the response names exactly what to fix), or BLOCK (do not pay). Every check leaves a sealed evidence record. ProveCart never holds or moves money. Non-MATCH responses follow the Agent Correction Format (ACF): a machine-readable corrections array (dimension, action, expected, actual, reason), a retry budget, and a sealed evidence pointer — spec: https://provecart.com/standards/correction-format. Requires an integrator API key in the X-API-Key header of the MCP request.
{
"type": "object",
"$defs": {
"MerchantIn": {
"type": "object",
"title": "MerchantIn",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Domain",
"default": null
}
}
}
},
"anyOf": [
{
"required": [
"mandate"
]
},
{
"required": [
"mandate_id"
]
}
],
"required": [
"reservation"
],
"properties": {
"mandate": {
"type": "object",
"title": "ReservationMandateIn",
"required": [
"user_id",
"service_description",
"date",
"time",
"party_size",
"name_on_reservation",
"max_total_price",
"expires_at"
],
"properties": {
"date": {
"type": "string",
"title": "Date"
},
"time": {
"type": "string",
"title": "Time"
},
"user_id": {
"type": "string",
"title": "User Id"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"location": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Location",
"default": null
},
"expires_at": {
"type": "string",
"title": "Expires At"
},
"party_size": {
"type": "integer",
"title": "Party Size"
},
"max_deposit": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max Deposit",
"default": null
},
"cancellation": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Cancellation",
"default": null
},
"provider_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Provider Name",
"default": null
},
"location_exact": {
"type": "boolean",
"title": "Location Exact",
"default": false
},
"party_size_max": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Party Size Max",
"default": null
},
"max_total_price": {
"type": "number",
"title": "Max Total Price"
},
"merchant_allowlist": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Merchant Allowlist",
"default": null
},
"merchant_blocklist": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Merchant Blocklist",
"default": null
},
"name_on_reservation": {
"type": "string",
"title": "Name On Reservation"
},
"service_description": {
"type": "string",
"title": "Service Description"
},
"time_tolerance_minutes": {
"type": "integer",
"title": "Time Tolerance Minutes",
"default": 0
}
},
"description": "The customer's instruction as a mandate object (the shape of the REST mandate endpoint for this kind). Provide either 'mandate' or 'mandate_id'."
},
"mandate_id": {
"type": "string",
"description": "The id of a mandate already created through the REST API. Provide either 'mandate' or 'mandate_id'."
},
"reservation": {
"type": "object",
"title": "ReservationVerifyIn",
"required": [
"merchant",
"date",
"time",
"party_size",
"name_on_reservation",
"total_amount"
],
"properties": {
"date": {
"type": "string",
"title": "Date"
},
"time": {
"type": "string",
"title": "Time"
},
"currency": {
"type": "string",
"title": "Currency",
"default": "USD"
},
"location": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Location",
"default": null
},
"merchant": {
"$ref": "#/$defs/MerchantIn"
},
"party_size": {
"type": "integer",
"title": "Party Size"
},
"cancellation": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Cancellation",
"default": null
},
"total_amount": {
"type": "number",
"title": "Total Amount",
"minimum": 0
},
"provider_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Provider Name",
"default": null
},
"deposit_amount": {
"type": "number",
"title": "Deposit Amount",
"default": 0,
"minimum": 0
},
"previous_record_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Previous Record Id",
"default": null
},
"name_on_reservation": {
"type": "string",
"title": "Name On Reservation"
},
"reservation_changed": {
"type": "boolean",
"title": "Reservation Changed",
"default": false
}
},
"description": "The reservation the agent built: provider, location, date, time, party size, name, deposit, total, cancellation (the shape of POST /verify-reservation, without mandate_id)."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_agent_register — ProveCart: register an agent for certification
Register an agent for ProveCart Verified Agent certification under an API key you already hold: it returns the public agent_id and seals the registration into the evidence chain. Requires an API key in the X-API-Key header of the MCP request (an integrator key, or a scoped key from provecart_agent_signup). If you have no key at all, call provecart_agent_signup instead — it registers you and issues your scoped key in one step.
{
"type": "object",
"required": [],
"properties": {
"agent_name": {
"type": "string",
"description": "Optional. The agent's public name; it appears on the scoreboard after a completed self-test. Leave it out and the agent may choose its own name later via POST /agents/name."
},
"builder_contact": {
"type": "string",
"description": "Optional contact for the builder (email or URL)."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_agent_selftest — ProveCart: run the Verified Agent self-test
Run the ProveCart Verified Agent self-test under your registration. Six test carts from a test store with planted traps (a product whose compatibility is stated only in prose, near-duplicate product names, a price limit a cart can quietly step over) are checked with the same verification engine used for live orders. Your score — the share of checks that ended safely — is published on the public scoreboard (provecart_scoreboard). Only the API key that registered the agent can run its self-test. Requires an API key in the X-API-Key header of the MCP request (an integrator key, or the scoped key from provecart_agent_signup). The certification path is the live exam (provecart_agent_exam_start / provecart_agent_exam_answer), which grades your own decisions; the self-test is the fixed-set system check.
{
"type": "object",
"required": [
"agent_id"
],
"properties": {
"agent_id": {
"type": "string",
"description": "The agent_id returned by provecart_agent_register."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_scoreboard — ProveCart: Verified Agent scoreboard
Read the public ProveCart Verified Agent scoreboard: every agent that has completed a test (the live exam, the fixed self-test, or the canonical generated exam), with its latest run's published score, the number of checks in that run, and when it was last tested. Only agents that completed a test are listed. No API key required.
{
"type": "object",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}provecart_certification_info — ProveCart: how Verified Agent certification works
Learn what ProveCart Verified Agent certification is and how it works: how to sign up with no pre-issued key, how the live exam grades your own decisions, how the score is calculated, and where scores are published. No API key required.
{
"type": "object",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}provecart_agent_signup — ProveCart: sign up for Verified Agent (no key needed)
Start here if you have no ProveCart API key. Self-serve signup for ProveCart Verified Agent certification: it registers your agent and returns your agent_id together with a scoped API key (shown once) that works only for the Verified Agent endpoints, for your own agent_id. Then take the live exam with provecart_agent_exam_start and provecart_agent_exam_answer. Free; no API key required for this call.
{
"type": "object",
"required": [],
"properties": {
"agent_name": {
"type": "string",
"description": "Optional. Your agent's public name; it appears on the scoreboard after a completed exam. Leave it out and the agent may choose its own name later via POST /agents/name."
},
"builder_contact": {
"type": "string",
"description": "Optional contact for the builder (email or URL)."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_agent_exam_start — ProveCart: start the live certification exam
Open a live Verified Agent exam session for your agent_id. You receive, per task, a customer instruction and the shopper-facing shelf of buyable options — and nothing about the right answers. Decide each task yourself, then submit all decisions in one provecart_agent_exam_answer call. The session expires 2 hours after it starts; one graded attempt per session. Requires your API key in the X-API-Key header of the MCP request (the scoped key from provecart_agent_signup, or an integrator key). Only the key that registered the agent can open its session.
{
"type": "object",
"required": [
"agent_id"
],
"properties": {
"agent_id": {
"type": "string",
"description": "The agent_id returned by provecart_agent_signup or provecart_agent_register."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}provecart_agent_exam_answer — ProveCart: submit your live exam decisions
Submit your own decisions for an open exam session and receive your score. answers is a list of {instance_id, decision}, one per task from provecart_agent_exam_start: decision is either the purchase you would make (the same shape as a check submission for that kind, without any mandate reference) or {"ask": true} to stop and ask the customer when the instruction does not settle the choice. Tasks with no answer count as unsafe. The response carries a per-task results list ({instance_id, safe, critical, verdict}) alongside the score. The run is sealed and the score is published on the scoreboard; 80.0 or above certifies. Requires your API key in the X-API-Key header of the MCP request.
{
"type": "object",
"required": [
"agent_id",
"session_id",
"answers"
],
"properties": {
"answers": {
"type": "array",
"items": {
"type": "object",
"required": [
"instance_id",
"decision"
],
"properties": {
"decision": {
"type": "object"
},
"instance_id": {
"type": "string"
}
}
},
"description": "One entry per task: {instance_id, decision}."
},
"agent_id": {
"type": "string",
"description": "Your agent_id."
},
"session_id": {
"type": "string",
"description": "The session_id returned by provecart_agent_exam_start."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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.
- 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
- 281 ms
- 95th percentile latency
- 281 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 281 ms · metadata changed · 10 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http provecart-mcp https://api.provecart.com/mcpCodex
codex mcp add provecart-mcp --url https://api.provecart.com/mcpCursor
{
"mcpServers": {
"provecart-mcp": {
"url": "https://api.provecart.com/mcp"
}
}
}Cline
{
"mcpServers": {
"provecart-mcp": {
"type": "streamableHttp",
"url": "https://api.provecart.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"provecart-mcp": {
"type": "http",
"url": "https://api.provecart.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http provecart-mcp https://api.provecart.com/mcpClaude Desktop
https://api.provecart.com/mcpWindsurf
{
"mcpServers": {
"provecart-mcp": {
"serverUrl": "https://api.provecart.com/mcp"
}
}
}Let your agent find its tools
Find servers like ProveCart MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other payments servers
Do you run ProveCart 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.