jCodeMunch-MCP

Servidor MCP eficiente en tokens para exploración de código fuente de GitHub mediante análisis AST de tree-sitter

Documentación

jCodeMunch MCP

El servidor MCP más eficiente en tokens para la recuperación precisa de código fuente mediante análisis AST con tree-sitter. Reduce los costos de tokens de IA entre 86-99% en exploración de código (96% en promedio, comparado con 28.3x menos tokens que un agente de grep-y-lectura) y deja de quemar tu ventana de contexto leyendo archivos completos.

Resultados reales, en vivo desde producción 838B+ tokens ahorrados · 136,000+ instalaciones reportadas · $4.2M+ en gasto de IA evitado · 100,000+ kg de CO₂ prevenidos Cifras contador al 2026-08-17, valoradas a la tarifa de entrada de $5/MTok de Claude Opus. Las cuatro solo crecen, así que tómalas como mínimos. En vivo en jcodemunch.com.

Funciona con Claude Code, Cursor, VS Code, Codex CLI, Windsurf, Continue y cualquier cliente compatible con MCP.

Instalar ahora · Inicio rápido · Ver la evidencia · Precios

PyPI version PyPI - Python Version License MCP Local-first Issues closed DOI

Gratis para uso personal. Úsalo para ganar dinero, y el Tío J. se lleva su parte. ¿Justo, no? Licencias comerciales abajo. Nuestra garantía: si jCodeMunch no se paga solo, tú no pagas por jCodeMunch.


¿Por qué jCodeMunch?

La mayoría de los agentes de IA exploran repositorios de la manera costosa: abren archivos completos, hojean miles de líneas irrelevantes, y repiten. Eso no es "un poco ineficiente". Es un incinerador de tokens.

jCodeMunch indexa un código base una vez y permite que los agentes recuperen solo el código exacto que necesitan: funciones, clases, métodos, constantes, esquemas y paquetes de contexto estrictamente delimitados, con precisión a nivel de byte. Analiza el código fuente con tree-sitter, almacena metadatos estructurados de símbolos (firma, tipo, nombre calificado, resumen, desplazamientos de byte) junto con el contenido crudo del archivo en un índice local, y obtiene implementaciones exactas bajo demanda en lugar de releer archivos una y otra vez.

TareaEnfoque tradicionalCon jCodeMunch
Encontrar una funciónAbrir y escanear archivos grandesBuscar símbolo, obtener implementación exacta
Entender un móduloLeer regiones amplias del archivoExtraer solo símbolos e importaciones relevantes
Explorar estructura del repoRecorrer archivo tras archivoConsultar esquemas, árboles y paquetes específicos
"¿Qué se rompe si cambio X?"No es posibleget_blast_radius

Indexa una vez. Consulta barato. Sigue avanzando. El contexto de precisión vence al contexto de fuerza bruta.


Evidencia

Benchmark reproducible de eficiencia de tokens

Medido con tiktoken cl100k_base en tres repositorios públicos fijados a commits upstream, ejecutado el 2026-09-03 en v1.108.316. Flujo de trabajo: search_symbols (top 5) + get_symbol_source × 3 por consulta. Dos líneas base, misma ejecución, mismo corpus, mismo lector de archivos:

  • Grep-top-3: rg -l los términos de consulta, clasifica archivos por recuento de coincidencias, abre los 3 principales completos. Esto es lo que un agente competente sin la herramienta realmente hace, y es el número a citar.
  • Leer-todo: cada archivo fuente indexado concatenado. Un techo que nadie paga; se conserva para continuidad con cifras publicadas anteriormente.
RepositorioArchivosSímbolosLínea base Grep-top-3jCodeMunchvs grepvs leer-todo
expressjs/express18645515,724 promedio1,007 promedio15.6x153.5x
fastapi/fastapi1,18613,24085,296 promedio2,149 promedio39.7x384.1x
gin-gonic/gin981,45131,975 promedio1,537 promedio20.8x98.8x
Total general (15 ejecuciones de tareas)664,97523,46728.3x241.1x

Contra un agente de grep-y-lectura: reducción del 96.5%, 28.3x menos tokens. Ningún múltiplo único describe cada consulta; las filas por repositorio arriba muestran la dispersión. Contra leer-todo la cifra es del 99.6%, pero nadie paga ese techo. La codificación compacta MUNCH en el cable luego recorta una mediana del 45.5% más de bytes de las respuestas.

Metodología completa, commits fijados, arnés de pruebas y limitaciones conocidas: benchmarks/METHODOLOGY.md · Reprodúcelo tú mismo · TOKEN_SAVINGS.md

Prueba A/B independiente en un código base de producción

Prueba A/B de 50 iteraciones en un código base real de producción Vue 3 + Firebase, jCodeMunch vs herramientas nativas (Grep/Glob/Read), Claude Sonnet 4.6, sesión nueva por iteración: tasa de éxito 80% vs 72%, tasa de tiempo de espera agotado 32% vs 40%, creación de caché media reducida en 10.5%. Ahorros a nivel de capa de herramientas aislados de gastos generales fijos: 15-25%. Una categoría de hallazgos apareció exclusivamente en la variante jCodeMunch: detección de archivos huérfanos mediante find_importers, una consulta estructural que las herramientas nativas no pueden responder sin scripting. Informe completo: benchmarks/ab-test-naming-audit-2026-03-18.md

Mencionado por

Página completa de reconocimientos →


Instalación

Instalaciones con un clic

Install in VS Code Install in VS Code Insiders Install in Cursor

Recomendado: un comando

uv tool install jcodemunch-mcp
jcodemunch-mcp init

Sin virtualenv que gestionar, nada escrito en el Python del sistema, y funciona tal cual en distribuciones PEP 668 (Ubuntu 24.04+, Debian 12+) donde se rechaza pip install sin más. ¿Aún no tienes uv?

init detecta automáticamente tus clientes MCP (Claude Code, Claude Desktop, Cursor, Windsurf, Continue), escribe sus entradas de configuración, instala la política de prompt CLAUDE.md para que tu agente realmente use jCodeMunch, opcionalmente instala hooks de cumplimiento, opcionalmente indexa tu proyecto, y audita tus archivos de configuración de agente en busca de desperdicio de tokens.

Otras rutas de instalación
ComandoÚsalo cuando
uvx jcodemunch-mcpInstalación cero. Se ejecuta desde un entorno efímero — nada aterriza en disco de forma permanente. Las entradas de cliente que escribe init ya invocan el servidor de esta manera, así que para la mayoría de configuraciones esto es todo lo que se ejecuta. ⚠ Los hooks de cumplimiento son la excepción: los genera un subshell con PATH mínimo y resuelven el ejecutable por nombre, así que necesitan uv tool install (o pipx/pip) para funcionar.
pipx install jcodemunch-mcpYa estandarizas en pipx
pip install jcodemunch-mcpDentro de un virtualenv que gestionas tú mismo

Verifica:

jcodemunch-mcp --version

Configuración manual de Claude Code

claude mcp add -s user jcodemunch -- uvx jcodemunch-mcp

Sin paso de instalación — uvx obtiene y ejecuta el servidor bajo demanda. ¿Lo prefieres en tu PATH (y requerido para hooks de cumplimiento)? uv tool install jcodemunch-mcp, luego claude mcp add -s user jcodemunch jcodemunch-mcp.

Luego dile al agente que prefiera las herramientas. Esto importa más de lo que la gente cree; la instalación hace que las herramientas estén disponibles pero no rompe el hábito de lectura bruta del agente. Una línea en tu CLAUDE.md lo logra:

Call the jcodemunch_guide tool and strictly follow its instructions.

¿Usas Cursor, Windsurf, Codex CLI, Antigravity, Gemini CLI, Qwen Code, Kiro, Cline, Zed, Goose, Hermes, Odysseus o Paperclip? Cada configuración de cliente probada está en CLIENTS.md. Los extras opcionales (búsqueda semántica local, resúmenes de IA por proveedor) están en QUICKSTART.md; los sistemas que cada extra incorpora están documentados en SECURITY.md.


Inicio rápido

Recorrido completo: QUICKSTART.md. La versión de dos minutos, dentro de tu agente después de init:

  1. Pregunta: "Indexa este repo con jcodemunch."
  2. Pregunta: "Usando jcodemunch, encuentra la función que maneja la autenticación y muéstrame su código fuente."

El agente debería responder mediante search_symbols y get_symbol_source, devolviendo decenas de líneas en lugar de archivos completos. Confirma con get_session_stats: reporta tokens servidos y ahorros para la sesión. De ahí vienen los números del medidor.

¿Quieres omitir la indexación inicial para frameworks populares? Paquetes de inicio preconstruidos: jcodemunch-mcp install-pack --list (los paquetes gratuitos no necesitan licencia).


Lo que puedes hacer

  • Recupera un símbolo en lugar de cargar un archivo. get_symbol_source devuelve el cuerpo exacto de la función, con precisión de byte, para la mayoría de ediciones que tocan una función en un archivo de 700 líneas (~95% de ahorro en esa lectura).
  • Arma el contexto de toda una tarea en una sola llamada. assemble_task_context clasifica la intención de la tarea, extrae símbolos ancla y ejecuta la secuencia correcta de herramientas bajo un presupuesto de tokens. plan_turn enruta el turno antes de la primera lectura.
  • Haz preguntas estructurales que grep no puede responder. find_importers, get_blast_radius, get_call_hierarchy, find_dead_code, get_changed_symbols, get_hotspots, search_ast barridos de anti-patrones, y más. Dos suenan parecido y no lo son: check_references responde dónde se usa un nombre (sitios de importación más cada archivo cuyo contenido lo menciona), find_references responde quién lo importa, solo sobre el grafo de importaciones, por lo que un sitio de llamada es invisible para él.
  • Prevalida cambios riesgosos y sabe cuándo detenerte. check_edit_safe, check_delete_safe, get_pr_risk_profile y plan_refactoring con bloques {old_text, new_text} listos para editar. Las dos verificaciones de seguridad devuelven stop_rule.terminal: true significa que ninguna llamada adicional a jcodemunch cambia el veredicto, así que volver a ejecutar find_importers o check_references para asegurarse es trabajo desperdiciado. Significa final, no seguro. check_rename_safe responde safe: null en lugar de true cuando el grafo de importaciones no pudo alcanzar el archivo del símbolo, por lo que los archivos que lo usan nunca se verificaron, y get_pr_risk_profile responde risk_score: null con unmeasurable_axes cuando no pudo medir el eje de impacto; una puerta de CI debería fallar en null. Entrega al servidor la salida de tu propio verificador de tipos (jcodemunch-mcp import-trace --diagnostics <file>: mypy --output json, pyright --outputjson, tsc --pretty false, ruff --output-format json) y check_edit_safe, get_changed_symbols, get_pr_risk_profile y get_symbol_provenance dicen qué símbolos ya marca el verificador, a partir de qué commit. Nada ejecuta un verificador por ti. False nombra la cosa específica que cambiaría la respuesta.
  • Confía en las respuestas. Puntajes de confianza calibrados, banderas de frescura, contratos de cobertura en afirmaciones de ausencia, referencias verificadas por compilador mediante importación SCIP y redacción automática de secretos antes de que cualquier cosa llegue al LLM.
  • Mantén el índice fresco automáticamente. Modos de vigilancia, hooks de agente y una extensión de VS Code cierran la brecha de obsolescencia.

Ese es el resumen destacado. El recorrido completo de 90+ herramientas, el formato de cable compacto MUNCH, recibos de evidencia, anotación de trabajo descargable y la instrumentación de economía de sesión están en CAPABILITIES.md, con detalles internos en UNDER_THE_HOOD.md.

Novedades

  • v1.108.318 (2026-09-11) — el proceso es código que no puede omitir un paso, y el campo se mide a partir de archivos de resultados
  • v1.108.317 (2026-09-04) — CI ejecuta el arnés en cada cambio; la publicación es un flujo de trabajo despachado
  • v1.108.316 (2026-09-02) — Una preferencia de visualización editó los datos que estaba mostrando

¿Cuándo ayuda (y cuándo no)?

EscenarioHerramienta nativajCodeMunchAhorro
Editar una función (archivo de 700 líneas)Read → 700 líneasget_symbol_source → 30 líneas~95%
Entender la estructura de un archivoRead → contenido completoget_file_outline → nombres + firmas~80%
Encontrar qué archivo editarGrep muchos archivossearch_symbols → coincidencia exactacomparable
La edición requiere contexto de todo el archivoRead → contenido completoget_file_content → contenido completo~0%
"¿Qué se rompe si cambio X?"no es posibleget_blast_radiuscapacidad única

Ayuda más en ediciones dirigidas (una función, un método, una clase), que son la mayoría del trabajo de edición real. Las ediciones que realmente requieren el archivo completo (reestructurar estado a nivel de archivo, reordenar lógica que abarca cientos de líneas) no ven ventaja. Mejor se adapta a: repositorios grandes, bases de código desconocidas, exploración impulsada por agentes, refactorización y análisis de impacto, y equipos que reducen costos de tokens de IA sin hacer más tontos a los agentes.

Idiomas: más de 70 mediante tree-sitter, incluyendo Python, JavaScript/TypeScript, Go, Rust, Java, C/C++, C#, PHP, Ruby, Swift y Kotlin. Matriz completa: LANGUAGE_SUPPORT.md. Monorepos: sí; indexación incremental, detección de miembros del espacio de trabajo, alcance por subruta.


Diferir los esquemas de herramientas (búsqueda de herramientas de Anthropic)

Si accedes a jCodeMunch a través del conector MCP en un modelo que admite búsqueda de herramientas, puedes mantener nuestros esquemas fuera de tu prefijo de contexto por completo y dejar que Claude cargue solo las dos o tres herramientas que una solicitud necesita. No configuras defer_loading por herramienta — configúralo una vez para todo el servidor:

{
  "mcp_servers": [
    { "type": "url", "url": "https://your-host/mcp", "name": "jcodemunch" }
  ],
  "tools": [
    { "type": "tool_search_tool_bm25_20251119", "name": "tool_search_tool_bm25" },
    {
      "type": "mcp_toolset",
      "mcp_server_name": "jcodemunch",
      "default_config": { "defer_loading": true },
      "configs": {
        "resolve_repo":       { "defer_loading": false },
        "search_symbols":     { "defer_loading": false },
        "get_ranked_context": { "defer_loading": false }
      }
    }
  ]
}

Envíalo con el encabezado beta mcp-client-2025-11-20. Ambas mitades son necesarias — mcp_servers solo es un error de validación, y también lo es mcp_toolset sin el mcp_server_name correspondiente.

⚠ El conector MCP toma una URL, por lo que esto aplica a jCodeMunch servido sobre sse o streamable-http (jcodemunch-mcp serve --transport streamable-http), no a la configuración local predeterminada de stdio. En stdio, si los esquemas se difieren depende de tu cliente, y tool_surface: "counter" a continuación es la palanca que controlas.

El bloque configs anterior sigue el propio consejo de Anthropic: mantén tus 3–5 herramientas más usadas residentes para que las solicitudes comunes omitan el viaje de ida y vuelta de búsqueda — y configs por herramienta anula default_config.

Las definiciones diferidas se excluyen del prefijo del prompt del sistema y se agregan en línea como bloques tool_reference cuando Claude las descubre, por lo que el almacenamiento en caché del prompt se conserva — este no es el tipo de lista de herramientas dinámica que invalida la caché. Al menos una herramienta en la solicitud debe permanecer no diferida, o la API devuelve un 400.

⚠ Este es un mecanismo diferente de nuestro propio tool_surface: "counter", y no necesitas ambos. La búsqueda de herramientas es del lado del host y funciona en todos los servidores MCP que tengas conectados; el Contador es del lado del servidor, funciona en cualquier host, incluidos aquellos sin soporte de búsqueda de herramientas, y es lo que init configura en una primera instalación. Elige el que tu host admita — consulta CONFIGURATION.md para el Contador y jcodemunch-mcp surface para lo que tu instalación realmente anuncia.


Seguridad, privacidad y comportamiento en segundo plano

Local-primero por diseño: los índices viven en ~/.code-index/, y el único comportamiento de red predeterminado del paquete base es un contador de ahorro anónimo (ID aleatorio más conteos de tokens agregados, sin código, sin rutas, sin PII; exclúyete con share_savings: false). Todo lo que el servidor hace más allá de responder a una llamada de herramienta (vigilancia de archivos, el servicio de inicio de sesión opcional, validación de licencia, descargas de modelos, informes de organización) es opcional o excluible, visible y reversible, y cada elemento está enumerado en SECURITY.md junto con los controles de traversal de rutas, symlinks y redacción de secretos.

Anulación del paquete de gramáticas (#608). La dependencia tree-sitter-language-pack está fijada a <1.0.0 porque las ruedas 0.x incluyen cada gramática y el análisis permanece local. F# es la única excepción: es analizado por la rueda fijada tree-sitter-fsharp, que también compila su gramática, por lo que el análisis de F# permanece local en cualquiera de los paquetes (#848). Puedes anularlo con pip install -U tree-sitter-language-pack después de instalar; nada en el código lo rechaza. Lo que aceptas, medido contra 1.17.0 el 2026-09-11: el paquete 1.x no incluye gramáticas y obtiene cada una a través de la red en su directorio de caché (medido en Windows: %LOCALAPPDATA%\tree-sitter-language-pack\v<version>\libs; jcodemunch-mcp install-status imprime la ruta en cualquier plataforma) la primera vez que se analiza un idioma, por lo que una instalación aislada no analiza nada, y la gramática nim cambió upstream, por lo que los archivos nim no producen símbolos (el manifiesto también carece de autohotkey, ejs y verse, lo que no cuesta nada aquí: esos tres son analizados por los extractores propios de jCodeMunch, no por tree-sitter). Una instalación en un paquete 1.x lo dice: cada resultado index_folder lleva un bloque grammar_pack y una advertencia que nombra la versión, el directorio de caché y cada idioma cuya gramática falló, y jcodemunch-mcp install-status imprime lo mismo. Quitar la fijación es una decisión separada que necesita primero la historia sin conexión.


Configuración por proyecto

La mayoría de los ajustes viven en el ~/.code-index/config.jsonc global, pero cualquiera de ellos puede anularse para un solo repositorio colocando un .jcodemunch.jsonc en su raíz. Es una superposición: las claves que declara ganan, las claves que omite pasan a global y luego al valor predeterminado integrado, por lo que solo necesita contener lo que difiere.

// <your-repo>/.jcodemunch.jsonc
{
  "max_file_size": 1048576,
  "languages": ["python", "typescript", "racket"]
}

Declarar formas de definición de Racket

Los proyectos de Racket definen rutinariamente sus propias formas de definición con define-syntax, y un analizador estático no puede saber qué vinculan esas — (defstep (check-admin) ...) es indistinguible de una llamada a función. Declararlas hace que sus vinculaciones sean buscables:

{
  "racket_definition_forms": {
    "defstep":  "function",
    "defstudy": "constant",
    "defvar":   "constant",
    "define-schema": "class"
  }
}

Cada entrada mapea un nombre de forma a lo que vincula: function, constant, class o type. Dónde se encuentra el nombre se lee de la fuente en lugar de declararse — (defstep (check-admin) ...) toma la cabeza de la lista de parámetros, (defstudy consent ...) toma el símbolo simple — por lo que una forma que aparece en ambas formas funciona de cualquier manera.

⚠ Esto es una afirmación, no algo que jCodeMunch pueda verificar. Una declaración incorrecta pone un nombre en el índice que Racket no vincula realmente. Las declaraciones también se comparan solo después de cada forma integrada, por lo que declarar define o struct no tiene efecto — el manejo integrado gana.

Declarar cómo se ve un #lang de Racket

Una línea #lang nombra un lector, y el analizador de Racket de jCodeMunch lee expresiones S. Los idiomas de la distribución están integrados (racket/*, typed/racket*, s-exp, info, at-exp …, y los idiomas de documento scribble/*, pollen, punct, markdown …), pero el idioma propio de un proyecto le es desconocido y se trata como un documento — sin símbolos, aún buscable por texto — hasta que digas cuál es su sintaxis:

{
  "racket_langs": {
    "conscript": "at-exp",
    "mylang": "sexp"
  }
}

sexp es expresiones S simples; at-exp es cuerpos de texto at-exp sobre Racket (leído con @ como el carácter de comando, exactamente como #lang at-exp los lee, por lo que la prosa que contiene ; " # o | es prosa); text es un idioma de documento que nunca se recorre. Una clave también cubre sus sub-idiomas (conscript coincide con conscript/with-require), y un proyecto puede degradar un idioma así como promover uno. Un idioma at-exp cuyo lector usa otro carácter de comando lo declara con la forma de objeto — "mylang": {"tier": "at-exp", "command_char": "◊"} — de la manera en que make-at-readtable de Racket toma #:command-char.

Ambas claves cambian lo que el analizador emite para archivos sin cambios, por lo que un cambio en cualquiera de ellas se sella en el índice y fuerza un re-análisis completo en el siguiente índice (rebuild_reason: "racket_config_changed"); no necesitas tocar los archivos ni limpiar el índice. Un índice que contiene archivos Racket construido antes de que existiera este sello se re-analiza una vez de la misma manera (rebuild_reason: "racket_index_predates_gate").


Documentación

DocQué cubre
QUICKSTART.mdDe cero a indexado en tres pasos
CLIENTS.mdConfiguración probada para cada cliente MCP
USER_GUIDE.mdReferencia completa de herramientas, flujos de trabajo y mejores prácticas
CAPABILITIES.mdLa referencia completa de capacidades más allá del resumen destacado
CONFIGURATION.mdReferencia del archivo de configuración, palancas de control de tokens, niveles de herramientas, el Contador
UNDER_THE_HOOD.mdEl manual técnico: veredictos, internals de clasificación, contratos de procedencia
ARCHITECTURE.mdDiseño interno, modelo de almacenamiento y puntos de extensión
GROQ.mdGroq Remote MCP, la CLI gcm, GitHub Action de speedreview
HEADLESS.mdUsar jCodeMunch con claude -p
AGENT_HOOKS.mdHooks de agente y políticas de prompt
LANGUAGE_SUPPORT.mdIdiomas admitidos y detalles de análisis
SECURITY.mdControles de seguridad, movimiento de datos, comportamiento en segundo plano
TROUBLESHOOTING.mdProblemas comunes y soluciones
CHANGELOG.md · ROADMAP.mdHistorial de versiones y qué sigue

Licenciamiento y uso comercial

jCodeMunch-MCP se publica bajo la Licencia de Doble Uso jCodeMunch-MCP (términos completos). Gratis para uso no comercial. El uso comercial requiere una licencia paga, de pago único, vendida por jMunch LLC a través de Stripe:

Solo jCodeMunch: Builder, $79 (1 desarrollador) · Studio, $349 (hasta 5) · Platform, $1,999 (implementación interna a nivel de organización)

Suite completa de jMunch (código + docs + datos): Trio Builder, $99 · Trio Studio, $449 · Trio Platform, $2,499

¿No estás seguro de que valga la pena? Calcula tus propios números con la calculadora de ROI, o reenvía la versión para el equipo de finanzas a quien firme la aprobación. La garantía se mantiene: si jCodeMunch no se paga solo, no pagas por jCodeMunch.

Condiciones en todos los usos: conserva el aviso de derechos de autor, marca claramente las modificaciones y mantén intacto el nombre del autor original (está algo engreído), e incluye un aviso de modificación prominente en las redistribuciones de fuente. El Software no puede renombrarse, re-marcarse ni publicarse en ningún registro público de paquetes, y se proporciona "TAL CUAL" sin garantía. LICENSE controla.


FAQ

¿Cuánto puedo ahorrar en tokens de Claude / Opus? En flujos de trabajo con mucha recuperación, los tokens de lectura de código típicamente bajan 86-99%, medidos en un promedio de 96.5% (28.3x) contra un agente de grep-y-leer en 15 tareas y 3 repositorios. Los resultados por consulta van de 7.6x a 81.2x. Metodología: TOKEN_SAVINGS.md y benchmarks/.

¿En qué se diferencia de las herramientas basadas en RAG o grep? jCodeMunch recupera a nivel de símbolo con precisión a nivel de byte (funciones, clases, importadores, radio de explosión, jerarquías) en lugar de fragmentos difusos (RAG) o coincidencias de líneas crudas (grep) que el agente aún tiene que leer y razonar.

¿Es gratis para uso personal? Sí. El uso comercial necesita una licencia; consulta arriba.

¿Dónde está la inmersión profunda en X? Capacidades: CAPABILITIES.md. Config: CONFIGURATION.md. Clientes: CLIENTS.md. Internals: UNDER_THE_HOOD.md. O el flujo completo: jcodemunch.com.


Extras: Observatorio de salud de código OSS (instantáneas semanales de seis ejes de Express, FastAPI, Gin, Django y otros) · Radar de costos de tokens (inteligencia diaria de costos de tokens de IA) · Consola jMunch (GUI MIT gratuita para actualizaciones con un clic)