mcpbeat Sign in

kubik-tools MCP Server

by markopolovic Your server? Claim it
answering

kubik-tools is answering right now. Last checked 3 min ago. It exposes 10 tools.

Freight calculators (weight, metres, vehicle fit) and authenticated team packing-library tools.

Uptime history 51 days of history · worst day 96%
51 days agonow
100.0%
Uptime 24h
91 of 91 checks
10
Tools
read from the server
1021 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 5

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 20 August 2026. No other catalogue keeps this.

20 Aug 3 tools appeared list_pack_observations, resolve_prepack_quantities, search_article_profiles
20 Aug a tool description was rewritten check_truck_fit
20 Aug a tool changed the parameters it asks for check_truck_fit

kubik-tools does not always answer

Over the last week it answered 99.4% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 3 min ago.

run in your terminal
claude mcp add kubik-tools --transport http https://mcp.kubik.tools/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "kubik-tools": {
      "url": "https://mcp.kubik.tools/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.kubik-tools]
url = "https://mcp.kubik.tools/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "kubik-tools": {
      "url": "https://mcp.kubik.tools/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "kubik-tools": {
      "url": "https://mcp.kubik.tools/mcp"
    }
  }
}

Available tools 10

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

article
create_article_profile
Creates a new article in your team's kubik.tools Library -- team-scoped from creation, visible to the whole team immediately (not a personal draft). Two-step by design, never a silent write: call once WITHOUT confirm to get a preview of exactly what would be created (including a check for an existing article that looks like a likely duplicate); call again with confirm=true and the preview_id from the first response to actually create it. A confirmed creation can be undone within 15 minutes via undo_change -- after that, edit or delete it directly in the app. On the confirm call, only api_key, confirm, and preview_id are actually read -- every other field is required/optional per the schema for shape-consistency but ignored if resupplied, since the values captured during the preview call are what gets created; to change any of them, call again without confirm for a fresh preview. Do not use this to log a real packing observation for an article that already exists -- use log_pack_observation instead; this tool only creates the article record itself, never packing data. Do not skip the unconfirmed preview call even if you are confident there is no duplicate -- the duplicate check only runs on that first call, and confirm=true without a fresh preview_id will be rejected. Required: name, supplier. Optional: article_number, hs_code (exactly 8 digits if given), description_de, description_en.
search_article_profiles
Searches your team's kubik.tools Library for article profiles by article number or name (case-insensitive substring match). Returns up to 10 matches: id, article_number, name, supplier. Leave query empty (or a single common substring) to browse -- this returns whatever matches, sorted however the underlying table naturally orders (no ranking beyond "matched or not"), never a full unfiltered dump beyond the 10-result cap. Use resolve_quantities once you've found the article you want to resolve a quantity against; use this tool first to find its exact article_number/id if you only have a rough description. Requires an MCP API key (Authorization: Bearer <key>) issued for a kubik.tools team. Only ever returns that team's own Library -- never across teams.
calculate
calculate_chargeable_weight
Calculates chargeable (billable) weight -- frachtpflichtiges Gewicht, Frachtgewicht -- for a freight shipment (Stückgut or Sammelgut) from a list of cargo pieces, for one of four transport modes. Answers questions like "wie viel wiegt die Sendung frachtpflichtig" or "was ist das Volumengewicht". For each mode, chargeable weight is the greater of the actual (scale) weight and the volumetric weight (Volumengewicht), where volumetric weight is derived from total volume using a mode-specific default divisor (overridable via volumetric_divisor): - air (Luftfracht): volume_cm3 / 6000 (IATA standard, 167 kg/m3) - courier: volume_cm3 / 5000 (common express-carrier convention, e.g. DHL/FedEx/UPS) - road: volume_m3 * 333 (simple volumetric "1:3" convention; does not model Lademeter/LDM-based road pricing -- for loading-metre, Stellplätze, or vehicle-fit questions, use calculate_loading_metres and check_truck_fit instead, both on this server) - sea_lcl (Seefracht): volume_m3 * 1000 (W/M -- weight or measurement, 1 revenue tonne per m3) Worked example: 2 pieces, 60x40x50cm, 45 kg each, air mode -> total actual weight 90 kg, total volume 0.24 m3, volumetric weight 40 kg (240,000 cm3 / 6000) -> chargeable weight 90 kg (actual weight governs, since it exceeds the volumetric weight). Rounding: air and courier chargeable/volumetric weight round UP to the nearest 0.5 kg (chargeable_weight_raw_kg gives the unrounded value, chargeable_weight_kg the rounded one). Road and sea_lcl are not rounded up, just reported to 1 decimal place. Edge cases: missing or invalid mode, more than 100 pieces, or any non-positive dimension/weight/quantity returns a clear, structured explanation rather than an error stack -- never a guessed default mode or divisor. Returns total actual weight, total volume, volumetric weight, raw and rounded chargeable weight, which one governs, the divisor used, and a one-line human-readable summary.
calculate_loading_metres
Calculates loading metres (Lademeter, LDM) -- the floor-space unit (Ladefläche) that governs European road freight -- for a list of cargo pieces, plus the equivalent number of pallet places (Palettenstellplätze, Stellplätze). Answers questions like "wie viele Lademeter" or "wieviel Platz brauche ich im Lkw". Units: length_cm and width_cm (Länge/Breite in cm) per piece. weight_kg_per_piece (Gewicht in kg) is optional. Formula: LDM = sum(length_cm x width_cm x quantity) / reference_deck_width_cm / 100. Height is irrelevant here -- LDM is a floor-footprint metric, not a volume one (for volumetric/chargeable weight, use calculate_chargeable_weight instead). Reference width: Lademeter (LDM) is always computed at the fixed 240cm (2.4m) reference lane -- this is a commercial road-freight convention, not a DIN/EN/ISO/VDI standard, and does not vary by vehicle. If vehicle_id names one of the loadable vehicle profiles (e.g. "semi_136" = Sattelzug 13,6 m, "rigid_75" = 7,5-Tonner), the response additionally reports deck_length_m: how much of that specific vehicle's own deck length the cargo occupies -- a different, vehicle-specific quantity, not the LDM figure. Pallet-place equivalents are also computed at the 240cm reference lane. Worked example: 8 Europaletten/EUR-Paletten (120cm x 80cm) at the standard 240cm width = (120*80*8)/240/100 = 3.2 LDM, equivalent to 8 Palettenstellplätze (one Europalette occupies 0.4 LDM at this width). An Industriepalette (120x100cm) occupies more floor space per unit: 0.5 LDM at the same width. Edge cases: an unknown vehicle_id returns the list of available vehicles instead of guessing -- it never silently picks one. If any piece omits weight_kg_per_piece, total_weight_kg is returned as null rather than an incomplete partial sum. Maximum 100 piece lines (use quantity to combine identical pieces).
resolve
resolve_prepack_quantities
Resolves an ordered quantity of a CLASS of goods into concrete prepack units (boxes/cartons), using that class's own logged prepack table -- a class-level lookup (e.g. "small metal fittings"), not a single article. Use resolve_quantities instead when you have a specific article number/name. Check resolution_status first: "resolved" means units/tier are a real answer, safe to use directly. "not_found" means no prepack table matched the search text, or the matched table has no threshold rules logged -- units/tier are both null. Prepack tables never produce "ambiguous" results (unlike resolve_quantities) -- a table either resolves or it doesn't, there is no packaging-family choice to make. When resolution_status is "resolved", tier is one of: "observed" (an exact match against a real logged threshold), "estimated" (interpolated between two real logged thresholds), or "verify" (extrapolated beyond the highest -- or below the lowest -- threshold ever actually logged for this table; still returns a real number, but flagged as needing a human's eyes before it's trusted). Requires an MCP API key (Authorization: Bearer <key>) issued for a kubik.tools team. Looks the prepack table up by its own article_class text within that team's own Library -- never across teams.
resolve_quantities
Resolves an ordered quantity of a Library article into concrete packed units (boxes/pallets), using that article's own logged packing history -- never a generic guess. Check resolution_status first: "resolved" means units/tier are a real answer, safe to use directly. "ambiguous" means the article has more than one viable packaging family (e.g. logged both as pallets and as crates) with meaningfully different pack counts -- units and tier are both null, and alternatives lists every viable option with no default among them. When resolution_status is "ambiguous", do not select an alternative autonomously -- present the options to the user and ask which packaging family they mean; do not guess based on which one appears first. "not_found" means the article has no packed-form data logged at all -- there is nothing to resolve, alternatives is absent, and units/tier are null. needs_confirmation (boolean) is kept only for backward compatibility with callers written before resolution_status existed -- new integrations should check resolution_status. When resolution_status is "resolved", tier is one of: "observed" (an exact match against a real logged pack), "estimated" (interpolated between two real logged points), or "verify" (extrapolated beyond the highest -- or below the lowest -- quantity ever actually logged for this article; still returns a real number, but flagged as needing a human's eyes before it's trusted). Does not resolve prepack-table or consolidation-group quantities -- those use the same tier engine but a different lookup key (a table/group id, not a free-text article search) and are not covered by this tool. Requires an MCP API key (Authorization: Bearer <key>) issued for a kubik.tools team. Looks the article up by article number or name within that team's own Library -- never across teams.
log
log_pack_observation
Logs a real, observed consolidation pack -- "these articles, at these quantities, actually packed onto N pallets at these dims/weight" -- against an existing consolidation group in your team's Library. This is ground truth: it becomes a new data point resolve_quantities and the app's own resolve flow learn from (PRINCIPLES.md P-13). Two-step by design: call once WITHOUT confirm to preview exactly what would be logged; call again with confirm=true and the preview_id to actually log it. A confirmed log can be undone within 15 minutes via undo_change -- after that it's permanent (append-only ground truth, by design -- see PRINCIPLES.md P-17/P-18 for why). On the confirm call, only api_key, confirm, and preview_id are actually read -- every other field is required by the schema for shape-consistency but ignored if resupplied, since the values captured during the preview call are what gets logged; to change any of them, call again without confirm for a fresh preview. Do not use this for a single article's own packing history outside a consolidation group -- that data comes from the app's own data entry, not this tool. Do not use this to correct a mistaken past observation after the 15-minute undo window -- log a new, correct observation instead; past ones are never edited. Requires an EXISTING consolidation_groups id -- this tool cannot create a new consolidation group. Requires an existing consolidation_groups id (from the app's Consolidation Groups screen) and each member article's number (resolved to its profile automatically).
pack
list_pack_observations
Lists the real, observed consolidation packs logged against a consolidation group in your team's Library -- "these articles, at these quantities, actually packed onto N pallets at these dims/weight," the same ground-truth data resolve_quantities/resolve_prepack_quantities and the app's own resolve flow learn from (PRINCIPLES.md P-13). Use this to see what's already been logged for a group before deciding whether a new observation (log_pack_observation) is needed, or to review a group's own observation history. Each observation's member_quantities are resolved to article_number/name for readability -- never a bare internal id. Returns an empty observations array (not an error) for a group that exists but has no observations logged yet -- a real, valid state, not a failure. Requires an MCP API key (Authorization: Bearer <key>) issued for a kubik.tools team. Looks the consolidation group up by its own name text within that team's own Library -- never across teams.
truck
check_truck_fit
Checks whether a list of cargo pieces fits a named vehicle. Two capacity limits always checked: loading metres (Lademeter, LDM, Stellplätze) and, if weight is given, payload (Zuladung, Nutzlast). When every piece ALSO carries height_cm, a third, stronger check runs too: a real 3D placement simulation (the SAME stacking/shelf-packing engine kubik.tools' own planner uses, not an approximation) -- this becomes the authoritative fits verdict, since it can correctly say "fits" for a load that stacks well even when the raw floor-footprint LDM math alone would have said "doesn't fit". Still not Ladungssicherung (load securing) or axle-load distribution. Vehicle profiles (vehicle_id -> German name): "semi_136" = Sattelzug/Sattelauflieger 13,6 m (colloquially also "40-Tonner"), "curtain_136" = Planensattel 13,6 m, "flatbed_136" = Pritsche 13,6 m, "rigid_75" = 7,5-Tonner, "midi_12" = 12-Tonner/Koffer-Lkw, "rigid_18" = 18-Tonner, "rigid_26" = 26-Tonner (3-Achser), "drawbar_40" = Hängerzug, "sprinter_l3h2" = Mercedes Sprinter L3H2 (3,5t), "ducato_l4h2" = Fiat Ducato L4H2 (3,5t), "cont_20"/"cont_40"/"cont_40hc" = 20-/40-/40-Fuß-HC-Container. Cargo like a Gitterbox/Rollbehälter is just another piece by footprint -- no separate cargo-type parameter needed. Units: length_cm/width_cm/height_cm per piece in centimetres (Länge/Breite/Höhe in cm), weight_kg_per_piece in kilograms (Gewicht in kg). height_cm is optional -- omit it and only the LDM/payload check runs; weight_kg_per_piece is optional too -- if omitted, the payload check is honestly skipped, not guessed. rotatable (default true) says whether a piece may be turned 90° on the floor to fit; fragile (default false) marks a piece nothing heavier should stack on top of, unless it's genuinely load-bearing. Three modes, by what's given: (1) vehicle_id + pieces -> full fit check; if it does NOT fit, the response additionally includes recommended_vehicles -- the smallest fitting alternatives by payload, e.g. cargo that overloads a 7,5-Tonner might fit a 12-Tonner or 18-Tonner instead (suggest, never auto-pick). (2) vehicle_id alone, no pieces -> that vehicle's own payload_kg/max_ldm_m/deck_width_cm, a plain spec lookup (e.g. "wie viele Stellplätze hat ein Standard-Sattelzug" or "maximale Zuladung Sattelzug"). (3) neither given, or pieces given with no vehicle_id -> the full vehicle list, filtered to fitting ones when pieces were given. An unrecognized vehicle_id also returns the full list -- it never assumes which vehicle you mean. Worked example: 6 Europaletten (120x80cm), 4.8 tonnes total, against vehicle_id "rigid_75" -- loading metres (2.5 LDM) are well within the 6.2m limit, but 4800kg exceeds the 3500kg payload, so fits=false, limiting_constraint="payload", recommended_vehicles lists "midi_12" (12-Tonner) and "rigid_18" (18-Tonner) first -- the smallest vehicles that hold 4.8t. Edge cases: if no vehicle profile fits the given cargo at all, says so honestly ("exceeds all vehicle profiles") rather than recommending an impossible option. Utilisation percentages are uncapped on purpose (an overloaded plan reads "137%", not a reassuring clamped "100%"). Maximum 100 piece lines.
undo
undo_change
Undoes a create_article_profile or log_pack_observation call, but only within 15 minutes of when it was confirmed, and only if nothing else now depends on it. For article_profiles: refuses if any packed_forms, consolidation_group_members, or edit-history rows now reference the article (edit it or delete it manually in the app instead of undoing). For consolidation_pack_observations: append-only ground truth past the 15-minute window, by design (PRINCIPLES.md P-17/P-18) -- undo only exists for a mistake caught immediately after logging it, never as a general edit/delete capability.

Endpoints

URLTransportStateLatencyChecked
https://mcp.kubik.tools/mcp streamable-http answering 942 ms 3 min ago

Alternatives to kubik-tools

same job, measured the same way
Rundida MCP
by xweaponx7

Running tools for AI agents: 92 calculators, 46 guides, marathon data, pace and HR zones.

35 installs/wk local only
11FGB Cleaning Tools
by kossik

Free US cleaning cost, time, crew, and chemical-use calculators with visual reports.

4 tools answering
AgenTrux
by agentrux

Authenticated event topics for agent-to-agent messaging with per-agent credentials and audit logs.

answering
Agents Wiki
by agents-wiki

Public agent wiki: read-only search and article tools; authenticated write tools on /mcp/write.

5 tools answering
Moltline Shipping Maths
by moltlinestudio

Dimensional weight, parcel fit, landed cost and freight class. 4 of 6 tools free.

6 tools answering
Moltline Optimize
by moltlinestudio

Vehicle routing, 3-D packing, cutting stock, rostering and knapsack with OR-Tools. 7 of 11 free.

11 tools answering
Browser
by cherchyk

MCP server for loading authenticated web pages using Chrome DevTools Protocol

local only
Economicium
by economicium

Free finance and trading calculators as MCP tools: risk/reward, RMD, Coast FIRE, inflation.

18 tools answering

kubik-tools — questions

Answers built from our own checks of this server.

What can kubik-tools do?
It exposes 10 tools, read directly from the server on our last check. Among them: calculate_chargeable_weight, calculate_loading_metres, check_truck_fit, create_article_profile, list_pack_observations, log_pack_observation and 4 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is kubik-tools mostly used for?
Its tools cluster around resolve, calculate and article. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is kubik-tools working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 1021 ms. The bar chart above shows every period we have measured.
How do I connect kubik-tools?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does kubik-tools need an API key?
No. kubik-tools completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 10 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is kubik-tools?
It answers our handshake in 1021 ms on average, which is faster than 10% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.