{
  "name": "lanebrief",
  "title": "Purserhouse",
  "version": "1.0.0",
  "description": "Purserhouse is for US small and mid-size importers of goods made in China, and the customs brokers who serve them. Send a CBP Form 7501 and learn which entries and Chapter 99 lines fall inside the IEEPA refund window and the duty printed on them; send a demurrage and detention (D&D) invoice and learn whether it was computed right against the carrier's published US tariff, the real last free day and the basis for a dispute. Every number has a cited source; the language model only reads documents and never makes a number; missing data is \"not checked\", never \"not eligible\". Findings: red_line items first, then at most 3 others, plus one next step. Free right now.",
  "url": "https://purserhouse.com/mcp",
  "transport": "streamable-http",
  "protocolVersions": ["2025-11-25", "2025-06-18", "2025-03-26"],
  "capabilities": { "tools": {} },
  "authentication": {
    "type": "bearer",
    "header": "Authorization: Bearer lb_live_<32 characters>",
    "required": "for every tool except lanebrief_coverage, lanebrief_request_access, lanebrief_market_snapshot and the free public tools (lanebrief_refund_check, lanebrief_last_free_day, lanebrief_tariff_stack, lanebrief_screen, lanebrief_hs_rulings, lanebrief_dd_letter, lanebrief_isf_check)",
    "how_to_get_a_key": "The customer signs in at https://purserhouse.com/app/ and creates a key under API keys (/app/keys); it is shown once. Without an account, call lanebrief_request_access (or POST https://purserhouse.com/api/v1/access-requests) and the owner replies by email."
  },
  "tools": [
    { "name": "lanebrief_coverage", "description": "What Purserhouse covers. Main use: US imports from China (CBP 7501 entry summaries, D&D invoices, US tariff layers). Also covered: lanes with ports and UN/LOCODEs, tariff territories, container types, sides, document kinds, limits, and whether it is free. No key needed." },
    { "name": "lanebrief_request_access", "description": "Ask for an account and API key for the customer, with their agreement and real contact details. No key needed." },
    { "name": "lanebrief_grant_consent", "description": "Record that the customer agrees their files are processed only to answer them, stored encrypted and deleted after 7 days. Once per account, before the first submission." },
    { "name": "lanebrief_submit_documents", "description": "Send one shipment's documents (base64) as one new case. Returns case_id and retry_after; wait_seconds (max 25) holds the call and returns the result if ready; the same documents or idempotency_key within 24 h return the same case." },
    { "name": "lanebrief_get_result", "description": "A case's status and, once answered, its findings (red_line findings first and always all of them, then at most 3 others; each with axis, severity, title, detail, saving_usd, red_line, evidence and sources with attribution and latest snapshot), the next step and the answer text. Poll every retry_after seconds." },
    { "name": "lanebrief_get_details", "description": "For an answered case: the other findings, market context and every source." },
    { "name": "lanebrief_account", "description": "The account behind the key: plan, consent, billing allowance and this month's usage." },
    { "name": "lanebrief_market_snapshot", "description": "Public market context, no key needed: newest exchange rates, freight index trend per lane (a trend, not a quote), watched sources with their last update, and attributions. Same JSON as GET /api/market." },
    { "name": "lanebrief_refund_check", "description": "Free, no key: which chapter 99 lines of a CBP 7501 fall in the IEEPA refund window (in_refund_window, not_in_window, not_checked), with the printed duty total, CBP's condition, legal reference and source. Liquidation status is not on the 7501; interest not included. Same JSON as POST /api/public/refund-check." },
    { "name": "lanebrief_last_free_day", "description": "Free, no key: the last free day of demurrage at a US port from the carrier's published tariff (calendar or working days, US holidays), or why it cannot be calculated. A contract may give more. Same JSON as GET /api/public/last-free-day." },
    { "name": "lanebrief_tariff_stack", "description": "Free, no key: the additional-duty layers (Section 301, IEEPA, Section 122, Section 232 with value basis) in force for an HTS number and origin on a date, with status, refund condition and sources; no total duty. Same JSON as GET /api/public/tariff-stack." },
    { "name": "lanebrief_screen", "description": "Free, no key: a company name against the sanctions lists we carry and the UFLPA Entity List (separate uflpa_hits); returns only possible matches, never a clearance. Same JSON as POST /api/public/screen." },
    { "name": "lanebrief_hs_rulings", "description": "Free, no key: find an HTS code by product description (query: up to 3 model suggestions checked against the tariff tables plus text matches of the schedule) or look up a code (code); heading text from the US schedule and the newest CBP CROSS rulings. Suggestions, not a classification. Same JSON as GET /api/public/hs." },
    { "name": "lanebrief_dd_letter", "description": "Free, no key: check a demurrage or detention invoice against its own dates and the carrier's tariff, and get dispute, extension or waiver letter drafts. Same JSON as POST /api/public/dd-letter." },
    { "name": "lanebrief_isf_check", "description": "Free, no key: which of the ten importer ISF elements of 19 CFR 149.3(a) are given and which are missing, and whether each HTSUS number has six digits and is in the HTS; presence and format, not truth. Same JSON as POST /api/public/isf-check." }
  ],
  "documentation": {
    "llms": "https://purserhouse.com/llms.txt",
    "openapi": "https://purserhouse.com/openapi.yaml",
    "rest": "https://purserhouse.com/api/v1/coverage",
    "market": "https://purserhouse.com/api/market",
    "public_tools": "https://purserhouse.com/api/public/"
  },
  "contact": "brief@purserhouse.com"
}
