使用说明
Sakila MCP服务器
MySQL(Sakila数据库)MCP服务器Python实施。
概要
此项目包括:模型上下文协议(MCP) 来修改标记元素的显示属性LLM(Claude等)开始Sakila允许使用自然语言访问数据库。
基于意图的API設計中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
系统配置
┌─────────────────┐ ┌─────────────────┐
│ ユーザー │ 自然言語 │ Claude (LLM) │
│ (Human) │ ─────────────────────► │ 意図理解 │
└─────────────────┘ └────────┬────────┘
│ ツール選択
▼
┌─────────────────┐ MCP Protocol ┌─────────────────┐
│ Claude Desktop │ ◄────────────────────► │ MCP Server │
│ (Host) │ stdio transport │ (Python) │
└─────────────────┘ └────────┬────────┘
│ SQL生成・実行
│ aiomysql
▼
┌─────────────────┐
│ MySQL 8.0 │
│ (Sakila DB) │
└─────────────────┘
设计思想
- 架构未公开:表结构、列名、FK关系概不公开
- 业务意图库:支持“搜索电影”“获取客户详细信息”等意图
- 重视安全性:参数化查询、输入验证、错误消息控制
提供工具(18种)
映画検索・情报系
|工具名称|功能|主要参数|
|---------|------|---------------|
| search_films 电影搜索(标题、类别、评级、演员名称)title, category, rating, actor_name, limit |
| get_film_details |映画详细取得(出演者・在库情报含む)|title |
| list_categories |获取类别列表|无|
| check_film_availability |在库・贷出状况确认|title, store_id |
顾客管理系
|工具名称|功能|主要参数|
|---------|------|---------------|
| search_customers | 顧客検索 | 姓名、电子邮件、store_id、仅限活动|
| get_customer_details 获取客户详细信息(包括地址和历史记录摘要)customer_id or email |
出租业务系
|工具名称|功能|主要参数|
|---------|------|---------------|
| get_customer_rentals 获取租赁历史记录customer_id, status |
| get_overdue_rentals | 延滞一覧取得 | store_id, days_overdue |
分析・报告系
|工具名称|功能|主要参数|
|---------|------|---------------|
| get_popular_films 人气电影排行榜period, category, store_id, limit |
| get_revenue_summary 销售汇总group_by, store_id, period |
| get_store_stats |店舗统计|store_id |
| get_actor_filmography |俳优の出演作品一覧|actor_name |
顾客分析系
|工具名称|功能|主要参数|
|---------|------|---------------|
| get_top_customers |优良顾客排行榜|metric (rentals/spending), period, limit |
| get_customer_segments |客户段分析|无(自动分类)|
| get_customer_activity |客户活动分析|period |
在库・商品分析系
|工具名称|功能|主要参数|
|---------|------|---------------|
| get_inventory_turnover |在库回转率分析|store_id, category |
| get_category_performance 按类别列出的性能period, store_id |
| get_underperforming_films | 低稼働作品一覧 | days_not_rented, store_id |
安装,安装
1.克隆存储库
git clone <repository-url>
cd sakila-mcp-server
2.设置环境变量
cp .env.example .env
# 必要に応じて .env を編集
3. MySQL 启动
docker compose up -d
首次启动时Sakila数据库将自动导入(约1-2分钟)。
4.安装相关性
uv sync
5.启动服务器(确认动作)
uv run sakila-mcp
Claude Desktop 连接到
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或在适当的配置文件中添加以下内容:
{
"mcpServers": {
"sakila": {
"command": "uv",
"args": ["--directory", "/path/to/sakila-mcp-server", "run", "sakila-mcp"]
}
}
}
使用例
Claude Desktop中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
映画検索
- “搜索动作片”
- 「PG-13请告诉我5部电影。“
- 「Tom Hanks出演的电影是?」
- “电影”ACADEMY DINOSAUR'请告诉我详细情况。“
顾客情报
- 「Smith的客户。“
- “客户ID 1给我看一个详细的信息。“
- “仅查找活动客户”
租赁业务
- “客户ID 1让我看看你的租车记录。“
- “滞纳的顾客是谁?”
- “确认店铺1的滞纳状况”
分析报表
- “请告诉我这个月的人气电影排行榜”
- “让我看看不同类别的销售汇总”
- “比较每个店铺的统计”
- “优质客户TOP10什么?”
在库分析
- “库存周转率低的电影是?”
- “按类别分析性能”
- “请告诉我30天以上没有租借的电影。”
开発
链接格式
# リント
uv run ruff check .
# リント(自動修正)
uv run ruff check --fix .
# フォーマット
uv run ruff format .
# フォーマットチェック
uv run ruff format --check .
测试
# 全テスト実行
uv run pytest
# ユニットテストのみ(DB不要)
uv run pytest -m "not integration"
# 統合テストのみ(DB起動後)
uv run pytest -m integration
# カバレッジ付き
uv run pytest --cov=sakila_mcp --cov-report=term-missing
DB接続情报
| 项目 | 値 |
|---|---|
| 主机 | localhost |
| 端口 | 3306 |
| 数据库 | |
| 用户 | sakila用户 |
| 密码 | sakila_pass |
安全性
实施的对策
- 参数化查询:所有用户输入
%s通过占位符 - 入力検证:使用允许值列表验证
- 评级:G、PG、PG-13、R、NC-17
- store_id:1,2
- 期间:所有时间、上个月、上周
- 等
- 数値制限: limit最多50件
- 字段限制:返还JSON仅需要字段
- 错误信息: SQL隐藏错误详细信息
目录配置
sakila-mcp-server/
├── CLAUDE.md # 開発ガイド(Claude Code用)
├── README.md # セットアップ手順(本ファイル)
├── docker-compose.yml # MySQL 8.0 + Sakila自動セットアップ
├── init/
│ └── 01-init-sakila.sh # Sakila DB 初期化スクリプト
├── pyproject.toml # 依存関係・ツール設定
├── .env.example # 環境変数テンプレート
├── sakila_mcp/
│ ├── __init__.py
│ └── server.py # MCPサーバー本体(18ツール実装)
└── tests/
├── __init__.py
├── conftest.py # 共通fixtures
└── test_server.py # サーバーテスト(43テスト)
文档
- CLAUDE.md -开发人员详细指南(体系结构、编码规则和测试模式)
- docs/SAKILA_DATABASE.md - Sakila数据库概述
- docs/MCP_Implement_PATTERNS.md - MCP安装模式指南
参考资料
许可证
麻省理工学院