Sakila MCP Server

Sakila MCP Server

Enables natural language interaction with MySQL Sakila database through intent-based tools for movie search, customer management, rental operations, and business analytics without exposing database schema.

Category
访问服务器

README

Sakila MCP Server

MySQL(Sakilaデータベース)にアクセスするMCPサーバーのPython実装です。

概要

このプロジェクトは、Model Context Protocol (MCP) を使用して、LLM(Claude等)からSakilaデータベースに自然言語でアクセスできるようにします。

Intent-Based API設計を採用し、データベーススキーマを非公開としながら、ビジネス意図ベースの18種類のツールを提供します。

システム構成

┌─────────────────┐                         ┌─────────────────┐
│  ユーザー        │  自然言語               │  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 顧客検索 name, email, store_id, active_only
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接続情報

項目
Host localhost
Port 3306
Database sakila
User sakila_user
Password sakila_pass

セキュリティ

実装済み対策

  • パラメータ化クエリ: すべてのユーザー入力は%sプレースホルダー経由
  • 入力検証: 許可値リストによるバリデーション
    • rating: G, PG, PG-13, R, NC-17
    • store_id: 1, 2
    • period: all_time, last_month, last_week
  • 数値制限: 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テスト)

ドキュメント

参考資料

ライセンス

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选