sales-db

sales-db

Enables natural language querying of a sales SQLite database. Provides read-only SQL execution and database statistics tools, allowing AI to answer sales questions using everyday Japanese.

Category
访问服务器

README

売上データベース MCP サーバー チュートリアル

「先月いちばん売れた GPU はどれ?」とふつうの日本語で聞くと、AI が自分で SQL を組み立てて 売上データベースに問い合わせ、集計結果まで答えてくれる——それを実現する MCP サーバーのサンプルです。

Python + FastMCP で書かれています。 解説記事は Qualiteg Blog に掲載しています。

クイックスタート

git clone https://github.com/qualiteg/mcp-server-tutorial.git
cd mcp-server-tutorial
python -m pip install -r requirements.txt
python db_setup.py

pip ではなく python -m pip を使ってください。pip だと、MCP サーバーを起動する Python と 別の環境に入ってしまうことがあります。

db_setup.py は固定シードで架空のデータを生成します(実在の企業・人物・価格とは関係ありません)。 誰が実行しても同じデータになるので、記事の実行結果と一致します。

  • customers … 顧客マスター 500 人
  • products … 商品マスター 72 種類(PC パーツ 8 カテゴリ)
  • sales_transactions … 売上明細 4,000 件(2024-01-01 〜 2026-12-31)

Claude Code から使う

claude mcp add sales-db -- python /path/to/mcp-server-tutorial/mcp_server_sales.py
claude mcp list

claude mcp list✔ Connected と出れば、AI からこのサーバーが見えています。 うまく繋がらないときは、Python とスクリプトを絶対パスで指定してください。仮想環境を使っている場合は、 その中の Python を指す必要があります。

claude -p "職業別の売上トップ3を教えて"
  • 「2025年に発売されたハイエンドGPUで、売上が多い順に並べて」
  • 「月別の売上推移を出して、いちばん売れた月は?」

stdio で使う場合、python mcp_server_sales.py を手動で起動しておく必要はありません。 登録したコマンドは Claude Code が子プロセスとして起動します。サーバー単体の動きを確認したいときだけ 手動で起動してください。

提供しているツール

ツール 役割
get_database_stats テーブル構造・件数・データ期間・カテゴリ別売上の要約を返す
execute_sql_query SELECT 文を実行して結果を返す

業務ごとに「売上集計ツール」「顧客分析ツール」と関数を並べる設計もできますが、SQL を書けるのは AI 側なので、汎用の SQL 実行ツールを 1 本渡すほうが応用が利きます。そのぶん安全側の手当てが サーバーの責任になるので、役割の違う 3 つの安全弁を設けています。

  1. 読み取り専用の接続: SQLite を mode=ro で開く。書き込みは接続そのものが拒む
  2. SQL の補助フィルター: SELECT 以外の文と書き換え系キーワードを早い段階で落とす (構文解析ではないので、これは補助的な位置づけ)
  3. 実行時間の上限: 10 秒を超えるクエリを実時間で中断する(リソース保護のため)

あわせて、AI へ返す行数を 50 行までに制限しています。AI は平気で SELECT * FROM sales_transactions を投げてくるので、返す量はサーバー側で決めます。ただし制限しているのは返却行数だけで、SQLite から 読み込む件数は制限していません。大規模データでは fetchmany や SQL 側の LIMIT を検討してください。

安全弁が効いているかは verify.py で確認できます。

python verify.py

HTTP サーバーとして動かす

独立して常駐させ、ネットワーク経由で使う場合は Streamable HTTP で起動します。

python mcp_server_sales.py --http --port 9904
  • MCP エンドポイント: http://127.0.0.1:9904/mcp
  • ヘルスチェック: http://127.0.0.1:9904/health

既定の待受は 127.0.0.1(ローカルのみ)です。 このサンプルには認証がありません。 --host 0.0.0.0 や LAN 内の IP を指定すると、到達できる相手なら誰でも SQL を実行できてしまいます。 そのまま共有環境や外部へ公開しないでください(指定した場合は起動時に警告が出ます)。

外へ出すなら、HTTPS、認証と認可、接続元の制限、Origin 検証、監査ログを前段に置く前提になります。

Web 版の ChatGPT・Claude から使いたい場合

ChatGPT や Claude は、構成によっては認証なしのリモート MCP にも接続できます。ただし、社内データベースへ 到達するサーバーを無認証で公開する構成は採用できません。解説記事の後編では、MCP Authorization 仕様に 沿った OAuth 認証を使う方法を紹介しています。

動作環境

  • Python 3.10 以降
  • FastMCP 3.4.5 以上 4 未満

このサンプルは仕組みを理解するための最小構成です。複数人が同時に使う場面では、同期的な DB 処理を スレッドへ逃がす、同時実行数を絞る、DB 側のタイムアウトを設けるといった手当てが別に要ります。

ライセンス

MIT License. サンプルコードなので自由に改変してお使いください。

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选