bol-ai

Extract structured data from Bills of Lading: parties, ports, containers, incoterms. EU-hosted.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
80%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,011Tokens (tool definitions)
~478 BTypical response size
Moderate attention impact (0.79% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "bol-ai": {
      "url": "https://bol.ai/api/mcp"
    }
  }
}

Remote endpoints

https://bol.ai/api/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢extract_bol(url, base64, filename)

Extract structured data from a freight document (PDF, PNG or JPG, max 10 MB): Bill of Lading, commercial invoice, packing list, or CMR road waybill. The document type is detected automatically and returned as `doc_type`. Provide either a fetchable `url` or `base64` file content. Fields not present in the document are null — never guessed. Each successful extraction bills one document.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "URL of the document to fetch and extract"
    },
    "base64": {
      "type": "string",
      "description": "Base64-encoded file content (alternative to url)"
    },
    "filename": {
      "type": "string",
      "description": "Filename including extension, e.g. shipment-4711.pdf"
    }
  }
}
🟢extract_batch(urls)

Extract up to 10 freight documents in one call. Provide an array of fetchable URLs; each document is processed and billed independently, and the response reports a per-document outcome so partial success (e.g. running out of credits mid-batch) is explicit.

Input Schema

{
  "type": "object",
  "properties": {
    "urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "maxItems": 10,
      "description": "URLs of documents to fetch and extract (max 10)"
    }
  },
  "required": [
    "urls"
  ]
}
🟢list_documents

List the 100 most recent documents for this account with id, filename, status (pending/done/failed), doc_type and primary reference number.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_document(id)

Get the extraction result for a document by id: doc_type, extracted fields, user corrections (when present), and deterministic verification warnings (ISO 6346 container check digits, plausibility flags). `fields` is the best available data (corrections win); `original_fields` and `corrected_fields` show both sides.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Document id"
    }
  },
  "required": [
    "id"
  ]
}
🟡save_corrections(id, fields)

Save corrected field values for an extracted document. The original extraction is kept alongside the corrections; corrected data takes precedence in get_document, exports and reconciliation. Pass the complete corrected fields object (same shape as returned by get_document).

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Document id"
    },
    "fields": {
      "type": "object",
      "description": "Complete corrected fields object, including doc_type"
    }
  },
  "required": [
    "id",
    "fields"
  ]
}
🟢get_related_documents(id)

Cross-document reconciliation: find the other documents in this shipment (linked by shared reference numbers such as B/L number and invoice number) and compare them field by field — shipper/seller and consignee/buyer names, total gross weight (5% tolerance) and package counts. Returns matches and mismatches per linked document. Catches the discrepancies that cause customs holds, amended entries and demurrage. Deterministic — no extra document billed.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Document id to reconcile against the rest of the account"
    }
  },
  "required": [
    "id"
  ]
}
🟢export_documents(type, max_rows)

Export completed extractions as TMS/ERP-ready normalized line rows (one row per container / invoice line / package / goods line), newest first. Optional doc_type filter and max_rows cap. Corrected data wins over the original extraction. For CSV/XLSX files use GET /api/bol/export on the REST API.

Input Schema

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "bill_of_lading",
        "commercial_invoice",
        "packing_list",
        "cmr"
      ],
      "description": "Only include documents of this type"
    },
    "max_rows": {
      "type": "number",
      "description": "Maximum rows to return (default 500)"
    }
  }
}
🟢get_usage

Check this account's remaining prepaid credits and subscription status. Call this before large batches to avoid running out of credits mid-workflow. When the account cannot bill more documents, a human can top up at the returned buy_credits_url.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools