Read and edit Microsoft Access databases (.accdb/.mdb) β forms, VBA, tables, queries. Windows.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Give any AI assistant full control over Microsoft Access databases.
Create forms, write VBA, design tables, manage controls, run queries, build relationships, and edit every corner of an .accdb β all through natural language. 68 tools that turn Access into something you can talk to.
No Access expertise required. Just describe what you want.
The AI handles the COM automation, design view, VBA modules, binary sections, cache invalidation, and all the ugly parts. You get the result.
access_lint_form flags objectively broken layouts (white-on-white text, overlaps, truncation, off-canvas controls). A checker, not a designer β see the note belowWorks with Claude Code, Cursor, Windsurf, Continue, or any MCP-compatible client.
File β Options β Trust Center β Trust Center Settings β Macro Settings
β check Trust access to the VBA project object model
Or run the included PowerShell script:
Global (available in all projects):
Project-only (creates .mcp.json in current directory):
Add to your MCP config file (.mcp.json, mcp.json, or client-specific settings):
Compatible with any MCP-compliant client (Cursor, Windsurf, Continue, etc.).
| Tool | Description |
|---|---|
access_create_database | Create a new empty .accdb database file |
access_close | Close the COM session and release the .accdb file |
| Tool | Description |
|---|---|
access_list_objects | List objects by type (table, module, form, report, query, macro, all). System tables filtered |
access_get_code | Export an object's full definition as text |
access_set_code | Import modified text back (creates or overwrites) |
access_export_structure | Generate a Markdown index of all modules, forms, reports, queries |
access_delete_object | Delete a module, form, report, query, or macro. Requires confirm=true |
access_create_form | Create a new form without triggering the "Save As" MsgBox that blocks COM. Optional has_header for header/footer section, record_source (bind to table/query), default_view (0=Single, 1=Continuous, 2=Datasheet, ...) |
| Tool | Description |
|---|---|
access_execute_sql | Run SQL via DAO β SELECT returns rows as JSON (limit default 500). DELETE/DROP/ALTER require confirm_destructive=true |
access_execute_batch | Execute multiple SQL statements in one call. Supports mixed SELECT/INSERT/UPDATE/DELETE with per-statement results, stop_on_error, and confirm_destructive |
access_table_info | Show table structure via DAO (fields, types, sizes, required, linked status) |
access_search_queries | Search text in the SQL of ALL queries at once (find which queries reference a table, field, or keyword) |
access_create_table | Create a table via DAO with full type, default, description and primary key support in one call. More robust than CREATE TABLE SQL |
access_alter_table | Modify table structure via DAO: add field, delete field (requires confirm=true), rename field |
| Tool | Description |
|---|---|
access_vbe_get_lines | Read a line range from a VBA module without exporting the whole file |
access_vbe_get_proc | Get a procedure's code and position by name |
access_vbe_module_info | List all procedures with their line numbers |
access_vbe_replace_lines | Replace/insert/delete lines in a VBA module directly via VBE |
access_vbe_find | Search text in ONE specific module. To search all modules at once, use access_vbe_search_all |
access_vbe_search_all | Search text across ALL modules/forms/reports in the database at once |
access_vbe_replace_proc | Replace a full procedure by name (auto-calculates line bounds). Strips misplaced Option lines, runs structural health check |
access_vbe_patch_proc | Surgical find/replace within a procedure. Atomic by default (a failed patch writes nothing), case-insensitive anchors, optional require_unique, whitespace-tolerant fallback matching + contextual error messages when patches fail. proc_name='(Declarations)' targets the declarations section |
access_vbe_append | Append code at the end of a module. Auto-strips Option Explicit/Option Compare to prevent misplacement |
| Tool | Description |
|---|---|
access_list_controls | List all controls of a form/report with key properties. Controls inside Pages/OptionGroups include a parent field |
access_get_control | Get the full definition block of a specific control (finds controls inside Pages/OptionGroups) |
access_create_control | Create a new control via COM in design view. Supports class_name for ActiveX (type 119) ProgID initialization. Use type 128 (acWebBrowser) for native WebBrowser |
access_delete_control | Delete a control via COM |
access_set_control_props | Modify control properties via COM in design view |
access_set_multiple_controls | Modify properties of multiple controls in a single design-view session |
access_lint_form | Deterministic check for objectively-broken layout: contrast (WCAG), overlap, out-of-bounds, truncation, sibling inconsistency, zero-size/invisible. Returns verdict PASS/REVIEW/FAIL. Also runs automatically on every control edit |
β οΈ A note on
access_lint_formβ manage your expectationsThis is NOT a designer and there is zero super-design here. Don't expect it to make a form look good, suggest a nice palette, or have any taste β it has none and never will.
It is a dumb, deterministic verifier of the obvious, easy-to-check stuff: is the text the same colour as its background? do two controls physically overlap? does a caption not fit its box? is something off the edge of the form, or zero pixels tall? That's it. Plain math β WCAG contrast ratios and rectangle intersection β with a pile of false-positive guards so it doesn't cry wolf.
Think seatbelt, not stylist: it won't make the car pretty, it just stops you shipping a form with white text on a white background without noticing. It runs automatically on every control edit so those obvious mistakes surface on their own. If you were hoping for a UI-design AI, this isn't it (honest PRs to make it smarter are very welcome π).
| Tool | Description |
|---|---|
access_export_text | Export form/report/module as text via SaveAsText. Does NOT open Design view. UTF-16 LE output |
access_import_text | Import form/report/module from text via LoadFromText. Replaces if exists. Auto-splits CodeBehindForm VBA |
| Tool | Description |
|---|---|
access_get_db_property | Read a DB property (CurrentDb.Properties) or Access option (GetOption) |
access_set_db_property | Set a DB property or Access option β creates the property if it doesn't exist |
access_get_form_property | Read form or report properties (RecordSource, Caption, DefaultView, etc.). object_type required (form or report). Omit property_names for all |
access_set_form_property | Set form/report properties (RecordSource, Caption, DefaultView, HasModule, etc.) via COM in Design view |
| Tool | Description |
|---|---|
access_list_linked_tables | List linked tables with source table, connection string, ODBC flag. name='X' returns one table; names_only=true is a light listing (no connect strings β use it when hundreds of links overflow the result); mask_password=true masks PWD= |
access_relink_table | Change connection string and refresh link β auto-saves credentials (dbAttachSavePWD) when UID/PWD detected. relink_all=true updates all tables with the same original connection. refresh=true re-reads the schema using the table's own connect string (no new_connect, password never dumped) |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/microsoft-access-database)<a href="https://allmcps.com/mcp/microsoft-access-database"><img src="https://allmcps.com/api/badge/microsoft-access-database?style=directory" alt="Microsoft Access Database on AllMCPs" /></a>