mcpField
D
Database MCP Server

Database MCP Server

ローカル
github.com/georgi-terziyskiデータベース384 週間前に更新

Database MCP Server について

Database MCP Serverは、開発者やLLMを使うデータベースワークフロー向けに、SQLite、PostgreSQL、MySQL/MariaDB、SQL Serverへの接続を提供します。共通操作に加え、必要に応じて各データベース固有のツールも備えています。

主な機能

  1. 014種類のデータベースへの接続
  2. 02SQLおよび構造化クエリの実行
  3. 03テーブルとインデックスの管理
  4. 04トランザクションの開始・確定・ロールバック
  5. 05実行時の接続設定

活用シーン

  1. 01対応データベースのレコード検索
  2. 02データベーススキーマの作成・変更
  3. 03データベース接続の管理
  4. 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)

ライセンス

MIT ライセンス

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。