Singapore Buying Desk (Connective Labs)
Firm SGD quotes and delivery in Singapore for office and IT supplies, ink, toner and event print
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"sg-buying-desk": {
"url": "https://mcp.connective-labs.com/sg-buying-desk"
}
}
}Remote endpoints
https://mcp.connective-labs.com/sg-buying-deskstreamable-httphttps://mcp.connective-labs.com/sg-buying-desk/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢quote_office_supplies(item, category, brand, model, specs, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"item": {
"type": "string",
"description": "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."
},
"category": {
"type": "string",
"enum": [
"cable",
"adapter",
"usb-hub",
"memory-card",
"flash-drive",
"ssd",
"hdd",
"card-reader",
"ups",
"ups-accessory",
"ink-toner",
"label-tape",
"mouse",
"keyboard",
"keyboard-mouse",
"mousepad",
"monitor",
"camera",
"headset",
"speaker",
"printer",
"network-switch",
"router",
"kvm",
"av-switch",
"power",
"tool",
"ram",
"optical",
"blocker",
"projector"
],
"description": "Item category if known. ink-toner covers ink, toner and ribbons; usb-hub covers hubs and docking stations; camera covers webcams."
},
"brand": {
"type": "string",
"description": "Brand, e.g. HP, Brother, Canon, Logitech, SanDisk, APC, Eaton, Ugreen."
},
"model": {
"type": "string",
"description": "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": {
"type": "object",
"description": "Key specs you know. Use the fields that apply to the category; omit the rest.",
"properties": {
"connectors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Connector at each end, e.g. ['HDMI','HDMI'], ['USB-C','USB-A'], ['RJ45']. For hubs and flash drives, the host connector."
},
"length": {
"type": "string",
"description": "Cable length, e.g. '5m'."
},
"capacity": {
"type": "string",
"description": "Storage capacity, e.g. '128GB', '2TB'."
},
"card_type": {
"type": "string",
"enum": [
"microSD",
"SD",
"CF"
],
"description": "Memory card type."
},
"va_rating": {
"type": "string",
"description": "UPS rating, e.g. '1000VA' or '1.5kVA'."
},
"colour": {
"type": "string",
"description": "Ink or toner colour: black, cyan, magenta, yellow."
},
"ports": {
"type": "integer",
"description": "Number of ports (hubs, switches)."
},
"screen_size": {
"type": "string",
"description": "Monitor size, e.g. '24 inch'."
},
"wireless": {
"type": "boolean",
"description": "true for wireless, false for wired (mice, keyboards, headsets)."
},
"interface": {
"type": "string",
"description": "Other interface detail, e.g. 'USB 3.0', 'Cat6', 'external', 'M.2 NVMe'."
}
}
},
"quantity": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Number of units."
},
"needed_by": {
"type": "string",
"description": "Deadline the items must be in hand, YYYY-MM-DD, Singapore time. Each option then shows makes_deadline."
}
}
}🟢quote_list(items, text, needed_by, delivery_area, buyer_email, ...)
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).
Input Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"items": {
"anyOf": [
{
"type": "string",
"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": "object",
"properties": {
"item": {
"type": "string",
"description": "The buyer's own wording for this line."
},
"quantity": {
"type": "integer",
"minimum": 1,
"default": 1
},
"category": {
"type": "string",
"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)."
},
"brand": {
"type": "string"
},
"model": {
"type": "string",
"description": "Model number or cartridge code exactly as printed."
},
"specs": {
"type": "object",
"description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface."
}
}
}
]
},
"description": "Line items, up to 50."
},
"text": {
"type": "string",
"description": "Alternative to items: a pasted free-text list, one item per line (quantities like '3 x', 'x3', '3 pcs' are recognised)."
},
"needed_by": {
"type": "string",
"description": "Deadline for the whole list, YYYY-MM-DD, Singapore time."
},
"delivery_area": {
"type": "string",
"description": "Delivery address or area in Singapore (prices already include Singapore delivery)."
},
"buyer_email": {
"type": "string",
"description": "Optional: buyer email, used if the list is converted to a firm quote."
},
"company": {
"type": "string",
"description": "Optional: buyer company."
}
}
}🟡request_quote(category, description, quantity, items, list_id, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"office-it-supplies",
"name-cards",
"lanyards",
"roll-up-banners",
"tote-bags",
"backdrops",
"event-merch",
"printed-collateral",
"packaging"
],
"description": "Single-item requests: the category. Not needed when items or list_id is given."
},
"description": {
"type": "string",
"description": "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."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Single-item requests: number of units."
},
"items": {
"type": "array",
"maxItems": 50,
"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"
}
]
}
},
"list_id": {
"type": "string",
"description": "List requests: the list_id returned by quote_list (valid 14 days). Its lines are used when items is not given."
},
"needed_by": {
"type": "string",
"description": "Deadline date, YYYY-MM-DD."
},
"delivery_location": {
"type": "string",
"description": "Delivery address or area in Singapore, or 'self-collect'."
},
"contact_email": {
"type": "string",
"description": "Where to send the firm quote."
},
"contact_name": {
"type": "string"
},
"company": {
"type": "string",
"description": "Buyer's company, if any."
},
"budget_sgd": {
"type": "number",
"description": "Optional maximum budget in SGD."
}
},
"required": [
"needed_by",
"contact_email"
]
}🟢quote_event_print(category, quantity, needed_by)
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.
Input Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"name-cards",
"lanyards",
"roll-up-banners",
"tote-bags"
]
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Number of pieces (name cards: number of cards, sold in boxes of 100)."
},
"needed_by": {
"type": "string",
"description": "Deadline the items must be in hand, YYYY-MM-DD, Singapore time."
}
},
"required": [
"category",
"quantity"
]
}🟢list_categories
List what the Singapore Buying Desk quotes: office and IT supply categories with the specs each needs to price, then event print and merch categories, which ones get an instant price, and the operator details.
Input Schema
{
"type": "object",
"properties": {}
}🟢rush_order_status(reference)
Check the status of a custom quote request or order by its reference.
Input Schema
{
"type": "object",
"properties": {
"reference": {
"type": "string"
}
},
"required": [
"reference"
]
}🟢request_service(business_id, items, needed_by, delivery_area)
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.
Input Schema
{
"type": "object",
"properties": {
"business_id": {
"type": "string",
"description": "provider_business_id from the business feed. This desk: connective-labs-sg-buying-desk."
},
"items": {
"type": "array",
"maxItems": 50,
"items": {
"anyOf": [
{
"type": "string",
"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": "object",
"properties": {
"item": {
"type": "string",
"description": "The buyer's own wording for this line."
},
"quantity": {
"type": "integer",
"minimum": 1,
"default": 1
},
"category": {
"type": "string",
"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)."
},
"brand": {
"type": "string"
},
"model": {
"type": "string",
"description": "Model number or cartridge code exactly as printed."
},
"specs": {
"type": "object",
"description": "Same fields as quote_office_supplies specs: connectors, length, capacity, card_type, va_rating, colour, ports, screen_size, wireless, interface."
}
}
}
]
},
"description": "Optional: lines to prefill in the form."
},
"needed_by": {
"type": "string",
"description": "Optional: deadline to prefill, YYYY-MM-DD."
},
"delivery_area": {
"type": "string",
"description": "Optional: delivery area to prefill."
}
},
"required": [
"business_id"
]
}Output Schema
{
"type": "object",
"properties": {
"business_id": {
"type": "string"
},
"business_id_recognized": {
"type": "boolean"
},
"business": {
"type": "object"
},
"prefill": {
"type": "object"
},
"categories": {
"type": "array",
"items": {
"type": "object"
}
},
"how_it_works": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"business_id",
"business_id_recognized",
"business"
]
}🟢resolve_sg_address(query)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "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."
}
},
"required": [
"query"
]
}🟢singapore_how_to(task)
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.
Input Schema
{
"type": "object",
"properties": {
"task": {
"type": "string",
"description": "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'."
}
},
"required": [
"task"
]
}🟢sg_business_days(date, add, to, year)
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.
Input Schema
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD. Alone: is it a public holiday or working day? With add or to: the start date."
},
"add": {
"type": "integer",
"description": "Working days to add to date (negative to go back). The start date is not counted."
},
"to": {
"type": "string",
"description": "YYYY-MM-DD end date: count working days from date to this date."
},
"year": {
"type": "integer",
"description": "2026 or 2027: list that year's public holidays."
}
}
}🟢sg_weather_psi(what)
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.
Input Schema
{
"type": "object",
"properties": {
"what": {
"type": "string",
"enum": [
"weather",
"psi",
"both"
],
"description": "Which readings to return. Default both."
}
}
}Community
Evidence