# SP Database MCP Server
一个用于实时获取数据库表结构信息的 Model Context Protocol (MCP) 服务器。通过 MCP 协议,可以让 AI 助手实时获取数据库的表结构信息,解决信息不及时更新的问题。
## 功能特性
- **智能表结构查询**:支持两种查询模式
- **低代码系统 Schema 查询**:通过 `da_logic_entity` 和 `da_entity_attribute` 表获取详细的业务字段信息
- **传统数据库元数据查询**:直接从数据库系统表获取技术字段信息
- 🔄 实时获取数据库表结构信息
- 📊 支持多种数据库类型 (MySQL, PostgreSQL)
- 🚀 通过 API 接口动态获取最新的表字段信息
- 🔍 支持表信息查询和字段详情获取
- 📝 自动生成表结构文档
## 安装
```bash
cd ~/Project/sp-database-mcp
uv sync
```
## 配置
创建 `.env` 文件:
```env
# 数据库连接配置
DATABASE_URL=mysql://username:password@localhost:3306/database_name
# 或者 PostgreSQL
# DATABASE_URL=postgresql://username:password@localhost:5432/database_name
# API 接口配置(如果通过 API 获取)
API_BASE_URL=https://your-api-server.com
API_TOKEN=your-api-token
```
## 使用方式
### 启动 MCP 服务器
```bash
uv run sp-database-mcp
```
### 在 Claude Desktop 中配置
在 Claude Desktop 的配置文件中添加:
```json
{
"mcpServers": {
"sp-database": {
"command": "uv",
"args": ["run", "sp-database-mcp"],
"cwd": "/Users/alexliu/Project/sp-database-mcp"
}
}
}
```
### 使用示例
- "介绍一下活动表有哪些字段"
- "获取 activity_node 表的结构信息"
- "查看用户表的字段定义"
## 使用示例
### 查询表结构信息
现在支持两种查询模式,系统会自动优先使用低代码系统的 schema 查询:
```python
# 通过 MCP 工具查询表信息
# 输入:请获取 activity_node 表的详细信息
# 输出示例(低代码系统 schema 查询结果):
# activity_node 表结构信息
#
# **表说明**: 活动
#
# ## 字段信息
#
# | 字段名 | 类型 | 可空 | 默认值 | 主键 | 说明 |
# |--------|------|------|--------|------|---------|
# | id | BIGINT | 否 | - | 是 | 主键ID |
# | name | VARCHAR(1000) | 是 | - | 否 | 活动名称 |
# | activity_code | VARCHAR(64) | 是 | - | 否 | 活动编码 |
# | business_object_id | BIGINT | 是 | - | 否 | 业务对象id |
# | ... | ... | ... | ... | ... | ... |
```
### 查询模式说明
1. **低代码系统 Schema 查询**(优先)
- 查询 `da_logic_entity` 表获取实体基本信息
- 查询 `da_entity_attribute` 表获取字段详细信息
- 提供中文字段名、业务描述、数据类型等丰富信息
- 支持外键关系解析
2. **传统数据库元数据查询**(回退)
- 当低代码系统查询失败时自动回退
- 直接从数据库系统表获取技术字段信息
- 提供基础的字段类型、约束等信息
## 项目结构
```
sp-database-mcp/
├── src/
│ └── sp_database_mcp/
│ ├── __init__.py
│ ├── server.py # MCP 服务器主文件
│ ├── database.py # 数据库连接和查询
│ ├── api_client.py # API 客户端
│ └── models.py # 数据模型
├── tests/
├── .env.example
├── pyproject.toml
└── README.md
```
## 开发
```bash
# 安装开发依赖
uv sync --dev
# 运行测试
uv run pytest
# 代码格式化
uv run black .
uv run isort .
# 类型检查
uv run mypy .
```
Raw data
{
"_id": null,
"home_page": null,
"name": "sp-database-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "database, mcp, model-context-protocol, schema",
"author": null,
"author_email": "Alex Liu <drowning524@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/1a/5c/714c459f846bec2769871f5b9a07b4fc46cf36836e317ff755fa2e03d252/sp_database_mcp-0.1.2.tar.gz",
"platform": null,
"description": "# SP Database MCP Server\n\n\u4e00\u4e2a\u7528\u4e8e\u5b9e\u65f6\u83b7\u53d6\u6570\u636e\u5e93\u8868\u7ed3\u6784\u4fe1\u606f\u7684 Model Context Protocol (MCP) \u670d\u52a1\u5668\u3002\u901a\u8fc7 MCP \u534f\u8bae\uff0c\u53ef\u4ee5\u8ba9 AI \u52a9\u624b\u5b9e\u65f6\u83b7\u53d6\u6570\u636e\u5e93\u7684\u8868\u7ed3\u6784\u4fe1\u606f\uff0c\u89e3\u51b3\u4fe1\u606f\u4e0d\u53ca\u65f6\u66f4\u65b0\u7684\u95ee\u9898\u3002\n\n## \u529f\u80fd\u7279\u6027\n\n- **\u667a\u80fd\u8868\u7ed3\u6784\u67e5\u8be2**\uff1a\u652f\u6301\u4e24\u79cd\u67e5\u8be2\u6a21\u5f0f\n - **\u4f4e\u4ee3\u7801\u7cfb\u7edf Schema \u67e5\u8be2**\uff1a\u901a\u8fc7 `da_logic_entity` \u548c `da_entity_attribute` \u8868\u83b7\u53d6\u8be6\u7ec6\u7684\u4e1a\u52a1\u5b57\u6bb5\u4fe1\u606f\n - **\u4f20\u7edf\u6570\u636e\u5e93\u5143\u6570\u636e\u67e5\u8be2**\uff1a\u76f4\u63a5\u4ece\u6570\u636e\u5e93\u7cfb\u7edf\u8868\u83b7\u53d6\u6280\u672f\u5b57\u6bb5\u4fe1\u606f\n- \ud83d\udd04 \u5b9e\u65f6\u83b7\u53d6\u6570\u636e\u5e93\u8868\u7ed3\u6784\u4fe1\u606f\n- \ud83d\udcca \u652f\u6301\u591a\u79cd\u6570\u636e\u5e93\u7c7b\u578b (MySQL, PostgreSQL)\n- \ud83d\ude80 \u901a\u8fc7 API \u63a5\u53e3\u52a8\u6001\u83b7\u53d6\u6700\u65b0\u7684\u8868\u5b57\u6bb5\u4fe1\u606f\n- \ud83d\udd0d \u652f\u6301\u8868\u4fe1\u606f\u67e5\u8be2\u548c\u5b57\u6bb5\u8be6\u60c5\u83b7\u53d6\n- \ud83d\udcdd \u81ea\u52a8\u751f\u6210\u8868\u7ed3\u6784\u6587\u6863\n\n## \u5b89\u88c5\n\n```bash\ncd ~/Project/sp-database-mcp\nuv sync\n```\n\n## \u914d\u7f6e\n\n\u521b\u5efa `.env` \u6587\u4ef6\uff1a\n\n```env\n# \u6570\u636e\u5e93\u8fde\u63a5\u914d\u7f6e\nDATABASE_URL=mysql://username:password@localhost:3306/database_name\n# \u6216\u8005 PostgreSQL\n# DATABASE_URL=postgresql://username:password@localhost:5432/database_name\n\n# API \u63a5\u53e3\u914d\u7f6e\uff08\u5982\u679c\u901a\u8fc7 API \u83b7\u53d6\uff09\nAPI_BASE_URL=https://your-api-server.com\nAPI_TOKEN=your-api-token\n```\n\n## \u4f7f\u7528\u65b9\u5f0f\n\n### \u542f\u52a8 MCP \u670d\u52a1\u5668\n\n```bash\nuv run sp-database-mcp\n```\n\n### \u5728 Claude Desktop \u4e2d\u914d\u7f6e\n\n\u5728 Claude Desktop \u7684\u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\uff1a\n\n```json\n{\n \"mcpServers\": {\n \"sp-database\": {\n \"command\": \"uv\",\n \"args\": [\"run\", \"sp-database-mcp\"],\n \"cwd\": \"/Users/alexliu/Project/sp-database-mcp\"\n }\n }\n}\n```\n\n### \u4f7f\u7528\u793a\u4f8b\n\n- \"\u4ecb\u7ecd\u4e00\u4e0b\u6d3b\u52a8\u8868\u6709\u54ea\u4e9b\u5b57\u6bb5\"\n- \"\u83b7\u53d6 activity_node \u8868\u7684\u7ed3\u6784\u4fe1\u606f\"\n- \"\u67e5\u770b\u7528\u6237\u8868\u7684\u5b57\u6bb5\u5b9a\u4e49\"\n\n## \u4f7f\u7528\u793a\u4f8b\n\n### \u67e5\u8be2\u8868\u7ed3\u6784\u4fe1\u606f\n\n\u73b0\u5728\u652f\u6301\u4e24\u79cd\u67e5\u8be2\u6a21\u5f0f\uff0c\u7cfb\u7edf\u4f1a\u81ea\u52a8\u4f18\u5148\u4f7f\u7528\u4f4e\u4ee3\u7801\u7cfb\u7edf\u7684 schema \u67e5\u8be2\uff1a\n\n```python\n# \u901a\u8fc7 MCP \u5de5\u5177\u67e5\u8be2\u8868\u4fe1\u606f\n# \u8f93\u5165\uff1a\u8bf7\u83b7\u53d6 activity_node \u8868\u7684\u8be6\u7ec6\u4fe1\u606f\n\n# \u8f93\u51fa\u793a\u4f8b\uff08\u4f4e\u4ee3\u7801\u7cfb\u7edf schema \u67e5\u8be2\u7ed3\u679c\uff09\uff1a\n# activity_node \u8868\u7ed3\u6784\u4fe1\u606f\n# \n# **\u8868\u8bf4\u660e**: \u6d3b\u52a8\n# \n# ## \u5b57\u6bb5\u4fe1\u606f\n# \n# | \u5b57\u6bb5\u540d | \u7c7b\u578b | \u53ef\u7a7a | \u9ed8\u8ba4\u503c | \u4e3b\u952e | \u8bf4\u660e |\n# |--------|------|------|--------|------|---------|\n# | id | BIGINT | \u5426 | - | \u662f | \u4e3b\u952eID |\n# | name | VARCHAR(1000) | \u662f | - | \u5426 | \u6d3b\u52a8\u540d\u79f0 |\n# | activity_code | VARCHAR(64) | \u662f | - | \u5426 | \u6d3b\u52a8\u7f16\u7801 |\n# | business_object_id | BIGINT | \u662f | - | \u5426 | \u4e1a\u52a1\u5bf9\u8c61id |\n# | ... | ... | ... | ... | ... | ... |\n```\n\n### \u67e5\u8be2\u6a21\u5f0f\u8bf4\u660e\n\n1. **\u4f4e\u4ee3\u7801\u7cfb\u7edf Schema \u67e5\u8be2**\uff08\u4f18\u5148\uff09\n - \u67e5\u8be2 `da_logic_entity` \u8868\u83b7\u53d6\u5b9e\u4f53\u57fa\u672c\u4fe1\u606f\n - \u67e5\u8be2 `da_entity_attribute` \u8868\u83b7\u53d6\u5b57\u6bb5\u8be6\u7ec6\u4fe1\u606f\n - \u63d0\u4f9b\u4e2d\u6587\u5b57\u6bb5\u540d\u3001\u4e1a\u52a1\u63cf\u8ff0\u3001\u6570\u636e\u7c7b\u578b\u7b49\u4e30\u5bcc\u4fe1\u606f\n - \u652f\u6301\u5916\u952e\u5173\u7cfb\u89e3\u6790\n\n2. **\u4f20\u7edf\u6570\u636e\u5e93\u5143\u6570\u636e\u67e5\u8be2**\uff08\u56de\u9000\uff09\n - \u5f53\u4f4e\u4ee3\u7801\u7cfb\u7edf\u67e5\u8be2\u5931\u8d25\u65f6\u81ea\u52a8\u56de\u9000\n - \u76f4\u63a5\u4ece\u6570\u636e\u5e93\u7cfb\u7edf\u8868\u83b7\u53d6\u6280\u672f\u5b57\u6bb5\u4fe1\u606f\n - \u63d0\u4f9b\u57fa\u7840\u7684\u5b57\u6bb5\u7c7b\u578b\u3001\u7ea6\u675f\u7b49\u4fe1\u606f\n\n## \u9879\u76ee\u7ed3\u6784\n\n```\nsp-database-mcp/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 sp_database_mcp/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 server.py # MCP \u670d\u52a1\u5668\u4e3b\u6587\u4ef6\n\u2502 \u251c\u2500\u2500 database.py # \u6570\u636e\u5e93\u8fde\u63a5\u548c\u67e5\u8be2\n\u2502 \u251c\u2500\u2500 api_client.py # API \u5ba2\u6237\u7aef\n\u2502 \u2514\u2500\u2500 models.py # \u6570\u636e\u6a21\u578b\n\u251c\u2500\u2500 tests/\n\u251c\u2500\u2500 .env.example\n\u251c\u2500\u2500 pyproject.toml\n\u2514\u2500\u2500 README.md\n```\n\n## \u5f00\u53d1\n\n```bash\n# \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\nuv sync --dev\n\n# \u8fd0\u884c\u6d4b\u8bd5\nuv run pytest\n\n# \u4ee3\u7801\u683c\u5f0f\u5316\nuv run black .\nuv run isort .\n\n# \u7c7b\u578b\u68c0\u67e5\nuv run mypy .\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Model Context Protocol server for database schema information",
"version": "0.1.2",
"project_urls": {
"Documentation": "https://github.com/alexliu/sp-database-mcp#readme",
"Homepage": "https://github.com/alexliu/sp-database-mcp",
"Issues": "https://github.com/alexliu/sp-database-mcp/issues",
"Repository": "https://github.com/alexliu/sp-database-mcp"
},
"split_keywords": [
"database",
" mcp",
" model-context-protocol",
" schema"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "15c473fb6f542895a728d2bb52c209b93a5f49f5e341a06e95c9724b1b69597c",
"md5": "13645d5361f0631306801104c6d1c4d0",
"sha256": "58abc4cf901e27dbeff5dbad4273435eef749f7e5f77ed8c7f69338c81c63689"
},
"downloads": -1,
"filename": "sp_database_mcp-0.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "13645d5361f0631306801104c6d1c4d0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 16992,
"upload_time": "2025-07-30T08:52:13",
"upload_time_iso_8601": "2025-07-30T08:52:13.687862Z",
"url": "https://files.pythonhosted.org/packages/15/c4/73fb6f542895a728d2bb52c209b93a5f49f5e341a06e95c9724b1b69597c/sp_database_mcp-0.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1a5c714c459f846bec2769871f5b9a07b4fc46cf36836e317ff755fa2e03d252",
"md5": "e7feca54f0e4f1c728a326a3ad5e9a20",
"sha256": "5569be3903cdca52a2c56cbdccc138379748692a5b5b8e921f3d2d601045273e"
},
"downloads": -1,
"filename": "sp_database_mcp-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "e7feca54f0e4f1c728a326a3ad5e9a20",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 12289,
"upload_time": "2025-07-30T08:52:15",
"upload_time_iso_8601": "2025-07-30T08:52:15.130292Z",
"url": "https://files.pythonhosted.org/packages/1a/5c/714c459f846bec2769871f5b9a07b4fc46cf36836e317ff755fa2e03d252/sp_database_mcp-0.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 08:52:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "alexliu",
"github_project": "sp-database-mcp#readme",
"github_not_found": true,
"lcname": "sp-database-mcp"
}