kurslog.com →

Tools Reference

This page documents the five MCP tools exposed by the Kurslog connector. All tools are read-only (readOnlyHint: true). Responses are JSON, capped well under MCP's 25 000-token result limit.

Common arguments

ArgumentTypeDescription
locale"uk" | "ru" | "en"Response language. Default uk.
from_currencystring ≤ 40 charsSource currency slug (e.g. usdt-trc20).
to_currencystring ≤ 40 charsTarget currency slug (e.g. monobank-uah, cash-uah).
citystring ≤ 50 charsOptional city slug (e.g. kyiv) for cash directions.

list_currencies

Purpose: discover currency codes used by all other tools.

Cache TTL: 3600 s.

Arguments:

{
  "locale": "en",
  "only_with_rates": true,    // default true
  "limit": 200                // 1..300, default 200
}

Example response (truncated):

{
  "count": 200,
  "locale": "en",
  "currencies": [
    {"code": "usdt-trc20", "name": "USDT TRC20", "asset": "USDT",
     "popularity": 1, "tags": ["USDT"], "has_rates": true},
    {"code": "bitcoin", "name": "Bitcoin", "asset": "BTC",
     "popularity": 2, "tags": ["Crypto"], "has_rates": true}
  ]
}

find_best_rate

Purpose: top 3 best offers for a currency pair, with optional city for cash directions.

Cache TTL: 60 s.

Arguments:

{
  "from_currency": "usdt-trc20",
  "to_currency": "cash-uah",
  "city": "kyiv",          // optional
  "locale": "en"
}

Example response:

{
  "direction": {"from": "usdt-trc20", "to": "cash-uah", "city": "kyiv"},
  "best_offers": [
    {
      "exchanger_name": "Dvizh",
      "exchanger_slug": "dvizh",
      "exchanger_rating": 5.0,
      "trust_status": "Diamond",
      "rate_in": 1,
      "rate_out": 44.13,
      "reserves": 170916400.39,
      "min_amount": 566.45,
      "max_amount": 2000000,
      "kurslog_link": "https://kurslog.com/usdt-trc20-to-cash-uah-in-kyiv"
    }
    // ... up to 3 entries
  ],
  "disclaimer": "Rates may be stale up to 5 minutes..."
}

Empty result: if no exchangers match (invalid pair, wrong city slug), returns a structured success with results: [] and an explanatory message — never an exception.

compare_exchangers

Purpose: broader list (up to 20) with trust score, reserves, profile links.

Cache TTL: 60 s.

Arguments:

{
  "from_currency": "bitcoin",
  "to_currency": "monobank-uah",
  "limit": 10,             // 1..20, default 10
  "city": null,            // optional
  "locale": "en"
}

Same response shape as find_best_rate, except exchangers array of up to limit items, each enriched with trust_score (numeric) and profile_link.

get_exchanger_profile

Purpose: single exchanger's profile — trust, contacts, founding date.

Cache TTL: 600 s.

Arguments:

{
  "exchanger_slug": "digichanger",
  "locale": "en"
}

Example response:

{
  "name": "Digichanger",
  "slug": "digichanger",
  "status": "active",
  "founding_date": "2023-05-19",
  "website": "https://www.digichanger.pro",
  "trust": {
    "label": "Diamond",
    "name": "diamond",
    "explanation": "Reviews: 3338 across 4 monitoring platforms. On the market: 3 years.",
    "domain_age_years": 3.01
  },
  "kurslog_profile": "https://kurslog.com/exchanger/digichanger"
}

find_cities_for_direction

Purpose: Ukrainian (and nearby) cities where a cash exchange direction is currently active.

Cache TTL: 3600 s.

Arguments:

{
  "from_currency": "usdt-trc20",
  "to_currency": "cash-eur",
  "limit": 15,             // 1..30, default 15
  "locale": "en"
}

Example response (truncated):

{
  "direction": {"from": "usdt-trc20", "to": "cash-eur"},
  "count": 15,
  "cities": [
    {"city": "Kyiv", "slug": "kyiv", "exchanger_count": 16,
     "best_rate": 0.0234, "kurslog_link": "https://kurslog.com/usdt-trc20-to-cash-eur-in-kyiv"}
    // ...
  ]
}

Error handling

Every tool follows the MCP convention. Failed upstream requests or unknown slugs do not raise an MCP isError: true. Instead they return a structured empty result with a human-readable message field explaining what to try next. This lets Claude give the user a useful answer rather than a stack trace.

Rate limits

The connector applies a 60 req/min/IP limit at the nginx layer. Combined with per-tool caching, you should never hit it through normal Claude usage. If you do, you'll get a 429 from the HTTP layer.