gong-nl-db-mcp
Enables read-only querying of the gong-nl-db Postgres database through natural language via Claude Desktop.
README
gong-nl-db-mcp
Read-only Claude Desktop access to the BairesDev gong-nl-db Cloud SQL
Postgres instance.
This is an MCP server that colleagues install on their Mac. Once set up, they can ask Claude Desktop questions like "what tables are in gong-nl-db?" or "show me last week's top 10 accounts by call volume" and Claude will query the database directly — always read-only, always audited to their personal @bairesdev.com identity.
For colleagues (one-time setup, ~3 minutes)
You need:
- Claude Desktop (download)
That's it — the installer handles everything else.
macOS
Open Terminal and paste:
curl -LsSf https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.sh | bash
Windows
Open PowerShell (search "PowerShell" in the Start menu) and paste:
irm https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.ps1 | iex
Both installers will:
- Install
uv(tiny Python runner) if you don't have it. - Install Google Cloud SDK if you don't have it.
- Prompt you to sign in to Google — use your
@bairesdev.comaccount. - Register the
gong-nl-dbMCP server in Claude Desktop's config.
Restart Claude Desktop and try asking it: "List the schemas in gong-nl-db."
If you get a permissions error, ping Andy — he needs to grant your Google account access to the Cloud SQL instance (see the owner setup section below).
Troubleshooting
CERTIFICATE_VERIFY_FAILED / SSL errors in Claude Desktop's logs
This is the most common failure. The installer pins the server to Python 3.12
(--python 3.12 in the Claude Desktop config), which avoids the issue entirely
on a fresh install. If you hit it anyway (e.g. you installed before this fix):
# 1. Clear the cached old package
uv cache clean gong-nl-db-mcp
# 2. Re-run the installer to update your Claude Desktop config
curl -LsSf https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.sh | bash
# 3. Fully quit and reopen Claude Desktop (⌘Q, not just close the window)
"Could not determine IAM DB username"
You either aren't logged in or logged in with the wrong account. Run:
gcloud auth application-default login
# Use your @bairesdev.com account when the browser opens.
Then restart Claude Desktop.
Failed to spawn process: No such file or directory
Claude Desktop launches with a stripped PATH that excludes ~/.local/bin
(where uv installs its tools by default). Fix: symlink uvx into a
directory Claude Desktop can see, then re-run the installer:
sudo ln -sf "$(which uvx)" /usr/local/bin/uvx
curl -LsSf https://raw.githubusercontent.com/andyhorvitz/gong-nl-db-mcp/main/scripts/install.sh | bash
The installer now writes the absolute path to uvx into the config
automatically, so a fresh install won't hit this.
MCP server not appearing in Claude Desktop
- macOS: Check
~/Library/Logs/Claude/for errors. Verify the entry exists in~/Library/Application Support/Claude/claude_desktop_config.jsonundermcpServers.gong-nl-db. - Windows: Check
%APPDATA%\Claude\logs\for errors. Verify the entry exists in%APPDATA%\Claude\claude_desktop_config.jsonundermcpServers.gong-nl-db.
Windows: PowerShell says "running scripts is disabled"
Run this once in PowerShell as Administrator, then retry the installer:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
What you can do
Claude will have these tools available under the gong-nl-db MCP server:
| Tool | What it does |
|---|---|
list_schemas |
Show non-system schemas |
list_tables(schema) |
Show tables/views in a schema |
describe_table(table, schema) |
Show columns, types, nullability |
sample_rows(table, schema, limit) |
Return up to 50 sample rows |
run_query(sql, limit) |
Run a read-only SELECT / WITH / set-op (max 1000 rows) |
explain_query(sql) |
Return the query plan |
What you can't do
Every query is checked against a read-only allow-list before it reaches
the database. Attempting INSERT, UPDATE, DELETE, DROP, TRUNCATE,
COPY, CALL, VACUUM, SET, etc. will be rejected. Even if that layer
somehow let a write through, the Postgres role you connect as only has
SELECT grants and the transaction is explicitly READ ONLY. Four layers
of defense — you are not going to accidentally drop prod.
For the owner (Andy): initial Cloud SQL setup
This is a one-time-per-instance setup. After this, each new colleague just needs the per-user steps below.
1. Enable IAM database authentication on the instance
gcloud sql instances patch gong-nl-db \
--database-flags=cloudsql.iam_authentication=on,cloudsql.enable_pgaudit=on,pgaudit.log=read
2. Create the read-only Postgres role
Connect as a superuser (e.g. via cloud-sql-proxy + psql):
CREATE ROLE readonly_analysts;
GRANT CONNECT ON DATABASE <db> TO readonly_analysts;
GRANT USAGE ON SCHEMA public TO readonly_analysts;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_analysts;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_analysts;
ALTER DATABASE <db> SET default_transaction_read_only = on;
Repeat the GRANT USAGE / GRANT SELECT / ALTER DEFAULT PRIVILEGES block
for each additional schema you want to expose.
3. For each colleague (e.g. alice@bairesdev.com)
# GCP IAM — lets them authenticate to the instance
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member=user:alice@bairesdev.com --role=roles/cloudsql.client
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member=user:alice@bairesdev.com --role=roles/cloudsql.instanceUser
# Cloud SQL — registers them as an IAM DB user on the instance
gcloud sql users create alice@bairesdev.com \
--instance=gong-nl-db --type=cloud_iam_user
Then, in Postgres:
GRANT readonly_analysts TO "alice@bairesdev.com";
4. Configure the installer
Edit scripts/install.sh and replace the REPLACE_ME placeholders with:
INSTANCE_CONNECTION_NAME—<project>:<region>:gong-nl-dbDB_NAME— the Postgres database name
Commit, push to main. Next colleague who re-runs the one-liner picks up the
new config.
Development
uv venv --python 3.12
uv pip install -e ".[dev]"
.venv/bin/pytest # run the safety test suite
Test the MCP server locally against a running Cloud SQL Auth Proxy or the live instance:
INSTANCE_CONNECTION_NAME=... DB_NAME=... \
.venv/bin/gong-nl-db-mcp # speaks MCP over stdio
Releasing
Tag-driven: git tag v0.2.0 && git push --tags triggers
.github/workflows/release.yml, which publishes to PyPI. Colleagues' uvx gong-nl-db-mcp@latest picks it up automatically.
The safety guarantee
src/gong_nl_db_mcp/safety.py is the statement-level allow-list. Any
change to that file must go through PR review. The file's git history is
the audit trail for the read-only guarantee. See tests/test_safety.py for
the allow/deny corpus.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。