// Generated from the same zod schemas Qty registers on MCP. // npm install ai @qty/client import { jsonSchema, tool } from "ai"; export const qtyTools = { "convert": tool({ description: "Free. Convert a finite number between two known unit codes, including mpg, L/100km, kWh/100km, W/m², flow, power, and gas mark. Messy text returns use_parse. Call paid parse instead.", inputSchema: jsonSchema({ "type": "object", "properties": { "value": { "type": "number", "description": "Finite number. Messy text belongs on parse." }, "from": { "type": "string", "description": "Source unit code from GET /units." }, "to": { "type": "string", "description": "Target unit code from GET /units." } }, "required": [ "value", "from", "to" ], "additionalProperties": false }), }), "units": tool({ description: "Free. List unit codes, aliases, dimension, and definition id.", inputSchema: jsonSchema({ "type": "object", "properties": {}, "additionalProperties": false }), }), "parse": tool({ description: "Paid $0.002. Interpret messy quantity text, including number words such as two dozen and gas mark 4. Unknown amounts are null with a reason. Does not invent a number.", inputSchema: jsonSchema({ "type": "object", "properties": { "text": { "type": "string", "description": "Messy quantity text, including number words such as two dozen." }, "to": { "description": "Optional target unit code.", "type": "string" }, "system": { "type": "string", "enum": [ "us", "imperial", "si" ], "description": "us, imperial, or si. Omit when the unit is unambiguous." }, "holidays": { "description": "YYYY-MM-DD holiday dates.", "type": "array", "items": { "type": "string" } }, "referenceDate": { "description": "YYYY-MM-DD when the text does not name a date.", "type": "string" } }, "required": [ "text" ], "additionalProperties": false }), }), "batch": tool({ description: "Paid $0.01. Parse up to 100 messy texts. One bad row does not fail the batch.", inputSchema: jsonSchema({ "type": "object", "properties": { "items": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "text": { "type": "string" }, "to": { "type": "string" }, "system": { "type": "string", "enum": [ "us", "imperial", "si" ], "description": "us, imperial, or si. Omit when the unit is unambiguous." } }, "required": [ "text" ], "additionalProperties": false } } }, "required": [ "items" ], "additionalProperties": false }), }), "receipt": tool({ description: "Paid $0.001. Canonical audit JSON and sha256 of a previous Qty result. The hash ignores the timestamp.", inputSchema: jsonSchema({ "type": "object", "properties": { "payload": { "description": "A previous Qty result. Extra fields are hashed.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false }), }), "compare-prices": tool({ description: "Paid $0.002. Normalise unit prices and say which offer is cheaper. Currency is a label only.", inputSchema: jsonSchema({ "type": "object", "properties": { "offers": { "type": "array", "items": { "type": "string" } }, "text": { "description": "Alternative to offers. Split on vs.", "type": "string" } }, "additionalProperties": false }), }), "scale-recipe": tool({ description: "Paid $0.002. Scale ingredient amounts by servings or a factor. Unlisted densities stay null.", inputSchema: jsonSchema({ "type": "object", "properties": { "fromServings": { "type": "number" }, "toServings": { "type": "number" }, "factor": { "type": "number" }, "ingredients": { "type": "array", "items": { "type": "string" } }, "text": { "type": "string" }, "system": { "type": "string", "enum": [ "us", "imperial", "si" ], "description": "us, imperial, or si. Omit when the unit is unambiguous." }, "to": { "type": "string" } }, "additionalProperties": false }), }), "size": tool({ description: "Paid $0.002. Convert shoe and clothing sizes using Qty size table v1. Ambiguous category returns null.", inputSchema: jsonSchema({ "type": "object", "properties": { "text": { "type": "string" }, "category": { "type": "string", "enum": [ "shoe", "dress", "chest", "waist", "bra" ] }, "audience": { "type": "string", "enum": [ "men", "women", "kids" ] }, "from": { "type": "string" }, "to": { "type": "string" }, "size": { "type": [ "number", "string" ] }, "cup": { "type": "string" } }, "additionalProperties": false }), }), "date": tool({ description: "Paid $0.002. ISO-8601 durations, N days from a date, working days, and DST-aware IANA time zone conversion. Qty never reads the current clock.", inputSchema: jsonSchema({ "type": "object", "properties": { "text": { "type": "string", "description": "ISO-8601 duration, N days from YYYY-MM-DD, working days, or a wall time." }, "holidays": { "description": "YYYY-MM-DD dates skipped by working-day maths.", "type": "array", "items": { "type": "string" } }, "referenceDate": { "description": "YYYY-MM-DD used when the text does not name a date.", "type": "string" }, "timeZone": { "description": "IANA zone of the wall time, such as America/New_York.", "type": "string" }, "toTimeZone": { "description": "IANA zone to convert into, such as Europe/London.", "type": "string" } }, "required": [ "text" ], "additionalProperties": false }), }), "estimate": tool({ description: "Paid $0.003. Paint, tiles, concrete, or gravel. Coverage assumptions and the waste percent are stated on every result.", inputSchema: jsonSchema({ "type": "object", "properties": { "kind": { "type": "string", "enum": [ "paint", "tiles", "concrete", "gravel" ] }, "length": { "type": "number" }, "width": { "type": "number" }, "depth": { "type": "number" }, "area": { "description": "Area when length and width are omitted. unit m means square metres.", "type": "number" }, "unit": { "description": "Length unit. Defaults to m. Area units may include 2 or ².", "type": "string" }, "coats": { "description": "Paint coats. Defaults to 2.", "type": "number" }, "wastePercent": { "description": "Extra material percent. Defaults to 10.", "type": "number" }, "tileLength": { "description": "Tile length. Defaults to 0.30 m.", "type": "number" }, "tileWidth": { "description": "Tile width. Defaults to 0.30 m.", "type": "number" } }, "required": [ "kind" ], "additionalProperties": false }), }) };