<!-- https://pricto.dev/docs/mcp · Spanish version: https://pricto.dev/docs/mcp.md -->

# MCP server

A remote MCP server (Streamable HTTP, stateless), compatible with the 2026-07-28 spec and with 2025 clients. The tools call the same API, at the same cost.

| | URL | Authentication |
|---|---|---|
| Sandbox | `https://pricto.dev/mcp/sandbox` | None |
| Production | `https://pricto.dev/mcp` | `Authorization: Bearer <key>` |

Instructions for each assistant in the [quickstart](/docs#3-conecta-tu-agente) and on [Connect](/conectar).

Every response carries a text for the model (a short table, the source line and the cost) and `structuredContent` with the full data. Errors come back as a result with `isError` and a hint so the agent can correct itself.

## `search_products`

Find products by name, brand, size or barcode (GTIN/EAN) and get the price range across retailers. Use the returned product_id with the other tools. Cost: 1 credit per page, 0 if nothing is found. Example queries: "leche entera 1 litro", "paracetamol 500 mg", "Coca-Cola sin azúcar 1,5 L", "7801234567890".

| Cost | Read only |
|---|---|
| 1 credit per page, 0 if nothing is found. | Yes |

| Argument | Type | Description |
|---|---|---|
| `query` (required) | `string` | Free text in Spanish or English, or a GTIN. |
| `category` | `string` | Category ID such as food.dairy or health.analgesics (see get_coverage). |
| `brand` | `string` | Brand name or ID. |
| `retailer` | `string` | Only products sold by this retailer ID. |
| `country` | `string` | ISO country code. Only CL is live. |
| `limit` | `integer` | Max results, default 5. |
| `lang` | `string` | BCP 47 language for product names and messages (es, en, en-US...). Default: es. |
| `currency` | `string` | Also return amounts in this ISO 4217 currency, e.g. USD or EUR. Default: local currency only. |
| `max_credits` | `number` | Spend at most this many credits; results are cut to fit (cheapest first). |

Questions that use it:

- "How much is a liter of whole milk?"
- "Find 500 mg paracetamol."

```json
{
  "query": "leche entera"
}
```

```text
| product_id | name | min | max | retailers | cheapest at |
|---|---|---|---|---|---|
| prd_01colu | Leche entera Colun 1 L | $1.090 | $1.290 | 3 | Unimarc |
| prd_04colu | Leche entera Colun pack 6 x 1 L | $7.290 | $7.290 | 2 | Jumbo |
| prd_02sopr | Leche descremada Soprole 1 L | $1.190 | $1.190 | 2 | Jumbo |
| prd_03lonc | Leche semidescremada sin lactosa Loncoleche 1 L | $1.290 | $1.490 | 3 | Unimarc |
Fuente: Pricto · 23-10-2026 08:00 CLST
Costo: 1 crédito. Saldo: 14.999.
```

## `get_prices`

Current price of one product at every retailer that sells it, cheapest first: list, sale and card price, multi-buy promotions, unit price, stock and date observed. as_of gives a past date. Cost: 1 credit per retailer price. To follow a price over time, call get_price_history with interval=day once a week or month instead of get_prices every day: 1 credit per 30 days per retailer.

| Cost | Read only |
|---|---|
| 1 credit per retailer price. | Yes |

| Argument | Type | Description |
|---|---|---|
| `product` (required) | `string` | product_id from search_products (prd_...) or a GTIN/EAN barcode. |
| `retailers` | `array<string>` | Retailer IDs to include, e.g. ["cl-jumbo","cl-unimarc"]. Default: all. |
| `location` | `string` | Comuna name ("Las Condes"), 'CL:<CUT code>' or a store ID, for retailers that price by location. |
| `as_of` | `string` | Past date YYYY-MM-DD. Default: latest. |
| `match_kinds` | `array<string>` | Default ["identical"]. "pack": N units of the product (compare unit_price). "equivalent": substitute of another brand. |
| `lang` | `string` | BCP 47 language for product names and messages (es, en, en-US...). Default: es. |
| `currency` | `string` | Also return amounts in this ISO 4217 currency, e.g. USD or EUR. Default: local currency only. |
| `max_credits` | `number` | Spend at most this many credits; results are cut to fit (cheapest first). |

Questions that use it:

- "Where is Colún 1 L milk cheapest?"
- "What does barcode 2000070000007 cost at each store?"

```json
{
  "product": "2000070000007"
}
```

```text
Leche entera Colun 1 L (prd_01colu). 3 retailers, observed 2026-10-23.
| retailer | price | list | card | promo | stock |
|---|---|---|---|---|---|
| Unimarc | $1.090 | $1.090 | - | - | in_stock |
| Santa Isabel | $1.190 | $1.190 | - | - | in_stock |
| Jumbo | $1.290 | $1.290 | $1.190 (Tarjeta Cencosud) | - | in_stock |
Fuente: Pricto · 23-10-2026 08:00 CLST · prd_01colu
Costo: 3 créditos. Saldo: 14.996.
```

## `compare_prices`

Price matrix for up to 20 products at each retailer and the basket total per retailer, cheapest complete basket first. Use for "where is this list cheapest" or to compare a brand against competitors. Cost: 1 credit per price in the matrix.

| Cost | Read only |
|---|---|
| 1 credit per price in the matrix. | Yes |

| Argument | Type | Description |
|---|---|---|
| `items` (required) | `array<object>` |  |
| `retailers` | `array<string>` | Retailer IDs to include, e.g. ["cl-jumbo","cl-unimarc"]. Default: all. |
| `price_type` | `string` | card_price totals with store-card prices where they exist. Values: `price`, `card_price`. |
| `match_kinds` | `array<string>` | Default ["identical"]. "pack": N units of the product (compare unit_price). "equivalent": substitute of another brand. |
| `lang` | `string` | BCP 47 language for product names and messages (es, en, en-US...). Default: es. |
| `currency` | `string` | Also return amounts in this ISO 4217 currency, e.g. USD or EUR. Default: local currency only. |
| `max_credits` | `number` | Spend at most this many credits; results are cut to fit (cheapest first). |

Questions that use it:

- "Which supermarket is cheapest for this list?"
- "Compare 2 milks and an oil between Jumbo and Unimarc."

```json
{
  "items": [
    {
      "product": "prd_01colu",
      "quantity": 2
    },
    {
      "product": "2000070000373"
    }
  ]
}
```

```text
| retailer | total | items found |
|---|---|---|
| Santa Isabel | $3.570 | 2/2 |
| Jumbo | $3.770 | 2/2 |
| Unimarc | $2.180 | 1/2 |
Fuente: Pricto · 23-10-2026 08:00 CLST
Costo: 2 créditos (3 repetidos en 24 h, gratis). Saldo: 14.994.
```

## `get_price_history`

How the price of a product changed over time at each retailer: first, last, min, max, % change, number of changes, days on promotion, plus the series. Default: last 90 days by week. Cost: 1 credit per 30 points per retailer (90 days by week = 1 per retailer).

| Cost | Read only |
|---|---|
| 1 credit per 30 points per retailer (90 days by week = 1 per retailer). | Yes |

| Argument | Type | Description |
|---|---|---|
| `product` (required) | `string` | product_id from search_products (prd_...) or a GTIN/EAN barcode. |
| `retailers` | `array<string>` | Retailer IDs to include, e.g. ["cl-jumbo","cl-unimarc"]. Default: all. |
| `from` | `string` | Start date YYYY-MM-DD. Default: 90 days ago. |
| `to` | `string` | End date YYYY-MM-DD. Default: today. |
| `interval` | `string` | Point spacing. Default: week. Values: `day`, `week`, `month`. |
| `match_kinds` | `array<string>` | Default ["identical"]. "pack": N units of the product (compare unit_price). "equivalent": substitute of another brand. |
| `lang` | `string` | BCP 47 language for product names and messages (es, en, en-US...). Default: es. |
| `currency` | `string` | Also return amounts in this ISO 4217 currency, e.g. USD or EUR. Default: local currency only. |
| `max_credits` | `number` | Spend at most this many credits; results are cut to fit (cheapest first). |

Questions that use it:

- "How has Colún milk's price changed in recent months?"
- "Did paracetamol go up this month?"

```json
{
  "product": "prd_01colu",
  "interval": "month"
}
```

```text
prd_01colu 2026-07-26 → 2026-10-23 (CLP).
| retailer | first | last | min | max | change | changes | promo days |
|---|---|---|---|---|---|---|---|
| Jumbo | $1.290 | $1.290 | $990 | $1.290 | 0% | 4 | 46 |
| Santa Isabel | $1.190 | $1.190 | $890 | $1.190 | 0% | 4 | 20 |
| Unimarc | $1.090 | $1.090 | $1.090 | $1.090 | 0% | 0 | 20 |
Fuente: Pricto · 23-10-2026 08:00 CLST · prd_01colu
Costo: 3 créditos. Saldo: 14.991.
```

## `list_offers`

Listings as published by retailers, filtered by retailer, category, brand, promotion or recent change. Use to find what is on promotion at a store or what changed since a date. Cost: 1 credit per listing.

| Cost | Read only |
|---|---|
| 1 credit per listing. | Yes |

| Argument | Type | Description |
|---|---|---|
| `retailer` | `string` |  |
| `category` | `string` |  |
| `brand` | `string` |  |
| `on_promotion` | `boolean` | Only listings with a sale price, card price or multi-buy. |
| `changed_since` | `string` | ISO date or date-time; only listings whose price or stock changed after it. |
| `limit` | `integer` | Default 10. |
| `cursor` | `string` | next_cursor from a previous call. |
| `lang` | `string` | BCP 47 language for product names and messages (es, en, en-US...). Default: es. |
| `currency` | `string` | Also return amounts in this ISO 4217 currency, e.g. USD or EUR. Default: local currency only. |
| `max_credits` | `number` | Spend at most this many credits; results are cut to fit (cheapest first). |

Questions that use it:

- "What's on sale at Jumbo today?"
- "What changed price since yesterday in pharmacies?"

```json
{
  "retailer": "cl-jumbo",
  "on_promotion": true,
  "limit": 3
}
```

```text
| retailer | title | price | list | card | promo |
|---|---|---|---|---|---|
| Jumbo | Leche Entera Colun 1 L | $1.290 | $1.290 | $1.190 | - |
| Jumbo | Leche Semidescremada Sin Lactosa Loncoleche 1 L | $1.490 | $1.490 | - | 2 x $2.590 |
| Jumbo | Leche Entera Colun Pack 6 X 1 L | $7.290 | $7.290 | - | 2 x $12.590 |
Fuente: Pricto · 23-10-2026 08:00 CLST
Costo: 2 créditos (1 repetidos en 24 h, gratis). Saldo: 14.989.
```

## `get_coverage`

Which countries, retailers and categories have data, how fresh it is and since when there is history. Free.

| Cost | Read only |
|---|---|
| 0 | Yes |

| Argument | Type | Description |
|---|---|---|
| `country` | `string` |  |
| `retailer` | `string` |  |
| `category` | `string` |  |
| `lang` | `string` | BCP 47 language for product names and messages (es, en, en-US...). Default: es. |

Questions that use it:

- "Which stores do you cover and since when?"
- "Do you have Lider data?"

```json
{
  "category": "health"
}
```

```text
7 retailers, 5 products, history since 2026-06-26. Planned: PE: Perú, CO: Colombia, MX: México.
Retailers: Jumbo (cl-jumbo), Santa Isabel (cl-santaisabel), Unimarc (cl-unimarc), Cruz Verde (cl-cruzverde), Farmacias Ahumada (cl-ahumada), Farmacias del Dr. Simi (cl-drsimi), Farmacias Knop (cl-knop).
Categories: Salud y farmacia (health), Analgésicos (health.analgesics), Vitaminas (health.vitamins).
Fuente: Pricto · 23-10-2026 08:00 CLST
Costo: 0 créditos. Saldo: 14.989.
```

## `request_data`

Send the provider a request to add a retailer, country, category or delivery format that is not covered. Free; the provider's team replies by email to the account owner.

| Cost | Read only |
|---|---|
| 0 | No |

| Argument | Type | Description |
|---|---|---|
| `kind` (required) | `string` |  Values: `retailer`, `country`, `category`, `frequency`, `delivery`, `other`. |
| `description` (required) | `string` | What is needed and why, in the user's words. |
| `retailer_url` | `string` |  |
| `country` | `string` |  |

Questions that use it:

- "Ask them to add a pharmacy that's missing."

```json
{
  "kind": "retailer",
  "description": "Agregar una cadena regional de farmacias del sur de Chile"
}
```

```text
Request dreq_0001 received. The team replies by email to the account owner.
Costo: 0 créditos. Saldo: 14.989.
```

## Prompt for your agent

The tools already carry instructions for the model. If you build your own agent, this works well as part of the system prompt:

```text
Use the Pricto tools to answer questions about prices at Chilean stores.
- Start with search_products to find the product; then get_prices, compare_prices or get_price_history.
- Always say the store and date of each price, and quote the "Source: ..." line as is.
- "price" is what anyone pays. Card prices and promotions have conditions: say so.
- If a search finds nothing, call get_coverage before saying it doesn't exist.
- If the data is sample data (synthetic_data notice), tell the person.
- Watch spending: use max_credits on big questions and mention the cost each response reports.
```

## Server instructions

What the server tells the model when it connects:

```text
Retail prices from online stores, Chile first (supermarkets and pharmacies in this version).
Typical flow: search_products to find the product_id, then get_prices (one product at every retailer),
compare_prices (a basket) or get_price_history (trend). Call get_coverage when a search finds nothing,
to tell the user whether the data does not exist.
Rules when answering: say which retailer and the observed_at date of each price; "price" is what anyone
pays, "card_price" needs that retailer's card and promotions need a minimum quantity, so never present
them as the plain price; amounts are in the local currency (CLP has no decimals) unless currency is set.
When citing data, use the attribution line returned with each result. Pass lang="en" to get English product names. Prices are public online prices, not in-store.
Each paid tool reports its cost; pass max_credits to cap spending. Call request_data only after the user
agrees to send the request.
```
