Supabase
MCP server for interacting with the Supabase platform
作者提供的说明(英文原文)
Guardrail for AI agents on SQL Server: statement blocking, optional read-only mode and an audit log.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
LOGCARVERGUARD_CONNECTION_STRING, LOGCARVERGUARD_READ_ONLY, LOGCARVERGUARD_AUDIT_DB_PATH, LOGCARVERGUARD_TRUNCATE_ALLOWLIST, LOGCARVERGUARD_EXEC_WHITELIST, LOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"logcarverguard": {
"command": "dnx",
"args": [
"LogCarverGuard.Local",
"--yes"
],
"env": {
"LOGCARVERGUARD_CONNECTION_STRING": "your-value",
"LOGCARVERGUARD_READ_ONLY": "your-value",
"LOGCARVERGUARD_AUDIT_DB_PATH": "your-value",
"LOGCARVERGUARD_TRUNCATE_ALLOWLIST": "your-value",
"LOGCARVERGUARD_EXEC_WHITELIST": "your-value",
"LOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add logcarverguard --env LOGCARVERGUARD_CONNECTION_STRING=your-value --env LOGCARVERGUARD_READ_ONLY=your-value --env LOGCARVERGUARD_AUDIT_DB_PATH=your-value --env LOGCARVERGUARD_TRUNCATE_ALLOWLIST=your-value --env LOGCARVERGUARD_EXEC_WHITELIST=your-value --env LOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST=your-value -- dnx LogCarverGuard.Local --yes运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"logcarverguard": {
"command": "dnx",
"args": [
"LogCarverGuard.Local",
"--yes"
],
"env": {
"LOGCARVERGUARD_CONNECTION_STRING": "your-value",
"LOGCARVERGUARD_READ_ONLY": "your-value",
"LOGCARVERGUARD_AUDIT_DB_PATH": "your-value",
"LOGCARVERGUARD_TRUNCATE_ALLOWLIST": "your-value",
"LOGCARVERGUARD_EXEC_WHITELIST": "your-value",
"LOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"logcarverguard": {
"type": "stdio",
"command": "dnx",
"args": [
"LogCarverGuard.Local",
"--yes"
],
"env": {
"LOGCARVERGUARD_CONNECTION_STRING": "your-value",
"LOGCARVERGUARD_READ_ONLY": "your-value",
"LOGCARVERGUARD_AUDIT_DB_PATH": "your-value",
"LOGCARVERGUARD_TRUNCATE_ALLOWLIST": "your-value",
"LOGCARVERGUARD_EXEC_WHITELIST": "your-value",
"LOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
LOGCARVERGUARD_READ_ONLY envLOGCARVERGUARD_AUDIT_DB_PATH envLOGCARVERGUARD_TRUNCATE_ALLOWLIST envLOGCARVERGUARD_EXEC_WHITELIST envLOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 caiderek 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:LOGCARVERGUARD_CONNECTION_STRING
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.0)于25天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 .NET。
同一分类中有:Supabase, MongoDB MCP Server, Elasticsearch MCP Server
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP server for interacting with the Supabase platform
MongoDB Model Context Protocol Server
MCP server for interacting with Elasticsearch
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
English | [繁體中文](README.zh-TW.md)
An MCP proxy that lets an AI coding agent (Claude Code, Cursor, …) read and write a production SQL Server without handing it the real credentials or a free hand. Every statement runs under the caller's own SQL login and grants, dangerous statements are blocked before they reach the database, and everything is written to an audit log.
Status: early (v0.1).
AI agent --(MCP, API key)--> LogCarverGuard proxy --(EXECUTE AS the caller's own login)--> SQL Server
SELECT returns its rows (first 100 shown, with a count of the rest). A write is executed and audited.GRANT/DENY still decide what they can do.IMPERSONATE on each user's login, and a database user in the target database so it can connect. The host tests run SELECT, UPDATE and a permission-denied DELETE through a service account that is not sysadmin.INSERT / UPDATE / DELETE is rolled back as a whole if any statement fails. DDL (ALTER TABLE…), TRUNCATE and EXEC run as they are and are not rolled back as part of a batch. BEGIN TRAN / COMMIT / ROLLBACK from the caller is blocked.DROP TABLE, DROP DATABASE, RESTORE DATABASE / RESTORE LOG, ALTER DATABASE … SET, sp_executesql, xp_cmdshell, dynamic EXEC of a variable or string, identity switching (REVERT, EXECUTE AS, SETUSER), permission changes (GRANT, DENY, REVOKE), and caller-managed transactions (BEGIN TRAN, COMMIT, ROLLBACK, SAVE TRANSACTION).
TRUNCATE TABLE, ALTER TABLE … DROP COLUMN, and EXEC of a named stored procedure (including INSERT … EXEC). Allow-list entries are written as schema.name; a statement that names a database or a server (OtherDb.dbo.T, [srv].db.dbo.P) is never matched against them.
This list is deliberately narrow. It is not "everything an AI could break": DROP INDEX, sp_rename, BACKUP DATABASE, or a Linked Server OPENQUERY are not specially handled and run if the real login may run them. The real security boundary is the SQL login's own grants, so issue each API key against an account with the least privilege you can accept, never sysadmin or db_owner.
Runs on your own machine, started by your AI tool over stdio. No server, no Docker, no API keys. Settings come only from environment variables (not from appsettings.json or the command line). Tested on Windows with integrated authentication.
dotnet tool install -g LogCarverGuard.Local
claude mcp add logcarverguard --env LOGCARVERGUARD_CONNECTION_STRING="Server=localhost;Database=MyDb;Integrated Security=true;TrustServerCertificate=true" -- logcarverguard
Or run it without installing, through dnx (end the command with -- dotnet dnx LogCarverGuard.Local --yes).
| Variable | Purpose | Default |
|---|---|---|
LOGCARVERGUARD_CONNECTION_STRING (or _FILE) | The login the statements run as | required |
LOGCARVERGUARD_READ_ONLY | true allows queries only | false |
LOGCARVERGUARD_AUDIT_DB_PATH | Audit log SQLite file | LogCarverGuard/audit.db under your local application data folder |
LOGCARVERGUARD_TRUNCATE_ALLOWLIST, LOGCARVERGUARD_EXEC_WHITELIST, LOGCARVERGUARD_ALTER_DROP_COLUMN_ALLOWLIST | Same allow-lists as the central service | empty (all blocked) |
Read-only mode lets SELECT (without INTO) through, plus SET, DECLARE and PRINT. Everything else is blocked with a reason, including EXEC even when it is allow-listed, NEXT VALUE FOR, and the remote or file sources OPENQUERY, OPENROWSET and OPENDATASOURCE (they can run a write on another server). What read-only mode does not cover: a SELECT that calls a CLR or extended-procedure function with side effects, long-running or expensive queries, and locks. Also give the login only the permissions it needs; the guard is a second layer, not the first.
What local mode is, and is not. It is a guardrail against an agent doing something destructive by accident. It is not a security boundary:
Needs a Linux host with Docker (or the .NET 10 SDK for the native install below), and a SQL Server with TCP/IP enabled and mixed-mode authentication.
CREATE LOGIN logcarverguard_svc WITH PASSWORD = '…';
GRANT IMPERSONATE ON LOGIN::[alice_sql_login] TO logcarverguard_svc;
In the target database, create a database user for the service login and one for each person's login, then give each person the permissions they normally have; the proxy never widens them:
CREATE USER logcarverguard_svc FOR LOGIN logcarverguard_svc;
CREATE USER alice_sql_login FOR LOGIN alice_sql_login; GRANT SELECT, UPDATE ON dbo.Orders TO alice_sql_login;
git clone https://github.com/caiderek/LogCarverGuard
cd LogCarverGuard
Edit docker-compose.yml and set LOGCARVERGUARD_SQLSERVER_CONNECTION_STRING. For production prefer a mounted secret file and LOGCARVERGUARD_SQLSERVER_CONNECTION_STRING_FILE.
docker compose up -d --build
docker compose logs -f
--login is the user's own SQL login, not the service login). The key is printed once: docker compose exec logcarverguard dotnet cli/LogCarverGuard.Cli.dll \
issue-key --owner alice --login alice_sql_login
http:// :8080/ and send the key in the header X-LogCarverGuard-Key.Other key commands: list-keys (never prints the key itself) and revoke-key --id .
mcr.microsoft.com/dotnet/sdk:10.0 to build, aspnet:10.0 to run). It does not depend on a particular distribution. I have not tested this Docker setup on a specific distribution. Native (non-Docker) steps for Rocky Linux are below.docker-ce repository./data volume, so keep that volume and back it up.docker-compose.yml publishes the port on 127.0.0.1 only. To reach it from other machines, put a TLS-terminating reverse proxy in front, as described in Hardening for production. Opening port 8080 directly to the network sends the API key over plain HTTP.The steps below follow the guide I wrote for the Pro build, which I ran on a real Rocky Linux 9 VM and a real Rocky Linux 10 VM. That was an earlier Pro build: it adds undo on top of the same request handling, and it connected to SQL Server as sa, so the non-sysadmin service login described above was not part of those runs. I have not re-run these steps from this Free repo; if one fails, please open an issue.
# 1. .NET 10 SDK (Rocky 9 shown; on Rocky 10 use rhel/10 in the URL)
sudo dnf install -y https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm sudo dnf install -y dotnet-sdk-10.0 git
sudo useradd --system --no-create-home --shell /usr/sbin/nologin logcarverguard sudo git clone https://github.com/caiderek/LogCarverGuard /opt/logcarverguard/src cd /opt/logcarverguard/src sudo dotnet publish src/LogCarverGuard.Server/LogCarverGuard.Server.csproj -c Release -o /opt/logcarverguard/server sudo dotnet publish src/LogCarverGuard.Cli/LogCarverGuard.Cli.csproj -c Release -o /opt/logcarverguard/cli
sudo mkdir -p /var/lib/logcarverguard /etc/logcarverguard sudo chown logcarverguard:logcarverguard /var/lib/logcarverguard sudo tee /etc/logcarverguard/sql-connstring.txt > /dev/null <<'EOF' Server=your-sql-server-host,1433;Initial Catalog=your-database;User Id=logcarverguard_svc;Password=CHANGE_ME;TrustServerCertificate=true; EOF sudo chown logcarverguard:logcarverguard /etc/logcarverguard/sql-connstring.txt sudo chmod 600 /etc/logcarverguard/sql-connstring.txt
Drop TrustServerCertificate=true once SQL Server has a certificate this host trusts (see Hardening for production).
Create /etc/systemd/system/logcarverguard.service:
[Unit]
Description=LogCarverGuard MCP proxy After=network.target
[Service] Type=simple User=logcarverguard Group=logcarverguard WorkingDirectory=/opt/logcarverguard/server ExecStart=/usr/bin/dotnet /opt/logcarverguard/server/LogCarverGuard.Server.dll Restart=on-failure RestartSec=5 Environment=ASPNETCORE_URLS=http://127.0.0.1:8080 Environment=LOGCARVERGUARD_SQLSERVER_CONNECTION_STRING_FILE=/etc/logcarverguard/sql-connstring.txt Environment=LOGCARVERGUARD_AUDIT_DB_PATH=/var/lib/logcarverguard/logcarverguard-audit.db Environment=LOGCARVERGUARD_APIKEYS_DB_PATH=/var/lib/logcarverguard/logcarverguard-apikeys.db
[Install] WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now logcarverguard sudo systemctl status logcarverguard --no-pager sudo journalctl -u logcarverguard -n 20 --no-pager # expect "Now listening on: http://127.0.0.1:8080"
sudo -u logcarverguard dotnet /opt/logcarverguard/cli/LogCarverGuard.Cli.dll \ issue-key --owner alice --login alice_sql_login \ --apikeys-db /var/lib/logcarverguard/logcarverguard-apikeys.db
ASPNETCORE_URLS above listens on 127.0.0.1 only. For access from other machines, put a TLS-terminating reverse proxy in front (see Hardening for production). In my Rocky tests the service listened on all interfaces (http://+:8080) and I opened the port with firewall-cmd --permanent --add-port=8080/tcp and --reload; that sends the API key over只显示了开头部分;其余内容请在仓库中阅读