Skip to main content
The muveya MCP server offers ten tools. All of them are read-only: each one is marked with readOnlyHint: true, and none can create, change or approve anything. tools/list returns them in this order.

How to read this page

  • Scope. Each tool’s description, as a client shows it, ends with a sentence such as “Requires the inventory.read scope granted to this connection.” That name is the internal permission. The table above maps it to the OAuth scope you ask for. The check happens when the tool is called, before anything is read; a missing scope answers common.forbidden.
  • Arguments. Every argument is optional unless marked required. Arguments are strict: a name the tool does not declare (for example tenantId or clinicId) is rejected, and so is a value outside the limits shown. No tool accepts a workspace selector: the workspace always comes from the connection.
  • Results. A result is one text item holding a JSON document. The field tables below describe that document. A field marked “only with” is absent when the connection lacks the scope; it is never null.
  • Ids. Ids are opaque strings. The same id works in the console address bar, in the /v1 API and in other tools. Names of people are not available through MCP: a field such as requesterId is an id.
  • Language. On the OAuth connection endpoint, titles, descriptions, error texts and labels come back in the requested language. Tool and field names never change.
  • Example questions are what a manager could type to an assistant connected to muveya. The assistant decides which tool to call.

clinics.list

List clinics and warehouses. Lists the locations (clinic sites) and warehouses your membership can access, with each one’s id, name and status. Assistants use it to discover the ids other tools need. The result has two complete lists, in creation order, including inactive sites: Example questions:
  • “Which warehouses does Clínica Norte have?”
  • “List our inactive locations.”
Search the catalog. Searches the catalog by item name or SKU and returns the matching items with their unit, category and status. Cost appears only when the connection may see it.
string
Text to find in the item name or the SKU. Case-insensitive, matched anywhere in the value. 1 to 120 characters. Without it, the tool returns items of the chosen status.
string
default:"active"
Lifecycle status to search: active, inactive or draft.
The result is { items, truncated }. It holds at most 50 items, oldest first. When truncated is true, more items matched: ask again with a more specific term.
Only a verified cost applies to the item’s current unit. A cost in review_required or invalid is not a price you can use. See Costs.
Example questions:
  • “Search the catalog for nitrile gloves.”
  • “Which catalog items are still in draft?”
  • “What does a box of GLV-NIT-M cost?” (answers only if the connection has catalog.cost:read)

inventory.check

Check stock availability. Returns how much of one catalog item is on hand, reserved and available in each warehouse, optionally for one warehouse only.
string
required
Id of the catalog item, 1 to 64 characters. An assistant usually finds it first with catalog.search.
string
Id of one warehouse, 1 to 64 characters, to narrow the answer to it.
Example result
The figures add up the balance of every box of the item in each warehouse. They do not say which boxes are expired or in quarantine; use Boxes in the console for box detail. A warehouse without boxes of the item is not listed, and an item with no stock (or an id that does not exist) returns an empty warehouses list, not an error. Example questions:
  • “How many GLV-NIT-M boxes are available in each warehouse?”
  • “Is there any stock of that item in Bodega Central?”

orders.get

Get an order. Returns one order by its id, with its lines, status and approval plan.
string
required
Id of the order, 1 to 64 characters. It is the opaque id, not the order number. In the console you can copy it from the address of the order page, console.muveya.com/orders/ followed by the id.
If no order with that id exists in your account, or the id is malformed or belongs to another account, the result is isError with code orders.not_found. MCP has no tool to list or search orders; to list them, use GET /v1/orders or the Orders screen. Example questions:
  • “What is the status of order 6650cc00000000000000c001, and which approval steps does it need?”
  • “Which items and quantities are on that order?”

approvals.list_pending

List pending approvals. Returns the orders waiting for the connected person’s own approval decision. This tool reads a person’s approval inbox. The connection acts as the signed-in clinic member, but the current read-only OAuth scopes do not include approvals.decide, so the call is refused before anything is read. To review and decide approvals today, use Order approvals in the console: see Approvals. For a count of pending approvals, use management.briefing, whose figures include the approval backlog by age. Example question: “What is waiting for my approval?” (with OAuth the assistant will report that the tool is not allowed)

management.pending_decisions

Pending management decisions. The same approval inbox as approvals.list_pending, presented for managers: each order with its submission time (to judge its age against a service level), its steps and the value hidden unless the reader may see it. It returns exactly what approvals.list_pending returns and is refused for the same reason. Use Order approvals in the console, or management.briefing for the backlog figures. Example question: “Which decisions have been waiting on me for more than two days?”

fulfillment.get_pick_list

Get a pick list. Returns the boxes to pick for one order, nearest expiry first (FEFO), only boxes still active.
string
required
Id of the order to pick, 1 to 64 characters.
Picking is work done by a person at a warehouse, so this tool checks the picker’s own permission. The current OAuth scopes do not grant fulfillment.pick (fulfillment:read does not). For a person, each line would carry lineId, catalogItemId, sku, boxId, boxCode, warehouseId, quantity, picked, requiresSeparation and, when tracked, lotNumber and expiryDate; never cost, value or patient reference. To pick today, use Deliveries in the console: see Picking. Example question: “Which boxes do I pick for this order?”

analytics.consumption

Consumption per supply. Returns how much of each supply was consumed over time, each supply in its own unit, as an evidence report. It never adds up different supplies or units.
string
Start of the window, ISO-8601 (for example 2026-08-01T00:00:00Z), inclusive. 1 to 40 characters. Defaults to 30 days before to.
string
End of the window, ISO-8601, exclusive. 1 to 40 characters. Defaults to now.
string
default:"day"
Bucket size: day or week. Buckets follow UTC.
string
Id of one catalog item, 1 to 64 characters, to narrow the report to it.
from must be earlier than to, and the window can be at most 366 days. A date that cannot be read, a backwards window or a longer one returns isError with code common.invalid_request. usedQuantity is stock recorded where it was used; issuedQuantity is stock delivered to rooms that do not count their stock, an estimated consumption. The two add up to the consumed quantity. Management analytics explains each figure. Example questions:
  • “How many units of each supply did we use per week in August?”
  • “Show me the daily consumption of GLV-NIT-M over the last 30 days.”

management.briefing

Management briefing. Returns the reproducible management briefing (a digest where every figure links to its source metric and evidence id) together with the ranked list of operational exceptions.
string
default:"daily"
daily or weekly. It decides whether the consumption figures inside the briefing are grouped by day or by week; the other figures do not change with it.
The result is { briefing, exceptions }. The drillDownId of an exception is the id of an order, a stock movement or a catalog item. An order id opens with orders.get, an item id with inventory.check. Management analytics defines every figure. Example questions:
  • “Give me today’s briefing and the three most urgent exceptions.”
  • “What changed this week? Use the weekly briefing.”

management.compare_clinics

Compare clinics. Ranks your locations by order volume, with the metric definition shown. Every value is a count. Every location is listed, including those with no orders. The list is sorted by totalOrders, highest first; ties are ordered by clinicId. Example questions:
  • “Which location placed the most orders?”
  • “Compare our locations by pending approvals.”

MCP server

Scopes, redaction, audit and errors.

Connect a client

Set up Claude Code, Claude Desktop, Cursor or your own client.

Resources

Reference documents that help an assistant read these results.

Management analytics

The definition of every management figure.