Skip to main content
Glama
kartparash-cmd

Korral StoreLink MCP

Create replenishment order

create_replenishment_order

Submit a replenishment order to restock a single SKU at a specific Korral store. Requires buyer-approved quantity and stock-evidence reason, then returns order ID and confirmation.

Instructions

Submit a replenishment order for one SKU to one Korral store in StoreLink. This is the ONLY write tool on this server, and it has real-world effect: a submitted order feeds Korral's internal distribution run — stock gets picked and a truck gets loaded against it. Treat every call as physically consequential.

CONFIRM BEFORE YOU CALL Get explicit human approval from the category buyer for this exact combination of store, SKU and quantity before calling. Never infer a quantity the buyer did not state or approve, never round a number up "to be safe", and never batch several stores by calling this repeatedly without confirming each one. If the buyer's instruction is ambiguous about quantity or store, ask — do not call and then report what you did.

NO IDEMPOTENCY — A RETRY LOADS A SECOND TRUCK Every call issues a NEW order_id. There is no de-duplication key, no idempotency token, and no way to ask this server whether an equivalent order already exists — there is no list or search, and get_replenishment_status only works on an order_id you already hold. Calling twice with identical store, SKU, quantity and reason creates two orders and two physical picks. If a call fails, times out, or you cannot tell whether it landed, do NOT call again: tell the buyer exactly what arguments you sent, say you cannot confirm the outcome, and let them check with Korral ops. Retry ONLY when the tool returned an explicit error stating nothing was submitted.

THE reason FIELD IS NOT A FORMALITY reason is required and is stored on the order as the audit trail a human will read weeks later. It must be a specific, human-meaningful sentence citing the actual stock evidence you just read from get_stock_position — the store, the numbers and the gap. Good: "Gap of 8 units at store 47 over 24h: on_hand 3 vs 11 sold, buyer approved 24 units." Rejected: whitespace only, a bare number, or placeholder text such as "n/a", "-", "test", "asap". If you have not called get_stock_position for this store and SKU in this conversation, you do not have the evidence to write a valid reason — go and get it.

reason is also written to the buyer's audit log, verbatim, whether the order is accepted or refused. Do not paste credentials, tokens or anything secret into it.

WHAT IT RETURNS

  • order_id Readable, stable identifier, format RPL--, e.g. "RPL-47-001". Keep it — it is the only handle for reading the order back, and you must give it to the buyer.

  • status Lifecycle state, always "submitted" at creation.

  • confirmation One-line human-readable sentence the buyer can paste straight into Slack. Surface it verbatim.

ACCESS ERRORS — nothing was written Every error that opens "Rejected before submission — NO order was created" is a guarantee: no stock moved, and retrying after fixing the cause is safe. That includes the two credential failures, "No credentials for store " and "Authentication failed for store after key reload". Both are access problems, not stock problems: do NOT reroute the order to a store you can reach, do not lower the quantity, and do not tell the buyer the order was placed. Report the message verbatim and let them take it to Korral IT.

WHEN TO USE IT Step 3 of the standard workflow: lookup_sku -> get_stock_position -> create_replenishment_order -> get_replenishment_status. Use it only after a positive gap (or an explicit buyer instruction) has been established with live numbers and the buyer has approved the quantity. Then hand back the order_id and confirmation line.

WHEN NOT TO USE IT — AND WHAT IT CANNOT UNDO Orders here are APPEND-ONLY. This server has no cancel, no delete, no amend, no quantity change and no reschedule — none of the other three tools can do it either, and there is no hidden path to it. If the buyer wants an order stopped or changed after submission, say plainly that this server cannot do it and they must contact Korral ops directly; do not create a compensating or negative order to "fix" it. It also raises nothing with suppliers: it does not create a purchase order to a vendor, does not know lead times, order minimums, costs, price or margin, and will not tell you when the truck arrives. It also refuses a SKU that is not ranged at the target store — that store carries no inventory record for it. That is a merchandising fact, not a retryable error: report it, and do not substitute a different store or a similar SKU to get the call through. Never call it speculatively, to test the tool, or to "see what happens".

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
skuYesExact Korral SKU code to replenish, e.g. "8847291", as resolved by lookup_sku. One order covers one SKU only.
reasonYesRequired human-meaningful justification citing the stock evidence, e.g. "Gap of 8 units at store 47 over 24h: on_hand 3 vs 11 sold in 24h". Whitespace-only, bare numbers, and placeholders like "n/a", "-" or "test" are rejected.
quantityYesWhole number to send, 1-10000, counted in the SKU's `unit` from lookup_sku: pieces when unit is "each", KILOGRAMS when unit is "kg". Fractional quantities are rejected outright, including for kg SKUs. If the buyer approves a fractional weight (e.g. "12.5 kg of bananas"), do not round it yourself in either direction — tell them this system accepts whole kilograms only and ask which whole number they want. Must be a number the buyer explicitly stated or agreed to: never inferred, never rounded to a case or pallet size (this server has no case-size data, so any such rounding is invention), never copied from `gap` without approval.
store_idYesKorral store ID the stock is being sent to, e.g. "47". Must be a store you have just checked with get_stock_position; one order covers one store only.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations. It discloses that every call issues a new order_id with no idempotency token, that retries load a second truck, that orders are append-only with no cancel/delete/amend, and that access errors guarantee nothing was written. It also explains the real-world physical consequence of a submitted order. This is exceptional behavioral disclosure, far exceeding the minimal hint from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long and detailed, but it is very well-structured with uppercase section headers, bullet points, and a clear flow from warning to returns to usage rules. Some redundancy exists (e.g., 'never infer a quantity' appears multiple times, no-idempotency is emphasized in both a section and later limitations), which prevents a 5. However, given the high-stakes nature of the tool, the length is largely justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is remarkably complete. It covers return values (order_id format, status, confirmation line), error semantics (rejected-before-submission guarantee, credential failures), edge cases (SKU not ranged), and integration with sibling tools. It even advises on how to handle ambiguous buyer instructions and failed calls. No output schema exists, so this detailed textual description fully compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds critical safety context. For quantity, it clarifies that the number must be explicitly approved by the buyer, never inferred or rounded to case/pallet size. For reason, it explains the audit-trail function and requires evidence from get_stock_position. For store_id, it adds the constraint that it must be a store just checked and warns against rerouting on auth errors. These enrich the schema meaning substantially.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'Submit a replenishment order for one SKU to one Korral store in StoreLink.' It explicitly labels itself as the 'ONLY write tool on this server,' instantly distinguishing it from its read-only siblings. The scope (one SKU, one store) is also stated up front.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description contains dedicated 'WHEN TO USE IT' and 'WHEN NOT TO USE IT' sections. It positions the tool as step 3 in a named workflow (lookup_sku -> get_stock_position -> create_replenishment_order -> get_replenishment_status), specifies that it should only be used after a positive gap and buyer approval, and explains what the tool cannot do (cancel, amend, create purchase orders). This is explicit, actionable guidance with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kartparash-cmd/korral-storelink-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server