mcp-msaccess
Otorga a cualquier asistente de IA control total sobre bases de datos de Microsoft Access.
Documentación
mcp-access
Dale a cualquier asistente de IA control total sobre bases de datos de Microsoft Access.
Crea formularios, escribe VBA, diseña tablas, gestiona controles, ejecuta consultas, construye relaciones y edita cada rincón de un .accdb — todo mediante lenguaje natural. 69 herramientas que convierten Access en algo con lo que puedes hablar.
No se requiere experiencia en Access. Solo describe lo que quieres.
"Create a form called Invoices with a ListBox, two date filters, and a search button"
"Add a VBA click handler that filters the recordsource by date range"
"Create a table called audit_log with timestamp, user, and action fields"
"List all controls inside the Payment tab and change the combo's row source"
La IA se encarga de la automatización COM, la vista de diseño, los módulos VBA, las secciones binarias, la invalidación de caché y todas las partes complicadas. Tú obtienes el resultado.
Lo que puede hacer
- Formularios e informes — crear, clonar, exportar, importar, capturar pantalla, hacer clic, escribir. Bucle completo de automatización de UI
- VBA — leer, escribir, reemplazar, compilar y ejecutar procedimientos. Edición a nivel de línea o de procedimiento completo
- Controles — crear, eliminar, modificar, listar, establecer orden de tabulación. Encuentra controles anidados dentro de páginas de TabControl
- Tablas y SQL — crear mediante DAO, alterar, consultar, ejecución por lotes, búsqueda de texto completo en todos los campos Texto/Memo. Tablas vinculadas ODBC compatibles
- Relaciones, índices, referencias, consultas, macros — CRUD completo. Clona cualquier objeto (formulario / informe / módulo / clase / consulta / macro) conservando VBA y secciones binarias
- Mantenimiento — compactar y reparar, descompilar bases de datos infladas, exportar documentación de estructura. Detección automática de la instalación de Office (sin más rutas fijas de Office 16)
- Lint de UI —
access_lint_formmarca diseños objetivamente rotos (texto blanco sobre blanco, superposiciones, truncamiento, controles fuera del lienzo). Es un verificador, no un diseñador — consulta la nota más abajo
Funciona con Claude Code, Cursor, Windsurf, Continue o cualquier cliente compatible con MCP.
Requisitos
- Windows (la automatización COM es solo para Windows)
- Microsoft Access instalado (cualquier versión que admita VBE, 2010+)
- Python 3.9+
- "Confiar en el acceso al modelo de objetos del proyecto VBA" habilitado en el Centro de confianza de Access
Instalación
pip install mcp pywin32
Habilitar el acceso al modelo de objetos VBA
File → Options → Trust Center → Trust Center Settings → Macro Settings
→ marca Confiar en el acceso al modelo de objetos del proyecto VBA
O ejecuta el script de PowerShell incluido:
.\enable_vba_trust.ps1
Registrar con Claude Code
Global (disponible en todos los proyectos):
claude mcp add access -- python C:\path\to\access_mcp_server.py
Solo proyecto (crea .mcp.json en el directorio actual):
claude mcp add --scope project access -- python C:\path\to\access_mcp_server.py
Registrar con otros clientes MCP
Añádelo a tu archivo de configuración MCP (.mcp.json, mcp.json o configuración específica del cliente):
{
"mcpServers": {
"access": {
"type": "stdio",
"command": "python",
"args": ["C:\\path\\to\\access_mcp_server.py"]
}
}
}
Compatible con cualquier cliente que cumpla con MCP (Cursor, Windsurf, Continue, etc.).
Herramientas (69)
Base de datos
| Herramienta | Descripción |
|---|---|
access_create_database | Crear un nuevo archivo de base de datos .accdb vacío |
access_close | Cerrar la sesión COM y liberar el archivo .accdb |
Objetos de base de datos
| Herramienta | Descripción |
|---|---|
access_list_objects | Listar objetos por tipo (table, module, form, report, query, macro, all). Tablas del sistema filtradas |
access_get_code | Exportar la definición completa de un objeto como texto |
access_set_code | Importar texto modificado de vuelta (crea o sobrescribe) |
access_export_structure | Generar un índice Markdown de todos los módulos, formularios, informes y consultas |
access_delete_object | Eliminar un módulo, formulario, informe, consulta o macro. Requiere confirm=true |
access_create_form | Crear un nuevo formulario sin activar el MsgBox "Guardar como" que bloquea COM. has_header opcional para la sección de encabezado/pie, record_source (vincular a tabla/consulta), default_view (0=Individual, 1=Continuo, 2=Hoja de datos, ...) |
SQL y tablas
| Herramienta | Descripción |
|---|---|
access_execute_sql | Ejecutar SQL mediante DAO — SELECT devuelve filas como JSON (limit predeterminado 500). DELETE/DROP/ALTER requieren confirm_destructive=true |
access_execute_batch | Ejecutar múltiples sentencias SQL en una sola llamada. Admite SELECT/INSERT/UPDATE/DELETE mixtos con resultados por sentencia, stop_on_error y confirm_destructive |
access_table_info | Mostrar la estructura de una tabla mediante DAO (campos, tipos, tamaños, obligatorios, estado de vinculación) |
access_search_queries | Buscar texto en el SQL de TODAS las consultas a la vez (encontrar qué consultas referencian una tabla, campo o palabra clave) |
access_create_table | Crear una tabla mediante DAO con soporte completo de tipo, valor predeterminado, descripción y clave principal en una sola llamada. Más robusto que el SQL de CREATE TABLE |
access_alter_table | Modificar la estructura de una tabla mediante DAO: añadir campo, eliminar campo (requiere confirm=true), renombrar campo |
Edición a nivel de línea en VBE
| Herramienta | Descripción |
|---|---|
access_vbe_get_lines | Leer un rango de líneas de un módulo VBA sin exportar el archivo completo |
access_vbe_get_proc | Obtener el código y la posición de un procedimiento por nombre |
access_vbe_module_info | Listar todos los procedimientos con sus números de línea |
access_vbe_replace_lines | Reemplazar/insertar/eliminar líneas en un módulo VBA directamente mediante VBE |
access_vbe_find | Buscar texto en UN módulo específico. Una coincidencia en una sentencia envuelta con _ también devuelve la sentencia completa unida. Para buscar en todos los módulos a la vez, usa access_vbe_search_all |
access_vbe_search_all | Buscar texto en TODOS los módulos/formularios/informes de la base de datos a la vez. Una coincidencia en una sentencia envuelta con _ también devuelve la sentencia completa unida. context_lines opcional (0-10) devuelve el código circundante con cada coincidencia |
access_vbe_replace_proc | Reemplazar un procedimiento completo por nombre (calcula automáticamente los límites de línea). Elimina líneas Option mal colocadas, ejecuta verificación de salud estructural |
access_vbe_patch_proc | Búsqueda y reemplazo quirúrgico dentro de un procedimiento. Atómico por defecto (un parche fallido no escribe nada), anclas que no distinguen mayúsculas/minúsculas, require_unique opcional, coincidencia de respaldo tolerante a espacios en blanco + mensajes de error contextuales cuando los parches fallan. proc_name='(Declarations)' apunta a la sección de declaraciones |
access_vbe_append | Añadir código al final de un módulo. Elimina automáticamente Option Explicit/Option Compare para evitar colocación incorrecta |
Controles de formularios e informes
| Herramienta | Descripción |
|---|---|
access_list_controls | Listar todos los controles de un formulario/informe con propiedades clave. Los valores largos divididos en líneas en la exportación se devuelven unidos. Los controles dentro de Pages/OptionGroups incluyen un campo parent. fields opcional conserva solo las claves que pidas |
access_get_control | Obtener el bloque de definición completo y sin abreviar de un control específico — dónde ir para una propiedad que access_list_controls no devuelve (encuentra controles dentro de Pages/OptionGroups) |
access_search_controls | Buscar texto o regex en las propiedades de control de cada formulario/informe (ControlSource, RowSource, Caption, Tag, Filter… o properties=["all"]). Los valores divididos en líneas de continuación se unen antes de la coincidencia |
access_create_control | Crear un nuevo control mediante COM en vista de diseño. Admite class_name para inicialización ProgID de ActiveX (tipo 119). Usa tipo 128 (acWebBrowser) para WebBrowser nativo |
access_delete_control | Eliminar un control mediante COM |
access_set_control_props | Modificar propiedades de control mediante COM en vista de diseño |
access_set_multiple_controls | Modificar propiedades de múltiples controles en una sola sesión de vista de diseño |
access_lint_form | Verificación determinista de diseño objetivamente roto: contraste (WCAG), superposición, fuera de límites, truncamiento, inconsistencia entre hermanos, tamaño cero/invisible. Devuelve verdict PASS/REVIEW/FAIL. También se ejecuta automáticamente en cada edición de control |
⚠️ Una nota sobre
access_lint_form— gestiona tus expectativasEsto NO es un diseñador y no hay nada de super-diseño aquí. No esperes que haga que un formulario se vea bien, que sugiera una paleta bonita o que tenga gusto — no lo tiene y nunca lo tendrá.
Es un verificador tonto y determinista de lo obvio y fácil de comprobar: ¿el texto es del mismo color que su fondo? ¿dos controles se superponen físicamente? ¿un título no cabe en su caja? ¿algo está fuera del borde del formulario, o tiene cero píxeles de alto? Eso es todo. Matemáticas simples — ratios de contraste WCAG e intersección de rectángulos — con un montón de protecciones contra falsos positivos para que no grite lobo.
Piensa en cinturón de seguridad, no estilista: no hará que el coche sea bonito, solo evita que publiques un formulario con texto blanco sobre fondo blanco sin darte cuenta. Se ejecuta automáticamente en cada edición de control para que esos errores obvios salgan a la superficie por sí solos. Si esperabas una IA de diseño de UI, esto no lo es (PRs honestos para hacerlo más inteligente son muy bienvenidos 😄).
Exportación/importación de texto
| Herramienta | Descripción |
|---|---|
access_export_text | Exportar formulario/informe/módulo como texto mediante SaveAsText. NO abre la vista de diseño. Salida UTF-16 LE |
access_import_text | Importar formulario/informe/módulo desde texto mediante LoadFromText. Reemplaza si existe. Divide automáticamente el VBA de CodeBehindForm |
Propiedades de base de datos
| Herramienta | Descripción |
|---|---|
access_get_db_property | Leer una propiedad de BD (CurrentDb.Properties) u opción de Access (GetOption) |
access_set_db_property | Establecer una propiedad de BD u opción de Access — crea la propiedad si no existe |
access_get_form_property | Leer propiedades de formulario o informe (RecordSource, Caption, DefaultView, etc.). object_type requerido (form o report). Omite property_names para todas |
access_set_form_property | Establecer propiedades de formulario/informe (RecordSource, Caption, DefaultView, HasModule, etc.) mediante COM en vista de diseño |
Tablas vinculadas
| Herramienta | Descripción |
|---|---|
access_list_linked_tables | Listar tablas vinculadas con tabla de origen, cadena de conexión, indicador ODBC. name='X' devuelve una tabla; names_only=true es un listado ligero (sin cadenas de conexión — úsalo cuando cientos de vínculos desborden el resultado); mask_password=true enmascara PWD= |
access_relink_table | Cambiar la cadena de conexión y actualizar el vínculo — guarda automáticamente las credenciales (dbAttachSavePWD) cuando se detectan UID/PWD. relink_all=true actualiza todas las tablas con la misma conexión original. refresh=true vuelve a leer el esquema usando la cadena de conexión propia de la tabla (sin new_connect, la contraseña nunca se muestra) |
Relaciones
| Herramienta | Descripción |
|---|---|
access_list_relationships | Listar relaciones de tablas con asignaciones de campos e indicadores de cascada |
access_create_relationship | Crear una relación entre dos tablas (admite actualización/eliminación en cascada) |
access_delete_relationship | Eliminar una relación por nombre |
Referencias VBA
| Herramienta | Descripción |
|---|---|
access_list_references | Listar referencias del proyecto VBA con GUID, ruta, estado roto/incorporado |
access_manage_reference | Añadir (por GUID o ruta de archivo) o eliminar una referencia VBA — protege contra la eliminación de referencias incorporadas |
Mantenimiento
| Herramienta | Descripción |
|---|---|
access_compact_repair | Compactar y reparar la base de datos — cierra, compacta a un archivo temporal, intercambia atómicamente, reabre |
access_decompile_compact | Eliminar p-code VBA huérfano mediante /decompile, recompilar y luego compactar. Reducción típica: 60-70% en bases de datos front-end muy editadas. Úsalo cuando un .accdb sin datos supere los 30-40 MB |
Gestión de consultas
| Herramienta | Descripción |
|---|---|
access_manage_query | Crear, modificar, eliminar, renombrar o leer el SQL de un QueryDef. Eliminar requiere confirm=true |
Índices
| Herramienta | Descripción |
|---|---|
access_list_indexes | Listar índices de una tabla con campos, indicadores de principal, único y externo |
access_manage_index | Crear o eliminar un índice. Crear requiere lista de campos con orden de clasificación opcional |
Compilación VBA
| Herramienta | Descripción |
|---|---|
access_vbe_check_syntax | Verificación estructural estática del proyecto VBA ya abierto — sin descompilar, nada se descarta. La verificación segura posterior a la edición. No es un compilador: no resuelve identificadores, tipos ni referencias |
access_compile_vba | Compilar y guardar todos los módulos VBA. timeout opcional para descartar automáticamente el MsgBox de error. Descompila primero y puede descartar VBA sin guardar — para una verificación rápida usa access_vbe_check_syntax |
Ejecución de VBA y macros
⚠️ Deshabilitado por defecto (v0.7.51). Estas tres herramientas ejecutan código arbitrario y están protegidas detrás de la variable de entorno
MCP_ACCESS_ALLOW_CODE_EXEC. Consulta Seguridad para habilitarlas.
| Herramienta | Descripción |
|---|---|
access_run_macro | Ejecuta una macro de Access por nombre |
access_run_vba | Ejecuta un Sub/Function de VBA. Módulos estándar mediante Application.Run, módulos de formulario mediante sintaxis Forms.FormName.Method (COM). El parámetro opcional timeout descarta automáticamente MsgBox/InputBox |
access_eval_vba | Evalúa una expresión VBA mediante Application.Eval. Funciones de dominio, funciones integradas de VBA, propiedades de formularios abiertos, funciones de módulos estándar. Recurso automático mediante módulo temporal para instancias de clases y otras expresiones que Eval no puede resolver |
Exportar
| Herramienta | Descripción |
|---|---|
access_output_report | Exporta un informe a PDF, XLSX, RTF o TXT mediante DoCmd.OutputTo |
Transferencia de datos
| Herramienta | Descripción |
|---|---|
access_transfer_data | Importa/exporta datos entre Access y Excel (.xlsx) o CSV. Admite rango (Excel) y spec_name (CSV) |
Propiedades de campos
| Herramienta | Descripción |
|---|---|
access_get_field_properties | Lee todas las propiedades de un campo de tabla (DefaultValue, ValidationRule, Description, Format, etc.) |
access_set_field_property | Establece una propiedad de campo: crea la propiedad si no existe |
Opciones de inicio
| Herramienta | Descripción |
|---|---|
access_list_startup_options | Lista 14 opciones de inicio comunes (AppTitle, StartupForm, AllowBypassKey, etc.) con sus valores actuales |
Captura de pantalla y automatización de interfaz
| Herramienta | Descripción |
|---|---|
access_screenshot | Captura la ventana de Access como PNG. Opcionalmente abre un formulario/informe primero. Devuelve la ruta, las dimensiones (original + imagen) y metadatos. Configurable max_width (predeterminado 1920), wait_ms (bombea mensajes de Windows: los eventos Timer se disparan, ActiveX se inicializa) y open_timeout_sec (predeterminado 30: envía ESC para cancelar si Form_Load se bloquea en una consulta lenta) |
access_ui_click | Hace clic en coordenadas de imagen en la ventana de Access. Las coordenadas son relativas a una captura de pantalla anterior (image_width requerido para escalado). Admite clic left, double y right |
access_ui_type | Escribe texto o envía atajos de teclado. text para caracteres normales (WM_CHAR), key para teclas especiales (enter, tab, escape, f1-f12, flechas, etc.), modifiers para combinaciones (ctrl, shift, alt) |
Referencia cruzada
| Herramienta | Descripción |
|---|---|
access_find_usages | Busca un nombre en código VBA, SQL de consultas y propiedades de controles (ControlSource, RecordSource, RowSource, SourceObject, DefaultValue, ValidationRule, LinkChildFields, LinkMasterFields) en una sola llamada. Cada coincidencia de control incluye el control propietario, el valor completo y su línea |
Base de conocimiento
| Herramienta | Descripción |
|---|---|
access_tips | Consejos y trampas bajo demanda. Temas: eval, controls, gotchas, sql, vbe, compile, design. Cero tokens hasta que se llame |
Flujos de trabajo típicos
Edición VBA dirigida (recomendado)
1. access_list_objects → find the module or form name
2. access_vbe_module_info → get procedure list and line numbers
3. access_vbe_get_proc → read the specific procedure
4. access_vbe_replace_lines → apply targeted line-level changes
5. access_close → release the file when done
Reemplazo completo de objetos (formularios, informes, módulos)
1. access_get_code → export to text
2. (edit the text)
3. access_set_code → reimport — binary sections are restored automatically
Crear un nuevo formulario
1. access_create_form(db, "myForm", has_header=true) → creates empty form
2. access_create_control(db, "form", "myForm", "CommandButton", {Name: "btn1", ...})
3. access_vbe_append(db, "form", "myForm", code) → add VBA event handlers
4. access_set_form_property(db, "form", "myForm", {HasModule: true, OnCurrent: "[Event Procedure]"})
Captura de pantalla e interacción con la interfaz
1. access_screenshot(db, "form", "myForm") → capture form as PNG
2. (LLM reads the image and identifies UI elements)
3. access_ui_click(db, x=850, y=120, image_width=1920) → click a button
4. access_ui_type(db, text="search term") → type in a field
5. access_ui_type(db, key="enter") → press Enter
6. access_screenshot(db) → verify the result
Seguridad
Este es un servidor stdio local sin superficie de red, por lo que no hay inicio de sesión
por diseño: consulta SECURITY.md para el modelo de amenazas completo. El principal
riesgo es la inyección de prompts: un agente engañado (mediante db_path o contenido que lee
de la base de datos) para que llame a una herramienta de ejecución de código.
La ejecución de código está deshabilitada por defecto (v0.7.51). Las tres herramientas que ejecutan
VBA/Shell arbitrario — access_run_vba, access_eval_vba, access_run_macro —
están ocultas y se rechazan a menos que optes por habilitarlas con una variable de entorno. Para
volver a habilitarlas, agrégalas al env de este servidor en la configuración de tu cliente MCP y reinicia:
"env": { "MCP_ACCESS_ALLOW_CODE_EXEC": "1" }
Habilitarlas otorga ejecución arbitraria de comandos del sistema operativo; solo apunta el servidor a bases de datos de confianza. Consulta SECURITY.md para más detalles y cómo informar problemas.
Variables de entorno
Las tres se leen del proceso del servidor, por lo que van en el bloque env de
la configuración de tu cliente MCP y surten efecto al reiniciar.
| Variable | Predeterminado | Efecto |
|---|---|---|
MCP_ACCESS_ALLOW_CODE_EXEC | off | Establécelo en 1/true/yes/on para habilitar access_run_vba, access_eval_vba y access_run_macro. Falla cerrado: cualquier otra cosa los mantiene deshabilitados. |
MCP_ACCESS_SHIFT_BYPASS | on | Establécelo en 0/false/no/off para dejar de mantener SHIFT durante OpenCurrentDatabase y /decompile. Falla abierto: cualquier otra cosa mantiene el bypass. |
MCP_ACCESS_EXCLUSIVE | off | Establécelo en 1/true/yes/on para abrir la base de datos de la sesión exclusivamente. Falla cerrado: cualquier otra cosa permanece compartido. |
Acerca del bypass de SHIFT (v0.7.53). Mantener SHIFT es cómo el servidor omite la macro AutoExec de una base de datos y el formulario de inicio, pero la pulsación de tecla es un global evento del sistema operativo: no está limitado a Access, por lo que cualquier cosa que escribas en cualquier lugar de la máquina mientras se mantiene llega en mayúsculas (~0,3 s en cada cambio de base de datos, ~3 s por descompilación). Desactívalo si eso te molesta y tus bases de datos protegen su propio inicio, que es la solución más limpia y pertenece a la base de datos:
If Not Application.UserControl Then
Exit Function
End If
Application.UserControl es False cuando Access se inició mediante COM, por lo que la
base de datos se excluye automáticamente bajo automatización y no necesita ningún bypass. Con el
bypass desactivado, AutomationSecurity y el vigilante de diálogos aún se aplican, pero un
objeto de macro AutoExec sin protección se ejecutará.
Acerca de las aperturas exclusivas (v0.7.55). Las aperturas compartidas (el valor predeterminado, y lo que
todas las versiones anteriores a esta hicieron) no pueden tomar un bloqueo de diseño. Adjuntar
Macros de datos mediante SaveAsText/LoadFromText, o cualquier cosa que pase por
DoCmd.OpenTable acViewDesign, se rechaza para cualquier tabla que otra sesión de Access
tenga abierta, una tabla a la vez y sin detener la ejecución: termina,
informa éxito y nada cambió. Activa el interruptor y eso se convierte en un
único fallo visible cuando se abre la base de datos.
Está desactivado por defecto porque es genuinamente exclusivo: la sesión mantiene la
base de datos entre llamadas de herramientas, por lo que mientras el servidor está conectado nadie más puede
abrirlo. Eso es correcto para una compilación o una máquina de desarrollo e incorrecto para un
front-end compartido. access_close libera la base de datos sin detener el
servidor.
El interruptor también verifica el modo en lugar de confiar en él. Access trata
Exclusive:=True como una solicitud: con el archivo ya en uso, lo abre
compartido sin decir palabra, y cuando alguien más lo mantiene exclusivamente, no genera
nada y deja la sesión sin base de datos en absoluto. Entonces el servidor verifica
el archivo de bloqueo antes de abrir (rechazando sin tocar la sesión), lo verifica
nuevamente después (cerrando la base de datos si Access la degradó) y nombra las
sesiones que la mantienen en el error. Un archivo de bloqueo obsoleto dejado por un Access
bloqueado no se confunde con uno activo. Con el interruptor activado, el servidor también deja de adjuntarse
a una instancia de Access ya en ejecución, que mantendría el archivo compartido.
Cuando el interruptor está desactivado, aún se te informa (v0.7.56). El valor predeterminado permanece compartido y nada se rechaza, pero si la base de datos ya está abierta en otra sesión de Access, el servidor lo dice en el resultado de la llamada que la abrió, nombrando las sesiones que la mantienen. El trabajo de diseño es lo que silenciosamente aterriza a medias en ese estado, y la persona más probable de apuntar el servidor a un front-end en vivo es la menos probable de saberlo. Una base de datos que otro proceso mantiene exclusivamente también se informa como un conflicto de bloqueo ahora: Access rechaza esa apertura sin un error y solía diagnosticarse como un AutoExec roto, lo que enviaba a la gente a buscar en el código de inicio un problema de bloqueo.
Notas
- Access se ejecuta visible (
Visible = True) para que el acceso COM de VBE funcione correctamente. - Una instancia de Access se comparte entre todas las llamadas de herramientas (sesión singleton). Abrir un
.accdbdiferente cierra el anterior. - Aislamiento de hilos COM: Todas las llamadas COM se ejecutan en un ejecutor dedicado de un solo hilo (
_com_executor) conCoInitialize(). Esto mantiene COM en un hilo STA mientras el bucle de eventos asyncio permanece libre para E/S stdio, evitando errores-32602por corrupción de mensajes. - Reconexión automática: si la sesión COM se vuelve obsoleta (Access se bloqueó, se cerró manualmente o corrupción COM), el servidor lo detecta mediante una verificación de salud y se reconecta automáticamente en la siguiente llamada de herramienta.
access_get_codeelimina secciones binarias (PrtMip,PrtDevMode, etc.) de las exportaciones de formularios/informes:access_set_codelas restaura automáticamente antes de importar.- Todos los números de línea de VBE son de base 1.
Limitaciones conocidas
- Controles ActiveX (tipo 119 =
acCustomControl):access_create_controlahora acepta un parámetroclass_namecon el ProgID (por ejemplo,Shell.Explorer.2) para inicializar el control OLE. Para WebBrowser específicamente, usa el tipo 128 (acWebBrowser) que crea un control nativo sin complejidad OLE. Establecerctrl.Classdesde COM puede no funcionar para todos los controles ActiveX: la inserción manual desde la cinta sigue siendo el método más confiable. access_run_vba: Ahora admite procedimientos de módulos de formulario mediante sintaxisForms.FormName.Method(acceso COM directo, el formulario debe estar abierto). También admite el parámetrotimeout: si se excede, descarta automáticamente los diálogos MsgBox/InputBox. Para una interacción más flexible con formularios, usaaccess_eval_vba.- Eventos Timer (
Form_Timer): Ahora se disparan duranteaccess_screenshotcuandowait_ms > 0: el bucle de espera bombea mensajes de Windows mediantepythoncom.PumpWaitingMessages(). Otras herramientas aún bloquean el bombeo de mensajes. access_vbe_appendanteriormente codificaba en HTML&como&debido al escape del transporte MCP. Corregido en v0.7.3 con decodificación explícita dehtml.unescape().
Solución de problemas
Errores intermitentes de -32602 Invalid request parameters
El SDK de Python de MCP (v1.26.0) tiene un except Exception de captura general en mcp/shared/session.py que se traga errores reales y devuelve un código -32602 genérico sin detalles. Se aplica un parche local a esta máquina que incluye la excepción real y el traceback en la respuesta de error. Si actualizas el paquete mcp, vuelve a aplicar el parche: consulta CLAUDE.md para más detalles.
Registro de cambios
Consulta CHANGELOG.md para el historial completo de versiones.