It's your data. Use it however you want.
lastTMS.ai is the TMS stripped to what it actually is: your freight data, served raw. REST, SQL, webhooks, and an MCP server on top so your agents can run freight and render their own interface.
no app mounted
run a prompt — the agent fetches data and the host mounts the tool's interface here
log entries are simulated. the app panel is a real sandboxed iframe running an MCP-App-style document — view its source.
Your process isn't the problem.
Every TMS onboarding starts the same way: your team learns someone else's screens, renames its workflow after someone else's menus, and files feature requests that die in a queue. The software wins. You adjust.
lastTMS.ai inverts the deal. We run the freight database, the rails, and the domain logic. You decide what the software looks like, or whether it looks like anything at all.
- The TMS is a database.
- Loads, rates, carriers, documents, invoices: modeled by people who broker freight, hosted and versioned by us.
- The API is the product.
- Every screen we could have built is an endpoint instead. Nothing is held back for the "premium UI".
- The interface is optional.
- Use ours, build yours, or let your agents render their own — live, in the conversation.
Everything the TMS knows, addressable.
| Surface | What you get | Detail |
|---|---|---|
| REST | Every entity, every event | OpenAPI 3.1 · idempotent writes |
| SQL | Read replicas you can point BI at | Postgres wire · row-level grants |
| WEBHOOKS | Every state change, pushed | signed · at-least-once |
| EXPORT | Your entire history, any time | parquet / csv · no exit fee |
| MCP | The server your agents connect to | streamable http · OAuth |
$ curl api.lasttms.ai/v1/loads?status=uncovered
{
"loads": [
{ "id": "LD-4827",
"lane": "Chicago, IL → Dallas, TX",
"pickup": "2026-08-01",
"status": "UNCOVERED" },
{ "id": "LD-4831", … }
]
}
A TMS your agents can operate.
last-tms is an MCP server with every
operation a broker does exposed as a typed tool. Point Claude at it — or the harness you
built yourself.
loads.searchfind freight by lane, status, date, marginloads.createbook a shipment from structured or messy inputloads.tenderoffer a load to a carrier, get an answerrates.quoteprice a lane from live historycarriers.matchrank carriers for a load by lane historycarriers.scoreon-time, claims, margin — per carriertracking.subscribefollow a load; get called back on eventsdocuments.getrate cons, BOLs, PODs — as datainvoices.postbill the moment the POD landsanalytics.margin_by_carrierwho makes you money, who costs you
{
"name": "loads.search",
"description": "Search loads by lane, status, dates",
"inputSchema": {
"type": "object",
"properties": {
"status": { "type": "string" },
"pickup_after": { "type": "string" }
}
},
"_meta": { "ui": { "resourceUri": "ui://lasttms/load-board" } }
}
Your TMS ships its own interface.
MCP Apps
is the official MCP extension for interactive interfaces. When a tool declares a
ui:// resource, the host fetches it and mounts it in a sandboxed
iframe, right in the conversation. The app calls tools back through the host. The model sees
what changed.
That demo at the top of the page isn't a video. It's three MCP-App-style documents in
real sandboxed iframes, speaking JSON-RPC over postMessage.
- tools/callthe agent runs a tool
- ui://lasttms/load-boardthe tool's declared interface
- sandboxed iframemounted by the host, in-conversation
- tools/call ⟲the app acts; the model sees it
The interface travels with the data
renders today in Claude · Claude Desktop · VS Code Copilot · Microsoft 365 Copilot · Goose · Postman · any MCP Apps host. read the spec →
One database. Any surface you want.
The same loads.search that feeds an agent
feeds your ops app and your Slack alerts. Build the workflow your floor actually runs,
instead of renaming your process after our menus.
Cover LD-4827 before 5pm. Don't go over $2,000.
▸ tools/call carriers.match · loads.tender
#dispatch · tms-bot
LD-4831 still uncovered — picks up Aug 2, Atlanta → Charlotte.
[ tender to Prairie Express · $660 ]
Raw access, governed.
- SCOPED KEYS
- Per team, per entity, per verb. A pricing agent that can quote but never tender.
- ROW-LEVEL GRANTS
- SQL replicas enforce the same policy as the API. No side door.
- AUDIT LOG
- Every read, every write, every tool call. Attributable, exportable.
- SIGNED WEBHOOKS
- Verify the sender, replay-safe, at-least-once delivery.
- SANDBOXED BY DESIGN
- MCP Apps render in host-controlled iframes. The host gates every tool call the app makes.
- NO LOCK-IN
- Bulk export is always on. It's your data — leave whenever you want.
Built by brokers. Opened for agents.
lastTMS.ai runs on the same rails as Sunnybrook TMS, the platform brokers already clear real freight on.
| NETWORK | $1B+ combined revenue across Sunnybrook brokerages |
|---|---|
| CADENCE | 10+ platform enhancements shipped weekly |
| INTEGRATIONS | typically live in about 7 days |
| ORIGIN | built by brokers, for brokers. Now for their agents. |
Stop onboarding. Start building.
Get keys, point your agent at the MCP server, and have a load board in the conversation this afternoon.