Your customs data,
inside the tools your team already uses.
The Droblet MCP server exposes the platform as tools for Claude, ChatGPT, Cursor or any MCP client. Ask whether a shipment is ready to file, draft a declaration from its documents, classify a product, screen a party. Nothing is filed from a chat: approval stays in Droblet, where it is authenticated and audited.
24
Tools
OAuth 2.1
PKCE required, S256 only
0
Submit tools, by design
Why an MCP server
Most of a customs team's day is questions. Is this shipment ready to file? What is missing? Which document disagrees with which? What code does this product take, and what duty does that carry? Today those answers live in a web application, and the person asking has to leave whatever they were doing to go and find them.
MCP (Model Context Protocol) lets an AI assistant call tools in another system. The Droblet MCP server makes the platform available that way, so a broker can ask Claude "is case 4471 ready to file" and get the gaps, the disagreements between documents and a link to approve, without opening a second window.
It is built around two rules. It holds no credentials: every call carries the caller's own Droblet token and the tenant is read from that token, never from an argument, so the server can see exactly what the person can see and nothing more. And it cannot file a declaration: there is no submit tool at all. A guard the model cannot reach is worth more than an instruction telling it to be careful.
The tools
Grouped by what they are for. Every list tool is paged and projected, so a response is a summary, not a database dump.
| Tool | What it answers or does |
|---|---|
| whoami | Which account and tenant am I acting for |
| list_shipments | Shipments, optionally by status |
| list_declarations | ENS or CDS declarations |
| get_declaration | One declaration with its goods items |
| list_document_cases | Bundles of documents that belong to one record |
| check_case | Is this ready to file: what is missing, where documents disagree |
| list_schemas | Which document types this account can extract |
| list_extractions | Extracted documents with confidence and review state |
| get_extraction | The fields of one document, with provenance |
| extract_document | Read a document at a URL against a schema, synchronously |
| preview_declaration | What a declaration from this case would look like, creating nothing |
| draft_declaration | Create an ENS draft from the case, with its gaps and assumptions listed |
| prepare_submission | Blocking issues plus a link for a person to approve in Droblet |
| classify_commodity | Candidate commodity codes, ranked, with the words each one matched |
| lookup_duty | Duty, VAT, licences and prohibitions for a code |
| model_landed_cost | Duty, VAT and total cost across a consignment |
| screen_party | Sanctions hits for a party, and how big the list screened was |
| resolve_party | Match a name or identifier against your master data |
| list_master_data | Your registers of suppliers, consignees and codes |
| list_schedules | The checks this account runs on a schedule |
| schedule_check | Have an agent run a task on a schedule and report |
| list_schedule_runs | What those checks produced, failures included |
| list_connectors | Where completed extractions get delivered |
| deliver_extraction | Send one extraction to those targets |
Four worth demonstrating
Most extraction products answer "what does this PDF say". These answer the next question.
check_case
Is this shipment ready, and do its documents agree with each other? Returns the missing fields and every place the invoice, packing list and transport document disagree.
classify_commodity
Returns candidates with the words each one matched on, so the suggestion can be argued with. The declared code is the importer's liability; the tool informs a choice rather than making one.
schedule_check
"Every Monday at 07:00, check inbound shipments for a missing certificate of origin." Runs whether or not anyone opens the app, and reports what it found.
draft_declaration
Paperwork in, a declaration out: the draft, the fields no document supplied, the values derived rather than read, and which document each value came from.
Connecting a client
Point the client at the server. It discovers the rest.
{
"mcpServers": {
"droblet": {
"url": "https://mcp.<your-droblet-host>/mcp"
}
}
}
# or, for a script, the caller's own Droblet token:
curl https://mcp.<your-droblet-host>/mcp \
-H "Authorization: Bearer <droblet access token>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'An unauthenticated call returns 401 with the resource metadata; the client registers, a person signs in on the Droblet consent page, and the client receives a Droblet access token. PKCE is required and only S256 is accepted.
Security model
The parts a security review will ask about.
No stored credentials
The server keeps no tokens and no service account. Every request is made as the person who asked, with their own token.
Tenant from the token
The tenant is read from the authenticated token, never from a tool argument, so a prompt injected into a document cannot reach another tenant's data.
Nothing can file
There is no submit tool. prepare_submission assembles the evidence and returns an approval link; the filing happens in Droblet, authenticated and audited.
OAuth 2.1 end to end
Protected-resource metadata (RFC 9728), server metadata (RFC 8414), dynamic client registration (RFC 7591), PKCE S256 only. The access token issued is a normal Droblet token: one expiry, one revocation.
Projected, paged responses
List tools return summaries with a page-size ceiling. A model asking for "everything" gets fifty rows and a cursor, not the database.
Anticipated failures explained
A missing permission or an unknown case comes back as a clear tool error the model can relay, not a stack trace.
Common questions
Any MCP client over streamable HTTP: Claude (desktop and claude.ai connectors), ChatGPT, Cursor, and anything built on the MCP SDKs. If the client speaks OAuth 2.1 it connects by itself; if not, a pasted bearer token works.
No. It can draft one, check it and hand you a link to approve it. The approval and the filing happen in Droblet, by a signed-in person, and are audited.
Exactly what the signed-in person can see in Droblet, and nothing else. The tenant and permissions come from their token.
Yes, as part of a Private Cloud deployment. We set the server up on your host with your platform URL; the shared platform will expose it per tenant.
See it from inside Claude
A twenty-minute demo: connect, ask whether a case is ready, draft the declaration, approve it in Droblet.