PGMCP公司
 
PostgreSQL获取数据库表信息MCP服务器。
机能
- list_tables:获取指定架构的表列表
- get_table_schema:指定表中的列信息(名称、类型、NULL获取许可、默认值、主键和注释)
- get_table_indexes:获取指定表的索引信息(名称、列、唯一、类型、定义)
- 获取外国人密钥:获取指定表的外键信息(约束名称、列、引用表、引用列)
- 发电机图 \[BETA\]: 将数据库中的表关系Mermaid格式ER生成为图
安全性
数据库连接只读中所述修改相应参数的值。为了防止误操作和破坏性的查询执行,写入系的SQL(INSERT、UPDATE、DELETE、CREATE 等已弃用的函数的缺少的支持。
要件
- Python 3.10以上
- uv(包管理)
- PostgreSQL访问数据库
安装
uvx(推奨)
uvx无需安装即可直接运行:
uvx --from git+https://github.com/kyagoshi/pgmcp pgmcp如果要固定特定版本 @ (例如: v0.1.0):
uvx --from git+https://github.com/kyagoshi/pgmcp@v0.1.0 pgmcp本地安装
git clone https://github.com/kyagoshi/pgmcp.git
cd pgmcp
uv syncpip 使用时的版本固定示例:
pip install "git+https://github.com/kyagoshi/pgmcp@v0.1.0"MCP设定
克劳德桌面版
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或%APPDATA%\Claude\claude_desktop_config.json(Windows)添加:
{
"mcpServers": {
"pgmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/kyagoshi/pgmcp", "pgmcp"],
"env": {
"PGHOST": "localhost",
"PGPORT": "5432",
"PGDATABASE": "your_database",
"PGUSER": "your_username",
"PGPASSWORD": "your_password"
}
}
}
}VS代码(GitHub副本)

.vscode/mcp.json 添加:
{
"servers": {
"pgmcp": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/kyagoshi/pgmcp", "pgmcp"],
"env": {
"PGHOST": "localhost",
"PGPORT": "5432",
"PGDATABASE": "your_database",
"PGUSER": "your_username",
"PGPASSWORD": "your_password"
}
}
}
}环境变数
|变量名|说明|默认值| |--------|------|-------------| | PGHOST | PostgreSQL主机名| localhost | | PGPORT | PostgreSQL端口号 5432 | | PGDATABASE |数据库名称|(必需)| | PGUSER |用户名|(必需)| | PGPASSWORD |密码|(必需)|
使用方法
list_tables
获取指定架构的表列表。
参数:
schema(string, optional): 方案名称。默认值为"public"
出力例:
| table_name | table_type |
|------------|------------|
| users | BASE TABLE |
| orders | BASE TABLE |get_table_schema
获取指定表的列信息。
参数:
table_name(string, required): 表名称schema(string, optional): 方案名称。默认值为"public"
出力例:
| column_name | data_type | nullable | default | PK | comment |
|-------------|-----------|----------|---------|-----|----------|
| id | integer | NO | nextval('users_id_seq'::regclass) | ✓ | ユーザーID |
| name | character varying(100) | NO | - | | ユーザー名 |
| email | character varying(255) | YES | - | | メールアドレス |get_table_indexes
获取指定表的索引信息。
参数:
table_name(string, required): 表名称schema(string, optional): 方案名称。默认值为"public"
出力例:
| index_name | columns | unique | type | definition |
|------------|---------|--------|------|------------|
| users_pkey | id | ✓ | btree | CREATE UNIQUE INDEX users_pkey ON public.users USING btree (id) |
| users_email_idx | email | ✓ | btree | CREATE UNIQUE INDEX users_email_idx ON public.users USING btree (email) |获取外国人密钥
获取指定表的外键信息。
参数:
table_name(string, required): 表名称schema(string, optional): 方案名称。默认值为"public"
出力例:
| constraint_name | column_name | foreign_table | foreign_column |
|-----------------|-------------|---------------|----------------|
| orders_user_id_fkey | user_id | users | id |发电机原理图
将数据库中的表关系Mermaid格式ER生成为图。
注意:此功能是贝塔版。特殊字符(!,@,#)的表名或列名Mermaid语法不支持,因此可能会出现错误。了解更多信息 问题#9 来修改标记元素的显示属性。
参数:
schema(string, optional): 方案名称。默认值为"public"tables(list\[string\], optional): 目标表列表。省略时为所有表(最多100个)
出力例:
erDiagram
users {
integer id PK "ユーザーID"
varchar name "ユーザー名"
varchar email "メールアドレス"
}
orders {
integer id PK "注文ID"
integer user_id FK "ユーザーID"
numeric total_amount "合計金額"
}
users ||--o{ orders : "has"特徴:
- 实际外键关系为实线(
||--o{),模板名称将采用不同的格式 - 将虚拟外键(根据命名规则推测)设置为虚线(
||..o{),模板名称将采用不同的格式
- _id 或 _no 具有后缀的列 - 与其他表的主键名匹配的列
测试用样本数据
存储库附带的 docker/init.sql 啊Virtual FK 等已弃用的函数的缺少的支持。
- 简单示例:
vfk_uuid_parent/vfk_uuid_child,vfk_no_parent/vfk_no_child - 复杂示例(20多个表):
vfk_uuid_*系和vfk_no_*系列(订单、库存、促销活动、专利权等)
重新投入时 docker compose down -v && docker compose up -d 的DB中所述修改相应参数的值。
开発
开发人员的信息 贡献.md 来修改标记元素的显示属性。
许可证
这个项目 Apache许可证2.0 中所述修改相应参数的值。
从属库的许可信息 第三方许可证 来修改标记元素的显示属性。
