Singapore Buying Desk (Connective Labs)
Server Details
Firm SGD quotes and delivery in Singapore for office and IT supplies, ink, toner and event print
- Status
- Healthy
- Uptime
- 100.0% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 11 tools
The core quoting tools have a clear hierarchy: quote_office_supplies for single office/IT items, quote_event_print for four instant print categories, quote_list for multi-line RFQs that span both, and request_quote as the explicit fallback for anything unpriced or custom. The main soft spot is that quote_list and quote_office_supplies overlap on multi-quantity office items, and request_service (a form opener) sits awkwardly alongside the quoting flow, but the descriptions resolve this well enough. The four Singapore context tools (address, business days, weather/PSI, how-to) are cleanly distinct from each other and from the buying tools.
Everything is snake_case and mostly verb_noun (list_categories, quote_*, request_*, resolve_sg_address, rush_order_status), which is predictable. The deviations are the sg_/singapore_ prefixed noun-phrase tools (sg_business_days, sg_weather_psi, singapore_how_to) that drop the verb, but the prefix grouping is still legible and consistent.
11 tools is squarely in the healthy range for a quoting desk plus local context helpers. Each tool has a distinct job and none feels redundant, though the four geographic/civic utilities stretch the stated 'Buying Desk' scope a little beyond a pure procurement surface.
Discovery, instant pricing, RFQ fallback, status tracking and local delivery context are all covered, so the quoting lifecycle is broadly complete. However, there is no tool to accept/approve an issued firm quote, no way to list or cancel past requests, and order fulfillment ends at 'closed' — the approval step is described as happening by email, leaving an agent at a dead end after the quote arrives.
Available Tools
11 toolslist_categoriesList quote categoriesARead-onlyIdempotentInspect
List what the Singapore Buying Desk quotes. Returns the office and IT supply categories, each with the specs needed to price it, then the event print and merch categories with whether each gets an instant price, plus the operator's company details. Use it to check whether an item is covered before quoting. Example input: {}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, and closed-world behavior. The description adds useful context about what is returned: office and IT supply categories with specs, event print and merch categories with instant-price flags, plus operator company details. It does not discuss auth, rate limits, or pagination, but with annotations covering the safety profile this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the tool's purpose and return contents, followed by a clear usage instruction. The 'Example input: {}' sentence is mildly redundant given the schema has no properties, keeping it just below a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return values. It does so comprehensively by naming each category group, the associated details, and the operator information the caller will receive. For a zero-parameter, annotated read tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description reinforces this with 'Example input: {}' and does not invent parameter requirements, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List what the Singapore Buying Desk quotes') and enumerates the category types returned, making the tool's purpose clear. It implicitly distinguishes itself from sibling quote_* tools by framing this as a coverage check rather than a quoting action, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear use case ('check whether an item is covered before quoting'), which tells the agent when to reach for this tool. It stops short of stating when not to use it or naming specific alternatives, which keeps it at a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_event_printInstant quote for event print and merchARead-onlyIdempotentInspect
Instant all-in price (SGD, GST and Singapore delivery included) and ready-by date for name cards (business cards), printed lanyards, roll-up banners and tote bags in Singapore, for staff, offices or events, including same-day to 5-day rush. Use when someone wants these printed or priced. Pass the deadline to see options that make it. Other custom print and merch goes through request_quote. Example input: {"category":"lanyards","quantity":100}.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Which event print product to price. | |
| quantity | Yes | Number of pieces (name cards: number of cards, sold in boxes of 100). | |
| needed_by | No | The date the buyer must have the items in hand, in Singapore time. If given, only options ready by then are offered, with a note when none make it. If left out, every speed option is listed with its ready-by date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description is free to add pricing semantics instead: SGD, GST and Singapore delivery included, same-day to 5-day rush range, and that a deadline filters options with a note when none make it. It also states what is returned (all-in price plus ready-by date), which is needed since there is no output schema. It stops short of saying how quantity affects tiering or whether prices are guaranteed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Price/scope is front-loaded, then usage, then the sibling redirect, then an example — a sensible order. Minor filler remains ('for staff, offices or events') and the opening sentence is long, but no sentence is wasteful overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, read-only, no-output-schema pricing tool, the description covers what is priced, what comes back, currency and inclusions, rush range, deadline behavior, and where to route everything else. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies; the description still adds a concrete example input showing how category and quantity combine, and reinforces that needed_by is a filter rather than a display option. The box-of-100 nuance is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb plus return content ('Instant all-in price ... and ready-by date') and names the exact four product families covered, so an agent can match a request without opening the enum. It also explicitly contrasts itself with request_quote, which handles other custom print/merch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when someone wants these printed or priced' sets the trigger, 'Pass the deadline to see options that make it' sets the behavioral tip, and 'Other custom print and merch goes through request_quote' names the alternative and the condition that selects it. There is nothing left to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_listPrice a list of items (RFQ)AInspect
Price a whole shopping list or RFQ in one call: many line items, each with its own quantity, for office and IT supplies and instant event print (name cards, lanyards, roll-up banners, tote bags). Returns per line the match level (exact, spec, similar, needs_detail or no_match), the all-in SGD price (9% GST and Singapore delivery included) and the ready-by date, plus a total for priced lines and a list of what to clarify with the buyer. Pass lines as strings ('3 x HDMI cable 5m') or objects with item, quantity, category, brand, model, specs. Never invent prices for unpriced lines: ask what clarify lists, or convert the list to a firm quote with request_quote (pass list_id). Example input: {"items":["3 x HDMI cable 5m","microSD 128GB x10"]}.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Alternative to items: a pasted free-text list, one item per line (quantities like '3 x', 'x3', '3 pcs' are recognised). | |
| items | No | Line items, up to 50. | |
| company | No | Optional: buyer company. | |
| needed_by | No | Deadline for the whole list, YYYY-MM-DD, Singapore time. | |
| buyer_email | No | Optional: buyer email, used if the list is converted to a firm quote. | |
| delivery_area | No | Delivery address or area in Singapore (prices already include Singapore delivery). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnlyHint=false, destructiveHint=false) by disclosing the outputs: per-line match level (exact, spec, similar, needs_detail, no_match), all-in SGD price with 9% GST and Singapore delivery included, ready-by date, a total for priced lines, and a clarify list. It also implies persistence by reference to a list_id, which is consistent with readOnlyHint=false — no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then behavior, then the decision rule, then an example — the ordering is right and every sentence carries information. It is a single dense paragraph, though, and the return-value details could be split for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return contract itself (match levels, all-in pricing with GST and delivery, ready-by date, totals, clarify list) and covers the escalation path to request_quote. Combined with a fully documented 6-parameter schema, nothing an agent needs to invoke or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value by restating the two accepted line shapes (a plain string like '3 x HDMI cable 5m' or an object with item, quantity, category, brand, model, specs) and supplying a concrete example input. It stops short of explaining how the string parser resolves quantities or how needed_by interacts with ready-by dates, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Price a whole shopping list or RFQ in one call: many line items' — and contrasts that batch scope with the single-item pricing siblings (quote_office_supplies, quote_event_print) and with request_quote for a firm quote. An agent can tell which tool handles a multi-line list versus a single item or a binding quote without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: 'Never invent prices for unpriced lines: ask what clarify lists, or convert the list to a firm quote with request_quote (pass list_id).' That names the alternative and the exact handoff parameter, and the 'needs_detail/no_match' handling tells the agent what to do when pricing fails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_office_suppliesInstant quote for office and IT suppliesARead-onlyIdempotentInspect
Current all-in SGD price (9% GST and Singapore delivery included) and ready-by date for office, IT and electronics supplies, single units welcome: cables and adapters (HDMI, DisplayPort, USB-C, VGA, network), USB hubs and docks, storage (flash drives, microSD/SD cards, SSDs, hard drives), peripherals (mice, keyboards, webcams, headsets, speakers), monitors, UPS units, networking (switches, routers), printers, ink and toner, label tapes, tools. Pass category, brand, model, specs, quantity and needed_by whenever you know them, plus the buyer's own words in item. Key specs by category: cables: connector at each end + length in metres; adapters: from + to connector; memory cards: card type (microSD/SD/CF) + capacity; flash drives: capacity + connector (USB-A/USB-C); SSD/HDD: capacity + internal or external; UPS: VA rating or model; ink and toner: printer brand + cartridge code (or printer model) + colour; mice/keyboards: model, or wired/wireless; monitors: size in inches; network switches: port count. Each option carries confidence: exact (model number matches), spec (category and every key spec given match) or similar (closest line, with the differences listed). If the request is too vague to price, the result has match 'needs_detail' and lists what to ask the buyer; ask, then call again. Never invent a price: if nothing matches, call request_quote with category office-it-supplies. Example input: {"item":"HDMI cable 5m","quantity":2}.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | The buyer's own wording, e.g. 'HDMI cable 5m', 'microSD 128GB', 'Logitech M185', 'HP 206A cyan toner'. Kept for compatibility; structured fields below improve matching. | |
| brand | No | Brand, e.g. HP, Brother, Canon, Logitech, SanDisk, APC, Eaton, Ugreen. | |
| model | No | Model number or cartridge code exactly as printed, e.g. 'M185', '206A', 'TN-2480', '5E700UI'. For ink or toner the printer model also works, e.g. 'M283fdw'. | |
| specs | No | Key specs you know. Use the fields that apply to the category; omit the rest. | |
| category | No | The kind of item, which decides which price table and specs apply; leave it out if unsure. ink-toner covers ink, toner and ribbons; usb-hub covers hubs and docking stations; camera covers webcams. | |
| quantity | No | How many units the buyer wants priced. | |
| needed_by | No | The date the buyer must have the items in hand, in Singapore time. Each option then shows makes_deadline, meaning whether it arrives in time. If left out, options are listed without a deadline check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent, non-destructive), the description discloses that prices are all-in SGD including 9% GST and Singapore delivery, that options carry confidence levels (exact/spec/similar), that vague requests return match 'needs_detail', and that the agent must never invent a price. These are meaningful behavioral traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and price semantics, then spec guidance, then fallback, with an example at the end. It is long and dense, and repeats some category enumerations already present in the schema enum, but the length is largely justified by the tool's 31-category scope and nested specs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains what the result includes: price, ready-by date, confidence, makes_deadline, and the needs_detail structure with what to ask the buyer. It also covers the no-match fallback, making it complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value by mapping key specs to categories (e.g., cables need connector at each end + length; UPS needs VA rating; ink/toner needs printer brand + cartridge code + colour). It also explains that item is the buyer's own words and that structured fields improve matching, going beyond the already-descriptive schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource: 'Current all-in SGD price ... and ready-by date for office, IT and electronics supplies.' It immediately distinguishes this quoting tool from siblings like quote_list and quote_event_print by naming the exact product scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to pass known structured fields and the buyer's own wording, describes the 'needs_detail' flow for vague requests, and names the alternative tool request_quote with the exact category to use when nothing matches. This is clear when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_quoteRequest a firm quoteADestructiveInspect
Submit a request for a firm quote. Use it for one item (category, description, quantity) or for a whole list: pass items (the same line items you gave quote_list) or the list_id that quote_list returned. Covers office or IT items not matched by quote_office_supplies, custom event print and merch (backdrops, signage, branded merch, flyers, packaging), unusual specs, deadlines faster than any instant option, and orders for instantly priced items. Returns a reference; a firm price and date is sent to the contact email, usually the same business day. Nothing is charged until the buyer approves the firm quote. Singapore delivery only. Example input: {"items":["3 x HDMI cable 5m"],"needed_by":"2026-11-15","contact_email":"buyer@example.com"}.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | For a list request, the lines the buyer wants quoted, each a string like '2 x HDMI cable 5m' or an object with item, quantity and optional category, brand, model, specs (same shape as quote_list). | |
| company | No | Buyer's company, if any. | |
| list_id | No | List requests: the list_id returned by quote_list (valid 14 days). Its lines are used when items is not given. | |
| category | No | For a single-item request, the kind of product or print job being quoted. Leave it out when sending items or list_id. | |
| quantity | No | For a single-item request, how many units the buyer wants quoted. | |
| needed_by | Yes | Deadline date, YYYY-MM-DD. | |
| budget_sgd | No | Optional maximum budget in SGD. | |
| description | No | Single-item requests: what is needed, with all known specs (brand, model, connectors, capacity, size, material, finish, colours, artwork status). For a list, any overall notes. | |
| contact_name | No | Buyer's name, used to address the firm quote. | |
| contact_email | Yes | Where to send the firm quote. | |
| delivery_location | No | Delivery address or area in Singapore, or 'self-collect'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial lifecycle context beyond the annotations: the tool returns a reference only, the firm price and date arrive by email usually same business day, nothing is charged until buyer approval, and delivery is Singapore only. It does not explain why destructiveHint=true or what state a submission mutates, nor whether resubmitting the same request creates duplicates (idempotentHint=false), leaving a small gap against the annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and routing lead the text before the use-case catalogue, and the closing example is compact. The middle sentence packs many product categories into one long clause, which is dense but each clause does narrow eligibility for an agent deciding whether to call this or an instant-quote sibling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, non-idempotent submission tool with no output schema, the description covers the important unknowns: what comes back (a reference), how the real answer is delivered (email, same business day), billing safety, and geographic scope. Minor omissions remain around what quantity/category imply for list requests and how duplicates are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds genuine routing semantics: items and list_id are the list path, category/quantity/description are the single-item path, and items must have 'the same line items you gave quote_list'. The concrete example input {"items":["3 x HDMI cable 5m"],...} also disambiguates the anyOf string-or-object array shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('submit a request for a firm quote') and immediately differentiates itself from siblings by naming quote_list and quote_office_supplies as the paths it does NOT cover. An agent can tell what this tool is for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates the two calling modes (single item via category/description/quantity, or a list via items/list_id) and then enumerates the use cases that trigger it: items not matched by quote_office_supplies, custom event print and merch, unusual specs, deadlines faster than instant options. Alternatives and the conditions selecting them are named rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_serviceGet QuoteAIdempotentInspect
Open the Get Quote form for the Singapore Buying Desk (Connective Labs Pte. Ltd.): the buyer lists the office, IT or event print items they need, sees instant all-in SGD prices, and sends the list for a firm quote. ChatGPT calls this from the Get Quote button with the business_id from the business feed (connective-labs-sg-buying-desk). Opening the form changes nothing; submitting it calls request_quote. Returns business_id_recognized (whether business_id matched this desk), the business details (legal name, UEN, support email, payment terms, guarantee), the prefill values applied to the form, the categories it quotes with links, and the how_it_works steps. Example input: {"business_id":"connective-labs-sg-buying-desk"}.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Optional: lines to prefill in the form. | |
| needed_by | No | The date the buyer needs the items by, filled into the form's deadline field. If left out, that field starts empty. | |
| business_id | Yes | provider_business_id from the business feed. This desk: connective-labs-sg-buying-desk. | |
| delivery_area | No | Delivery address or area in Singapore, filled into the form's delivery field. Prices already include Singapore delivery. If left out, that field starts empty. |
Output Schema
| Name | Required | Description |
|---|---|---|
| prefill | No | |
| business | Yes | |
| categories | No | |
| business_id | Yes | |
| how_it_works | No | |
| business_id_recognized | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Opening the form changes nothing,' which directly conflicts with the annotation readOnlyHint=false. Although the tool defers mutation to request_quote, the no-side-effect claim is not compatible with the structured annotation declaring the tool is not read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key purpose and distinction from request_quote are front-loaded, and the example input is useful. It is somewhat long and repeats return-value details that the output schema likely covers, but the information is mostly relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, the description provides ample context: when to call it, what business_id to use, what prefill values do, and what the return contains. An agent has enough information to invoke it correctly aside from the annotation inconsistency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter meanings are already well documented. The description reinforces how items, needed_by, and delivery_area prefill the form and provides an example input, but adds limited semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: opening the Get Quote form for the Singapore Buying Desk and prefilling buyer item lines. It clearly distinguishes this from submission by noting that submitting calls request_quote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says ChatGPT calls this from the Get Quote button and gives the exact business_id context. It also distinguishes this prefill/open step from the actual quote submission handled by request_quote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_sg_addressLook up a Singapore address, postal code or buildingARead-onlyIdempotentInspect
Use when the user gives or asks about a Singapore postal code, block and street, unit number, or building or place name: what building or postal code it is, whether it is an HDB block, a condominium or a commercial building, the nearest MRT/LRT station and roughly how long the walk is, which postal district or HDB town it is in, or what a courier or delivery needs to know (guardhouse, loading bay). Returns the normalized address with block, street, postal code and parsed unit (floor and unit number), latitude and longitude, postal district (plus HDB town for HDB blocks), the 2 nearest MRT/LRT stations with straight-line distance and an approximate walking time, the building type and a one-line delivery note ('unknown' when the type cannot be told). Gives up to 3 candidates when the input is ambiguous and warns when the block, street or floor does not match. Singapore only. Data: OneMap search (Singapore Land Authority), LTA station exits and HDB property data from data.gov.sg. Read-only. Example input: {"query":"570151"}.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | One Singapore location as the user wrote it: a 6-digit postal code, an address with block, street and optional #floor-unit, or a building or place name, e.g. '570151', 'Blk 123 Ang Mo Kio Ave 6 #04-56', 'Suntec Tower 3', 'ION Orchard'. Abbreviations such as Blk, Ave, St, Lor are fine. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so safety is covered; the description goes well past that by disclosing ambiguity handling (up to 3 candidates), mismatch warnings for block/street/floor, the 'unknown' fallback for building type, data provenance (OneMap/SLA, LTA, HDB via data.gov.sg), and latency-relevant detail about what the normalized result contains. These are behavioral traits an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the 'Use when' trigger and then the return contract, and there is no filler. The main weakness is that the opening sentence is a long enumerated run-on listing many question types, which could have been a compact bulleted list for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and only one parameter, so the description must carry the return contract itself, and it does: normalized block/street/postal/unit, coordinates, district, HDB town, two nearest MRT/LRT stations with distance and walking time, building type, and delivery note. Combined with the ambiguity and mismatch caveats, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'query' parameter is already well documented in the schema, so the schema carries most of the burden. The description adds a concrete worked example, {"query":"570151"}, which anchors the expected format and implicitly confirms that a bare postal code is acceptable input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and first sentence state a specific verb and resource: resolve a Singapore address, postal code, unit number, or building name into a normalized address with enrichment. It also enumerates the exact facts it can answer (building type, HDB/condo/commercial classification, MRT proximity, district, delivery notes), so an agent can distinguish it from every sibling, which are all quote/order/weather utilities with no overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with an explicit, trigger-style 'Use when the user gives or asks about...' clause and then lists concrete question shapes (what postal code is this, is it an HDB block, how far is the MRT, what a courier needs), so an agent knows exactly which user utterances should route here. It also states a hard scope exclusion, 'Singapore only', which prevents misuse for other geographies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rush_order_statusCheck quote request or order statusARead-onlyIdempotentInspect
Check the status of a custom quote request or order by its reference. Returns its status (received, acknowledged, quoted or closed), the timestamps for each step, the reply-by time, its history and the firm quote once issued. Example input: {"reference":"Q-ABC123"}.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | The Q- or E- reference returned by request_quote, e.g. Q-ABC123. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile needs no repetition. The description adds real value beyond them by enumerating the returned statuses (received, acknowledged, quoted, closed), the timestamps, reply-by time, history and firm quote — important since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an example, with purpose front-loaded and return contents following naturally. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers both the required input shape (with example) and the full set of returned fields, so an agent has everything needed to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already defines the reference format, so the baseline is 3. The description adds a worked example ('{"reference":"Q-ABC123"}'), giving the agent a ready-to-adapt invocation, which lifts it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check the status of a custom quote request or order by its reference') and scopes it to a single lookup. An agent can tell it apart from request_quote or quote_list without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is the lookup path keyed on a reference and includes a concrete example input. It does not explicitly say when-not to use it or name sibling alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_business_daysSingapore public holidays and working daysARead-onlyIdempotentInspect
Singapore public holidays and working days for 2026 and 2027 (MOM data, including observed Monday holidays). Pass date alone to ask whether it is a public holiday or working day; from + add to get the date N working days later (negative N for earlier); from + to to count working days between two dates; or year to list that year's holidays. Weekends and public holidays are skipped. Each answer has as_of and the official source. Example input: {"date":"2026-12-25"}.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | YYYY-MM-DD end date: count working days from date to this date. | |
| add | No | Working days to add to date (negative to go back). The start date is not counted. | |
| date | No | The day to check. On its own, the answer says whether it is a public holiday or a working day; with add or to, it is the start date for counting working days. | |
| year | No | 2026 or 2027: list that year's public holidays. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value: weekends and public holidays are skipped, observed Monday holidays included, and answers carry as_of plus the official source. It does not say what happens for dates outside the 2026–2027 window or on invalid input, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource, then packs the mode logic into one dense but readable passage, ending with a concrete example input. Slightly run-on, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, no-output-schema lookup tool, the description covers data source, coverage years, weekend/holiday skipping, all four calling modes, and the shape of the answer (as_of, source). Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so individual parameters are already documented; the description goes further by explaining how parameters compose (date alone vs. with add vs. with to) and that the start date is not counted. That compositional meaning genuinely exceeds the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource (Singapore public holidays and working days, MOM data) and enumerates the four query modes, so an agent can tell exactly what it computes. No sibling covers this domain, and the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly maps each argument combination to an outcome: date alone for a yes/no check, from+add for offsetting, from+to for counting between dates, year for listing holidays. This is a complete when-to-use guide with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_weather_psiSingapore weather forecast and PSIARead-onlyIdempotentInspect
Latest NEA readings for Singapore, fetched about every 30 minutes: the 24-hour weather forecast (outlook, temperature, humidity, wind, conditions by region and period) and the 24-hour PSI and PM2.5 by region with NEA's air quality descriptor. Pass what: 'weather', 'psi' or 'both' (default). Each part has as_of and the official source. Example input: {"what":"both"}.
| Name | Required | Description | Default |
|---|---|---|---|
| what | No | Choose weather for the forecast, psi for haze and air-quality readings, or both. If left out, both are returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds non-obvious operational context the agent cannot get elsewhere: refresh cadence ('fetched about every 30 minutes') and that each part carries as_of and the official source, which tells the agent how to judge data staleness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and freshness, then the payload contents, then the selector parameter. Every sentence carries information; the trailing example input is mild redundancy given the schema already shows the enum and default.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by naming the returned sections, their fields, and the as_of/source metadata. For a zero-required-parameter read-only tool this is close to fully sufficient; only exact field-level shapes are left implicit, which is reasonable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum parameter already documents each value and the default, so the description largely restates what the schema provides. The one small addition is the framing of 'psi' as haze/air-quality readings, but that meaning is already present in the schema's parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and verb ('Latest NEA readings for Singapore') and enumerates exactly what is returned: 24-hour weather forecast fields by region/period and 24-hour PSI/PM2.5 with the air quality descriptor. No sibling in the list covers weather or air quality, so there is no ambiguity to resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use each mode ('weather' for forecast, 'psi' for haze/air-quality) and states the default when omitted, plus a concrete example input. There are no competing sibling tools, so the absence of explicit exclusions is not a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
singapore_how_toHow to get an errand or government process done in SingaporeARead-onlyIdempotentInspect
Use for an errand, government process or practical how-to in Singapore, for residents, employers and visitors. It says which agency or type of business handles the task, the official channel and URL, whether Singpass, Corppass or a UEN is needed, whether it is fully online or needs a visit, fees and processing times only where the official page states them, whether an agent can act or must hand off to the user (login, app or phone), the next step, and any related API or MCP tool. Covers, among others: passports, NRIC and change of address; visas, the SG Arrival Card, tourist GST refunds at the airport, paying for MRT and buses as a visitor, SIM cards at Changi; personal and company income tax, GST registration, company and business registration and annual filing; work passes and domestic helper permits (new and renewal); HDB matters such as season parking, bulky item disposal, home-based businesses and neighbour or smoking complaints; municipal issues, police reports, scams, vehicles, road tax and parking; utilities, CPF, healthcare appointments, ActiveSG court bookings, school registration, pets; sending parcels; and buying office supplies or event print. Returns the best 1 to 3 matches from a list checked against official pages, each with source_url and last_checked. Says plainly when a task is not covered, and labels any agency suggestion for it as a guess. Singapore only; not for other countries, and not for recommendations such as restaurants or sights. Read-only. Example input: {"task":"renew my passport"}.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task in the user's own plain words, one task per call, e.g. 'renew my passport', 'get rid of an old mattress from my HDB flat', 'claim GST refund at the airport as a tourist', 'file corporate tax for my company', 'book a tennis court'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description provides critical behavior not in the schema, such as returning the 'best 1 to 3 matches', providing a 'source_url and last_checked' timestamp, and labeling uncertain agency suggestions as 'guesses'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While all information is present, the definition is overly verbose. It lists nearly every possible covered topic (passports, GST, HDB, vehicles, etc.) in a dense paragraph, sacrificing conciseness for comprehensive coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the wide range of topics it covers (from taxes to public housing to customs), the definition is remarkably complete. It defines the output format (1-3 matches), the limitations of the data, and explicitly states its 'read-only' nature and coverage limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema description is already very rich, providing multiple detailed examples of valid task strings. The description reiterates the 'task' nature but does not add semantic depth or constraints beyond what is provided in the schema or annotations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The purpose is perfectly clear: providing instructions on how to execute errands or government processes. It immediately establishes the specific geographical scope (Singapore) and the intended audience.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly sets boundaries by stating it is 'Singapore only' and excludes general recommendations (restaurants/sights). It clearly defines when it is appropriate—when an official process or specific task needs to be researched.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- Changed
quote_event_print2 fields changed- changed
Input schema / properties / needed_by / descriptionPrevious value: -"Deadline the items must be in hand, YYYY-MM-DD, Singapore time."New value: +"The date the buyer must have the items in hand, in Singapore time. If given, only options ready by then are offered, with a note when none make it. If left out, every speed option is listed with its ready-by date." - added
Input schema / properties / needed_by / formatAdded value: +"date"
- Changed
quote_list1 field changed- changed
Input schema / properties / items / items / anyOfPrevious value: -[ - { - "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", - "type": "string" - }, - { - "properties": { - "brand": { - "description": "Brand, e.g. HP, Logitech, SanDisk.", - "type": "string" - }, - "category": { - "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", - "type": "string" - }, - "item": { - "description": "The buyer's own wording for this line.", - "type": "string" - }, - "model": { - "description": "Model number or cartridge code exactly as printed.", - "type": "string" - }, - "quantity": { - "default": 1, - "description": "Units needed for this line.", - "minimum": 1, - "type": "integer" - }, - "specs": { - "description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", - "type": "object" - } - }, - "type": "object" - } -]New value: +[ + { + "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", + "type": "string" + }, + { + "properties": { + "brand": { + "description": "Brand, e.g. HP, Logitech, SanDisk.", + "type": "string" + }, + "category": { + "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", + "type": "string" + }, + "item": { + "description": "The buyer's own wording for this line.", + "type": "string" + }, + "model": { + "description": "Model number or cartridge code exactly as printed.", + "type": "string" + }, + "quantity": { + "default": 1, + "description": "How many units of this line item the buyer needs.", + "minimum": 1, + "type": "integer" + }, + "specs": { + "description": "Technical details that pin down the exact product, such as connector types, cable length, storage capacity or screen size. Uses the same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", + "type": "object" + } + }, + "type": "object" + } +]
- Changed
quote_office_supplies4 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Item category if known. ink-toner covers ink, toner and ribbons; usb-hub covers hubs and docking stations; camera covers webcams."New value: +"The kind of item, which decides which price table and specs apply; leave it out if unsure. ink-toner covers ink, toner and ribbons; usb-hub covers hubs and docking stations; camera covers webcams." - changed
Input schema / properties / needed_by / descriptionPrevious value: -"Deadline the items must be in hand, YYYY-MM-DD, Singapore time. Each option then shows makes_deadline."New value: +"The date the buyer must have the items in hand, in Singapore time. Each option then shows makes_deadline, meaning whether it arrives in time. If left out, options are listed without a deadline check." - added
Input schema / properties / needed_by / formatAdded value: +"date" - changed
Input schema / properties / quantity / descriptionPrevious value: -"Number of units."New value: +"How many units the buyer wants priced."
- Changed
request_quote3 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Single-item requests: the category. Not needed when items or list_id is given."New value: +"For a single-item request, the kind of product or print job being quoted. Leave it out when sending items or list_id." - changed
Input schema / properties / items / descriptionPrevious value: -"List requests: line items, each a string like '2 x HDMI cable 5m' or an object with item, quantity and optional category, brand, model, specs (same shape as quote_list)."New value: +"For a list request, the lines the buyer wants quoted, each a string like '2 x HDMI cable 5m' or an object with item, quantity and optional category, brand, model, specs (same shape as quote_list)." - changed
Input schema / properties / quantity / descriptionPrevious value: -"Single-item requests: number of units."New value: +"For a single-item request, how many units the buyer wants quoted."
- Changed
request_service4 fields changed- changed
Input schema / properties / delivery_area / descriptionPrevious value: -"Optional: delivery area to prefill."New value: +"Delivery address or area in Singapore, filled into the form's delivery field. Prices already include Singapore delivery. If left out, that field starts empty." - changed
Input schema / properties / items / items / anyOfPrevious value: -[ - { - "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", - "type": "string" - }, - { - "properties": { - "brand": { - "description": "Brand, e.g. HP, Logitech, SanDisk.", - "type": "string" - }, - "category": { - "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", - "type": "string" - }, - "item": { - "description": "The buyer's own wording for this line.", - "type": "string" - }, - "model": { - "description": "Model number or cartridge code exactly as printed.", - "type": "string" - }, - "quantity": { - "default": 1, - "description": "Units needed for this line.", - "minimum": 1, - "type": "integer" - }, - "specs": { - "description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", - "type": "object" - } - }, - "type": "object" - } -]New value: +[ + { + "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", + "type": "string" + }, + { + "properties": { + "brand": { + "description": "Brand, e.g. HP, Logitech, SanDisk.", + "type": "string" + }, + "category": { + "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", + "type": "string" + }, + "item": { + "description": "The buyer's own wording for this line.", + "type": "string" + }, + "model": { + "description": "Model number or cartridge code exactly as printed.", + "type": "string" + }, + "quantity": { + "default": 1, + "description": "How many units of this line item the buyer needs.", + "minimum": 1, + "type": "integer" + }, + "specs": { + "description": "Technical details that pin down the exact product, such as connector types, cable length, storage capacity or screen size. Uses the same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", + "type": "object" + } + }, + "type": "object" + } +] - changed
Input schema / properties / needed_by / descriptionPrevious value: -"Optional: deadline to prefill, YYYY-MM-DD."New value: +"The date the buyer needs the items by, filled into the form's deadline field. If left out, that field starts empty." - added
Input schema / properties / needed_by / formatAdded value: +"date"
- Changed
sg_business_days2 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"YYYY-MM-DD. Alone: is it a public holiday or working day? With add or to: the start date."New value: +"The day to check. On its own, the answer says whether it is a public holiday or a working day; with add or to, it is the start date for counting working days." - added
Input schema / properties / date / formatAdded value: +"date"
- Changed
sg_weather_psi1 field changed- changed
Input schema / properties / what / descriptionPrevious value: -"Which readings to return. Default both."New value: +"Choose weather for the forecast, psi for haze and air-quality readings, or both. If left out, both are returned."
5 tool updates
- Changed
quote_event_print1 field changed- added
Input schema / properties / category / descriptionAdded value: +"Which event print product to price."
- Changed
quote_list1 field changed- changed
Input schema / properties / items / items / anyOfPrevious value: -[ - { - "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", - "type": "string" - }, - { - "properties": { - "brand": { - "type": "string" - }, - "category": { - "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", - "type": "string" - }, - "item": { - "description": "The buyer's own wording for this line.", - "type": "string" - }, - "model": { - "description": "Model number or cartridge code exactly as printed.", - "type": "string" - }, - "quantity": { - "default": 1, - "minimum": 1, - "type": "integer" - }, - "specs": { - "description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", - "type": "object" - } - }, - "type": "object" - } -]New value: +[ + { + "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", + "type": "string" + }, + { + "properties": { + "brand": { + "description": "Brand, e.g. HP, Logitech, SanDisk.", + "type": "string" + }, + "category": { + "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", + "type": "string" + }, + "item": { + "description": "The buyer's own wording for this line.", + "type": "string" + }, + "model": { + "description": "Model number or cartridge code exactly as printed.", + "type": "string" + }, + "quantity": { + "default": 1, + "description": "Units needed for this line.", + "minimum": 1, + "type": "integer" + }, + "specs": { + "description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", + "type": "object" + } + }, + "type": "object" + } +]
- Changed
request_quote1 field changed- added
Input schema / properties / contact_name / descriptionAdded value: +"Buyer's name, used to address the firm quote."
- Changed
request_service1 field changed- changed
Input schema / properties / items / items / anyOfPrevious value: -[ - { - "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", - "type": "string" - }, - { - "properties": { - "brand": { - "type": "string" - }, - "category": { - "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", - "type": "string" - }, - "item": { - "description": "The buyer's own wording for this line.", - "type": "string" - }, - "model": { - "description": "Model number or cartridge code exactly as printed.", - "type": "string" - }, - "quantity": { - "default": 1, - "minimum": 1, - "type": "integer" - }, - "specs": { - "description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", - "type": "object" - } - }, - "type": "object" - } -]New value: +[ + { + "description": "One line in the buyer's words, quantity included, e.g. '3 x HDMI cable 5m', 'microSD 128GB x10', '2 pcs HP 206A cyan toner'.", + "type": "string" + }, + { + "properties": { + "brand": { + "description": "Brand, e.g. HP, Logitech, SanDisk.", + "type": "string" + }, + "category": { + "description": "Optional: a supplies category (cable, adapter, usb-hub, memory-card, flash-drive, ssd, hdd, card-reader, ...) or an event print category (name-cards, lanyards, roll-up-banners, tote-bags).", + "type": "string" + }, + "item": { + "description": "The buyer's own wording for this line.", + "type": "string" + }, + "model": { + "description": "Model number or cartridge code exactly as printed.", + "type": "string" + }, + "quantity": { + "default": 1, + "description": "Units needed for this line.", + "minimum": 1, + "type": "integer" + }, + "specs": { + "description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface.", + "type": "object" + } + }, + "type": "object" + } +]
- Changed
rush_order_status1 field changed- added
Input schema / properties / reference / descriptionAdded value: +"The Q- or E- reference returned by request_quote, e.g. Q-ABC123."
2 tool updates
- Added
sg_business_days - Added
sg_weather_psi
2 tool updates
- Changed
resolve_sg_address1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"A 6-digit postal code, an address with block, street and optional unit, or a building or place name, e.g. '570151', 'Blk 123 Ang Mo Kio Ave 6 #04-56', 'ION Orchard'."New value: +"One Singapore location as the user wrote it: a 6-digit postal code, an address with block, street and optional #floor-unit, or a building or place name, e.g. '570151', 'Blk 123 Ang Mo Kio Ave 6 #04-56', 'Suntec Tower 3', 'ION Orchard'. Abbreviations such as Blk, Ave, St, Lor are fine."
- Changed
singapore_how_to1 field changed- changed
Input schema / properties / task / descriptionPrevious value: -"The errand in plain words, e.g. 'renew passport', 'dispose of an old sofa', 'book a badminton court'."New value: +"The task in the user's own plain words, one task per call, e.g. 'renew my passport', 'get rid of an old mattress from my HDB flat', 'claim GST refund at the airport as a tourist', 'file corporate tax for my company', 'book a tennis court'."
2 tool updates
- Added
resolve_sg_address - Added
singapore_how_to
3 tool updates
- Added
quote_list - Changed
request_quote7 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Single-item requests: the category. Not needed when items or list_id is given." - added
Input schema / properties / companyAdded value: +{ + "description": "Buyer's company, if any.", + "type": "string" +} - changed
Input schema / properties / description / descriptionPrevious value: -"What is needed, with all known specs (brand, model, connectors, capacity, size, material, finish, colours, artwork status)."New value: +"Single-item requests: what is needed, with all known specs (brand, model, connectors, capacity, size, material, finish, colours, artwork status). For a list, any overall notes." - added
Input schema / properties / itemsAdded value: +{ + "description": "List requests: line items, each a string like '2 x HDMI cable 5m' or an object with item, quantity and optional category, brand, model, specs (same shape as quote_list).", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ] + }, + "maxItems": 50, + "type": "array" +} - added
Input schema / properties / list_idAdded value: +{ + "description": "List requests: the list_id returned by quote_list (valid 14 days). Its lines are used when items is not given.", + "type": "string" +} - added
Input schema / properties / quantity / descriptionAdded value: +"Single-item requests: number of units." - changed
Input schema / requiredPrevious value: -[ - "category", - "description", - "quantity", - "needed_by", - "contact_email" -]New value: +[ + "needed_by", + "contact_email" +]
- Added
request_service
5 tool updates
- First observed
list_categories - First observed
quote_event_print - First observed
quote_office_supplies - First observed
request_quote - First observed
rush_order_status
Related MCP Connectors
Instant quotes and rush delivery for event print and merch in Singapore
Free back office for small businesses in Singapore and Southeast Asia: invoices, expenses, stock.
Singapore Government Procurement MCP — GeBIZ tender awards (keyless).
Singapore ACRA (Bizfile) company search by name, UEN, SSIC industry code, entity type and status.
Related MCP Servers
- MIT
- AlicenseNot gradedqualityAmaintenanceAI quoting agent for electronics distributors. RFQ in, quote out via MCP tools.31 PyPIMIT

Dokmatiq DocGenofficial
AlicenseAqualityCmaintenancePDF/DOCX/Excel generation from HTML/Markdown with stationery overlay, ZUGFeRD/XRechnung e-invoicing, digital signing, form filling, and AI receipt OCR with DATEV/SKR03 export.40MIT- AlicenseNot gradedqualityDmaintenanceAI-native corporate gifting and event infrastructure for Fortune 500, enabling search of a 70,000+ SKU catalog, event program generation with live P&L, and wholesale quotes.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.