Access-MCP for VS Code

Give your AI agent a live connection to Microsoft Access.
Access-MCP is a purpose-built Model Context Protocol
server for Microsoft Access. This extension bundles it, registers it with VS Code's
built-in MCP client, and adds a browsable object tree — so Copilot agent mode can read
schema, run SQL, and work with VBA and forms against a live .accdb / .mdb file.
Windows + a locally installed Microsoft Access are required. There is no Mac, Linux,
cloud, or Docker version — the server automates a real copy of Access via COM.
Website · Documentation ·
Pricing · Case studies
What you get
97 tools packed into 27 smart tools — schema and object listing, SELECT and DDL/DML
execution, VBA read/write and compile, form and report design, data import/export, and
session control. Your agent loads 27 tool definitions instead of 97 — less context spent
on tool lists, fewer wrong calls and retries, fewer tokens per task. Purpose-built for
Access rather than a generic ODBC wrapper, so it understands queries, forms, reports,
macros, modules and linked tables as first-class objects.
A Connections view in the sidebar — add as many Access databases as you work with;
each one is a connection with its own name and color, and each one you open for agents
is its own MCP server. Browse Tables (with Fields and Indexes), Queries, Forms, Reports,
Macros, Modules, Linked Tables and References. Open a query's SQL or a module's VBA in a
real editor tab. Preview table and query data in a filterable grid. The tree always
opens a database read-only, so browsing never competes with your agent for Access
locks.
A safety model you control — you decide which tools the agent may call. Grant only
read tools and the agent physically cannot write. Every write is recorded in a
timestamped audit trail.
Requirements
| Requirement |
Detail |
| Windows x64 |
Published as a win32-x64 platform-specific extension. |
| Microsoft Access 2010 or later |
32-bit or 64-bit. |
| VS Code 1.101+ |
Minimum version for the MCP extension API. |
Getting started
- Install the extension and open the Access-MCP view in the Activity Bar.
- Click Sign In (no credit card needed). Your browser opens on the sign-in page; confirm the code shown in
the editor and sign in with Microsoft, Google or GitHub. The view switches to
Add Connection by itself once the sign-in is done.
- Click Add Connection and pick your
.accdb, .mdb or .adp file. It appears in
the Connections view; expand it to browse. The tree opens it read-only, with the
Access window hidden, and only when you expand one of its categories.
- Open for Agents (the plug icon on the connection, or right-click) gives your agent
an MCP server named after the file —
RamControl.accdb for RamControl.accdb. With
msAccessMcp.autoRegisterMcp on (the default), Add Connection does this for you.
Close for Agents takes the server away again.
- Add every database you need. Each one is its own connection and, once open for
agents, its own MCP server, so an agent can work with several Access files side by
side. Right-click a connection to rename it, give it a color, make it read-only for
agents, reveal the file, or remove it.
A database you selected in an earlier version is added to Connections by itself on
first start, together with every database already registered in the open folder.
Upgrading from 2.5.x. Your agent keeps its Access server:
- An entry that Register Server in mcp.json (Cursor) wrote (usually
ms-access)
started the exe inside the old extension folder, which the update deletes. The first
time the editor opens that folder (in Cursor also ~/.cursor/mcp.json), the extension
takes the entry over: it keeps its name and its --read-only, starts the stable copy
from then on, and its database is added to Connections. A message says what was
repaired. Entries the extension did not write are never touched.
- VS Code: the database selected in 2.5.x stays available to VS Code's agent in each
workspace, as before, without writing any file (set up once per workspace, on the
first 2.7.0 start there).
- Cursor without such an entry: 2.5.x gave the agent nothing there either, so no
file is written; a one-time notice offers Open for Agents on the database.
Where the MCP server is registered
| Client |
How it gets the server |
| Cursor |
.cursor/mcp.json in the open folder, written by the extension. |
| Claude Code |
.mcp.json in the open folder, written by the extension. |
| VS Code (Copilot agent) |
Natively, through the extension, for every connection open for agents. No file. |
With a folder open, both files are written whichever editor you use. The extension only
adds and removes its own entries: other servers, other keys and the file's formatting
stay as they are, and a file that is not valid JSON is never overwritten — you are asked
what to do with it. Your client may ask you once to enable or approve a new server.
Which connections are open for agents is decided per folder.
With no folder open, Cursor uses its global ~/.cursor/mcp.json. VS Code writes no file
then: Open for Agents offers the server to VS Code's own agent only, and that choice
is shared by every VS Code window without a folder.
--read-only never leaves an entry by itself. When an entry the extension manages
starts its server with --read-only (added by hand, or by an earlier version) while
the connection is writable, the extension keeps the flag and marks the connection
read-only. Only Toggle Read-only for Agents and Open for Agents write the
connection's own setting into its entries, which is how the flag is removed. Turning the
global msAccessMcp.readOnly off is such a choice too: the flag leaves every entry whose
connection is not read-only on its own.
The entries start a copy of the server kept in the extension's global storage, not the
one inside the extension folder, so they keep working after the extension updates. The
copy of every version is kept (about 114 MB each), so an entry in a folder you only open
from Claude Code keeps working too; delete old bin/<version> folders from the
extension's global storage yourself if you need the space.
Set msAccessMcp.autoRegisterMcp to false to choose per connection with Open for
Agents, or to manage these files yourself. Access-MCP: Re-sync MCP Server
Registration (mcp.json) writes the entries of every connection open for agents again.
Re-sync, Toggle Read-only for Agents and Open for Agents rewrite an entry a
connection already has in place, under its name, and add one to a project file that
lacks it. While a connection's entry is a repaired one in ~/.cursor/mcp.json, no
project entry is added next to it, so Cursor's agent never gets two servers for one
database.
One Access process per database
The object tree and every agent working on the same file share a single Microsoft
Access process, so they see the same state and never lock each other out. The process
closes by itself shortly after the last client disconnects — closing the editor does
not leave the database open. Set msAccessMcp.sharedHost to false to give each
server its own private Access instance instead.
Licensing
Access-MCP is proprietary software from A-Point Systems Ltd. Sign in once per machine
(Microsoft, Google or GitHub) to get a 14-day full trial, after which a
forever-free read-only tier remains available. Pro unlocks writes, VBA, forms and
batch operations. See pricing and the
EULA.
Settings
| Setting |
Flag |
Purpose |
msAccessMcp.databasePath |
— |
Deprecated: the database of earlier versions, added to Connections once. |
msAccessMcp.readOnly |
--read-only |
Start every agent server read-only (recommended for production). Toggle Read-only for Agents does it for one connection. |
msAccessMcp.noAutoClose |
--no-auto-close |
Keep Access open between calls. |
msAccessMcp.autoCloseTimeout |
--auto-close-timeout |
Idle minutes before auto-close. |
msAccessMcp.hidden |
--hidden |
Run the Access window hidden for the agent's server. The object tree is always hidden. |
msAccessMcp.sharedHost |
--standalone when off |
Share one Access process per database (default on). |
msAccessMcp.autoRegisterMcp |
— |
Open each added connection for agents in mcp.json (default on). |
msAccessMcp.mcpServerNameStyle |
— |
fileName (RamControl.accdb, default) or safe (RamControl-accdb). |
msAccessMcp.traces |
--traces |
Enable server-side audit traces. |
msAccessMcp.forceKillOnExit |
--force-kill-on-exit |
Force-kill Access on exit. |
msAccessMcp.extraArgs |
(raw) |
Extra arguments (advanced). |
msAccessMcp.serverPath |
— |
Use a shared server binary instead of the bundled one. |
msAccessMcp.logLevel |
— |
Verbosity of the Access-MCP output channel. |
msAccessMcp.healthCheckIntervalSeconds |
— |
How often to check Access is still running. |
msAccessMcp.connections.maxOpen |
— |
Warn once when more connections than this are open in the tree (default 5). Each runs its own Access process. |
Changing a setting rewrites the entries in mcp.json right away; an agent applies them
the next time it starts the server. Closing Access outside VS Code disconnects the tree;
it reconnects on next use.
Commands
- Sign In — sign in through the browser; needed once per Windows user. No credit card: a 14-day full trial, then a free read-only plan.
- Add Connection — pick an
.accdb, .mdb or .adp file to add to the Connections view.
- Open for Agents / Close for Agents — add the connection's MCP server to the open folder's
mcp.json files (and VS Code's agent), or remove it.
- Toggle Read-only for Agents — start this connection's agent server with
--read-only.
- Rename Connection, Set Connection Color, Refresh Connection, Reveal in File Explorer, Remove Connection
- Preview Data — open a table or query in the data grid.
- Filter Group by Name… — each group (Tables, Queries, Forms, ...) of each connection has its own filter, as in APoint-ms-sql. Click the filter icon on a group, or select a group or an object in it and press Ctrl+F, then type part of a name (case-insensitive). The group filters as you type; Enter keeps the filter and Esc restores the one it had. It shows only the matching objects and reads
filter: <text> · <shown> of <total>, and the view title shows how many groups are filtered. Object names only: fields and indexes are not searched. Clear Group Filter (the icon next to it) clears one group; Clear All Filters in the view title clears every group. Filters are kept across restarts, and a filter never opens a connection by itself: a group you have not expanded loads nothing until you expand it.
- Open Code / SQL — open VBA or query SQL in an editor.
- Refresh — reload the object lists, Fields and Indexes, which the tree keeps until then. A load that failed is tried again here, or when you expand that node again.
- Restart Server, Show Logs, Show Version
- Re-sync MCP Server Registration (mcp.json)
Troubleshooting
Run Access-MCP: Show Logs and set "msAccessMcp.logLevel": "debug" to see tool
calls, timings and errors (trace logs full payloads; credentials are masked).
Deploying to a team? See the
server install guide for
multi-user and shared-binary setups.
Also from A-Point Systems
Not affiliated with, endorsed by, or sponsored by Microsoft. Microsoft, Microsoft
Access, Visual Studio Code and their logos are trademarks of the Microsoft group of
companies. Access-MCP automates a copy of Microsoft Access that you license and install
yourself; no Microsoft software is redistributed with this extension.