使用说明
数据查询服务器-MCP
MCP(模型上下文协议)服务器,使LLM能够通过DuckDB集成使用SQL查询数据集。
特性
- SQL查询执行:对预加载的数据集执行SQL查询
- 架构检查:探索表结构和元数据
- 示例数据集:包括用于演示的销售和客户数据
- Docker支持:使用Docker和Docker compose轻松部署
- 类型安全:提高代码质量的完整类型提示
快速开始
1.安装依赖项
uv sync --dev --all-extras
2.运行服务器
uv run python -m data_query_server
3.使用Docker
# Build and run with docker-compose
docker-compose up --build
# Or build manually
docker build -t data-query-server .
docker run -v ./data:/app/data data-query-server
使用预构建图像
Docker镜像在每次发布时都会自动构建并发布到GitHub容器注册表:
# Pull the latest image
docker pull ghcr.io/cboettig/mcp-server:latest
# Run with the pre-built image
docker run --rm ghcr.io/cboettig/mcp-server:latest
# Or use with docker-compose by updating the image reference
# image: ghcr.io/cboettig/mcp-server:latest
可用标签:
latest:主分支的最新稳定版本v1.0.0:特定版本标签main:主分行最新消息
可用工具
MCP服务器为LLM提供以下工具:
sql_query:对数据集执行SQL查询describe_table:获取特定表的架构和元数据list_tables:列出所有可用的表格及其说明
示例数据集
服务器附带了两个预加载的数据集:
销售表
order_id:唯一订单标识符customer_id:客户参考product:产品名称(产品A、B、C)quantity:订购的物品数量price:每件商品的价格order_date:订单日期
客户表
customer_id:唯一客户标识符name:客户名称email:客户电子邮件地址city:客户所在城市registration_date:客户注册日期
查询示例
-- Top selling products
SELECT product, SUM(quantity * price) as revenue
FROM sales
GROUP BY product
ORDER BY revenue DESC;
-- Customer order history
SELECT c.name, COUNT(s.order_id) as order_count, SUM(s.quantity * s.price) as total_spent
FROM customers c
JOIN sales s ON c.customer_id = s.customer_id
GROUP BY c.customer_id, c.name
ORDER BY total_spent DESC;
-- Monthly sales trends
SELECT
strftime('%Y-%m', order_date) as month,
COUNT(*) as orders,
SUM(quantity * price) as revenue
FROM sales
GROUP BY strftime('%Y-%m', order_date)
ORDER BY month;
发展
项目结构
src/
├── data_query_server/
│ ├── __init__.py
│ ├── __main__.py
│ └── server.py # Main MCP server implementation
data/ # DuckDB database files
datasets/ # Additional dataset files
.vscode/
├── mcp.json # MCP server configuration
└── tasks.json # VS Code tasks
配置
MCP服务器配置在 .vscode/mcp.json:
{
"servers": {
"data-query-server": {
"type": "stdio",
"command": "uv",
"args": ["run", "python", "-m", "data_query_server"]
}
}
}
添加新数据集
要向服务器添加新数据集,请执行以下操作:
- 将CSV文件放入
datasets/目录 - 修改
load_sample_datasets()方法inserver.py - 更新
available_datasets元数据
例子:
# Load your CSV data
new_data = pd.read_csv('datasets/your_data.csv')
# Create table in DuckDB
self.conn.execute("CREATE OR REPLACE TABLE your_table AS SELECT * FROM new_data")
# Add metadata
self.available_datasets['your_table'] = {
'description': 'Description of your dataset',
'columns': list(new_data.columns),
'row_count': len(new_data)
}
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加测试
- 提交拉取请求
许可证
MIT许可证
- 每个笔记资源都有一个名称、描述和文本/纯MIME类型
鼓励
服务器提供一个提示:
- 总结笔记:创建所有存储笔记的摘要
- 可选的“style”参数,用于控制详细程度(简短/详细)
- 生成将所有当前注释与样式首选项组合的提示
工具
服务器实现了一个工具:
- 添加注释:向服务器添加新注释
- 将“name”和“content”作为必需的字符串参数
- 更新服务器状态并通知客户端资源更改
配置
[TODO:添加特定于您的实现的配置详细信息]
快速启动
安装
克劳德桌面
在MacOS上: ~/Library/Application\ Support/Claude/claude_desktop_config.json
在Windows上: %APPDATA%/Claude/claude_desktop_config.json
Development/Unpublished Servers Configuration
``` "mcpServers": { "data-query-server": { "command": "uv", "args": [ "--directory", "/home/cboettig/Documents/github/schmidtdse/mcp-server", "run", "data-query-server" ] } } ```Published Servers Configuration
``` "mcpServers": { "data-query-server": { "command": "uvx", "args": [ "data-query-server" ] } } ```发展
建筑与出版
准备分发包裹:
- 同步依赖关系并更新锁文件:
uv sync
- 构建包分发:
uv build
这将在 dist/ 目录。
- 发布到PyPI:
uv publish
注意:您需要通过环境变量或命令标志设置PyPI凭据:
- 令牌:
--token或UV_PUBLISH_TOKEN - 或用户名/密码:
--username/UV_PUBLISH_USERNAME和--password/UV_PUBLISH_PASSWORD
调试
由于MCP服务器在stdio上运行,调试可能具有挑战性。为了达到最佳调试效果 经验,我们强烈建议使用 MCP检查员.
您可以通过以下方式启动MCP检查器 npm 使用此命令:
npx @modelcontextprotocol/inspector uv --directory /home/cboettig/Documents/github/schmidtdse/mcp-server run data-query-server
启动后,检查器将显示一个URL,您可以在浏览器中访问该URL以开始调试。