Toolweather

¿Está este servidor MCP saludable y es seguro llamarlo ahora? Comprobaciones en vivo de ~2,000 servidores y alternativas.

Servidor MCP alojado

npx add-mcp 'https://toolweather.toolweather.workers.dev/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Toolweather

Una sola conexión te da cuatro herramientas. Añade https://toolweather.toolweather.workers.dev/mcp una vez.

Lo que obtienesHerramientas
Salud de MCP¿Es seguro llamar a este servidor o herramienta MCP ahora mismo? Alrededor de 2.000 servidores del registro oficial de MCP, sondeados cada 15 minutos.check_mcp_server_health · find_alternative_mcp_servers · watch_server · list_watches · unwatch_server · get_api_key
UpstreamEstado de API y retiros de modelos, en unos 40 proveedores.check_api_status · check_model_deprecation · list_recent_api_changes · list_providers · get_digest
SpendGateapprove / ask_human / block antes de que un agente pague.score_spend · get_quota · spendgate_get_api_key
PayChecktrusted / unknown / suspicious / block antes de que un agente pague a un comerciante, host o wallet.check_merchant · paycheck_get_quota · paycheck_get_api_key

Instalación

Gratis para probar. Sin registro. Conéctate sin clave (50 llamadas/día). Llama a get_api_key (funciona sin clave) para aumentar la cuota a 1.000 llamadas/día y 3 vigilancias. La clave se muestra una sola vez. Envíala como X-API-Key después de eso. Unas pocas claves nuevas por red por día, más un límite diario global.

También puedes acuñar una clave primero con curl -X POST https://toolweather.toolweather.workers.dev/v1/keys, o hacer clic en Obtén una clave gratis en https://toolweather.pages.dev.

Añadir a Cursor

Add to Cursor

cursor://anysphere.cursor-deeplink/mcp/install?name=toolweather&config=eyJ1cmwiOiJodHRwczovL3Rvb2x3ZWF0aGVyLnRvb2x3ZWF0aGVyLndvcmtlcnMuZGV2L21jcCJ9

Verificado contra el formato de enlace de instalación de MCP de Cursor: cursor://anysphere.cursor-deeplink/mcp/install?name=$NAME&config=$BASE64. name es el nombre del servidor. config es el base64 de JSON.stringify del objeto de servidor único. El propio ejemplo de Cursor codifica {"command":"npx","args":["-y","@modelcontextprotocol/server-postgres","postgresql://localhost/mydb"]}. Este enlace codifica {"url":"https://toolweather.toolweather.workers.dev/mcp"}. Cursor pregunta antes de instalar.

Cursor

~/.cursor/mcp.json o .cursor/mcp.json:

{
  "mcpServers": {
    "toolweather": {
      "url": "https://toolweather.toolweather.workers.dev/mcp"
    }
  }
}

Claude Code

.mcp.json. Establece "type": "http". Claude Code trata una entrada que tiene un url y no type como stdio y la omite.

{
  "mcpServers": {
    "toolweather": {
      "type": "http",
      "url": "https://toolweather.toolweather.workers.dev/mcp"
    }
  }
}
claude mcp add --transport http toolweather https://toolweather.toolweather.workers.dev/mcp

Claude Desktop

claude_desktop_config.json (HTTP remoto a través del puente mcp-remote):

{
  "mcpServers": {
    "toolweather": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://toolweather.toolweather.workers.dev/mcp"]
    }
  }
}

Aumentar la cuota

Después de get_api_key, añade la clave.

Cursor y Claude Code, dentro del objeto toolweather:

"headers": { "X-API-Key": "<key from get_api_key>" }

CLI de Claude Code:

claude mcp add --transport http toolweather https://toolweather.toolweather.workers.dev/mcp --header "X-API-Key: <key>"

Claude Desktop — argumento de cabecera más env:

{
  "mcpServers": {
    "toolweather": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://toolweather.toolweather.workers.dev/mcp",
               "--header", "X-API-Key:${TW_KEY}"],
      "env": { "TW_KEY": "<key from get_api_key>" }
    }
  }
}

VS Code

.vscode/mcp.json:

{
  "servers": {
    "toolweather": {
      "type": "http",
      "url": "https://toolweather.toolweather.workers.dev/mcp"
    }
  }
}

Para enviar una clave, pídela:

{
  "inputs": [{ "type": "promptString", "id": "tw-key", "description": "Toolweather API key", "password": true }],
  "servers": {
    "toolweather": {
      "type": "http",
      "url": "https://toolweather.toolweather.workers.dev/mcp",
      "headers": { "X-API-Key": "${input:tw-key}" }
    }
  }
}

Archivos de descubrimiento: OpenAPI 3.1 · tarjeta de servidor MCP · llms.txt · nombre del registro io.github.toolweather/toolweather.

API

curl -H "X-API-Key: $TW_KEY" "https://toolweather.toolweather.workers.dev/v1/is_safe_to_call?server=com.ufcalendar/fight-api&tool=get_events"
curl -H "X-API-Key: $TW_KEY" "https://toolweather.toolweather.workers.dev/v1/suggest_alternatives?q=send%20email"

is_safe_to_call devuelve verdict (safe / caution / unsafe / unknown), razones, estado en vivo (ok / auth_required / failed), latencia, versión del protocolo, preparación de la especificación, información de descubrimiento de auth/OAuth, el último cambio de herramienta (y si fue un cambio disruptivo), last_checked, más checked_at y age_seconds.

Servidores con acceso restringido por auth: sin credenciales, Toolweather sigue la cadena de descubrimiento de OAuth (metadatos de recurso protegido RFC 9728, metadatos de servidor de auth RFC 8414 / OIDC) y comprueba que los endpoints de autorización, token y registro responden a través de TLS. auth.state es auth_ok (flujo de inicio de sesión accesible; dynamic_client_registration te dice si el registro está abierto), auth_suspect (endpoints accesibles pero uno devolvió un 5xx a nuestra comprobación sin parámetros; veredicto caution), auth_broken (OAuth anunciado pero faltan metadatos o un endpoint es inaccesible/falla TLS; veredicto unsafe: los nuevos inicios de sesión fallarán), o auth_opaque (necesita credenciales, sin descubrimiento de OAuth, p. ej. claves de API). Nunca se registra ningún cliente ni se envían credenciales. Para comprobar un servidor con tu propio token, añade X-Upstream-Authorization: Bearer <token> (REST) o bearer_token (argumento de herramienta MCP): Toolweather ejecuta un initialize autenticado + tools/list y devuelve authenticated_check. El token se usa solo para esa solicitud, nunca se almacena ni se registra, y el resultado no se guarda en caché.

Historial: GET /v1/accuracy (sin clave) y la página de estado muestran, por día, con qué frecuencia un veredicto coincidió con la siguiente comprobación programada del mismo servidor. Mide la estabilidad de los veredictos entre comprobaciones (~15 min), no si las llamadas a herramientas tienen éxito.

Resultados frescos: si la comprobación almacenada tiene más de 5 minutos, o pasas fresh=true, Toolweather ejecuta un handshake rápido de solo lectura initialize contra el servidor en ese momento (tiempo de espera de 4 s) y devuelve ese resultado (source: live_probe, live: {...}). Los resultados en vivo se almacenan en caché brevemente (un servidor se vuelve a sondear como máximo una vez por minuto) y cada clave obtiene 200 comprobaciones en vivo al día; después de eso obtienes el resultado en caché más reciente.

Nivel gratuito: 1.000 llamadas por clave por día, o 50/día anónimo sin clave. Por encima de la cuota: pago por llamada vía x402 ($0.001/comprobación, $0.003/en vivo, $0.01/lote, $0.05/vigilancia de 30 días).

¿Recibes HTTP 403 con el cuerpo error code: 1010? Eso es el edge de Cloudflare rechazando el User-Agent predeterminado de Python Python-urllib/x.y antes de que la solicitud llegue a Toolweather. Se aplica a todas las direcciones gratuitas *.workers.dev / *.pages.dev y no se puede desactivar allí. No es un problema de clave. Envía cualquier otro User-Agent:

import json, urllib.request
req = urllib.request.Request("https://toolweather.toolweather.workers.dev/v1/keys", method="POST", headers={"User-Agent": "my-agent/1.0"})
key = json.load(urllib.request.urlopen(req))["api_key"]

requests, httpx, aiohttp, curl, Node y navegadores funcionan tal cual. Obtén una clave con curl -X POST https://toolweather.toolweather.workers.dev/v1/keys.

MCP

Añade https://toolweather.toolweather.workers.dev/mcp como servidor MCP remoto. Sin registro: conéctate sin clave (50 llamadas/día). get_api_key aumenta eso a 1.000 llamadas/día. Luego envía la cabecera X-API-Key: <key>.

Salud de MCP: get_api_key() (sin necesidad de clave), check_mcp_server_health(server, tool?) (alias is_safe_to_call), find_alternative_mcp_servers(query, limit?) (alias suggest_alternatives), y alertas de cambios watch_server(server, webhook_url), list_watches(), unwatch_server(id).

Upstream (proxy en el mismo MCP): check_api_status(provider) (alias get_status), check_model_deprecation(model) (alias get_model), list_recent_api_changes (alias get_changes), list_providers(), get_digest(date?). Por encima de la cuota gratuita de Upstream, estos devuelven un requisito de pago x402 (USDC en Base); los endpoints REST propios de Upstream /x402/* siguen activos para clientes que pagan directamente.

SpendGate (proxy en el mismo MCP): score_spend(amount, category?, merchant?, daily_budget_remaining?, ...), get_quota(api_key?), spendgate_get_api_key(label?). Llama a score_spend antes de que un agente pague. approve significa pagar, ask_human significa detenerse y preguntar a una persona, block significa no pagar.

La propia herramienta de SpendGate get_api_key se expone aquí como spendgate_get_api_key. get_api_key ya acuña una clave de Toolweather (tw_…, 1.000 comprobaciones/día). get_quota no coincide con ninguna herramienta de Toolweather, por lo que conserva el nombre de SpendGate y significa las puntuaciones gratuitas de SpendGate, no la cuota diaria de comprobaciones de Toolweather. score_spend no cambia. Un argumento api_key en estas herramientas es una clave de SpendGate (sg_live_…), no una clave de Toolweather. Envía la clave de Toolweather como X-API-Key de la misma manera que para las otras herramientas del conjunto.

Las herramientas de SpendGate no consumen la cuota de llamadas de Toolweather. Mantienen los propios límites de SpendGate: 100 puntuaciones/día anónimo, 1.000/día con una clave de SpendGate, luego $0.001 por puntuación vía x402 (USDC en Base). get_quota y spendgate_get_api_key no se facturan. El REST propio de SpendGate permanece en https://spendgate.toolweather.workers.dev. Para un límite diario estable de SpendGate a través de este paquete, llama a get_api_key primero (una clave de Toolweather) o pasa una clave sg_live_ de SpendGate. Los llamadores anónimos comparten límites basados en IP/sesión que pueden restablecerse en egress rotativo.

PayCheck (proxy en el mismo MCP): check_merchant(target, api_key?), paycheck_get_quota(api_key?), paycheck_get_api_key(). Llama a check_merchant antes de que un agente pague a un dominio, URL https o wallet 0x. trusted significa una API https en lista blanca, unknown o suspicious significa verificar fuera de banda, block significa no pagar. PayCheck no envía dinero.

La propia herramienta de PayCheck get_api_key se expone aquí como paycheck_get_api_key. get_api_key ya acuña una clave de Toolweather. El get_quota de PayCheck se expone como paycheck_get_quota porque get_quota sigue siendo el límite de puntuaciones gratuitas de SpendGate. check_merchant no colisiona, por lo que conserva el nombre de PayCheck. Un argumento api_key en estas herramientas es una clave de PayCheck (pc_live_…), no una clave de Toolweather ni una clave de SpendGate. Envía la clave de Toolweather como X-API-Key de la misma manera que para las otras herramientas del conjunto.

Las herramientas de PayCheck no consumen la cuota de llamadas de Toolweather. Mantienen los propios límites de PayCheck: 100 comprobaciones/día anónimo o para un cliente de paquete anon:, 1.000/día con una clave de PayCheck o un x-tw-bundle-client hexadecimal (un hash de clave de Toolweather, o un hash de sesión MCP estable), luego $0.001 por comprobación vía x402 (USDC en Base). paycheck_get_quota y paycheck_get_api_key no se facturan. El REST propio de PayCheck permanece en https://paycheck.toolweather.workers.dev (/v1/check, /v1/quota, /v1/keys, /mcp).

El endpoint responde tanto a server/discover de 2026-07-28 como al legado initialize.

Alertas de cambios (webhooks)

Vigila un servidor y recibe un POST HTTPS cuando su veredicto cambie (safe / caution / unsafe), comience a requerir auth, o su lista de herramientas tenga un cambio disruptivo. Nivel gratuito: 3 vigilancias por clave.

curl -X POST -H "X-API-Key: $TW_KEY" -H "content-type: application/json" \
  -d '{"server":"com.ufcalendar/fight-api","webhook_url":"https://example.com/hooks/toolweather"}' \
  https://toolweather.toolweather.workers.dev/v1/watches      # returns id + secret (shown once)
curl -H "X-API-Key: $TW_KEY" https://toolweather.toolweather.workers.dev/v1/watches
curl -X DELETE -H "X-API-Key: $TW_KEY" https://toolweather.toolweather.workers.dev/v1/watches/<id>

Tipos de eventos: verdict_changed, auth_required, breaking_tool_change. Cada POST lleva X-Toolweather-Event, X-Toolweather-Delivery y X-Toolweather-Signature: t=<unix>,v1=<hex> donde v1 = HMAC-SHA256(secret, "<t>.<raw body>"). Verifícalo (y rechaza t antiguos) antes de confiar en el payload:

import hmac, hashlib, time
def verify(secret, header, raw_body):
    parts = dict(p.split("=", 1) for p in header.split(","))
    mac = hmac.new(secret.encode(), f"{parts['t']}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(mac, parts["v1"]) and abs(time.time() - int(parts["t"])) < 600

Los webhooks deben ser URLs https públicas; las direcciones privadas, de loopback y link-local se rechazan. Responde 2xx dentro de 10 s. Las entregas fallidas se reintentan después de 1, 5, 30, 120 y 360 minutos; después de 3 entregas fallidas consecutivas, la vigilancia se desactiva (ver GET /v1/watches). Los cambios se detectan cada 5 minutos mediante un disparador cron de Cloudflare, contra sondeos que se ejecutan cada 15 minutos.

Incrustar una insignia de estado gratuita

Gratis. Sin registro. La imagen se actualiza desde nuestros sondeos, y el enlace abre la página de estado de ese servidor.

[![Toolweather](https://toolweather.toolweather.workers.dev/badge/<registry-name>.svg)](https://toolweather.pages.dev/servers/<slug>/)

<slug> es el nombre del registro con / escrito como -- (com.ufcalendar/fight-api → com.ufcalendar--fight-api). Fragmento completo y reglas: badge_readme.md.

Política de sondeo (solo lectura)

Si ejecutas un servidor MCP, esto es exactamente lo que hacemos:

  • Solo enviamos server/discover (2026-07-28) y/o initialize + notifications/initialized, luego tools/list, y cerramos la sesión. Nunca llamamos a herramientas, leemos recursos ni ejecutamos prompts.
  • Para servidores que responden 401/403 leemos WWW-Authenticate y obtenemos /.well-known/oauth-protected-resource (solo GET).
  • Como máximo una solicitud en vuelo por host, al menos 2 s entre solicitudes al mismo host, tiempo de espera de 12 s, una comprobación por servidor cada 15 minutos.
  • User-Agent: mcp-health-probe/0.1 (read-only; initialize+tools/list only).
  • Para optar por no participar o informar un problema, envía un correo a toolweather@mail.grokbot.com.

Arquitectura del conjunto Toolweather

El MCP público en toolweather…/mcp lista las herramientas MCP-health, Upstream, SpendGate y PayCheck. Las llamadas a las herramientas Upstream, SpendGate y PayCheck se proxifican a esos Workers (misma cuenta de Cloudflare; enlace de servicio UPSTREAM / SPENDGATE / PAYCHECK, con respaldo HTTPS al /mcp de cada worker). Cuando BUNDLE_PROXY_SECRET está configurado, el proxy envía x-tw-bundle-secret y x-tw-bundle-client (un hash del llamante, nunca la clave cruda, el id de sesión o la IP). El Worker propio de cada producto, la API REST y los endpoints de pago x402 permanecen sin cambios para los clientes existentes.

x-tw-bundle-client se elige de la siguiente manera:

  • Clave gratuita de Toolweather (plan === "free_key", hexadecimal sin anon:): el sha256 existente de esa clave, sin cambios.
  • Anónimo con un Mcp-Session-Id de 8–128 caracteres seguros: sha256("tw-mcp-session|" + session) como 64 caracteres hexadecimales (sin prefijo anon:), de modo que el límite se mantiene en un solo cliente cuando las IPs de salida de la nube rotan.
  • Anónimo sin cabecera de sesión: anon: más el hash diario de IP existente, para que SpendGate y PayCheck puedan aplicar el límite anónimo (100/día).

La verificación del nivel gratuito de Upstream solo acepta /^[a-f0-9]{16,128}$/i. Cuando el id de cliente aún tiene un prefijo anon:, el proxy elimina ese prefijo y reenvía el mismo hash. SpendGate y PayCheck aún reciben la forma anon:. PayCheck trata anon: como 100/día y un cliente hexadecimal como su nivel gratuito con clave (1,000/día).

El código de SpendGate no está en este repositorio. Una llamada con un secreto no reconocido sigue siendo anónima en SpendGate, por lo que la cuota por cliente solo funciona después de que SpendGate acepte el mismo secreto que Upstream y clave su límite por x-tw-bundle-client. Para un límite diario estable de SpendGate a través de este paquete, llama a get_api_key primero (clave de Toolweather) o pasa una clave sg_live_… de SpendGate. Los llamantes anónimos comparten límites basados en IP/sesión que pueden restablecerse al rotar la salida.

El código de PayCheck no está en este repositorio. Recibe las mismas cabeceras x-tw-bundle-secret y x-tw-bundle-client que SpendGate. Un cliente anon: se mantiene en 100 verificaciones/día. Un cliente hexadecimal (un hash de clave de Toolweather, o un hash de sesión MCP estable) obtiene el nivel gratuito con clave de PayCheck de 1,000/día. Una clave pc_live_… de PayCheck pasada como api_key selecciona el límite de esa clave.

Cómo funciona

  • mcphealth.py: obtención del registro, sondeo asíncrono cortés, almacenamiento SQLite, comparación de listas de herramientas (ruptura = herramienta eliminada, parámetro requerido añadido, parámetro eliminado o tipo cambiado).
  • .github/workflows/probe.yml: se ejecuta cada 15 minutos en GitHub Actions, envía veredictos precalculados a Cloudflare D1 (scripts/ingest_d1.py) y redespliega la página de estado, la tabla de clasificación de preparación y las páginas por servidor (build_site.py, build_servers.py) en Cloudflare Pages.
  • worker/: Cloudflare Worker que sirve la API, el endpoint MCP y las insignias desde D1.
  • tw_core.py, api.py, mcp_server.py: versiones locales (autoalojadas) de la misma API.

Licencia

MIT