Microsoft Access Database
Read and edit Microsoft Access databases (.accdb/.mdb) - forms, VBA, tables, queries.
Connector by unmateria · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/unmateria-msaccess-database
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: database-access, code-generation
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 28 read · 33 write · 8 delete
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 69
Read from the source code; the running server may list different tools.
Read 28 · Look things up without changing anything.
access_eval_vbaaccess_find_definitionaccess_find_usagesaccess_get_codeaccess_get_controlaccess_get_db_propertyaccess_get_field_propertiesaccess_get_form_propertyaccess_lint_formaccess_list_controlsaccess_list_indexesaccess_list_linked_tables
Show 16 more tools
access_list_objectsaccess_list_referencesaccess_list_relationshipsaccess_list_startup_optionsaccess_screenshotaccess_search_controlsaccess_search_dataaccess_search_queriesaccess_table_infoaccess_tipsaccess_vbe_check_syntaxaccess_vbe_findaccess_vbe_get_linesaccess_vbe_get_procaccess_vbe_module_infoaccess_vbe_search_all
Write 33 · Create, change, send or run things.
access_alter_tableaccess_build_formaccess_clone_objectaccess_closeaccess_compile_vbaaccess_create_controlaccess_create_databaseaccess_create_formaccess_create_relationshipaccess_create_tableaccess_execute_batchaccess_execute_sql
Show 21 more tools
access_export_structureaccess_export_textaccess_import_textaccess_manage_tab_orderaccess_output_reportaccess_relink_tableaccess_run_macroaccess_run_vbaaccess_set_codeaccess_set_control_propsaccess_set_db_propertyaccess_set_field_propertyaccess_set_form_propertyaccess_set_multiple_controlsaccess_transfer_dataaccess_ui_clickaccess_ui_typeaccess_vbe_appendaccess_vbe_patch_procaccess_vbe_replace_linesaccess_vbe_replace_proc
Delete 8 · Delete, drop, revoke or wipe things.
access_compact_repairaccess_decompile_compactaccess_delete_controlaccess_delete_objectaccess_delete_relationshipaccess_manage_indexaccess_manage_queryaccess_manage_reference
Network hosts it talks to 2
github.com· found in codelearn.microsoft.com· found in code
Files it touches
- Any path the agent passes to its tools
Tools (69)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
access_alter_tableModifies the structure of an Access table via DAO. Actions: add_field (with type, size, default, description), delete_field (requires confirm=true), rename_field. More robust than ALTER TABLE via SQL in Jet.
access_build_formBuilds a complete, well-laid-out form from a DECLARATIVE spec — the preferred way to create data-entry forms. You describe WHAT goes on the form (a title, an ordered list of fields, a row of action buttons, single or two-column); the tool computes every Left/Top/Width/Height from a canonical 60-twip grid, applies a WCAG-safe palette (or a curated design direction via theme=despacho|panel|archivo), assigns a sane tab order and sizes the form and its header/footer sections. You never pick a coordinate. Use this instead of many access_create_control calls; fine-tune afterwards with access_set_con…
access_clone_objectClones a form, report, module, class_module, query or macro to a new name. Internally uses SaveAsText → LoadFromText, preserving binary sections (PrtMip, PrtDevMode, NameMap, GUID...) and VBA code-behind. Refuses to overwrite an existing target unless overwrite=true.
access_closeCloses the COM session and releases the .accdb/.mdb file.
access_compact_repairCompacts and repairs the database. Closes, compacts to temp, replaces original and reopens. Returns sizes.
access_compile_vbaCompiles and saves all VBA modules. A dialog watchdog always runs and dismisses any error MsgBox; the watchdog is given `timeout` seconds (default 2) of grace after the compile call returns before being stopped.
access_create_controlCreates a control on a form/report via COM. control_type: name or number (e.g.: 119=acCustomControl for ActiveX, 128=acWebBrowser native). Special props (case-insensitive): section (0=Detail,1=Header,2=Footer,3=PageHeader,4=PageFooter or name: 'detail','header','footer','reportheader','pageheader'...), parent (name of TabControl Page or OptionGroup), column_name, left, top, width, height. Pass parent='myTabPage' to drop the control inside a TabControl Page. Use control_name to rename the control after creation (or 'Name' in props). Other props that setattr() refuses are retried via the COM Pro…
access_create_databaseCreates an empty Access database (.accdb). Error if the file already exists.
access_create_formCreates a new form in the database. Avoids the 'Save As' MsgBox that blocks COM when using CreateForm() directly. Optional has_header (header/footer section), record_source (bind to table/query) and default_view (0=Single, 1=Continuous, 2=Datasheet, 3=PivotTable, 4=PivotChart, 5=Split, 6=Split datasheet).
access_create_relationshipCreates a relationship between two tables. attributes: 256=cascade update, 4096=cascade delete (combinable with OR).
access_create_tableCreates an Access table via DAO with full support: types, defaults, descriptions and primary key — all in a single call. More robust than CREATE TABLE via SQL, which does not support DEFAULT or YESNO in Jet DDL. Each field accepts: name, type, size, required, primary_key, default, description. Valid types: autonumber, long, integer, short, byte, text, memo, currency, double, single, datetime, boolean/yesno/bit, guid, ole, bigint.
access_decompile_compactRemoves orphan VBA p-code via /decompile, recompiles and compacts. Typical reduction 60-70% on heavily edited front-end files. Use when the .accdb exceeds 30-40 MB without having local tables with data.
access_delete_controlDeletes a control from a form/report via COM.
access_delete_objectDeletes an Access object (module, form, report, query, macro). Requires confirm=true.
access_delete_relationshipDeletes a relationship between tables by name. Requires confirm=true — this is irreversible.
Show 54 more tools
access_eval_vbaEvaluates a VBA/Access expression via Application.Eval. Works with: domain functions (DLookup, DCount...), built-in VBA functions (Date(), Len()...), form properties of OPEN forms (Forms!frmX.Prop), public functions in standard modules. Does NOT work with: class instances (even default/predeclared), variables, Subs. For class instances use access_run_vba with a wrapper function, or this tool will attempt an automatic fallback via a temp VBA module.
access_execute_batchExecutes multiple SQL statements in a single call. Each statement can be SELECT (returns rows, default limit 100 — adjustable via 'limit') or INSERT/UPDATE/DELETE (returns affected_rows). stop_on_error=true stops at first error. DELETE/DROP/TRUNCATE/ALTER require confirm_destructive=true.
access_execute_sqlExecutes SQL via DAO. SELECT returns JSON rows (default limit: 500). INSERT/UPDATE return affected_rows. DELETE/DROP/ALTER require confirm_destructive=true.
access_export_structureGenerates Markdown with database structure: modules with signatures, forms, reports, queries, macros. Writes to disk and returns the content.
access_export_textExports form/report/module as text (SaveAsText). Does NOT open in Design view — does not recalculate positions. File is UTF-16 LE.
access_find_definitionGo-to-definition for a VBA symbol — the mirror of access_find_usages. Scans every standard module, form code-behind and report code-behind for DECLARATIONS of `symbol` and returns where each lives (object_type, object_name, line, declaration, scope, value if constant). Detects: const, enum, enum_member, type, type_field, sub, function, property (Get/Let/Set, incl. Default Property), declare (Win32 API), and module-level variable. Handles multi-const lines (Const A=1, B=2) and joins VBA line continuations (` _` at end of line). Use this when you need the value of a constant/enum member, or the …
access_find_usagesSearches for text or regex in VBA, query SQL and control properties (ControlSource, RecordSource, RowSource, SourceObject, DefaultValue, ValidationRule, LinkChildFields, LinkMasterFields). Returns results grouped: vba_matches, query_matches, control_matches. A vba_match on a statement continued with ' _' also carries statement_line, end_line and content_full (the whole statement joined). Each control_match carries control_name, property, the full (joined) value and the line in the export. For Caption/Tag/Filter/OrderBy, other properties or a single form, use access_search_controls instead.
access_get_codeReads code/definition of an Access object. Modules: .bas code. Forms/reports: internal format (props + VBA). Macros: SaveAsText XML-like representation (Action/RunCommand blocks); pair with access_set_code to round-trip. Queries: SQL + DAO properties. For reading specific VBA procedures, prefer access_vbe_get_proc (faster, smaller output).
access_get_controlFull definition (Begin...End) of a control by name. `raw_block` is the UNABRIDGED definition exactly as Access exports it — go here when you need a property access_list_controls does not return (OnClick, StatusBarText, Format, ConditionalFormat...). Note that inside raw_block a long value is still split across quoted continuation lines, the way Access wrote it.
access_get_db_propertyReads a database property (CurrentDb.Properties) or Access option (GetOption).
access_get_field_propertiesReads all properties of a field: DefaultValue, ValidationRule, Description, Format, etc.
access_get_form_propertyReads properties of a form or report (RecordSource, Caption, DefaultView, HasModule, etc.). object_type ('form' or 'report') is required. If property_names is omitted, returns all readable properties. Pass 'section' to read a section's properties instead.
access_import_textImports form/report/module from text (LoadFromText). REPLACES if exists. Does NOT open in Design view — does not recalculate positions. For forms/reports with CodeBehindForm: separates VBA automatically and injects via VBE (same as access_set_code).
access_lint_formNOT a designer and NOT aesthetics — expect zero 'good design' from this. It is a deterministic checker of the OBVIOUS, mechanically-verifiable stuff only (a seatbelt, not a stylist). Returns structured JSON violations the agent should fix BEFORE declaring a layout done: contrast (WCAG white-on-white etc.), overlap, out-of-bounds, text truncation, sibling inconsistency, misalignment, zero-size/invisible. summary.verdict is PASS / REVIEW / FAIL. Static (one export, no Design view). measure='auto' tries Access WizHook for exact text width and falls back to a heuristic. The same engine runs automa…
access_list_controlsLists controls of a form/report with name, type, caption, control_source, position. Long property values that Access splits across several quoted lines in the export are returned joined, so control_source/caption are always the WHOLE value. Use `fields` to keep only the keys you need (e.g. ["name","control_source"]) — a 60-control form is mostly geometry. For a property this tool does not return, read the control's raw_block with access_get_control.
access_list_indexesLists indexes of a table: name, fields, primary, unique, foreign.
access_list_linked_tablesLists linked tables with source_table, connect_string, is_odbc. name='X' returns only that table (exact, case-insensitive); names_only=true gives a light listing without connect strings (use it when there are hundreds of links and the full dump overflows); mask_password=true masks PWD=... in the returned connect strings.
access_list_objectsLists database objects by type (table, module, form, report, query, macro, all). System tables (MSys*, ~*) are filtered out. Macros are fully supported as a regular object_type — combine with access_get_code / access_set_code / access_run_macro for end-to-end macro workflows.
access_list_referencesLists VBA references: name, GUID, path, is_broken, built_in.
access_list_relationshipsLists relationships between tables: name, tables, fields, cascade flags.
access_list_startup_optionsLists the 14 common startup options with their current values.
access_manage_indexCreates or deletes an index. create requires fields [{name, order?}]. primary/unique optional.
access_manage_queryManages QueryDefs: create, modify, delete (requires confirm=true), rename, get_sql. create/modify require sql.
access_manage_referenceAdds (add) or removes (remove) a VBA reference. add: requires guid or path. remove: requires name.
access_manage_tab_orderReads or sets the TabIndex of controls on a form/report. Actions: 'get' (returns controls grouped by section, ordered by TabIndex), 'set' (assigns TabIndex 0..N-1 in the order of `tab_order`), 'auto_renumber' (re-sequences current TabIndex values to be contiguous 0..N-1 — useful after deleting controls). Skips controls that don't support TabIndex (Label, Line, Rectangle, Image, PageBreak).
access_output_reportExports a report to PDF, XLSX, RTF or TXT. output_path auto-generated if omitted. Refuses to overwrite an existing file unless overwrite=true.
access_relink_tableChanges the connect string of a linked table and refreshes. 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 needed, password never dumped) — use after an ALTER TABLE on the server. Note: LoginTimeout=8 is injected into new_connect so a bad string fails fast instead of hanging on a modal login dialog, so the returned new_connect differs from the one you sent.
access_run_macroExecutes an Access macro by name.
access_run_vbaExecutes a VBA Sub/Function. Supports 3 syntaxes: 'Module.MySub' (standard module via Application.Run), 'MySub' (same), 'Forms.FormName.Method' (form module via COM — form must be open). Returns result if Function. With timeout, automatically dismisses MsgBox/InputBox if exceeded.
access_screenshotCaptures the Access window as PNG. Optionally opens a form/report before capturing. Returns path, dimensions and metadata. wait_ms pumps Windows messages (Timer events, ActiveX init).
access_search_controlsSearches text or regex in the control properties of every form/report (ControlSource, RowSource, DefaultValue, ValidationRule, SourceObject, LinkChild/MasterFields, Caption, Filter, OrderBy, Tag by default; properties=["all"] searches every property of the block, e.g. OnClick or StatusBarText). Values split across continuation lines in the export are joined BEFORE matching, so a term that falls across the split is still found. Each hit carries the owning control, the property, the full value and the line in the export (use access_get_code to read around it). Form/report-level properties come b…
access_search_dataSearches a text string in any Text/Memo field of any LOCAL table. Skips system tables (MSys*, ~*) and linked tables. Returns matches grouped by table with an excerpt around each hit. Use `tables` to restrict the scan to a list of table names. Jet LIKE is case-insensitive by default; pass match_case=true to filter the result set further. Results are capped per-table and total.
access_search_queriesSearches for text or regex in the SQL of ALL queries. Returns [{query_name, sql}].
access_set_codeImports code into the database. Overwrites if exists, creates if not. Call access_get_code first to read the original. For forms/reports: supports CodeBehindForm/CodeBehindReport (VBA is injected via VBE). For object_type='macro': accepts the SaveAsText representation (round-trip with access_get_code). For object_type='class_module': creates a VBA class module (adds VERSION 1.0 CLASS header automatically if missing). Automatic backup and restore on import failure.
access_set_control_propsModifies properties of a control via COM. Numeric/boolean values are converted automatically.
access_set_db_propertySets a database property or Access option. Creates the property if it does not exist.
access_set_field_propertySets a field property. Creates the property if it does not exist.
access_set_form_propertySets form/report-level properties (RecordSource, Caption, DefaultView, HasModule, etc.) via COM in Design view. Pass 'section' to set properties of a section instead (BackColor, Height, Visible, ...).
access_set_multiple_controlsModifies properties of multiple controls on a form/report in a single operation. Opens in Design view once, applies changes, saves and closes.
access_table_infoTable structure via DAO: fields, types, size, required, record_count, is_linked.
access_tipsTips and gotchas for working with Access via MCP. Topics: eval, controls, gotchas, sql, vbe, compile, design_vbe, macros, lint, layout, design, subform_tabcontrol. Without topic returns the list.
access_transfer_dataImport/export data between Access and Excel/CSV. file_type: xlsx or csv. range only for Excel, spec_name only for CSV.
access_ui_clickClick at image coordinates on the Access window. Coordinates are relative to a previous screenshot (image_width required for scaling).
access_ui_typeTypes text or sends keyboard shortcuts to the Access window. Use 'text' for normal text, 'key' for special keys (enter, tab, escape, f1-f12, etc.), 'modifiers' for combinations (ctrl, shift, alt).
access_vbe_appendAppends code to the end of a VBA module.
access_vbe_check_syntaxStatic structural check of the ALREADY OPEN VBA project — the safe alternative to access_compile_vba, which decompiles first and can discard unsaved VBA. Detects unbalanced If/For/Do/While/Select/With/Type/Enum blocks, code outside a procedure and misplaced Option statements. It is NOT a compiler: it does not resolve identifiers, types or references, so ok=true does not prove the project compiles.
access_vbe_findSearches for text or regex in ONE specific VBA module. Returns matches [{line, content, proc}]. Each match includes 'proc' (procedure name). Optional: proc_name to limit search to a single procedure. When the matched line belongs to a statement continued with ' _', the match also carries statement_line, end_line and content_full (the whole statement joined, trailing comments removed) — 'content' alone is only the matched PHYSICAL line, so read content_full before judging a wrapped statement (an API Declare's return type lives on its last continuation line). To search ALL modules/forms/reports …
access_vbe_get_linesReads a range of lines from a VBA module via VBE COM. Provide either count or end_line (not both).
access_vbe_get_procCode of a VBA procedure by name. Returns start_line, body_line, count, code. start_line = VBE proc start, which INCLUDES the blank separator / comment lines above the proc (use it for whole-proc operations). body_line = the Sub/Function/Property declaration line itself (use it for line-range edits of the body).
access_vbe_module_infoIndex of procedures in a VBA module: total_lines, procs [{name, start_line, body_line, count}]. start_line = VBE proc start (INCLUDES preceding blank/comment lines); body_line = the Sub/Function/Property declaration line.
access_vbe_patch_procSurgical find/replace WITHIN a VBA procedure. More efficient than replace_proc when only a few lines change in a large proc. patches: [{find, replace}]. ATOMIC BY DEFAULT (atomic=true): if any patch fails to match, nothing is written and you must re-send the WHOLE batch. Anchors are matched case-insensitively by default (match_case=false), because VBA is case-insensitive and the VBE rewrites casing on its own. proc_name='(Declarations)' targets the module declarations section.
access_vbe_replace_linesReplaces lines in a VBA module via VBE. count=0: insertion. new_code='': deletion. Validates bounds automatically. Pass new code as new_code (a string) OR new_lines (a list of strings, joined with newlines — '' entries become blank lines). Batch mode: pass 'operations' (list of {start_line, count, new_code|new_lines}) to execute multiple operations in 1 call (auto-sorted bottom-to-top).
access_vbe_replace_procReplaces an entire VBA procedure by name (boundaries found via VBE). Preserves the blank separator line above the proc. new_code='' DELETES the proc (and its leading blank separator) — this is the supported way to delete a procedure.
access_vbe_search_allSearches for text or regex in ALL VBA modules (modules, forms, reports) in the database. When a matched line belongs to a statement continued with ' _', the match also carries statement_line, end_line and content_full (the whole statement joined, trailing comments removed) — 'content' alone is only the matched PHYSICAL line, so read content_full before judging a wrapped statement (an API Declare's return type lives on its last continuation line).
Signals
- Stars
- 58
- Forks
- 16
- Open issues
- 0
- Contributors
- 3
- Weekly downloads
- 141
- Last commit
- Oct 10, 2026 (18 days ago)
- Last release
- Oct 8, 2026 (20 days ago)
- Last package publish
- Oct 8, 2026 (20 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.unmateria/msaccess-database- Version
- 0.7.64
- Auth
- No auth
- Packages
- pypi mcp-msaccess-database
- License
- MIT
- Repository
- github.com/unmateria/MCP-Access
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from unmateria
Cite this page
Microsoft Access Database MCP server. Agent Mart. https://agentmart.dev/connectors/unmateria-msaccess-database (last updated 2026-10-24)