内容
# MS Access MCP 资源管理器
使用MCP(模型-命令-过程)浏览和查询Microsoft Access数据库的工具。
## 安装
使用UV安装:
```
uv pip install omni-ms-access-mcp
```
或使用pip:
```
pip install omni-ms-access-mcp
```
## 用法
### 命令行
使用Access数据库路径启动MCP服务器:
```
ms-access-mcp --db-path "C:\path\to\your\database.accdb"
```
### Python API
```python
from omni_ms_access_mcp.server import AccessMCP
# 初始化MCP服务器
mcp_server = AccessMCP(db_path="C:/path/to/your/database.accdb")
# 运行服务器
mcp_server.run()
```
## 可用工具
1. **列出数据库** - 列出所有可用的数据库
- 无需参数
- 显示所有已注册的数据库及其描述
2. **获取架构工具** - 获取数据库架构信息
- 必需参数:`database` - 要检查的数据库名称
- 示例:`get_schema_tool(database="sales_db")`
3. **查询数据** - 在多个数据库上执行SQL查询
- 必需参数:`sql` - 使用[database].[table]语法的SQL查询
- 示例:`query_data(sql="SELECT TOP 10 * FROM [sales_db].[Customers]")`
4. **测试跨数据库连接** - 测试数据库连接和跨数据库功能
- 无需参数
- 有助于诊断连接问题
5. **查询生成器帮助** - 获取构建Access SQL查询的示例
- 必需参数:`query_type` - 需要的查询帮助类型
- 选项:simple_select, cross_database_join, union, aggregation, date_filtering, boolean_filtering
- 示例:`query_builder_help(query_type="cross_database_join")`
6. **验证查询语法** - 在执行前验证Access SQL语法
- 必需参数:`sql` - 要验证的查询
- 检查常见的Access SQL错误
7. **查询限制** - 了解Access限制和解决方法
- 必需参数:`topic` - 限制主题
- 选项:joins, performance, data_types, functions, best_practices, all
- 示例:`query_limitations(topic="joins")`
## 跨数据库查询支持
该工具使用特殊语法支持跨多个Access数据库的查询:
```sql
-- 始终使用[database_name].[table_name]格式
SELECT [c].[CustomerName], [o].[OrderTotal]
FROM [sales_db].[Customers] AS [c], [orders_db].[Orders] AS [o]
WHERE [c].[CustomerID] = [o].[CustomerID]
AND [o].[OrderDate] > #2024-01-01#
```
### 重要的Access SQL规则
- **日期**:使用 `#YYYY-MM-DD#` 格式(不是引号)
- **布尔值**:使用 `1/0` 代替 `True/False`
- **字符串连接**:使用 `&` 代替 `+`
- **限制结果**:使用 `TOP N` 代替 `LIMIT`
- **条件语句**:使用 `IIF()` 代替 `CASE WHEN`
## 已知限制
### 跨数据库JOIN
数据库之间的直接JOIN通常失败。使用以下解决方法:
- WHERE子句筛选:`FROM [db1].[t1], [db2].[t2] WHERE [t1].[id]=[t2].[id]`
- UNION操作组合结果
- 分别查询数据库并在应用程序代码中组合
### 性能
- 数据库文件限制为2GB
- 查询在超过10万条记录时显著变慢
- 始终使用 `TOP N` 或 `WHERE` 子句限制结果
### 数据类型
- 布尔字段可能使用1/0或-1/0
- 文本字段限制为255个字符(使用Memo获取更大)
- 使用转换函数:`CInt()`、`CDbl()`、`CStr()`、`CDate()`
### 最佳实践
1. 始终为所有表使用 `[database].[table]` 语法
2. 首先使用小数据集进行测试
3. 在执行复杂查询前使用 `validate_query_syntax`
4. 运行 `query_limitations` 工具以了解约束
5. 可能时将相关数据保存在同一数据库中
## 故障排除
如果遇到错误:
1. 运行 `test_cross_db_connectivity` 检查所有数据库是否可访问
2. 使用 `get_schema_tool` 验证表和列名
3. 检查 `query_builder_help` 获取正确的语法示例
4. 查看 `query_limitations` 获取已知问题和解决方法
## 开发
### 设置开发环境
```
uv venv
.venv\Scripts\activate.bat
uv pip install -e .
```
### 构建软件包
```
publish.bat
```
### 发布到软件包索引
```
uv pip install -U twine
uv python -m twine upload dist/*
```
## 需求
- 您的系统上必须安装Microsoft Access驱动程序
- Python 3.7 或更高版本