Microsoft Access Database について
Microsoft Access Database は、AI アシスタントから Access データベース(.accdb/.mdb)のフォーム、VBA、テーブル、クエリを読み取り・編集できるMCP サーバーです。自然言語で Access データベースを操作したいユーザー向けで、Windows のみに対応しています。
主な機能
- 01フォームとレポートの作成、複製、インポート・エクスポート、スクリーンショット
- 02VBA プロシージャの読み取り、置換、コンパイル、実行
- 03コントロールの作成、変更、一覧表示、タブ順の設定
- 04DAO によるテーブル作成と全文検索を含むテーブル・SQL 操作
- 05リレーションシップ、インデックス、参照、クエリ、マクロの CRUD
- 06データベースの圧縮・修復、逆コンパイル、レイアウト検査
活用シーン
- 01テキストの説明からフォームと VBA イベントハンドラーを作成
- 02全モジュールにまたがる VBA コードの検索と修正
- 03逆コンパイルと圧縮による肥大化した Access データベースの縮小
MCP 対応
本プロジェクトは MCP サーバーであり、Access データベースのオブジェクト、VBA コード、コントロール、保守作業を操作するための 69 のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-access
あらゆる AI アシスタントから Microsoft Access データベースを完全に操作できます。
フォームの作成、VBA の記述、テーブルの設計、コントロールの管理、クエリの実行、リレーションシップの構築、.accdb のあらゆる部分の編集を、すべて自然言語で行えます。Access を「話しかけて操作できる」ようにする 69 個のツールです。
Access の専門知識は必要ありません。やりたいことを説明するだけです。
"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"
COM オートメーション、デザインビュー、VBA モジュール、バイナリセクション、キャッシュの無効化など、面倒な処理はすべて AI が担当します。必要な結果だけを得られます。
できること
- フォームとレポート — 作成、複製、エクスポート、インポート、スクリーンショットの撮影、クリック、入力。UI オートメーションの全工程に対応
- VBA — プロシージャの読み取り、書き込み、置換、コンパイル、実行。行単位またはプロシージャ全体の編集
- コントロール — 作成、削除、変更、一覧表示、タブ順の設定。TabControl のページ内にネストされたコントロールも検出
- テーブルと SQL — DAO による作成、変更、クエリ、バッチ実行、すべての Text/Memo フィールドを対象とした全文検索。リンクされた ODBC テーブルにも対応
- リレーションシップ、インデックス、参照設定、クエリ、マクロ — CRUD 全般に対応。VBA とバイナリセクションを保持したまま、任意のオブジェクト(フォーム/レポート/モジュール/クラス/クエリ/マクロ)を複製
- メンテナンス — 最適化と修復、肥大化したデータベースの逆コンパイル、構造ドキュメントのエクスポート。Office のインストール先を自動検出(Office 16 のパスをハードコードする必要はありません)
- UI リント —
access_lint_formは、客観的に問題のあるレイアウト(白地に白文字、重なり、テキストの切り詰め、キャンバス外のコントロール)を検出します。デザイナーではなくチェッカーです。下記の注記をご覧ください
Claude Code、Cursor、Windsurf、Continue、または MCP 対応クライアントで動作します。
要件
- Windows(COM オートメーションは Windows 専用です)
- Microsoft Access がインストールされていること(VBE に対応する任意のバージョン、2010 以降)
- Python 3.10+
- Access のトラストセンターで 「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」 が有効になっていること
インストール
pip install "mcp>=1.0.0,<2" pywin32 pillow
VBA オブジェクトモデルへのアクセスを有効にする
ファイル → オプション → トラスト センター → トラスト センターの設定 → マクロの設定
→ VBA プロジェクト オブジェクト モデルへのアクセスを信頼するにチェックを入れます
または、付属の PowerShell スクリプトを実行します。
.\enable_vba_trust.ps1
Claude Code に登録する
グローバル(すべてのプロジェクトで利用可能):
claude mcp add access -- python C:\path\to\access_mcp_server.py
プロジェクトのみ(現在のディレクトリに .mcp.json を作成):
claude mcp add --scope project access -- python C:\path\to\access_mcp_server.py
その他の MCP クライアントに登録する
MCP 設定ファイル(.mcp.json、mcp.json、またはクライアント固有の設定ファイル)に追加します。
{
"mcpServers": {
"access": {
"type": "stdio",
"command": "python",
"args": ["C:\\path\\to\\access_mcp_server.py"]
}
}
}
あらゆる MCP 準拠クライアント(Cursor、Windsurf、Continue など)と互換性があります。
ツール(69 個)
データベース
| ツール | 説明 |
|---|---|
access_create_database | 新しい空の .accdb データベースファイルを作成 |
access_close | COM セッションを終了し、.accdb ファイルを解放 |
データベースオブジェクト
| ツール | 説明 |
|---|---|
access_list_objects | 種類別にオブジェクトを一覧表示(table、module、form、report、query、macro、all)。システムテーブルは除外 |
access_get_code | オブジェクトの定義全体をテキストとしてエクスポート |
access_set_code | 変更したテキストをインポート(新規作成または上書き) |
access_export_structure | すべてのモジュール、フォーム、レポート、クエリの Markdown インデックスを生成 |
access_delete_object | モジュール、フォーム、レポート、クエリ、またはマクロを削除。confirm=true が必要 |
access_create_form | COM をブロックする「名前を付けて保存」MsgBox を表示せずに新しいフォームを作成。ヘッダー/フッターセクション用の has_header、(テーブル/クエリにバインドする)record_source、default_view(0=単票、1=帳票、2=データシート、...)を指定可能 |
SQL とテーブル
| ツール | 説明 |
|---|---|
access_execute_sql | DAO 経由で SQL を実行します。SELECT は行を JSON として返します(limit のデフォルトは 500)。DELETE/DROP/ALTER には confirm_destructive=true が必要です |
access_execute_batch | 1 回の呼び出しで複数の SQL ステートメントを実行します。SELECT/INSERT/UPDATE/DELETE の混在に対応し、ステートメントごとの結果、stop_on_error、confirm_destructive をサポートします |
access_table_info | DAO 経由でテーブル構造(フィールド、型、サイズ、必須、リンク状態)を表示します |
access_search_queries | すべてのクエリの SQL を一括で検索します(どのクエリがテーブル、フィールド、キーワードを参照しているかを特定します) |
access_create_table | DAO 経由でテーブルを作成します。型、デフォルト値、説明、主キーを 1 回の呼び出しで指定できます。CREATE TABLE SQL よりも堅牢です |
access_alter_table | DAO 経由でテーブル構造を変更します。フィールドの追加、フィールドの削除(confirm=true が必要)、フィールド名の変更に対応します |
VBE の行単位編集
| ツール | 説明 |
|---|---|
access_vbe_get_lines | ファイル全体をエクスポートせずに、VBA モジュールの行範囲を読み取ります |
access_vbe_get_proc | 名前を指定してプロシージャのコードと位置を取得します |
access_vbe_module_info | すべてのプロシージャと行番号を一覧表示します |
access_vbe_replace_lines | VBE 経由で VBA モジュールの行を直接置換/挿入/削除します |
access_vbe_find | 特定の 1 つのモジュール内のテキストを検索します。 _ で折り返されたステートメントがヒットした場合、結合後のステートメント全体も返します。すべてのモジュールを一括検索するには、access_vbe_search_all を使用してください |
access_vbe_search_all | データベース内のすべてのモジュール/フォーム/レポートからテキストを一括検索します。 _ で折り返されたステートメントがヒットした場合、結合後のステートメント全体も返します。省略可能な context_lines(0~10)を指定すると、各ヒットの周辺コードも返します |
access_vbe_replace_proc | 名前を指定してプロシージャ全体を置換します(行範囲を自動計算)。不適切な位置にある Option 行を取り除き、構造の健全性を確認します |
access_vbe_patch_proc | プロシージャ内で対象を絞って検索・置換します。デフォルトではアトミックです(パッチに失敗した場合、何も書き込みません)。大文字小文字を区別しないアンカー、省略可能な require_unique、空白を許容するフォールバック照合、パッチ失敗時のコンテキスト付きエラーメッセージに対応します。proc_name='(Declarations)' は宣言セクションを対象にします |
access_vbe_append | モジュールの末尾にコードを追加します。不適切な位置への配置を防ぐため、Option Explicit/Option Compare を自動的に取り除きます |
フォームとレポートのコントロール
| ツール | 説明 |
|---|---|
access_list_controls | フォーム/レポートのすべてのコントロールと主要なプロパティを一覧表示します。エクスポート時に複数行に分割された長い値は、結合して返されます。Pages/OptionGroups 内のコントロールには parent フィールドが含まれます。任意の fields を指定すると、要求したキーのみが保持されます |
access_get_control | 特定のコントロールの定義ブロック全体を省略せずに取得します。access_list_controls が返さないプロパティを確認する場合に使用します(Pages/OptionGroups 内のコントロールも検索します) |
access_search_controls | すべてのフォーム/レポートのコントロールプロパティ(ControlSource、RowSource、Caption、Tag、Filter…または properties=["all"])からテキストまたは正規表現を検索します。一致判定の前に、継続行に分割された値を結合します |
access_create_control | デザインビューで COM を使用して新しいコントロールを作成します。ActiveX(タイプ 119)の ProgID 初期化では class_name をサポートします。ネイティブ WebBrowser にはタイプ 128(acWebBrowser)を使用します |
access_delete_control | COM を使用してコントロールを削除します |
access_set_control_props | デザインビューで COM を使用してコントロールのプロパティを変更します |
access_set_multiple_controls | 1 回のデザインビューセッションで複数のコントロールのプロパティを変更します |
access_lint_form | 客観的に問題のあるレイアウトを決定論的にチェックします:コントラスト(WCAG)、重なり、範囲外、テキストの切り詰め、同じ階層内での不整合、サイズがゼロまたは不可視の状態を確認します。verdict として PASS/REVIEW/FAIL を返します。また、コントロールを編集するたびに自動実行されます |
⚠️
access_lint_formに関する注意 — 期待しすぎないでくださいこれはデザイナーではなく、優れたデザイン機能も一切ありません。 フォームを 見栄えよく したり、素敵な配色を提案したり、センスを発揮したりすることは期待しないでください。そうした機能はありませんし、今後もありません。
明らかで、簡単に確認できることを検証する、単純で決定論的なツールです。文字と背景が同じ色になっていないか、2 つのコントロールが物理的に重なっていないか、キャプションが枠に収まっているか、フォームの端からはみ出したり高さが 0 ピクセルになったりしていないか、を確認します。それだけです。WCAG コントラスト比や長方形の交差判定といった単純な計算に、誤検知を防ぐためのガードを多数加えたものです。
スタイリストではなくシートベルトと考えてください。車の見栄えをよくするのではなく、白い背景に白い文字を使ったフォームを気付かずに公開してしまうのを防ぐだけです。コントロールを編集するたびに自動実行されるため、こうした明らかなミスが自動的に見つかります。UI デザイン AI を期待していた方には、これは違います(より賢くするための率直な PR は大歓迎です 😄)。
テキストのエクスポート/インポート
| ツール | 説明 |
|---|---|
access_export_text | SaveAsText を使用して、フォーム/レポート/モジュールをテキストとしてエクスポートします。デザインビューは開きません。出力は UTF-16 LE です |
access_import_text | LoadFromText を使用して、テキストからフォーム/レポート/モジュールをインポートします。既存の場合は置き換えます。CodeBehindForm VBA は自動的に分割されます |
データベースのプロパティ
| ツール | 説明 |
|---|---|
access_get_db_property | DB プロパティ(CurrentDb.Properties)または Access オプション(GetOption)を読み取ります |
access_set_db_property | DB プロパティまたは Access オプションを設定します。プロパティが存在しない場合は作成します |
access_get_form_property | フォームまたはレポートのプロパティ(RecordSource、Caption、DefaultView など)を読み取ります。object_type(form または report)は必須です。すべてのプロパティを取得する場合は property_names を省略します。section を指定するとセクションを読み取ります |
access_set_form_property | デザインビューで COM を使用してフォーム/レポートのプロパティ(RecordSource、Caption、DefaultView、HasModule など)を設定します。section(Detail、FormHeader、0~8…)を指定すると、BackColor、Height、Visible などのセクションプロパティを対象にします |
リンクテーブル
| ツール | 説明 |
|---|---|
access_list_linked_tables | リンクテーブルを、ソーステーブル、接続文字列、ODBC フラグとともに一覧表示します。name='X' を指定するとそのテーブルのみを返します。names_only=true は簡易一覧を返します(接続文字列は含まれません。リンクが数百件あり、結果があふれる場合に使用してください)。mask_password=true は PWD= をマスクします |
access_relink_table | 接続文字列を変更してリンクを更新します。UID/PWD が検出されると、資格情報を自動的に保存します(dbAttachSavePWD)。relink_all=true は、同じ元の接続を持つすべてのテーブルを更新します。refresh=true は、テーブル固有の接続文字列を使用してスキーマを再読み込みします(new_connect は使用せず、パスワードも出力されません) |
リレーションシップ
| ツール | 説明 |
|---|---|
access_list_relationships | フィールドの対応関係とカスケードフラグとともに、テーブル間のリレーションシップを一覧表示します |
access_create_relationship | 2 つのテーブル間にリレーションシップを作成します(カスケード更新/削除に対応) |
access_delete_relationship | 名前を指定してリレーションシップを削除します |
VBA 参照
| ツール | 説明 |
|---|---|
access_list_references | GUID、パス、破損/組み込みの状態とともに、VBA プロジェクトの参照を一覧表示します |
access_manage_reference | GUID またはファイルパスを指定して VBA 参照を追加または削除します。組み込み参照の削除は防止されます |
メンテナンス
| ツール | 説明 |
|---|---|
access_compact_repair | データベースを最適化して修復します。データベースを閉じ、一時ファイルに最適化し、アトミックに置き換えてから再度開きます |
access_decompile_compact | /decompile を使って孤立した VBA p-code を削除し、再コンパイルしてから最適化します。頻繁に編集されたフロントエンドデータベースでは、通常 60~70% 縮小します。データのない .accdb が 30~40 MB を超える場合に使用してください |
クエリ管理
| ツール | 説明 |
|---|---|
access_manage_query | QueryDef の作成、変更、削除、名前変更、または SQL の読み取りを行います。削除には confirm=true が必要です |
インデックス
| ツール | 説明 |
|---|---|
access_list_indexes | フィールド、主キー、一意、外部キーの各フラグとともに、テーブルのインデックスを一覧表示します |
access_manage_index | インデックスを作成または削除します。作成には、任意の並べ替え順を指定できるフィールドリストが必要です |
VBA コンパイル
| ツール | 説明 |
|---|---|
access_vbe_check_syntax | すでに開いている VBA プロジェクトを静的に構造チェックします。デコンパイルは行われず、何も破棄されません。編集後の安全なチェックです。コンパイラーではないため、識別子、型、参照は解決しません |
access_compile_vba | すべての VBA モジュールをコンパイルして保存します。エラー MsgBox を自動で閉じるための timeout を任意で指定できます。最初にデコンパイルするため、未保存の VBA が破棄される可能性があります。簡易チェックには access_vbe_check_syntax を使用してください |
VBA とマクロの実行
⚠️ デフォルトでは無効です(v0.7.51)。 これら 3 つのツールは任意のコードを実行するため、
MCP_ACCESS_ALLOW_CODE_EXEC環境変数による制限が設けられています。有効にするには セキュリティを参照してください。
| ツール | 説明 |
|---|---|
access_run_macro | 名前を指定して Access マクロを実行します |
access_run_vba | VBA の Sub/Function を実行します。標準モジュールでは Application.Run、フォームモジュールでは Forms.FormName.Method 構文(COM)を使用します。timeout を指定すると、MsgBox/InputBox を自動で閉じます |
access_eval_vba | Application.Eval を介して VBA 式を評価します。ドメイン関数、VBA 組み込み関数、開いているフォームのプロパティ、標準モジュール関数に対応します。クラスインスタンスや、Eval で解決できないその他の式は、一時モジュールを介して自動的にフォールバックします |
エクスポート
| ツール | 説明 |
|---|---|
access_output_report | DoCmd.OutputTo を介して、レポートを PDF、XLSX、RTF、または TXT にエクスポートします |
データ転送
| ツール | 説明 |
|---|---|
access_transfer_data | Access と Excel(.xlsx)または CSV の間でデータをインポート/エクスポートします。範囲(Excel)と spec_name(CSV)に対応しています |
フィールドのプロパティ
| ツール | 説明 |
|---|---|
access_get_field_properties | テーブルフィールドのすべてのプロパティ(DefaultValue、ValidationRule、Description、Format など)を読み取ります |
access_set_field_property | フィールドのプロパティを設定します。存在しない場合は作成します |
起動オプション
| ツール | 説明 |
|---|---|
access_list_startup_options | 現在の値とともに、一般的な起動オプション14項目(AppTitle、StartupForm、AllowBypassKey など)を一覧表示します |
スクリーンショットとUI自動化
| ツール | 説明 |
|---|---|
access_screenshot | AccessウィンドウをPNGとしてキャプチャします。必要に応じて、最初にフォームまたはレポートを開きます。パス、寸法(元画像と画像)、メタデータを返します。max_width(デフォルト1920)、wait_ms(Windowsメッセージを処理し、Timerイベントを発火させてActiveXを初期化します)、open_timeout_sec(デフォルト30。低速なクエリでForm_Loadが停止した場合、キャンセルするためにESCを送信します)を設定できます |
access_ui_click | Accessウィンドウの画像上の座標をクリックします。座標は以前のスクリーンショットを基準とします(スケーリングにはimage_widthが必要です)。left、double、rightクリックに対応しています |
access_ui_type | テキストを入力するか、キーボードショートカットを送信します。通常の文字にはtext(WM_CHAR)、特殊キーにはkey(enter、tab、escape、f1-f12、矢印など)、キーの組み合わせにはmodifiers(ctrl、shift、alt)を使用します |
相互参照
| ツール | 説明 |
|---|---|
access_find_usages | 1回の呼び出しで、VBAコード、クエリSQL、コントロールのプロパティ(ControlSource、RecordSource、RowSource、SourceObject、DefaultValue、ValidationRule、LinkChildFields、LinkMasterFields)を対象に名前を検索します。各コントロールの検索結果には、所有するコントロール、値全体、その行が含まれます |
ナレッジベース
| ツール | 説明 |
|---|---|
access_tips | 必要に応じてヒントや注意点を取得します。トピック:eval、controls、gotchas、sql、vbe、compile、design。呼び出すまではトークンを消費しません |
代表的なワークフロー
対象を絞ったVBA編集(推奨)
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
オブジェクト全体の置き換え(フォーム、レポート、モジュール)
1. access_get_code → export to text
2. (edit the text)
3. access_set_code → reimport — binary sections are restored automatically
新しいフォームの作成
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]"})
スクリーンショットとUI操作
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
セキュリティ
これはローカルのstdioサーバーであり、ネットワークに公開されないため、設計上ログイン機能はありません。脅威モデルの詳細についてはSECURITY.mdを参照してください。主なリスクはプロンプトインジェクションです。エージェントが(db_pathや、データベースから読み取った内容を介して)だまされ、コード実行ツールを呼び出す可能性があります。
コード実行はデフォルトで無効です(v0.7.51)。 任意のVBA/Shellを実行する3つのツール、access_run_vba、access_eval_vba、access_run_macroは非表示になっており、環境変数でオプトインしない限り拒否されます。再度有効にするには、このサーバーのMCPクライアント設定のenvに環境変数を追加し、再起動してください。
"env": { "MCP_ACCESS_ALLOW_CODE_EXEC": "1" }
有効にすると、任意のOSコマンドを実行できるようになります。サーバーの接続先には信頼できるデータベースのみを指定してください。詳細および問題の報告方法についてはSECURITY.mdを参照してください。
環境変数
3 つすべてサーバープロセスから読み込まれるため、MCP クライアントの設定の env ブロックに記述し、再起動後に有効になります。
| 変数 | デフォルト | 効果 |
|---|---|---|
MCP_ACCESS_ALLOW_CODE_EXEC | オフ | 1/true/yes/on に設定すると、access_run_vba、access_eval_vba、access_run_macro が有効になります。フェイルクローズです。それ以外の値では無効のままです。 |
MCP_ACCESS_SHIFT_BYPASS | オン | 0/false/no/off に設定すると、OpenCurrentDatabase と /decompile の実行中に SHIFT キーを押し続けなくなります。フェイルオープンです。それ以外の値ではバイパスが有効のままです。 |
MCP_ACCESS_EXCLUSIVE | オフ | 1/true/yes/on に設定すると、セッションのデータベースを排他モードで開きます。フェイルクローズです。それ以外の値では共有モードのままです。 |
SHIFT バイパスについて(v0.7.53)。 SHIFT キーを押し続けることで、サーバーはデータベースの AutoExec マクロと起動フォームをスキップします。ただし、キーを押す操作は OS のグローバルイベントであり、Access に限定されません。そのため、キーを押している間はマシン上のどこで入力しても大文字になります(データベースを切り替えるたびに約 0.3 秒、逆コンパイルするたびに約 3 秒)。これが気になり、データベース側で起動処理を保護している場合は、バイパスをオフにしてください。こちらのほうがすっきりした解決策であり、データベース側で対応すべきことです。
If Not Application.UserControl Then
Exit Function
End If
Access が COM 経由で起動された場合、Application.UserControl は False になるため、データベースは自動化中に自動的にバイパスを無効にでき、そもそもバイパスは不要です。バイパスをオフにしても、AutomationSecurity とダイアログ監視機能は引き続き適用されます。ただし、保護されていない AutoExec マクロオブジェクトは実行されます。
排他モードで開く場合について(v0.7.55)。 共有モードで開いた場合(これがデフォルトであり、このバージョンより前はすべて共有モードでした)、デザインロックを取得できません。SaveAsText/LoadFromText によるデータマクロのアタッチや、DoCmd.OpenTable acViewDesign を経由する処理は、別の Access セッションで開かれているテーブルに対して拒否されます。処理は停止せず、テーブルごとに続行されます。処理は完了して成功と報告されますが、変更は何も反映されません。このスイッチをオンにすると、データベースを開いた時点で単一のエラーとして表面化します。
デフォルトでオフなのは、排他モードが文字どおり排他だからです。セッションはツールの呼び出しの間もデータベースを保持するため、サーバーの接続中はほかの誰もデータベースを開けません。ビルド環境や開発用マシンには適していますが、共有フロントエンドには適しません。access_close を使うと、サーバーを停止せずにデータベースを解放できます。
このスイッチはモードをそのまま信頼するのではなく、モードの確認も行います。Access は Exclusive:=True を要求として扱います。ファイルがすでに使用中の場合、何も通知せず共有モードで開き、ほかのユーザーが排他モードでファイルを使用中の場合は何もエラーを発生させず、セッションにデータベースが開かれないままになります。そのため、サーバーは開く前にロックファイルを確認し(セッションに触れることなく拒否します)、開いた後にも再確認します(Access が排他モードから切り替えていた場合はデータベースを閉じます)。また、ロックを保持しているセッション名をエラーに表示します。Access のクラッシュ後に残った古いロックファイルを、稼働中のロックファイルと誤認することはありません。このスイッチがオンの場合、サーバーはすでに実行中の Access インスタンスへの接続も停止します。そのインスタンスではファイルが共有モードで保持されるためです。
スイッチがオフでも、状況は通知されます(v0.7.56)。 デフォルトは引き続き共有モードで、処理が拒否されることはありません。ただし、データベースが別の Access セッションですでに開かれている場合、サーバーはそれを開いた呼び出しの結果にその旨を記載し、ロックを保持しているセッション名を表示します。この状態ではデザイン作業が気づかれないまま一部だけ反映されます。稼働中のフロントエンドをサーバーに指定する可能性が最も高い人は、そのことを知らない可能性も最も高い人です。また、別のプロセスがデータベースを排他モードで保持している場合も、ロック競合として報告されるようになりました。Access はエラーを表示せずにそのデータベースを開くことを拒否します。以前は AutoExec の不具合と診断されていたため、ロックの問題を解決するために起動コードを調べる人がいました。
注意事項
- VBE の COM アクセスが正しく動作するよう、Access は可視状態(
Visible = True)で実行されます。 - すべてのツール呼び出しで Access のインスタンスが 1 つ共有されます(シングルトンセッション)。別の
.accdbを開くと、前のファイルは閉じられます。 - COM スレッドの分離:すべての COM 呼び出しは、
CoInitialize()を実行する専用のシングルスレッドエグゼキューター(_com_executor)で実行されます。これにより、COM は 1 つの STA スレッド内で動作し、非同期イベントループは標準入出力の I/O を処理できるため、メッセージ破損による-32602エラーを防止できます。 - 自動再接続:COM セッションが古くなった場合(Access のクラッシュ、手動での終了、COM の破損など)、サーバーはヘルスチェックで検出し、次のツール呼び出し時に自動的に再接続します。
access_get_codeは、フォーム/レポートのエクスポートからバイナリセクション(PrtMip、PrtDevModeなど)を除去します。インポート前にaccess_set_codeが自動的に復元します。- VBE の行番号はすべて 1 から始まります。
既知の制限事項
- ActiveX コントロール(型 119 =
acCustomControl):access_create_controlは、OLE コントロールを初期化するための ProgID(例:Shell.Explorer.2)を指定するclass_nameパラメーターを受け付けるようになりました。WebBrowser には、OLE の複雑さを伴わずにネイティブコントロールを作成する型 128(acWebBrowser)を使用してください。COM からctrl.Classを設定できない ActiveX コントロールもあります。引き続き、リボンから手動で挿入する方法が最も確実です。 access_run_vba:Forms.FormName.Method構文によるフォームモジュールのプロシージャに対応しました(COM に直接アクセスするため、フォームを開いておく必要があります)。また、timeoutパラメーターにも対応しており、タイムアウトを超えると MsgBox/InputBox ダイアログを自動的に閉じます。フォームをより柔軟に操作するには、access_eval_vbaを使用してください。- タイマーイベント(
Form_Timer):wait_ms > 0の場合、access_screenshotの実行中に発生するようになりました。待機ループではpythoncom.PumpWaitingMessages()を使用して Windows メッセージを処理します。その他のツールでは、引き続きメッセージ処理がブロックされます。 access_vbe_appendは以前、MCP トランスポートのエスケープ処理により&を&に HTML エンコードしていました。v0.7.3 でhtml.unescape()による明示的なデコードを行うよう修正されました。
トラブルシューティング
-32602 Invalid request parameters エラーが断続的に発生する場合
MCP Python SDK(v1.26.0)の mcp/shared/session.py には、実際のエラーを握りつぶし、詳細を含まない一般的な -32602 コードを返す包括的な except Exception があります。このマシンには、エラーレスポンスに実際の例外とトレースバックを含めるローカルパッチが適用されています。mcp パッケージをアップグレードした場合は、パッチを再適用してください。詳細は CLAUDE.md を参照してください。
変更履歴
すべてのリリース履歴については、CHANGELOG.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。