此仓库包含一个 Home Assistant 插件,该插件提供了一个用于 PostgreSQL 数据库访问的模型上下文协议(MCP)服务器,并通过 Home Assistant 的 API 令牌系统进行身份验证。
https://github.com/jodur/mcp-addon-postgresql-homeassistant
通过 Home Assistant UI 配置插件:
database_url: "postgresql://用户名:密码@主机:5432/数据库"
server_port: 3000
log_level: "info"
max_connections: 10
enable_write_operations: false
ha_base_url: "http://supervisor/core" # Home Assistant API URL
插件支持以下环境变量:
DATABASE_URL:PostgreSQL 连接字符串SERVER_PORT:MCP 服务器端口(默认:3000)LOG_LEVEL:日志级别(debug, info, warn, error)MAX_CONNECTIONS:最大数据库连接数ENABLE_WRITE_OPERATIONS:启用写操作(true/false)HA_BASE_URL:Home Assistant API 基础 URL(默认:http://supervisor/core)注意:认证基于服务,使用 Home Assistant 的监督器令牌。用户级别的访问控制不适用于 MCP 服务器,因为它们处理的是服务到服务的通信。
listTables列出数据库中所有表及其模式信息。
{
"method": "tools/call",
"params": {
"name": "listTables",
"arguments": {
"schema": "public"
}
}
}
queryDatabase执行只读 SQL 查询。
{
"method": "tools/call",
"params": {
"name": "queryDatabase",
"arguments": {
"sql": "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"
}
}
}
executeDatabase执行写操作(INSERT, UPDATE, DELETE, DDL)。仅在插件配置中将 enable_write_operations 设置为 true 时可用。
{
"method": "tools/call",
"params": {
"name": "executeDatabase",
"arguments": {
"sql": "CREATE TABLE example (id SERIAL PRIMARY KEY, name VARCHAR(100))"
}
}
}
服务器使用 Home Assistant 的认证系统。在 Authorization 头中包含您的 Home Assistant 长期访问令牌:
Authorization: Bearer 您的HOME_ASSISTANT_TOKEN
对于基于 HTTP 的 MCP 客户端,使用 REST API 端点:
本地访问:
# 列出可用工具
curl -X POST http://您的HA实例:3000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 您的HA_TOKEN" \
-d '{"method": "tools/list"}'
# 调用一个工具
curl -X POST http://您的HA实例:3000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 您的HA_TOKEN" \
-d '{"method": "tools/call", "params": {"name": "listTables"}}'
Cloudflare Tunnel 访问(HTTPS):
# 通过 Cloudflare tunnel 列出可用工具
curl -X POST https://您的隧道域名.cloudflareaccess.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 您的HA_TOKEN" \
-d '{"method": "tools/list"}'
# 通过 Cloudflare tunnel 调用一个工具
curl -X POST https://您的隧道域名.cloudflareaccess.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 您的HA_TOKEN" \
-d '{"method": "tools/call", "params": {"name": "listTables"}}'
MCP 服务器可以与支持 HTTP 端点上的 Model Context Protocol 的各种 AI 工具和平台集成。
您可以使用此 MCP 服务器与 Claude Desktop 通过 SuperGateway 集成,它提供了 HTTP 基础 MCP 服务器与 Claude Desktop 的 stdio 基础 MCP 客户端之间的桥梁。
安装 SuperGateway:
npm install -g @supercorp-ai/supergateway
配置 Claude Desktop: 将以下配置添加到您的 Claude Desktop MCP 设置文件中:
在 macOS 上: ~/Library/Application Support/Claude/claude_desktop_config.json
在 Windows 上: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"postgresql-ha": {
"command": "supergateway",
"args": [
"--url", "http://您的HA实例:3000/mcp",
"--header", "Authorization: Bearer 您的HOME_ASSISTANT_TOKEN",
"--header", "Content-Type: application/json"
]
}
}
}
对于 Cloudflare Tunnel(HTTPS)访问:
{
"mcpServers": {
"postgresql-ha": {
"command": "supergateway",
"args": [
"--url", "https://您的隧道域名.cloudflareaccess.com/mcp",
"--header", "Authorization: Bearer 您的HOME_ASSISTANT_TOKEN",
"--header", "Content-Type: application/json"
]
}
}
}
重启 Claude Desktop 以加载新的 MCP 服务器配置。
一旦配置好,您可以在 Claude Desktop 中使用自然语言命令,例如:
您: "我的数据库中有哪些表?"
Claude: [使用 listTables 工具] "我可以看到您有以下表:users, products, orders 和 logs。您想让我检查任何特定表的模式吗?"
您: "显示用户表的结构"
Claude: [使用 queryDatabase 工具] "用户表有列:id(主键),username,email,created_at 和 is_active。目前表中有 150 名用户。"
服务器包括基本的 SQL 查询验证,旨在针对 LLM 生成的查询:
xp_cmdshell,畸形查询)重要安全注意事项:
⚠️ 这不是全面的 SQL 注入保护。 验证旨在:
enable_write_operations 设置⚠️ 信任模型:此 MCP 服务器假设查询来自 可信来源(认证的 AI 助手,而非未经验证的用户输入)。验证主要防止:
生产使用建议:
enable_write_operations 控制此 MCP 服务器设计用于 AI 助手之间的服务到服务通信,而非直接用户输入:
✅ 可信来源:
❌ 不适合:
推荐的安全实践:
# 安装依赖
npm install
# 构建 TypeScript
npm run build
# 在开发模式下运行
npm run dev
# 启动服务器
npm start
# 构建插件
npm run build
# 使用 curl 测试
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 您的HA_TOKEN" \
-d '{"method": "tools/list"}'
此插件设计用于与 Home Assistant 的 Cloudflare 插件配合工作,以实现安全的外部访问:
使用 Cloudflare tunnel 时,您的 MCP 服务器可通过 HTTPS 访问:
# 在您的 Cloudflare tunnel 配置中
tunnel: 您的隧道ID
credentials-file: /etc/cloudflared/您的隧道.json
ingress:
- hostname: 您的域名.cloudflareaccess.com
service: http://localhost:3000
- service: http_status:404
Cloudflare Tunnel 的好处:
外部 URL:https://您的隧道域名.cloudflareaccess.com/mcp
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MCP 客户端 │────│ Home Assistant │────│ PostgreSQL │
│ (HTTP/HTTPS) │ │ MCP 服务器 │ │ 数据库 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
本地:HTTP Home Assistant 数据库
隧道:HTTPS 认证 管理
通过 Cloudflare 令牌验证 连接池
enable_write_operations 设置为 true 如果需要执行写查询通过 Home Assistant 查看插件日志:
服务器提供健康检查端点:
curl http://localhost:3000/health
MIT 许可 - 详情见 LICENSE 文件。
对于问题和疑问: