2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsでClaudenのMCPを試してみる

Last updated at Posted at 2024-12-04

MCP(Model Context Protocol)を触ってみたので備忘録です。

MCPざっくり説明

一言で言うと、ファイルサーバやsqliteなどを制御するFunction Callingの塊を作って、簡単に自然言語でいろんなものを制御できるようにする仕組み、だと思っています。
リソースとの制御部分を一連のFunction Callingで実現するあたりが、プロトコルというところなのでしょう。
データソースを制御とあるけど、データソース以外でも定義すればなんでも制御できそうなのが面白い気がします。
今ここに書いた説明、数か月後には変わっていそうです。いろんな使い方が発明されるんじゃないかな。ロボット制御とか。

今回は、クイックスタートのSQLiteの例をWindowsでやってみます。
image.png

参考資料

AnthropicのMCPサイト
https://www.anthropic.com/news/model-context-protocol

Anthropicのgit-hub。
https://github.com/modelcontextprotocol

クイックスタート
https://modelcontextprotocol.io/quickstart

環境

Windows 10 Pro
python 3.
Claude Desktop(無料版でOK)
uv 0.4.18 以上
Git 2.28.0.windows.1
SQLite3

Claude Desktopのインストール

以下から環境にあうものをダウンロードして、インストール。
https://claude.ai/download

uvのインストール

以下実行。

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

gitのインストール

以下から適切なものを選びインストール。
https://git-scm.com/

sqliteのインストール

以下サイトからsqlite-tools-win-x64-3470100.zipをダウンロードし、解凍してみえるところにおいておきます。
https://www.sqlite.org/download.html

sqliteのDBのセットアップ

ターミナルでsql変数にsql構文をぶちこむ。どうやら、電化製品とその価格のデータのようです。

$sql = @'
CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name TEXT,
  price REAL
);

INSERT INTO products (name, price) VALUES
  ('Widget', 19.99),
  ('Gadget', 29.99),
  ('Gizmo', 39.99),
  ('Smart Watch', 199.99),
  ('Wireless Earbuds', 89.99),
  ('Portable Charger', 24.99),
  ('Bluetooth Speaker', 79.99),
  ('Phone Stand', 15.99),
  ('Laptop Sleeve', 34.99),
  ('Mini Drone', 299.99),
  ('LED Desk Lamp', 45.99),
  ('Keyboard', 129.99),
  ('Mouse Pad', 12.99),
  ('USB Hub', 49.99),
  ('Webcam', 69.99),
  ('Screen Protector', 9.99),
  ('Travel Adapter', 27.99),
  ('Gaming Headset', 159.99),
  ('Fitness Tracker', 119.99),
  ('Portable SSD', 179.99);
'@

echo ${sql}とかやると、CREATE以下が代入されていることがわかります。
この設定で、test.dbという名前のデータベースを作成。

./sqlite3 test.db ${sql}

Claude Desktop側の設定

テキスト エディターでClaude Desktop アプリの構成を開きます。
VSCのターミナルで以下。

code $env:AppData\Claude\claude_desktop_config.json

開いたファイルに、以下を記述。test.dbは、さきほど作成したtest.dbの格納場所を記載。

{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "C:\\Users\\YOUR_USERNAME\\test.db"
      ]
    }
  }
}

claude Desktopを再起動。アプリを消すだけではだめで、デスクトップの右下に隠れているウニみたいなやつをquitする必要があります。
image.png

再度起動すると、見事に「Could not connect to MCP server sqlite」というエラーがでました。Claudeデスクトップを管理者権限で実行していなかったのが原因の模様。管理者権限で起動しなおすとエラー消えました。
image.png

Claude DesktopからMCPを使う

「SQLiteのデータベースに接続して利用可能な製品とその値段をリスト化して」とお願いしてみます。

データベースに接続する前にちゃんと確認画面がでます。[Allow for This Chat]をクリック。この画面、三回くらいでて毎回、ぽちぽち押しました。
image.png

こちら結果です。
image.png

冒頭に3回ほど、sqlite関連のコマンドを実行しているようです。この回数分[Allow for This Chat]を押していた模様。
sqlite部分をひらいてみます。
どうやら、内部でlist-tables,describe-table,read-queryという3つのFunction-callingを読んでいる模様。
image.png

全部買った場合の金額もだしてくれます。
image.png

この金額合計も、SQL使って計算してるようですね。
View Result from list-tables from sqlite(local)をクリックすると、どんなSQL構文で計算したか見ることができます。
image.png

簡単な設定で自然言語でsqlデータベースいじれるのは便利です。

もう少しくわしく。

今回のsqlite用のMCPのソースコードは以下にあるようです。
https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite

どうやら、このサーバーには6つの主要なツールが含まれようです。以下一覧表。

1. クエリツール

ツール名 機能 入力 出力
read-query SELECTクエリを実行してデータを読み取る query(SQLクエリ文字列) 結果をオブジェクトの配列として返す
write-query INSERT、UPDATE、DELETEクエリを実行してデータを変更 query(SQLクエリ文字列) { affected_rows: 変更された行数 }
create-table 新しいテーブルを作成 query(CREATE TABLEステートメント) テーブル作成の確認メッセージ

2. スキーマツール

ツール名 機能 入力 出力
list-tables データベース内の全てのテーブル名を取得 なし テーブル名の配列
describe-table 特定のテーブルのスキーマ情報を表示 table_name(テーブル名) 列の定義(名前とデータ型)の配列

3. 分析ツール

ツール名 機能 入力 出力
append-insight ビジネスインサイトをメモリソース(memo://insights)に追加 insight(発見したインサイト) インサイト追加の確認メッセージ

サーバーの動作フロー

  1. データベース操作:

    • テーブルの作成(create-table
    • データの追加・変更・削除(write-query
    • データの読み取り(read-query
  2. スキーマ確認:

    • テーブル一覧の取得(list-tables
    • テーブルの構造を確認(describe-table
  3. ビジネス分析とインサイト生成:

    • データを分析し、新しいインサイトを発見
    • 発見したインサイトをメモリソースに追加(append-insight
    • memo://insightsが更新され、最新のインサイトが集約される

この6個のツールをうまく組み合わせて、データベースの中身を取得していたようです。
最初にデータベースの中身を一覧表にしたときには、スキーマツールのlist-tables,describe-tableと、クエリツールのread-queryの3つを順に使っていたということのようです。

他にも、新しいテーブルを作成したり、データを追加、削除したり、分析結果を格納したりといったことができるようです。
ためしに、保存機能を使ってみます。この会話の前に、コスパのよい商品を3つ挙げさせるという会話をしていました。コスパの良い3つの商品をビジネスインサイトとして保存してもらいます。
image.png

おや、エラーでましたね。再起動しても以下のようなエラーがでます。特に課金しているわけでもないので、これ以上は難しいようです。
image.png

ちなみに、このsqlite MCP Serverのソースコードは、以下にあります。
https://github.com/modelcontextprotocol/servers/blob/main/src/sqlite/src/mcp_server_sqlite/server.py

読んでみると、どうやらかなりデモ用としてつくられたもののようです。
デモ用のテンプレートであるmcp-demoが用意されています。
これを使えば、もう少し複雑なことができそうです。

たとえば、こんな感じ。
image.png

それっぽい出力はでてきますが、タイムアウトのオンパレードなので、実際はまともに動いていないですね。これが無課金の限界か。

まとめと所感

  • Anthropic claudeのsplite用MCPサーバーを設定して使ってみました
  • 6つのツールを組み合わせ、指示された内容を実現可能
  • 課金していないとタイムアウトが続発して動かない。
  • Server周りのFunction callingまわりやプロンプトの設定など、設計が大変そう。
  • 評価やテストはどうやるのか気になります

以上

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?