MSSQL MCP Server
MCP server Python cho Microsoft SQL Server, dùng pymssql/FreeTDS nên không cần ODBC
driver. Bản 0.2.0 hỗ trợ truy vấn chỉ đọc, full backup .bak chạy nền và so sánh
relational schema giữa hai database trên cùng instance.
Tools
mssql_list_databases(): liệt kê databaseONLINEmà principal nhìn thấy.mssql_execute_query(database_name, query, limit=100): chỉ nhậnSELECThoặc CTE chỉ đọc; chặnEXEC,SELECT INTO, DDL/DML,BACKUP,RESTOREvàDBCC.mssql_list_tables(database_name, schema_name="dbo").mssql_describe_table(database_name, table_name, schema_name="dbo").mssql_start_backup(database_name): fullCOPY_ONLY,CHECKSUM, tự động bỏCOMPRESSIONtrên SQL Server Express, một job tại một thời điểm. Tool trả ngaybackup_idsau preflight.mssql_get_backup_status(backup_id): trảqueued | running | succeeded | failed,percent_complete, paths, kích thước file, verify và lỗi có hướng xử lý.mssql_compare_schemas(source_database, target_database, schema_name=null, offset=0, limit=100): so sánh tables, columns, PK, FK, unique/check constraints và indexes;limittừ 1 đến 500.
Mọi argument public đều truyền phẳng, không bọc trong params.
Cài và chạy
cd uvx/mssql
uv sync --extra dev
uv run mssql-mcp-vn
Stdio là mặc định. Streamable HTTP dùng tên SDK streamable-http; alias
streamable_http vẫn được chấp nhận và bind loopback theo mặc định:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8003 uv run mssql-mcp-vn
Cấu hình
{
"mcpServers": {
"mssql-mcp-vn": {
"command": "uvx",
"args": ["mssql-mcp-vn==0.2.0"],
"env": {
"MSSQL_SERVER": "sql.internal.example",
"MSSQL_USER": "mssql_mcp",
"MSSQL_PASSWORD": "<secret-from-secret-store>",
"MSSQL_PORT": "1433",
"MSSQL_BACKUP_SQL_ROOT": "\\\\fileserver\\mssql-backups",
"MSSQL_BACKUP_LOCAL_ROOT": "/srv/mssql-backups"
}
}
}
}
MSSQL_BACKUP_SQL_ROOT là đường dẫn SQL Server nhìn thấy. MSSQL_BACKUP_LOCAL_ROOT
là cùng storage được mount trên máy Linux chạy MCP. MCP không tải file 10 GB qua TDS.
Principal tối thiểu
Không chạy MCP bằng sa. Tạo login riêng, rồi cấp quyền trên từng database được phép
đọc/backup:
CREATE LOGIN [mssql_mcp] WITH PASSWORD = '<generate-and-store-separately>';
GO
USE [application_db];
CREATE USER [mssql_mcp] FOR LOGIN [mssql_mcp];
ALTER ROLE [db_datareader] ADD MEMBER [mssql_mcp];
ALTER ROLE [db_backupoperator] ADD MEMBER [mssql_mcp];
GRANT VIEW DEFINITION TO [mssql_mcp];
GO
RESTORE VERIFYONLY cần quyền CREATE DATABASE để đọc thông tin backup. Cấp cho user
trong master nếu tool backup phải verify:
USE [master];
CREATE USER [mssql_mcp] FOR LOGIN [mssql_mcp];
GRANT CREATE DATABASE TO [mssql_mcp];
GO
Đọc percent_complete từ sys.dm_exec_requests cần VIEW SERVER STATE (hoặc
VIEW SERVER PERFORMANCE STATE trên SQL Server 2022+). Nếu không cấp, backup vẫn chạy
nhưng phần trăm có thể là null; cân nhắc quyền này theo chính sách bảo mật.
Runbook shared storage
SQL Server service account phải có quyền đọc/ghi trực tiếp share; quyền của principal SQL không thay thế quyền filesystem.
Windows SQL Server -> Samba/SMB trên Linux
- Export một thư mục, ví dụ
/srv/mssql-backups, bằng Samba. - Cấp ACL share và filesystem cho domain/service account chạy SQL Server.
- Đặt
MSSQL_BACKUP_SQL_ROOT=\\fileserver\mssql-backups. - Trên máy MCP, dùng chính thư mục local hoặc mount cùng share vào
/srv/mssql-backups, rồi đặtMSSQL_BACKUP_LOCAL_ROOTtương ứng. - Dùng service account kiểm tra tạo/xóa một file thử trước khi gọi backup.
Linux SQL Server -> NFS hoặc SMB mount
- Mount NFS/SMB tại một path cố định trên host SQL Server, ví dụ
/mnt/mssql-backups; servicemssql-serverphải đọc/ghi được. - Mount cùng export trên máy MCP tại
/srv/mssql-backups. - Đặt
MSSQL_BACKUP_SQL_ROOT=/mnt/mssql-backupsvàMSSQL_BACKUP_LOCAL_ROOT=/srv/mssql-backups. - Khai báo mount bền vững bằng cơ chế của hệ điều hành và kiểm tra mount đã sẵn sàng trước khi start MCP.
Tham khảo Microsoft: backup devices, full database backup, và RESTORE VERIFYONLY.
Vòng đời backup
Preflight yêu cầu database ONLINE, principal có BACKUP DATABASE, local root là
folder tuyệt đối có quyền đọc/ghi, và dung lượng trống ít nhất 110% allocated database
size. SQL ghi file duy nhất *.bak.partial; MCP chạy RESTORE VERIFYONLY ... WITH
CHECKSUM, rồi atomic rename thành .bak trên local mount.
MCP tự đọc SERVERPROPERTY('EngineEdition') trên connection của job. Backup bỏ
COMPRESSION khi edition là SQL Server Express để tránh lỗi 1844; COPY_ONLY,
CHECKSUM và STATS = 5 luôn được giữ nguyên. Worker dùng query timeout 24 giờ
(86.400 giây) để backup lớn qua SMB không kế thừa timeout DB-Lib ngắn hơn.
Registry job và khóa một-job chỉ sống trong process. Không restart MCP giữa chừng. Phiên bản này không overwrite, cancel, retention, differential hoặc log backup. Khi lỗi, chỉ file partial do job đó tạo bị xóa.
So sánh schema
Hai database bắt buộc khác nhau và nằm trên instance đã cấu hình. schema_name=null quét
mọi user table schema. Kết quả được sort ổn định và phân loại only_in_source,
only_in_target, different; tool không sinh migration SQL. Views, procedures,
functions, triggers, users, permissions và system objects nằm ngoài phạm vi.
Phát triển
cd uvx/mssql
pytest tests -v
ruff check src tests
ruff format --check src tests
mypy src
uv build
Fixture staging và 10 evaluation cố định nằm trong evaluations/.
Changelog
0.2.2 - 2026-09-02
- Đặt query timeout backup rõ ràng là 24 giờ để tránh TDS timeout khi ghi file lớn qua SMB.
- Giữ backup SQL Server Express không dùng
COMPRESSION.
0.2.0 - 2026-09-01
- Thêm full background
.bakbackup với preflight, DMV progress, checksum verify và atomic finalization. - Thêm relational schema compare có filter và pagination ổn định.
- Khóa query tool về
SELECT/read-only CTE và chặnEXEC/INTOcùng DDL/DML. - Sửa transport thành
streamable-http, bind mặc định127.0.0.1. - Thêm fixture, evaluations, schema regression và unit tests.
0.1.7 - 2026-08-18
- Public MCP tools dùng flat arguments và có schema regression tests.
Metadata
Release files for mssql-mcp-vn 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mssql_mcp_vn-0.2.2.tar.gz | 24.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mssql_mcp_vn-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.0 kB
Release files / mssql_mcp_vn-0.2.2.tar.gz
| Download URL | mssql_mcp_vn-0.2.2.tar.gz |
|---|---|
| Size | 24.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
14a05d72853d8395c6c161e642c55db59810048cf51f6958a055866692eaada8
|
|
BLAKE2b-256 checksum How to use checksums |
79e23a90a7f4381324f373c16bce4c3f80a40217176937e84bd58f11f4d9877a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mssql_mcp_vn-0.2.2-py3-none-any.whl
| Download URL | mssql_mcp_vn-0.2.2-py3-none-any.whl |
|---|---|
| Size | 15.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fd2ffc733523bdfd894b91b2bdbc05967bab10407889fb9ff0fb9ca5b024d50
|
|
BLAKE2b-256 checksum How to use checksums |
e1f40ed20db95f5246c87650071283d702ced5f9632f3876597d5ce5b8cda4cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for mssql-mcp-vn 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.