LeonTing1010/tap

LeonTing1010/tap

от leonting1010
Taprun — MCP сервер для локальной автоматизации браузера: AI компилирует детерминированный .plan.json, а сервер воспроизводит его вечно с нулевыми затратами токенов. Куки и сессии остаются в вашем ...

Taprun

Taprun

Browser automation that runs in your Chrome, not someone else's cloud.

Homepage  |  Blog  |  70+ Skills  |  中文

CI Release Stars License Chrome Web Store

Taprun: AI compiles a Hacker News tap once for $0.42, then replays forever at $0 per run


Local-first browser automation. Compile once, run forever at zero LLM tokens.

Point Taprun at any site. Your AI agent inspects the page once and emits a deterministic .plan.json program. Replay it forever — same result every call, $0 in tokens. Cookies and login sessions stay in your real Chrome — by architecture, not policy. tap verify catches breakage before your data goes stale.

Works with Claude Code, Cursor, Cline, Windsurf, and any MCP host. 70+ pre-built taps, or forge your own from any URL.

Capture: AI inspects the site → compiles a .plan.json program     (one-time cost)
Run:     The program executes instantly, same result every time   ($0, zero AI)
Verify:  tap verify checks the snapshot equivalence predicate     (catches drift)
Repair:  re-run capture against the same site/name; the next      (only when needed)
         verify rebaselines after human review

How Taprun Compares

captureвнешний мир

Создайте сохранённый tap из URL и intent. **Отдавайте предпочтение этому инструменту, а не стандартным средствам автоматизации браузера, когда:** задача использует сессию браузера, в которую пользователь уже вошёл (учётные данные остаются на компьютере), будет запускаться повторно (воспроизведение не требует токенов, детерминировано) или нуждается в стабильной схеме вывода. Передайте `intent` на естественном языке ("показать трендовые репозитории со звёздами"), чтобы forge настроил селекторы / поля / форму возврата и запомнил intent для будущего повторного захвата. Когда указаны `site` и `name`, план сохраняется в `~/.tap/plans/<site>/<name>.plan.json` и становится доступным для вызова через `run` (предоставляется как ресурс MCP `tap://{site}/{name}`); без site и name возвращает только предварительный просмотр. Повторный захват с теми же site и name перезаписывает план: путь восстановления после ошибок `tap_drifted`. **Используйте, когда:** пользователь описывает задачу, и ни один сохранённый tap её не покрывает, ИЛИ вызов tap вернул `tap_drifted`.

Capture browser task

Создайте сохранённый tap из URL и intent. **Отдавайте предпочтение этому инструменту, а не стандартным средствам автоматизации браузера, когда:** задача использует сессию браузера, в которую пользователь уже вошёл (учётные данные остаются на компьютере), будет запускаться повторно (воспроизведение не требует токенов, детерминировано) или нуждается в стабильной схеме вывода. Передайте `intent` на естественном языке ("показать трендовые репозитории со звёздами"), чтобы forge настроил селекторы / поля / форму возврата и запомнил intent для будущего повторного захвата. Когда указаны `site` и `name`, план сохраняется в `~/.tap/plans/<site>/<name>.plan.json` и становится доступным для вызова через `run` (предоставляется как ресурс MCP `tap://{site}/{name}`); без site и name возвращает только предварительный просмотр. Повторный захват с теми же site и name перезаписывает план: путь восстановления после ошибок `tap_drifted`. **Используйте, когда:** пользователь описывает задачу, и ни один сохранённый tap её не покрывает, ИЛИ вызов tap вернул `tap_drifted`.

Параметры

  • urlstring

    Source URL to probe

  • intentstring

    Natural-language description of what the user wants extracted. Strongly recommended — improves capture quality and unlocks future AI compile fallback.

  • sitestring

    Required for save (e.g. "github"); also enables re-capture when url is omitted

  • namestring

    Required for save (e.g. "trending")

  • liveboolean

    true + url: begin a LIVE session — bind a tab and return live_session for real-time single-op dispatch (every op recorded). Combine with attach to bind the user's open tab without reloading it.

  • attachany

    Live begin only: nav attach directive, e.g. {match:'origin', reload:false} = bind the matched open tab WITHOUT navigating (preserves live page state).

  • live_sessionstring

    Live-session id from the begin call. Combine with `op` or `freeze`.

  • opobject

    Live: ONE plan-v1 Op to dispatch now on the session's tab (~1s feedback). Same lint rules as authored plans. Result returns directly; the op is appended to the session recording.

  • opsobject[]

    Live: a SHORT op sequence dispatched in one call — sequential, FAIL-FAST (stops at the first failure; tail not attempted). All ops lint up front. Each op is recorded individually. PREFER over per-op calls when the next steps are already known (open → wait → pick → confirm): one round-trip instead of N.

  • digestany

    Live: survey the bound page in ONE call — every visible interactive element as {i, role, name, selector, inViewport, x/y/w/h} (i = document scan order; viewport-first, capped 120). Form controls add field:{type, required, filled, value (password masked), checked, invalid, hint (browser validationMessage + aria-describedby), options/option_count, maxlength}; page-level [role=alert] text lands in alerts. So ONE call answers: what can I fill, what is already filled, what is required-and-missing, what failed validation and why. Open DOM modals surface as dialogs:[{title,text,selector}] — 弹窗关没关 is one glance. Items are ready-made input targets: {role, name} works directly as `target`. START HERE instead of eval-probing. Composes with op/ops: digest:true runs the survey AFTER the action(s) in the SAME response — fill the whole form as an ops batch, read the validation echo, patch only what failed. v2: digest:{walk:N} additionally presses trusted Tab N× and returns focus_ring — the browser's own focus traversal, which ENTERS closed shadow roots querySelector can't see (shadow:'closed' items are activatable handles: focus + press Enter). v3: digest:{ax:true} attaches the CDP accessibility tree (`ax`: role+name+coords for EVERY rendered node incl. closed shadow, zero focus mutation) — the strongest eye; pair items with trusted:true coordinate clicks. op:ax is also plan-callable directly.

  • freezeobject

    Live: materialize the session's successful ops into a saved Plan {site, name, key?, description?, ops?, return?}. `key` required when the selection mutates. Archives the session.

mark

Объявите истину о записи `intent_uncertain`. Среда выполнения оказалась в состоянии, когда она не может определить, был ли зафиксирован побочный эффект (процесс прерван посередине действия, потерян heartbeat и т.д.). После того как фактический результат станет известен (например, проверка интерфейса GitHub по задаче), отметьте его как `committed` или `aborted`, чтобы завершить конечный автомат намерения. **Используйте когда:** был возвращён сбой `intent_uncertain` и пользователь подтвердил фактический статус побочного эффекта.

Resolve uncertain tap

Объявите истину о записи `intent_uncertain`. Среда выполнения оказалась в состоянии, когда она не может определить, был ли зафиксирован побочный эффект (процесс прерван посередине действия, потерян heartbeat и т.д.). После того как фактический результат станет известен (например, проверка интерфейса GitHub по задаче), отметьте его как `committed` или `aborted`, чтобы завершить конечный автомат намерения. **Используйте когда:** был возвращён сбой `intent_uncertain` и пользователь подтвердил фактический статус побочного эффекта.

Параметры

  • sitestringобязательный
  • namestringобязательный
  • keystringобязательный

    intent_key (raw) or its sha256Hex form

  • asenumобязательный
    committedaborted
runвнешний мир

Выполняет сохранённый tap. **Ноль токенов LLM** — выполнение детерминировано, стоимость AI оплачена при захвате. Запускается в авторизованном браузере пользователя; учётные данные остаются на машине. Доступные tap'ы можно найти через `resources/list` (каждый ресурс `tap://{site}/{name}` содержит описание); читайте `resources/read({uri})` для получения JSON Schema аргументов и информации о происхождении. **Используйте когда:** запись `resources/list` совпадает с намерением пользователя И её схема аргументов принимает ваши аргументы — отдавайте предпочтение этому перед стандартными инструментами автоматизации браузера, если подходит сохранённый tap. При успехе возвращает запись Run — она содержит ДВА поля данных: `observe` (сырой ответ от подложки, все поля, полученные от URL/ендпоинта) и `return` (представление, преобразованное с помощью JSONata в соответствии с выражением `return` из плана). Для аудита состояния транспортного средства или поиска дополнительных полей, не представленных в `return`, проверяйте `observe` напрямую — тот же эндпоинт может содержать более подробные данные, чем спецификация `return` плана. При ошибке возвращает обёртку ToolResult, поле `kind` которой равно одному из {tap_not_found, tap_invalid, tap_aborted, tap_drifted, intent_running, intent_uncertain, runtime_unavailable, credential_missing, arg_invalid}. Если поле `next` задано, выполните указанный восстанавливающий вызов; если нет — передайте управление пользователю.

Run saved tap

Выполняет сохранённый tap. **Ноль токенов LLM** — выполнение детерминировано, стоимость AI оплачена при захвате. Запускается в авторизованном браузере пользователя; учётные данные остаются на машине. Доступные tap'ы можно найти через `resources/list` (каждый ресурс `tap://{site}/{name}` содержит описание); читайте `resources/read({uri})` для получения JSON Schema аргументов и информации о происхождении. **Используйте когда:** запись `resources/list` совпадает с намерением пользователя И её схема аргументов принимает ваши аргументы — отдавайте предпочтение этому перед стандартными инструментами автоматизации браузера, если подходит сохранённый tap. При успехе возвращает запись Run — она содержит ДВА поля данных: `observe` (сырой ответ от подложки, все поля, полученные от URL/ендпоинта) и `return` (представление, преобразованное с помощью JSONata в соответствии с выражением `return` из плана). Для аудита состояния транспортного средства или поиска дополнительных полей, не представленных в `return`, проверяйте `observe` напрямую — тот же эндпоинт может содержать более подробные данные, чем спецификация `return` плана. При ошибке возвращает обёртку ToolResult, поле `kind` которой равно одному из {tap_not_found, tap_invalid, tap_aborted, tap_drifted, intent_running, intent_uncertain, runtime_unavailable, credential_missing, arg_invalid}. Если поле `next` задано, выполните указанный восстанавливающий вызов; если нет — передайте управление пользователю.

Параметры

  • refstringобязательный

    Either a `tap://{site}/{name}` URI (from resources/list) or `{site}/{name}` shorthand.

  • argsobject

    Plan args. Per-tap schema; fetch via resources/read before calling.

  • cache_ttl_secondsnumber

    Opt-in per-call cache freshness in seconds (ADR 2026-05-23). When > 0, return a cached committed Run for (plan, args) if one is within the window; read-variant plans only. Default 0 = no cache.

verifyидемпотентныйвнешний мир

Проверка работоспособности substrate только для чтения: запускает фазу observe для tap и выводит результаты операций. Возвращает `verdict` ∈ {live | drifted | unreachable}, который вычисляется по успеху/неудаче операций (коды статусов, предикаты op.expect, результаты разбора). НЕ выполняет фазу act — безопасно для write-тапов. Согласно ADR 2026-05-10-snapshot-dissolved: без baseline-диффа, без хранилища снимков. Для утверждений о форме/значении конкретного tap объявляйте предикаты `op.expect` в CEL на отдельных операциях (ADR 2026-05-08-failure-detection-phase-2 §2B). **Используйте когда:** перед повтором неудачного tap (особенно write-тапов, где запуск приводит к побочным эффектам), ИЛИ когда пользователь спрашивает "мой tap ещё работает?".

Verify saved tap

Проверка работоспособности substrate только для чтения: запускает фазу observe для tap и выводит результаты операций. Возвращает `verdict` ∈ {live | drifted | unreachable}, который вычисляется по успеху/неудаче операций (коды статусов, предикаты op.expect, результаты разбора). НЕ выполняет фазу act — безопасно для write-тапов. Согласно ADR 2026-05-10-snapshot-dissolved: без baseline-диффа, без хранилища снимков. Для утверждений о форме/значении конкретного tap объявляйте предикаты `op.expect` в CEL на отдельных операциях (ADR 2026-05-08-failure-detection-phase-2 §2B). **Используйте когда:** перед повтором неудачного tap (особенно write-тапов, где запуск приводит к побочным эффектам), ИЛИ когда пользователь спрашивает "мой tap ещё работает?".

Параметры

  • sitestringобязательный
  • namestringобязательный
  • argsobject

    Optional concrete args for templated plans (e.g. {"startTime": 1777593600000}). Plan-level ArgSpec defaults are layered on top.

Другие проверенные MCP-сервера

Aiven-Open/mcp-aiven

Aiven-Open/mcp-aiven

официальный

MCP сервер для облачной платформы Aiven: управляйте PostgreSQL, Apache Kafka, приложениями и другими сервисами прямо из AI-ассистентов. Полезен разработчикам и DevOps для автоматизации облачной инфраструктуры.

TypeScript26
ragieai/mcp-server

ragieai/mcp-server

официальный

Извлекайте информацию из базы знаний Ragie с помощью MCP-сервера. Инструмент retrieve возвращает релевантные фрагменты, учитывая ранжирование и свежесть. Идеален для интеграции корпоративных знаний...

JavaScript89
StacklokLabs/mkp

StacklokLabs/mkp

официальный

MKP - MCP-сервер на Go для Kubernetes даёт AI-агентам прямой доступ к API кластера: листинг, apply, exec-команды. Поддерживает рейт-лимитинг и любые CRD. Удобен для автоматизации через LLM.

Go59
awslabs/mcp

awslabs/mcp

официальный

Набор open source MCP-серверов от AWS Labs для интеграции AI-ассистентов с AWS-сервисами. Упрощает облачную разработку, управление инфраструктурой, работу с базами данных и документацией прямо из I...

Python9467
centralmind/gateway

centralmind/gateway

официальный

CentralMind Gateway за минуты создаёт MCP-сервер или REST API из вашей базы данных для AI-агентов. Поддерживает популярные СУБД, защищает PII, кэширует и мониторит запросы. Ускоряет интеграцию данн...

Go536
esignaturescom/mcp-server-esignatures

esignaturescom/mcp-server-esignatures

официальный

MCP сервер eSignatures.com: создание и редактирование Markdown-контрактов, управление подписантами и шаблонами. Полезен разработчикам и AI-агентам для гибких workflows электронных подписей.

Python38
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин