kubik-tools
REMOTE · MCP.KUBIK.TOOLS · SCANNED SEP 28
Freight calculators (weight, metres, vehicle fit) and authenticated team packing-library tools.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security46
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (undo_change). See how to fix → View diagnostics → Fail
- HTTPS enforcement could not be verified: the plaintext port answered with HTTP 406, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability60
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5522 tokens (~502/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage96
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 89% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the kubik-tools MCP server?
kubik-tools is a hosted endpoint at https://mcp.kubik.tools/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.kubik.tools
claude mcp add --transport http markopolovic-kubik-tools 'https://mcp.kubik.tools/mcp'
{
"mcpServers": {
"markopolovic-kubik-tools": {
"url": "https://mcp.kubik.tools/mcp"
}
}
} {
"servers": {
"markopolovic-kubik-tools": {
"type": "http",
"url": "https://mcp.kubik.tools/mcp"
}
}
} [mcp_servers.markopolovic-kubik-tools] url = "https://mcp.kubik.tools/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"markopolovic-kubik-tools": {
"type": "remote",
"url": "https://mcp.kubik.tools/mcp",
"enabled": true
}
}
} openclaw mcp add markopolovic-kubik-tools --url 'https://mcp.kubik.tools/mcp' --transport streamable-http
mcp_servers:
markopolovic-kubik-tools:
url: "https://mcp.kubik.tools/mcp" {
"McpServers": {
"markopolovic-kubik-tools": {
"Transport": "http",
"Url": "https://mcp.kubik.tools/mcp"
}
}
} assistant mcp add markopolovic-kubik-tools -t streamable-http -u 'https://mcp.kubik.tools/mcp'
{
"mcpServers": {
"markopolovic-kubik-tools": {
"type": "http",
"url": "https://mcp.kubik.tools/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Sept 26 0
- Schema quality: 4855 → 5522 ▼ functional
- New tool “reconcile_documents” functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 0
- Stability: 0.97 → pass security
- 21 Aug 26 0
- Tool “check_truck_fit” rewrote its description, which is the text the model reads security
- Schema quality: 550 → 485 ▲ functional
- New tool “list_pack_observations” functional
- New tool “resolve_prepack_quantities” functional
- New tool “search_article_profiles” functional
- 11 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 9 Aug 26 0
- Tool “check_truck_fit” rewrote its description, which is the text the model reads security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 28 Sept 2026 · Probed https://mcp.kubik.tools/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=kubik.tools | CN=WE1,O=Google Trust Services,C=US | 6 Sept 2026 | 5 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | 4ee0226f4e5372500e55198a93da71a8 |
| SANs: kubik.tools, mcp.kubik.tools, *.mcp.kubik.tools | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.kubik.tools. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| tools. | present | 13831 | 8 | Verified |
| kubik.tools. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.kubik.tools/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.kubik.tools/mcp | Inconclusive | 406 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
calculate_chargeable_weight Calculate Chargeable Weight ~710
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.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | – | Transport mode (required): one of "air" (Luftfracht), "road", "sea_lcl" (Seefracht), "courier". Selects the default volumetric divisor: air=6000 cm³/kg (IATA), courier=5000 cm³/kg, road=333 kg/m³ (si… |
| pieces | array | – | List of cargo pieces (up to 100 line items, required, non-empty). Use quantity to combine identical pieces rather than repeating rows. |
| volumetric_divisor | number | – | Optional positive override of the mode's default divisor. For air/courier this is cm³ per kg (divided into volume); for road/sea_lcl this is kg per m³ (multiplied by volume). |
No output schema declared.
No examples provided.
calculate_loading_metres Calculate Loading Metres ~613
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).
| Name | Type | Req | Description |
|---|---|---|---|
| pieces | array | – | List of cargo pieces (up to 100 line items, required, non-empty). Use quantity to combine identical pieces rather than repeating rows. |
| vehicle_id | string | – | Optional vehicle profile id (e.g. "semi_136" = Sattelzug 13,6 m, "rigid_75" = 7,5-Tonner). Does not change the LDM calculation (always the fixed 240cm reference lane) -- adds deck_length_m, how much… |
No output schema declared.
No examples provided.
check_truck_fit Check Truck Fit ~991
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…
| Name | Type | Req | Description |
|---|---|---|---|
| pieces | array | – | List of cargo pieces (up to 100 line items), optionally omitted entirely to just look up a vehicle's specs (with vehicle_id) or list all vehicles (without). Use quantity to combine identical pieces r… |
| vehicle_id | string | – | Vehicle profile id to check against or look up (e.g. "semi_136" = Sattelzug 13,6 m, "rigid_75" = 7,5-Tonner). If omitted or not recognized, the response lists every available vehicle instead of guess… |
No output schema declared.
No examples provided.
create_article_profile Create Article Profile ~471
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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| article_number | string | – | Supplier's own article/SKU number, if known. |
| confirm | boolean | – | Set true, with preview_id, to actually create the article after reviewing the preview. Omit or false for a dry-run preview only. |
| description_de | string | – | – |
| description_en | string | – | – |
| hs_code | string | – | HS/tariff code, exactly 8 digits. Format-only check -- not verified against a real tariff database. |
| name | string | yes | Article name, e.g. 'Rotor hub casting'. Required. |
| preview_id | string | – | The preview_id returned by the first (unconfirmed) call. Required when confirm=true. |
| supplier | string | yes | Supplier name. Required. |
No output schema declared.
No examples provided.
list_pack_observations List Pack Observations ~266
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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| group_name_query | string | yes | Free-text search over the consolidation group's own name, e.g. 'pallet mix A' or 'mixed cartons'. |
No output schema declared.
No examples provided.
log_pack_observation Log Pack Observation ~521
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).
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| confirm | boolean | – | Set true, with preview_id, to actually log the observation after reviewing the preview. Omit or false for a dry-run preview only. |
| consolidation_group_id | string | yes | The id of an existing consolidation group in your team's Library. Required. |
| height_cm | number | yes | – |
| length_cm | number | yes | – |
| member_quantities | array | yes | The articles and quantities actually packed together, e.g. [{article_number: 'MLB1001', qty: 3}]. |
| pallet_count | integer | yes | Number of pallets this pack used. |
| preview_id | string | – | The preview_id returned by the first (unconfirmed) call. Required when confirm=true. |
| weight_kg | number | yes | Total gross weight, in kg. |
| width_cm | number | yes | – |
No output schema declared.
No examples provided.
reconcile_documents Reconcile Export Documents ~667
Reconciles a shipment's export documents against each other and returns the seven checks from the kubik.tools Export-Set: whether the gross weights add up, whether every net weight comes from a measured source or is marked as an estimate, whether the values match the invoice TOTAL (freight and loading as their own line, not a subtotal), whether each Kollo's allocated articles equal that Kollo's own gross — per package, never in aggregate, whether the net weights on the invoice tie to the Speditionsauftrag article for article, whether the mandatory fields (tariff number and country of origin) are filled on every position, and whether the same article carries the same tariff number across every document supplied, matched through the alias table rather than by string equality. Give it the sheets as plain rows of cells — exactly what you would read out of the spreadsheet, header row and title block included. Do NOT pre-clean them: where the header sits relative to a title block is one of the things the engine reads, and removing blank rows or columns destroys it. invoice and packing are required; spedi (the forwarder's Speditionsauftrag) is optional and, when present, is what checks 5 and 7 compare against instead of the packing list. What it does NOT do: it does not produce the Exportdatenblatt workbook, it does not invent a tariff number or a country of origin (a missing one is reported by check 6, never filled in), and it does not store anything — no row of these documents is kept or logged. Read the verdict first. It names what to do next, not a score: "pass" — every check ran and agreed; "attention" — at least one check found the documents contradicting each other, and flagged_checks names which; "confirm_aliases" — no contradiction, but an article number on one document has no counterpart on the other, which a human confirms as an alias rather than fixes; "incomplete" — a check could not run at all (no Kollo was found on the packing list), so this is not a pa…
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| invoice | array | yes | The commercial invoice sheet. Required. |
| invoice_sheet_name | string | – | Sheet name as it appears in the workbook. Cosmetic; defaults to 'Rechnung'. |
| packing | array | yes | The packing list sheet. Required. |
| packing_sheet_name | string | – | Sheet name as it appears in the workbook. Cosmetic; defaults to 'Packliste'. |
| spedi | array | – | The forwarder's Speditionsauftrag, if you have it. Optional — checks 5 and 7 compare against it when present. |
| spedi_sheet_name | string | – | Sheet name as it appears in the workbook. Cosmetic; defaults to 'Speditionsauftrag'. |
No output schema declared.
No examples provided.
resolve_prepack_quantities Resolve Prepack Quantities ~371
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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| article_class_query | string | yes | Free-text search over the prepack table's own article_class label, e.g. 'small metal fittings' or 'cable ties'. |
| quantity | number | yes | The ordered quantity to resolve, in whole units of the class. Must be a positive number. |
No output schema declared.
No examples provided.
resolve_quantities Resolve Article Quantities ~462
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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| article_query | string | yes | The article number or name to search for in the Library, e.g. 'MLB1001' or 'rim holder'. |
| quantity | number | yes | The ordered quantity to resolve, in whole units of the article. Must be a positive number. |
No output schema declared.
No examples provided.
search_article_profiles Search Article Profiles ~229
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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| query | string | – | Article number or name substring to search for, e.g. 'MLB1001' or 'rim holder'. Leave empty to browse the first 10 articles in the Library. |
No output schema declared.
No examples provided.
undo_change Undo Recent Change ~221
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.
| Name | Type | Req | Description |
|---|---|---|---|
| api_key | string | yes | Your team's kubik.tools MCP API key (kubik_mcp_...). Required. |
| table | string | yes | Which kind of change to undo, matching the undo_token's origin (create_article_profile -> article_profiles, log_pack_observation -> consolidation_pack_observations). |
| undo_token | string | yes | The undo_token returned by the original confirmed create_article_profile or log_pack_observation call. |
No output schema declared.
No examples provided.
What is the kubik-tools MCP server?
kubik-tools is an MCP server listed in the public MCP registry as io.github.markopolovic/kubik-tools. Freight calculators (weight, metres, vehicle fit) and authenticated team packing-library tools. This page covers its hosted endpoint (https://mcp.kubik.tools/mcp).
Is the kubik-tools MCP server safe to use?
kubik-tools scores 71 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the kubik-tools MCP server expose?
kubik-tools exposes 11 tools: calculate_chargeable_weight, resolve_quantities, resolve_prepack_quantities, search_article_profiles, create_article_profile, and 6 more. Their descriptions and schemas cost roughly 5,522 tokens of context every time the server is loaded.
Does the kubik-tools MCP server require authentication?
No. We connected to kubik-tools without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the kubik-tools MCP server still maintained?
kubik-tools is still listed as active in the MCP registry. We last reached this channel on 28 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.