Skip to content

AI agents

MCP server

The same catalogue, order and customer calls, as tools an AI agent can use directly over the Model Context Protocol. Nothing to wrap: connect, and the agent can answer “do you have this in blue, size L?” and place the order.

Connect

POSThttps://www.chatcom.in/api/v1/urbanchat/mcp

Transport
Streamable HTTP, stateless, JSON responses. Protocol 2025-06-18 and earlier.
Authentication
The company’s API key as Authorization: Bearer ucik_… (or X-API-KEY). Same company, rate limit and refusals as the REST API.
Sessions
None. GET and DELETE answer 405; every call is a POST.

Client configuration

For any MCP client that supports remote HTTP servers with headers:

mcp.json
{
  "mcpServers": {
    "urbanchat-ims": {
      "type": "http",
      "url": "https://www.chatcom.in/api/v1/urbanchat/mcp",
      "headers": {
        "Authorization": "Bearer ucik_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Or from the command line, with Claude Code:

Terminal
claude mcp add --transport http urbanchat-ims https://www.chatcom.in/api/v1/urbanchat/mcp \
  --header "Authorization: Bearer ucik_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

To try the tools by hand, use the MCP Inspector and choose Streamable HTTP:

Terminal
npx @modelcontextprotocol/inspector

Tools

browse_catalogread
search, category, brand, in_stock, limit, offset. Products with options, variants, prices, stock and photos — as GET /catalog/products.
get_product_detailsread
id: a product id or SKU, or a variant sku or barcode. Every variant and photo — as GET /catalog/products/{id}.
list_categoriesread
Categories and brands with product counts.
find_customerread
phone, recent_orders. As GET /customers.
get_orderread
reference, phone. As GET /orders/{reference}; pass the phone whenever answering a customer.
place_orderwrite
The POST /orders body. Creates a confirmed order and reserves stock. Idempotent on external_reference. The only tool that writes.
search_products, get_productread
The v1 flat search, kept for agents built against it. Prefer browse_catalog.

Results are JSON text content, in exactly the REST response shapes. A tool that cannot answer returns isError: true with the REST error object, e.g. { "error": { "code": "insufficient_stock", … } }.

Prompting an agent well

  • Ask the customer for each option the product lists in options, then order the variant whose attributes match. Order by the variant’s sku.
  • Check the variant’s available before promising anything. If an order comes back insufficient_stock, offer what is available.
  • Collect a delivery address with its PIN code and whether the customer is paying cash on delivery, and pass them as delivery_address and payment, so the parcel ships without anyone retyping it.
  • Give every order an external_reference derived from the conversation, and reuse it on a retry.
  • Read the order back from place_order’s result — it includes the lines, total and address — before confirming to the customer.
  • Pass the customer’s phone to get_order, always.