SmartFetch
SmartFetch V1.8 — обнаруживаемость MCP
SmartFetch принимает публичный веб-URL и возвращает чистый текст, готовый для агентов, Markdown, ссылки, метаданные и использованный метод получения данных. Сначала он пытается выполнить недорогое HTTP-получение, а при необходимости переключается на настоящий браузер Chromium.
Что изменилось в V1.8
Платный MCP-инструмент
fetch_webpageтеперь объявляет официальные метаданные x402 Bazaar для обнаружения агентами, не изменяя своё поведение при выполнении и оплате.Корневой
server.jsonобъявляет существующую конечную точку/mcpStreamable HTTP как сервер только для удалённого доступа для официального MCP Registry.Это обновление репозитория не выполняет публикацию в Registry, развёртывание, изменение переменных Railway или оплату.
Всё поведение HTTP-оплаты, Bazaar и нативного MCP из V1.7 остаётся без изменений:
Base Sepolia остаётся сетью x402 по умолчанию и продолжает использовать
https://x402.org/facilitatorбез учётных данных CDP.Base mainnet может использовать аутентифицированный CDP-фасилитатор Coinbase при явном выборе.
Запуск в mainnet требует наличия обоих учётных данных CDP API и при недействительных учётных данных или отсутствии поддержки фасилитатора завершается отказом.
/metaразличает включённые режимы оплаты testnet и mainnet.cdp-sdk, FastAPI, Uvicorn и x402 точно зафиксированы по версиям, чтобы обновления инфраструктуры были явными.
Движок получения данных, поведение извлечения/браузера, защита SSRF, лимиты запросов, ограничение частоты запросов и контроль конкурентности не изменились.
Related MCP server: SteadyFetch
API
GET /health
Возвращает состояние сервиса/версию.
GET /meta
Машиночитаемое описание сервиса.
POST /fetch
{
"url": "https://example.com/article",
"max_chars": 20000,
"force_browser": false
}max_chars необязателен (минимум 1 000; по умолчанию 20 000; максимум 50 000).
Пример полей ответа:
{
"success": true,
"requested_url": "https://example.com/article",
"final_url": "https://example.com/article",
"status_code": 200,
"render_method": "http",
"title": "…",
"content": "…",
"markdown": "…",
"links": [],
"word_count": 1000,
"content_hash": "…",
"truncated": false,
"elapsed_ms": 350,
"request_id": "…",
"service_version": "1.8.0"
}Когда защита оплаты x402 включена, заголовок PAYMENT-REQUIRED для
POST /fetch содержит объявление Bazaar с контрактом входных данных url, max_chars и
force_browser, а также репрезентативный успешный ответ.
/, /health и /meta остаются бесплатными и не объявляют метаданные Bazaar.
MCP
Удалённые MCP-клиенты подключаются к /mcp через Streamable HTTP. Сервер предоставляет
ровно один инструмент:
fetch_webpage
url: required string
max_chars: optional integer (default 20000, minimum 1000, maximum 50000)
force_browser: optional boolean (default false)Инструмент читает, получает, скрейпит или извлекает публичные веб-страницы для агентов и
возвращает существующий текст SmartFetch, Markdown, ссылки и метаданные получения данных.
Он использует те же проверку SSRF, исполнитель, таймаут запроса, ограничение конкурентности,
ограничение вывода, HTTP-получение и запасной вариант с браузером, что и POST /fetch; при этом
он не выполняет HTTP-запрос обратно к публичному API.
Когда x402 включён, неоплаченный tools/call возвращает нативный платёжный вызов x402 MCP.
Действительный платёж проверяется перед получением данных, а расчёт выполняется один раз после
успешного выполнения инструмента. Сеть, публичный получатель и цена берутся из
X402_NETWORK, X402_PAY_TO и X402_PRICE. Ни закрытый ключ продавца, ни секрет кошелька
не принимаются и не требуются.
Неоплаченный платёжный вызов MCP включает объявление Bazaar для
fetch_webpage с транспортом streamable-http, существующим контрактом входных данных
и репрезентативным выводом SmartFetch. Его платёжный ресурс остаётся
mcp://tool/fetch_webpage. Существующий HTTP-ресурс Bazaar для POST /fetch
является отдельным и не изменён.
Корневой server.json описывает публичную удалённую конечную точку
https://smartfetch-production-ea53.up.railway.app/mcp. Публикация в Registry —
отдельное действие аутентифицированного оператора; добавление манифеста не публикует
и не развёртывает сервис.
Локальный запуск
python -m pip install -r requirements.txt
python -m smartfetch.serverЗатем:
curl http://127.0.0.1:8787/health
curl -X POST http://127.0.0.1:8787/fetch \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com"}'Пользователи Windows могут запустить setup_windows.bat, затем start_windows.bat.
Если X402_ENABLED не задан или равен false, для запуска не требуются настройки оплаты, и /fetch остаётся бесплатным для локального и удалённого тестирования.
Режимы оплаты x402
Оплата остаётся отключённой, пока её явно не включат. Base Sepolia используется по умолчанию и требует только публичный адрес получателя:
X402_ENABLED=true
X402_PAY_TO=0xYOUR_PUBLIC_RECEIVING_ADDRESS
X402_PRICE=$0.005
X402_NETWORK=eip155:84532X402_PRICE и X402_NETWORK при отсутствии используют указанные значения. Цена по умолчанию остаётся $0.005.
Base mainnet должен быть выбран явно и использует аутентифицированный CDP-фасилитатор Coinbase:
X402_ENABLED=true
X402_PAY_TO=0xYOUR_PUBLIC_RECEIVING_ADDRESS
X402_PRICE=$0.005
X402_NETWORK=eip155:8453
CDP_API_KEY_ID=YOUR_CDP_API_KEY_ID
CDP_API_KEY_SECRET=YOUR_CDP_API_KEY_SECRETMainnet требует оба учётных данных CDP. Отсутствующие, недействительные или непригодные учётные данные, неподдерживаемые точные платежи Base mainnet или любой сбой инициализации фасилитатора/промежуточного ПО прерывают запуск. SmartFetch никогда не переключается на бесплатный доступ или тестнет-фасилитатор, когда выбран mainnet. Любая сеть, кроме Base Sepolia и Base mainnet, отклоняется.
Защищён только POST /fetch. /health, / и /meta всегда остаются бесплатными. Включённые ответы /meta сообщают x402-enabled-testnet или x402-enabled-mainnet, не раскрывая значения конфигурации.
SmartFetch использует X402_PAY_TO как публичный адрес получателя, и ему не нужен CDP_WALLET_SECRET. Никогда не передавайте закрытый ключ MetaMask продавца или фразу восстановления: SmartFetch не требует, не читает, не принимает, не записывает в журнал и не хранит ни то, ни другое.
Локальная проверка
python tests/security_smoke.py
python tests/api_local_smoke.pyapi_local_smoke.py намеренно включает доступ к частной сети только внутри тестового процесса, чтобы можно было использовать локальную фикстуру localhost.
Контейнер
docker build -t smartfetch:v1.8 .
docker run --rm -p 8787:8787 smartfetch:v1.8Контейнер автоматически устанавливает Chromium.
Публичное развёртывание
Этот пакет готов к использованию с Docker. Railway может развернуть включённые Dockerfile и railway.json; любой Docker-хост с исходящим HTTPS и достаточным объёмом ОЗУ для одного процесса Chromium также должен работать.
Рекомендуемые начальные переменные окружения:
MAX_CONCURRENT_BROWSERS=1
MAX_CONCURRENT_FETCHES=4
DEFAULT_MAX_OUTPUT_CHARS=20000
MAX_OUTPUT_CHARS=50000
FETCH_TIMEOUT_SECONDS=12
BROWSER_TIMEOUT_SECONDS=15
TOTAL_REQUEST_TIMEOUT_SECONDS=25
RATE_LIMIT_PER_MINUTE=30
RATE_LIMIT_BURST=10
X402_ENABLED=falseНе устанавливайте ALLOW_PRIVATE_NETWORK=1 в продакшене.
Важное примечание о развёртывании и SSRF
Включена проверка URL на уровне приложения, но рендеринг в браузере может выполнять подресурсы страницы. Для платного публичного развёртывания контейнер браузера должен быть дополнительно изолирован политикой исходящего трафика хоста/сети от метаданных облака и частных сетей RFC1918. Мы снова усилим защиту перед снятием временного ограничения частоты запросов и перед запуском x402.
Тестирование публичного развёртывания
В Windows запустите test_remote_windows.bat, вставьте публичный URL и загрузите tests/remote_20_results.json.
Или:
python tests/remote_20.py https://YOUR-PUBLIC-URLНаш порог для развёртывания остаётся минимум 18/20, включая все пять запросов с принудительным браузером.
Статус запуска оплаты
V1.8 сохраняет существующую конфигурацию оплаты Base Sepolia и Base mainnet. Это изменение репозитория само по себе не публикует сервис в MCP Registry, не развёртывает его и не изменяет переменные Railway. Активная платёжная сеть управляется с помощью X402_NETWORK: eip155:84532 для Base Sepolia или eip155:8453 для Base mainnet.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to read web pages reliably, returning clean markdown content, hyperlinks, and metadata without navigation or ad noise.314MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to fetch any web page as clean markdown or screenshot it, turning URLs into LLM-ready context.211MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to fetch and extract clean, readable content from web pages, and search within pages for specific queries, without needing a full browser.1MIT
Related MCP Connectors
Web intelligence for AI agents: fetch, render, extract, research. x402 micropayments, no API keys.
The web capability layer for AI agents: render, extract, DNS, SSL, WHOIS & more via x402.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Friezaaaa/smartfetch'
If you have feedback or need assistance with the MCP directory API, please join our Discord server