Database MCP Server について
Database MCP Serverは、開発者やLLMを使うデータベースワークフロー向けに、SQLite、PostgreSQL、MySQL/MariaDB、SQL Serverへの接続を提供します。共通操作に加え、必要に応じて各データベース固有のツールも備えています。
主な機能
- 014種類のデータベースへの接続
- 02SQLおよび構造化クエリの実行
- 03テーブルとインデックスの管理
- 04トランザクションの開始・確定・ロールバック
- 05実行時の接続設定
活用シーン
- 01対応データベースのレコード検索
- 02データベーススキーマの作成・変更
- 03データベース接続の管理
- 04トランザクションによる変更の整理
MCP 対応
MCPクライアントにデータベース接続、クエリ、スキーマ、トランザクションのツールを提供します。単独のWebサーバーとしても実行でき、HTTPエンドポイントからツール一覧の取得や呼び出しが可能です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
データベース MCP サーバー
さまざまなデータベースシステムへの接続と操作に使用するツールを提供する、Model Context Protocol(MCP)サーバーです。
特長
- 複数のデータベースをサポート:SQLite、PostgreSQL、MySQL/MariaDB、SQL Server のデータベースに接続できます
- 統一されたインターフェース:サポート対象のすべてのデータベースで共通のデータベース操作ツールを使用できます
- データベース固有の拡張機能:必要に応じて、データベース固有の機能に対応する専用ツールを提供します
- スキーマ管理:テーブルやインデックスの作成、変更、削除ができます
- クエリ実行:生の SQL クエリを実行するか、構造化クエリツールを使用できます
- トランザクションのサポート:トランザクションの開始、コミット、ロールバックができます
インストール
前提条件
- Python 3.8 以降
- 必要な Python パッケージ(pip で自動的にインストールされます):
- SQLAlchemy
- 使用するデータベースに応じた各種データベースドライバー:
- SQLite(Python に同梱)
- PostgreSQL:
psycopg2-binary - MySQL/MariaDB:
mysql-connector-python - SQL Server:
pyodbc
ソースからのインストール
# Clone the repository
git clone <repository-url>
# Install the package
pip install -e .
設定
サーバーは、環境変数、設定ファイル、または実行時に指定する接続情報を使って設定できます。
環境変数
DB_CONFIG_PATH:JSON 設定ファイルへのパスDB_CONNECTIONS:接続 ID のカンマ区切りリスト、または接続情報を含む JSON 文字列
設定ファイルの形式
{
"connections": {
"sqlite_conn": {
"type": "sqlite",
"db_path": "/path/to/database.db"
},
"postgres_conn": {
"type": "postgres",
"host": "localhost",
"port": 5432,
"database": "mydatabase",
"user": "myuser",
"password": "mypassword"
}
}
}
使用方法
サーバーの起動
Claude 用 MCP サーバーとして
# Run with default settings
python -m db_mcp_server
# Specify a configuration file
python -m db_mcp_server --config /path/to/config.json
# Set logging level
python -m db_mcp_server --log-level DEBUG
スタンドアロンのウェブサーバーとして(あらゆる LLM 向け)
# Run as a web server
python -m db_mcp_server.web_server
# Specify host and port
python -m db_mcp_server.web_server --host 0.0.0.0 --port 8000
# Specify configuration file and logging level
python -m db_mcp_server.web_server --config /path/to/config.json --log-level DEBUG
利用可能な MCP ツール
接続管理
add_connection:新しいデータベース接続を追加しますtest_connection:データベース接続をテストしますlist_connections:すべてのデータベース接続を一覧表示しますremove_connection:データベース接続を削除します
クエリ実行
execute_query:SQL クエリを実行しますget_records:テーブルからレコードを取得しますinsert_record:テーブルにレコードを挿入しますupdate_record:テーブル内のレコードを更新しますdelete_record:テーブルからレコードを削除します
スキーマ管理
list_tables:データベース内のすべてのテーブルを一覧表示しますget_table_schema:テーブルのスキーマを取得しますcreate_table:新しいテーブルを作成しますdrop_table:テーブルを削除しますcreate_index:テーブルにインデックスを作成しますdrop_index:インデックスを削除しますalter_table:テーブル構造を変更します
トランザクション管理
begin_transaction:トランザクションを開始しますcommit_transaction:トランザクションをコミットしますrollback_transaction:トランザクションをロールバックします
使用例
接続の追加
{
"connection_id": "my_sqlite_db",
"type": "sqlite",
"db_path": "/path/to/database.db"
}
クエリの実行
{
"connection_id": "my_sqlite_db",
"query": "SELECT * FROM users WHERE age > ?",
"params": [21]
}
テーブルの作成
{
"connection_id": "my_sqlite_db",
"table": "users",
"columns": [
{
"name": "id",
"type": "INTEGER",
"primary_key": true,
"nullable": false
},
{
"name": "name",
"type": "TEXT",
"nullable": false
},
{
"name": "email",
"type": "TEXT",
"nullable": true
}
]
}
レコードの挿入
{
"connection_id": "my_sqlite_db",
"table": "users",
"data": {
"name": "John Doe",
"email": "[email protected]"
}
}
開発
テストの実行
# Run all tests
python -m unittest discover
# Run specific test file
python -m unittest tests.test_sqlite
他の LLM からの接続
スタンドアロンのウェブサーバーとして実行している場合、他の LLM(Llama 3 など)は HTTP 経由でデータベース MCP サーバーに接続できます。サーバーは次のエンドポイントを公開します。
エンドポイント
/list_tools- GET または POST:説明と入力スキーマを含む、利用可能なすべてのツールのリストを返します/call_tool- POST:指定したデータベースツールを実行します
例:別の LLM からの呼び出し
このサーバーを別の LLM で使用するには、LLM にサーバーへの HTTP リクエストを生成させます。以下は、Llama 3 のような LLM 向けのプロンプトを構成する例です。
You can interact with a database by making HTTP requests to a database service at http://localhost:8000.
The service provides the following endpoints:
1. To get a list of available tools:
Make a POST request to: http://localhost:8000/list_tools
2. To execute a database tool:
Make a POST request to: http://localhost:8000/call_tool
with a JSON body like:
{
"name": "tool_name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}
For example, to execute a SQL query, you would make a request like:
POST http://localhost:8000/call_tool
Content-Type: application/json
{
"name": "execute_query",
"arguments": {
"connection_id": "my_db",
"query": "SELECT * FROM users"
}
}
クライアント連携用の Python コード例
import requests
import json
# Base URL of the database MCP server
BASE_URL = "http://localhost:8000"
# List available tools
def list_tools():
response = requests.post(f"{BASE_URL}/list_tools")
return response.json()
# Execute a database tool
def call_tool(tool_name, arguments):
payload = {
"name": tool_name,
"arguments": arguments
}
response = requests.post(f"{BASE_URL}/call_tool", json=payload)
return response.json()
# Example: List tables in a database
def list_tables(connection_id):
return call_tool("list_tables", {"connection_id": connection_id})
# Example: Execute a SQL query
def execute_query(connection_id, query, params=None):
return call_tool("execute_query", {
"connection_id": connection_id,
"query": query,
"params": params
})
# Example: Add a new connection
def add_connection(connection_id, db_type, **kwargs):
args = {"connection_id": connection_id, "type": db_type}
args.update(kwargs)
return call_tool("add_connection", args)
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。