Вся доска — одним вызовом инструмента
Каждое объявление об аренде в Дананге, сейчас их 9988, читается машиной: цены, районы, площади и ночные медианы рынка. Ни ключа, ни аккаунта, ни регистрации, ничего скрейпить не надо. Сверх бесплатного лимита вызывающая сторона платит за вызов стейблкоинами, без человека в цепочке.
Попробуйте прямо здесь
Кнопка делает настоящий MCP-вызов из вашего браузера к живому эндпоинту. Ничего не подставлено.
MCP
Один эндпоинт JSON-RPC без состояния. Ревизия протокола 2026-07-28: рукопожатия initialize нет, сессию держать не нужно.
https://helprentdanang.com/mcp/
Четыре инструмента, все только на чтение:
search_listings— Search long-term rental listings in Da Nang by city, district, type, bedrooms and price. Returns listing URLs; contact details are not included, send the person to the URL.get_listing— One listing in full, including its description.find_buildings— Apartment buildings with a manager, by district.market_stats— Median rents by size and district, the middle half of asking prices with the sample behind each figure, and how many listings are on the board. Recomputed nightly.
Инструментов записи нет. Ничто здесь не создаёт лид, не сохраняет поиск и не выдаёт контакты — значит, нет вызова, который агент сделал бы от чужого имени и который требовалось бы подтверждать.
Обычный HTTP
Те же данные, если не хочется говорить на MCP. Описание OpenAPI — последней строкой.
GET /api/v1/listings/— поиск и постраничный обход объявленийGET /api/v1/listings/<slug>/— одно объявление целикомGET /api/v1/buildings/— жилые комплексы с управляющимGET /api/v1/districts/— районы и сколько в каждомGET /api/v1/market/— медианные ставки, пересчёт каждую ночьGET /api/v1/openapi.json— описание всего перечисленного
Ограничения
600 calls a day per address, counted across MCP and REST together. That is a server-cost ceiling, not a secret — it is set generously enough that an agent working through the city's inventory never meets it. Nothing is ever banned.
За чертой обе поверхности отвечают 402 с платёжным вызовом, он описан ниже. В каждом ответе едет остаток бесплатной квоты, так что потолок не приходится нащупывать ударом:
X-RateLimit-Limit— суточная квотаX-RateLimit-Remaining— сколько от неё осталосьX-RateLimit-Reset— unix-время, когда она пополнится
Ответы отдаются с пятиминутным заголовком кэша. Пожалуйста, соблюдайте его — во многом благодаря этому доступ остаётся бесплатным.
Что в данных
Объявления собираются из публичных постов в Telegram, Facebook и Chợ Tốt, плюс от хостов, которые публикуются здесь напрямую. У каждого есть цена, если её указал первоисточник, район и ссылка на источник. Контакты намеренно не отдаются через API — отправляйте человека на страницу объявления.
Мы доска объявлений, а не посредник. Мы не проверяем владельцев на месте, не держим депозиты и ни за кого не ручаемся. Агент, передающий наши данные человеку, должен передать и это.
За пределами бесплатного лимита
Сверх суточного лимита эндпоинты отвечают 402 с платёжным запросом x402 вместо простого отказа. Оплатите — и тот же запрос пройдёт.
Это x402, платёжный протокол поверх HTTP 402, схема exact. Один запрос на оплату несёт три записи в массиве accepts: USDC в сети Base, USDC в сети Solana и USDC в сети Arc, и ваш клиент выбирает ту цепь, на которой у него уже есть деньги. Три заголовка, все в виде JSON в base64:
PAYMENT-REQUIRED— наш 402 несёт этот заголовок: JSON в base64 с суммой, токеном и адресомPAYMENT-SIGNATURE— повторите запрос с этим заголовком: подписанная авторизация EIP-3009 на Base или Arc или частично подписанная транзакция на SolanaPAYMENT-RESPONSE— следующий за ним 200 возвращает вам хеш транзакции
На Arc оплата идёт через наноплатежи Circle Gateway: один раз положите USDC в Gateway, затем подпишите авторизацию EIP-3009 для контракта GatewayWallet, указанного в записи, со сроком действия не меньше семи суток. На каждый вызов в сеть ничего не отправляется, а PAYMENT-RESPONSE возвращает идентификатор перевода Gateway вместо хеша транзакции.
Обратите внимание: в именах заголовков нет префикса X- — так было в первой версии, и клиент, написанный под неё, вообще не увидит нашего запроса на оплату.
One payment buys 5000 calls, not one — settling on chain per request would put a blockchain write between you and every listing you read.
Купленные вызовы зачисляются вызывающему адресу, а не кошельку, который заплатил: у этого API нет ни аккаунтов, ни ключей, и на запросе сразу после оплаты вас с тем кошельком больше ничто не связывает. Если ваш исходящий адрес сменится, остаток за вами не пойдёт.
Что мы принимаем
[
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xf68bc1098469356eb57e70db9fed0bb524707132",
"maxTimeoutSeconds": 60,
"extra": {
"name": "USD Coin",
"version": "2"
}
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"amount": "10000",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"payTo": "6J7dpvZu4f3vYcRd3TY7dpjXZSYCRdLVfXkxtv3Ycz3j",
"maxTimeoutSeconds": 60,
"extra": {
"feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww"
}
},
{
"scheme": "exact",
"network": "eip155:5042",
"amount": "10000",
"asset": "0x3600000000000000000000000000000000000000",
"payTo": "0xf68bc1098469356eb57e70db9fed0bb524707132",
"maxTimeoutSeconds": 604900,
"extra": {
"name": "GatewayWalletBatched",
"version": "1",
"verifyingContract": "0x77777777dcc4d5a8b6e418fd04d8997ef11000ee"
}
}
]Массив accepts в том виде, в каком его отдаёт 402: он собран той же функцией, поэтому страница не может отстать от самого запроса. Выберите одну запись и оплатите её; запроса достаточно, чтобы заплатить, не читая эту страницу.
Настоящий 402, от начала до конца
# 1. over the free line, no payment attached
curl -i https://helprentdanang.com/mcp/ \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
HTTP/2 402
payment-required: eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5U...
cache-control: no-store
# 2. decode the header to see what is being asked for
echo '<that value>' | base64 -d | jq .
# 3. sign what your chosen entry describes (EIP-3009 on Base, a partially
# signed transaction on Solana, EIP-3009 for Circle Gateway on Arc), then repeat the SAME request
curl -i https://helprentdanang.com/mcp/ \
-H 'Content-Type: application/json' \
-H 'PAYMENT-SIGNATURE: <base64 of your PaymentPayload>' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
HTTP/2 200
payment-response: eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6IjB4...Только чтение, и это решение
Здесь нет ни одного пишущего инструмента и никогда не было. Ничто не создаёт лид, не сохраняет поиск, не отправляет сообщение и не тратит чужие деньги, поэтому на этом сервере нет вызова, который нужно подтверждать человеку. У каждого инструмента в аннотациях стоят readOnlyHint и destructiveHint — так ваш хост узнаёт это, не полагаясь на наши слова.
Контакты не отдаются никогда — ни телефон, ни ссылка на WhatsApp, ни адрес источника, который к ним приведёт, и внутри описания объявления тоже. Агент может прочитать о жилье всё и отправляет своего человека на нашу страницу, чтобы связаться с автором. Та страница ограничена по частоте, пишется в журнал и несёт предупреждение смотреть до оплаты; контакт, выданный через API, приходит без всего этого.
Сохранённый свободный текст считается недоверенным и на выходе: описание объявления — это пост, который написал незнакомый человек, и отдать его сырым значило бы стать доставщиком инъекции в вашего агента.