Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Inicia sesión con Google para escribir reseñas.Prototipo · se actualiza cada 30 min
PopNx MCPServidores MCP para quienes usan IA · en palabras sencillas

SAIR

de compscidrversión 0.1.36i★ 1iSe ejecuta en tu computadora
Nombre en el registroio.github.compscidr/sair

Cómo instalar

What it does

Run Android tests on real phones, or lease one: install, shell, screenshot, logcat.

  • Connects Se ejecuta en tu computadora
  • Account or key Needs SAIR_API_KEY
  • Category Herramientas para desarrolladores

Instalación

Elige la app de IA que usas y copia la configuración.

Pasó 3/3 revisiones · Funciona en tu computadora

Primero: ¿qué IA usas?

Elige tu app y los pasos aparecen abajo.

Funciona con Claude, pero hay que preparar algo antes

Sin clave y sin instalar nada · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil

  1. Descarga el instalador del autor

    Descargar el archivo .mcpb del creador

    El archivo .mcpb viene directo del autor; no lo modificamos

  2. Haz doble clic en el archivo y pulsa Install en la app de Claude de escritorio

  3. Pruébalo

    Usa SAIR y dime qué puedes hacer por mí; luego muéstrame una cosa

    ✓ Si Claude dice que está usando SAIR o muestra una herramienta de SAIR en la respuesta, ya está conectado

Nombres de menú comprobados con la ayuda de Anthropic el 11 nov 2026 · tu pantalla puede variar un poco según la versión

ChatGPT todavía no puede conectar SAIR

SAIR se instala en tu computadora, pero ChatGPT solo conecta servidores que funcionan en la web

Lo que puedes hacer en su lugar

A · Usa una app que pueda conectar SAIR

  • Sin clave y sin instalar nada · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil

B · Otros en Herramientas para desarrolladores que funcionan con ChatGPT

Elegidos entre los más usados de la misma categoría, solo los que se conectan con una dirección y sin clave

Claude Code todavía no puede conectar SAIR

El autor solo ofrece un instalador para la app de Claude de escritorio

Lo que puedes hacer en su lugar

A · Usa una app que pueda conectar SAIR

  • Sin clave y sin instalar nada · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil

Cursor todavía no puede conectar SAIR

El autor solo ofrece un instalador para la app de Claude de escritorio

Lo que puedes hacer en su lugar

A · Usa una app que pueda conectar SAIR

  • Sin clave y sin instalar nada · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil

VS Code todavía no puede conectar SAIR

El autor solo ofrece un instalador para la app de Claude de escritorio

Lo que puedes hacer en su lugar

A · Usa una app que pueda conectar SAIR

  • Sin clave y sin instalar nada · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil

Otras apps que usan MCP, como Windsurf, Zed o Gemini CLI, añaden servidores de forma distinta. Míralo en la lista de apps

Ver todas las apps que usan MCP →

La configuración JSON está en “Para desarrolladores”, abajo

¿Te atascaste? Pregunta a quien usa SAIR💬 Conversación →
Para desarrolladores: comandos de Terminal y configuración JSON

Valores que debes completar

  • SAIR_API_KEY secreto obligatorio env
    An API key from https://sair.run/dashboard
  • SAIR_API_URL env
    Agent API base URL (default: https://api.sair.run)

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

De un vistazo

Descargas por semanai
No está en npm/PyPI
Licenciai
Apache-2.0
Conexión
Se ejecuta en tu computadora
Última versióni
0.1.36
Publicado en el registroi
5 nov 2026
Último cambio de códigoi
5 nov 2026
Creador
compscidr
Paquetes
mcpb: …/sair-mcp.mcpb
Sitio web
sair.run
Estado en el registro
Activo

Qué apps pueden usarlo

Según cómo se conecta este servidor y la documentación de cada app, comprobado el 10 nov 2026.

Se ejecutan en tu computadora en

ClaudeGooseLM StudioMsty StudioCherry StudioVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

Todas las apps, con ventajas y desventajas →

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 13 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub compscidr, dueña del repo

  • ✓ Superada

    Sigue en mantenimiento

    Último cambio de código: hace 8 días

  • ✓ Superada

    Tiene licencia

    Usa Apache-2.0

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Conversación

Pregunta, comparte un consejo o avisa de que no funciona. Ordenado por lo que la gente marcó como útil.

Aún no hay publicaciones. Sé la primera persona en preguntar o compartir.

Lo publicado aquí lo escriben usuarios, no el equipo de PopNx.

Inicia sesión con Google para publicar

Reseñas de usuarios

Aún no hay reseñas

Inicia sesión con Google para escribir una reseña

Comparado con otros en Herramientas para desarrolladoresi

  • Más estrellas que el 69% de los otros 5821 servidores de esta categoría
  • Publicado en el registro más recientemente que el 72% de los otros 5821 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 5821 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro SAIR?

Superó 3 de 3 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

Debes completar: SAIR_API_KEY

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez hace 8 días, y la última versión (0.1.36) llegó al registro hace 8 días.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas MCPB en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: REA, GitHub, Serena MCP: the IDE for your agent

Otros de la misma categoría

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:↓ Descargas por semanai★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

REA

Reverse engineer anything from your terminal or agent with one CLI and MCP server.

de morlutoMuy usado↓ 388,7 mil/sem★ 453,3 milActualizado ayer

Se ejecuta en tu computadora

GitHub

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

de githubMuy usado★ 34,4 milActualizado hace 10 días

Computadora o nube

Serena MCP: the IDE for your agent

A powerful toolkit for coding, providing semantic retrieval and editing capabilities.

de oraiosMuy usado↓ 35,2 mil/sem★ 31,3 milActualizado hace 6 meses

Se ejecuta en tu computadora

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

SAIR — Shared Android Instrumented Runner

SAIR lets CI pipelines safely share physical Android devices. It provides device locking, ADB protocol translation, and per-runner isolation so multiple jobs never collide on the same device.

Why

Without SAIR, every CI job that can see a phone uses it at the same time:

CI job 1 ──┐

├──▶ adb ──▶ Phone ✗ both jobs install / uninstall the same APK CI job 2 ──┘ ✗ one job's reboot or settings change breaks the other's tests mid-run ✗ connectedCheck runs on every attached phone, including ones another job is using

With SAIR, a job must hold a lock before it sees a device, and waiting jobs queue:

CI job 1 ──┐                 ┌──▶ Phone A (locked by job 1)

├──▶ Proxy ───────┤ CI job 2 ──┘ ▲ └──▶ Phone B (locked by job 2) │ locks CI job 3 ··· Orchestrator: job 3 waits in the queue until a phone is released

GitHub Action

This repo is also a GitHub Action that puts sair-acquire, sair-release, sair-wifi, sair-bluetooth, sair-locks and sair-label on PATH. The tools need an orchestrator account: sign up at sair.run to get an API key, store it as the repository secret SAIR_API_KEY, and set the repository variable SAIR_PROXY_URL to your bench's proxy (see Run). Then:

steps:
  • uses: actions/checkout@v4
  • uses: compscidr/sair@v0.1.18
  • run: sair-acquire --count 1 > /dev/null env: SAIR_PROXY_URL: ${{ vars.SAIR_PROXY_URL }} SAIR_API_KEY: ${{ secrets.SAIR_API_KEY }}
  • run: ./gradlew connectedCheck
  • if: always() run: sair-release --status ${{ job.status }} env: SAIR_API_KEY: ${{ secrets.SAIR_API_KEY }}

The full workflow example explains each step.

A runner with no proxy of its own (e.g. GitHub-hosted, using phones other accounts share) can have the action start one, at the same release as the action. Leave SAIR_PROXY_URL unset; the proxy listens on the default localhost:8550, and its log is at $RUNNER_TEMP/sair-proxy.log:

  - uses: compscidr/sair@v0.1.18

with: proxy: true env: SAIR_API_KEY: ${{ secrets.SAIR_API_KEY }}

Used at a branch or SHA rather than a release tag, the action warns and starts the latest release instead.

AI agents (MCP)

sair-mcp is an MCP server (stdio) for coding agents. It can run an app's instrumented tests on a real phone in one call, or lease a phone and install APKs, run shell commands, take screenshots and read logcat on it. It talks to the orchestrator's agent API with an API key from sair.run. The agent's machine needs no proxy or adb.

Install it with go install github.com/compscidr/sair/cmd/sair-mcp@latest, take sair-mcp from a release tarball, or use sair-mcp.mcpb from a release (an MCP Bundle for clients such as Claude Desktop). Then add it to your agent, e.g. Claude Code:

claude mcp add sair -e SAIR_API_KEY=sair_... -- sair-mcp

or any client's JSON config:

{ "mcpServers": { "sair": { "command": "sair-mcp", "env": { "SAIR_API_KEY": "sair_..." } } } }
ToolDoes
run_testsUploads app_apk and test_apk (paths on the agent's machine), waits for the run, returns per-test results, instrument output and a logcat tail
list_devicesLists the phones the key may use: serial, model, sdk (API level), shared, in use
lease_deviceTakes a phone (serial, wait_s optional) and returns the lease id
install_apkInstalls an APK on the leased phone, returns its package
shellRuns a command, returns output and exit code
screenshotReturns a PNG of the screen
logcatReturns the most recent lines (default 500)
release_deviceEnds the lease: uninstalls what it installed and frees the phone

The server heartbeats the leases it takes, so an agent that thinks for a while between calls keeps its phone. A lease still ends at the plan's maximum (free 15 min, solo 1 h, team 2 h, enterprise 4 h). On a phone shared by another user, shell commands are limited to a safe set (see the orchestrator README). SAIR_API_URL points it at another orchestrator (default https://api.sair.run).

It is listed in the official MCP registry as io.github.compscidr/sair. Every release publishes it: the release workflow builds sair-mcp.mcpb, fills server.json's version, download URL and SHA-256 (the values in the repo are placeholders), and publishes it with mcp-publisher, logged in through GitHub OIDC. Check it with curl "https://registry.modelcontextprotocol.io/v0/servers?search=io.github.compscidr/sair".

Quick Start

Install
curl -fsSL https://raw.githubusercontent.com/compscidr/sair/main/install.sh | bash

This detects your OS and architecture, downloads the latest release, and installs all binaries to ~/.local/bin.

Prerequisites
  • adb installed on the machine with Android devices
  • One or more Android devices connected via USB with USB debugging enabled (don't sign them in to a personal account: see Securing a bench)
Run
# 1. Start a real ADB server on a non-default port (5038), so it doesn't

conflict with the proxy which will own the standard port (5037).

adb -P 5038 start-server

2. Set your API key (shared by proxy and device-source)

export SAIR_API_KEY=your-api-key

3. Start the proxy and device source

sair-proxy & sair-device-source

The proxy connects to the hosted orchestrator at orchestrator.sair.run by default (with TLS). Override with ORCHESTRATOR_ADDR for local development.

Use

Acquire a device lock (blocks until one is available), run your tests, then release:

ACQUIRE_OUTPUT=$(sair-acquire)

eval "$ACQUIRE_OUTPUT" ./gradlew connectedCheck sair-release

After eval, stock adb automatically talks to the proxy through the scoped port and only sees the locked devices.

When the bench sets WIFI_SSID on the device source, Wi-Fi is managed for you:

  • On acquire each phone joins the bench Wi-Fi and the acquire returns only once the phone is *online* (below); it fails otherwise. --no-wifi hands it over *offline* instead, verified the same way rather than trusting the previous release. --wifi-band 2.4|5|6 (also sair-wifi on --band) joins on that GHz band: the phone scans, the suggestion is pinned to the strongest BSSID of WIFI_SSID it sees in the band, and the join fails if it sees none. The phone's cmd wifi status shows the BSSID and frequency it joined.
  • On release, and when a lock expires or is cancelled, each phone is reset: every suggestion added through adb shell and every saved network is forgotten and the radio is toggled, and the reset waits until the phone is offline with the radio back on. The next job never inherits the last one's network. The phone then rejoins the bench Wi-Fi, so it is online between leases and app updates can install (see the Play Store below); the next acquire puts it in the state that job asked for either way.
  • Also on release, every third-party package the phone did not have when the device source first saw it is uninstalled (test APKs and .test packages included, with their app data and signed-in accounts), and the browser and mail apps are force-stopped; see BASELINE_PACKAGES, RESET_FORCE_STOP and RESET_CLEAR_PACKAGES. What was removed is written to the proxy log and the lock's log on the orchestrator, naming any Wi-Fi suggestion that went with a package. This runs before the Wi-Fi reset, so a suggestion a test app leaked for the bench network is gone before the reset waits for the phone to be offline.
  • A phone relayed to a borrower resets differently: the first relay under a lock lists its third-party packages, and when the lock ends only what is not on that list is uninstalled, for the primary user only. An app on the phone before a lock's first relay stays; one installed during the lock goes, whoever installed it. BASELINE_PACKAGES has no effect on this reset, but a local or guest-key lock on the same phone still resets to the baseline, so list apps to keep in BASELINE_PACKAGES. What was removed goes to the proxy log and the bench events, not the lock's log, which is on the holder's proxy. Without that list (it could not be read, the device source is older than the proxy, or no relay got that far) nothing is uninstalled: the proxy logs a warning and reports a failed package reset. Leftovers can then survive until a local lock, because the next borrower's list includes them, as it does when a relay under a new lock arrives before the previous lock's reset (the proxy warns, naming what it suspects).
  • On acquire the same cleanup runs first (reverse forwards, packages), before the Wi-Fi check. A job that never released, because it had no if: always() release step, its runner died, or the proxy was down when the lock expired, is cleaned up by the next job, whose lock log then shows sair: uninstalled … (left by an earlier job). This is local locks only: a relayed lock's next job cleans up nothing.
  • No leaked UiAutomation, on release and on acquire: a killed am instrument or a leftover uiautomator server can leave a UiAutomation registered, failing every later instrumentation with UiAutomationService … already registered!. A uiautomator dump probe detects it; sair then kills the shell user's app_process/uiautomator processes, which unregisters it, and reboots only if the probe still fails (never a phone with a secure lock). The lock log gets sair: cleared a leaked UiAutomation registration (killed … | rebooted).
  • Awake and unlocked, on acquire and again after the release reset: the screen is woken and the keyguard dismissed, then verified (dumpsys power says Awake, dumpsys window policy says the keyguard is not showing), with up to three attempts since a one-shot dismiss can race on some phones. A phone whose keyguard stays up fails the acquire with screen locked; that means a PIN, pattern or password is set, which sair cannot dismiss, so set the phone's screen lock to Swipe or None. The reason is also reported as the device's warning (proxy /status, device report) until a wake succeeds. A phone with stay_on_while_plugged_in off is logged as a warning, since it will sleep and re-lock between steps. Android 4.x phones (no wm) are verified through their own mShowingLockscreen field; a dump in a format sair does not know is logged once and treated as unlocked.
  • Rebooted on release once its uptime is over REBOOT_UPTIME_HOURS (24 by default), while the phone is unacquired: the reset waits for the boot and the wake above before the next acquire of that phone can proceed, and the phone is not offered while it is down. The lock log gets sair: rebooted after release (uptime …) and the proxy's /status lists each phone's last_reboot. This runs before the Wi-Fi reset, so the offline wait is not spent twice. A phone with a PIN, pattern or password is never rebooted this way, since it would come back on "unlock to start" and need a human; the device source logs that with the fix. The wake and the reboot run whether or not the bench manages Wi-Fi.
  • Bluetooth cycled on release, after the Wi-Fi reset: svc bluetooth disable, wait until dumpsys bluetooth_manager says the adapter is fully OFF, svc bluetooth enable, wait until it says ON (30 s each). A BLE stack an earlier job wedged (stuck advertisers, a scanner that neve

Solo se muestra el principio; lee el resto en el repo