MCP Database Manager

MCP Database Manager

Self-documenting MCP server enabling AI agents to autonomously create, manage, and query SQLite databases with enforced metadata requirements for discoverability.

Category
Visit Server

README

MCP Database Manager

AIエージェントが自律的にデータを蓄積・管理できる、セルフドキュメンティング型MCPサーバー

特徴

🤖 AIファースト設計

  • 事前知識不要: AIエージェントがMCPに接続するだけで、使い方を完全に理解できる
  • セルフドキュメンティング: 全ツールに詳細な日本語説明、使用例、エラーガイド付き
  • メタデータ必須: データベース/テーブル/カラムすべてに説明が必須(5文字以上)

🧰 汎用DBオペレーション強化(v2)

  • トランザクションAPI: execute_transaction_tool で複数操作をアトミックに実行
  • バルク挿入最適化: bulk_insert_optimized_tool で大量データを高速に投入
  • Prepared Statement管理: prepare_statement_tool 系列で繰り返しクエリを高速化
  • バッチクエリ実行: execute_batch_queries_tool で複数SELECTを一括処理
  • DBメタ情報拡張: get_database_info_tool がインデックス・外部キー・PRAGMAを返却

🔍 発見可能性

  • 使い方ガイドツール: get_usage_guide_tool で全体像を即座に把握
  • 情報階層ツール: DB一覧 → DB詳細 → テーブル詳細と段階的に探索可能
  • サンプルデータ表示: テーブル情報取得時に実データ3件を自動表示

🔒 安全性

  • トランザクション管理(ロールバック対応)
  • ファイルシステム隔離(databases/ディレクトリ内のみ)
  • データベース削除時の2段階確認

クイックスタート

1. uvのインストール

まず、uvパッケージマネージャーをインストールします:

curl -LsSf https://astral.sh/uv/install.sh | sh

インストール後、シェルを再起動するか、以下のコマンドでPATHに追加します:

source $HOME/.local/bin/env

2. 依存関係のインストール

# プロジェクトディレクトリに移動
cd /path/to/mcp-agent-external-memory

# 依存関係のインストール
uv sync

3. MCP設定

Claude Desktopの場合

~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "database-manager": {
      "command": "/Users/your-username/.local/bin/uv",
      "args": [
        "--directory",
        "/absolute/path/to/mcp-agent-external-memory",
        "run",
        "src/server.py"
      ]
    }
  }
}

重要:

  • /Users/your-username/.local/bin/uvuvの実際のパスに置き換えてください(which uvで確認できます)
  • /absolute/path/to/mcp-agent-external-memory を実際のプロジェクトパスに置き換えてください

Cursorの場合

プロジェクトルートに.mcp.jsonまたは.cursor/mcp.jsonを作成:

{
  "mcpServers": {
    "database-manager": {
      "command": "/Users/your-username/.local/bin/uv",
      "args": [
        "--directory",
        "/absolute/path/to/mcp-agent-external-memory",
        "run",
        "src/server.py"
      ]
    }
  }
}

注意: Cursorの環境ではuvコマンドがPATHに含まれていない場合があるため、フルパスを指定することを推奨します。

4. 再起動

Claude DesktopまたはCursorを再起動して設定を反映させます。

AIエージェント向けガイド

Step 1: 使い方を理解する

MCPに接続したら、まず get_usage_guide_tool() を呼び出してください。このツール1つで、サーバーの全体像、スキーマ形式、ワークフロー、ベストプラクティスが分かります。

Step 2: 既存DBを確認する

list_databases_tool() でDB一覧を取得できます。各DBの目的、テーブル数、レコード数が表示されます。

Step 3: DB詳細を理解する

気になるDBがあれば、get_database_info_tool(database_name) で詳細を取得。データベースの説明、スキーマ情報、作成日時などが分かります。

Step 4: テーブル構造を把握する

get_table_info_tool(database_name, table_name) でテーブルの詳細を確認。各カラムの説明と実際のサンプルデータ(最大3件)が表示されます。

Step 5: 新規DBを作成する

メタデータ(説明文)を必ず含めて作成してください。スキーマ形式は get_usage_guide_tool() で確認できます。

create_database_tool(
    database_name="book_collection",
    schema={
        "database_description": "個人の蔵書を管理するデータベース",
        "tables": [{
            "table_name": "books",
            "table_description": "所有している書籍の情報を格納するテーブル",
            "columns": [
                {
                    "name": "id",
                    "type": "INTEGER",
                    "description": "書籍を一意に識別するID",
                    "constraints": "PRIMARY KEY AUTOINCREMENT"
                },
                {
                    "name": "title",
                    "type": "TEXT",
                    "description": "書籍のタイトル名",
                    "constraints": "NOT NULL"
                }
            ]
        }]
    }
)

提供ツール(全18種)

ツール名 用途 必須パラメータ
get_usage_guide_tool 使い方ガイドを取得 なし
list_databases_tool DB一覧を取得 なし
get_database_info_tool DB詳細情報・インデックス・PRAGMAを取得 database_name
get_table_info_tool テーブル詳細とサンプルデータを取得 database_name, table_name
create_database_tool 新規DB作成(メタデータ必須) database_name, schema
create_table_from_csv_tool CSVから新規テーブル作成+一括インポート database_name, table_name, csv_path, table_description, column_descriptions
export_data_tool テーブル/DB全体をCSV/JSONにエクスポート database_name, output_path, table_name(オプション), format(オプション)
insert_data_tool データ挿入 database_name, table_name, data
query_data_tool SQL実行(SELECT/UPDATE/DELETE/ALTER等) database_name, sql_query
execute_transaction_tool 複数操作をアトミックに実行 database_name, operations
bulk_insert_optimized_tool 大量データをバッチ挿入 database_name, table_name, records
prepare_statement_tool Prepared Statementを作成 database_name, statement_id, sql
execute_prepared_tool Prepared Statementを実行 database_name, statement_id, params
close_prepared_tool Prepared Statementをクローズ database_name, statement_id
execute_batch_queries_tool 複数クエリを一括実行 database_name, queries
store_markdown_to_record_tool Markdownファイルの内容をレコード・カラムに格納 database_name, table_name, record_identifier, column_name, md_file_path
get_schema_tool スキーマ取得(互換目的) database_name, table_name
delete_database_tool DB削除(2段階確認) database_name, confirm

メタデータ必須ポリシー

このサーバーでは、すべてのデータベース、テーブル、カラムに5文字以上の説明が必須です。これにより、1週間後や他のAIエージェントでも、DBの目的と構造を即座に理解できます。

必須項目

  • database_description: データベースの目的(5文字以上)
  • table_description: テーブルの役割(5文字以上)
  • column.description: 各カラムの意味(5文字以上)

バリデーション

メタデータが不足している場合、詳細なエラーメッセージで修正方法を案内します。

使用例

シナリオ1: 蔵書管理

ユーザー: 「私の本をデータベースで管理したい」

AIの動作:
1. create_database_tool で book_collection を作成
2. insert_data_tool で書籍データを挿入
3. query_data_tool で「読了」した本を検索
4. 結果をユーザーに報告

シナリオ2: CSVファイルからテーブル作成

ユーザー: 「このCSVファイルをデータベースにインポートして」

AIの動作:
1. CSVファイルのヘッダー行を確認
2. 各カラムの説明文(5文字以上)を準備
3. create_table_from_csv_tool で新規テーブル作成+一括データ挿入
   - データ型は自動推測(INTEGER, REAL, TEXT)
   - PRIMARY KEYも指定可能
4. get_table_info_tool でインポート結果を確認

シナリオ3: 既存DBの再利用

ユーザー: 「1週間前に作ったDBに追加データを入れて」

AIの動作:
1. list_databases_tool でDB一覧確認
2. get_database_info_tool で目的のDBを特定
3. get_table_info_tool でスキーマ確認
4. insert_data_tool で新データ追加

検証結果

外部AIエージェント(Claude Sonnet 4.5)による検証テスト結果:

  • 事前知識: ゼロ
  • 所要時間: 8分
  • 完了シナリオ: 4/4(全成功)
  • 評価: 5点/5点(全項目満点)
  • 推奨度: 強く推奨

主なフィードバック:

  • "get_usage_guide_toolが秀逸。これ一つで全体像を完全に把握できた"
  • "メタデータ必須設計により、後から見ても理解できる"
  • "サンプルデータ表示が実用的。説明だけでなく実例で理解できる"

詳細: tests/validation/MCP_TEST_REQUEST_COMPLETED.md

新しいスモークテスト

tests/test_server.py を実行すると、トランザクション/バルク挿入/Prepared Statement/バッチクエリなど v2で追加された汎用機能を含む包括的なスモークテストが走ります。

uv run python tests/test_server.py

全テストが成功すると、各機能の実行ログと結果がコンソールに表示されます。

ディレクトリ構成

mcp-agent-external-memory/
├── src/
│   ├── server.py          # MCPサーバー(FastMCP)
│   └── db_operations.py   # DB操作ロジック
├── tests/
│   ├── test_server.py     # 単体テスト
│   └── validation/        # 外部検証テスト結果
│       ├── MCP_TEST_REQUEST.md
│       └── MCP_TEST_REQUEST_COMPLETED.md
├── databases/             # DBファイル保存先(.gitignore)
├── design/
│   └── 設計書.md
├── pyproject.toml
└── README.md

トラブルシューティング

MCPサーバーが起動しない

uvコマンドが見つからない(ENOENTエラー)

Cursorなどの環境では、uvコマンドがPATHに含まれていない場合があります。設定ファイルでuvのフルパスを指定してください:

{
  "mcpServers": {
    "database-manager": {
      "command": "/Users/your-username/.local/bin/uv",
      ...
    }
  }
}

uvのパスを確認する方法:

# uvのインストール場所を確認
which uv
# または
echo $HOME/.local/bin/uv

# uvがインストールされていない場合は再インストール
curl -LsSf https://astral.sh/uv/install.sh | sh

その他の確認事項

# uvが正しくインストールされているか確認
uv --version

# 依存関係を再インストール
uv sync

# 設定ファイルのパスを確認(src/server.py を含める)
# MCPサーバーを直接実行してテスト
uv run src/server.py

スキーマ定義エラー

エラーメッセージに従って修正してください。よくあるエラー:

  • メタデータが5文字未満
  • database_description が未定義
  • columns 配列に description フィールドがない

get_usage_guide_tool() でスキーマ形式の例を確認できます。

データベースが見つからない

# すべてのDBを確認
list_databases_tool()

# 特定のDBの詳細を確認
get_database_info_tool(database_name="your_database")

ライブラリとして使用する

このパッケージはMCPサーバーとしてだけでなく、Pythonライブラリとしても使用できます。 他のMCPサーバーやPythonアプリケーションから直接インポートして使用できます。

インストール

# 開発モードでインストール(推奨)
pip install -e /path/to/mcp-agent-external-memory

# または、パッケージ化してから
cd /path/to/mcp-agent-external-memory
pip install .

基本的な使い方

from database_manager import (
    create_database,
    insert_data,
    query_data,
    get_database_info,
    execute_transaction,
    bulk_insert_optimized,
)

# データベース作成
create_database(
    database_name="my_app",
    schema={
        "database_description": "アプリケーション用データベース",
        "tables": [{
            "table_name": "users",
            "table_description": "ユーザー情報を格納",
            "columns": [{
                "name": "id",
                "type": "INTEGER",
                "description": "ユーザーID",
                "constraints": "PRIMARY KEY AUTOINCREMENT"
            }]
        }]
    }
)

# データ挿入
insert_data(
    database_name="my_app",
    table_name="users",
    data={"name": "Alice", "email": "alice@example.com"}
)

# クエリ実行
result = query_data(
    database_name="my_app",
    sql_query="SELECT * FROM users WHERE name = 'Alice'"
)

# トランザクション実行
execute_transaction(
    database_name="my_app",
    operations=[
        {"type": "insert", "table_name": "users", "data": {...}},
        {"type": "query", "sql": "UPDATE ...", "params": [...]}
    ]
)

データベースディレクトリの設定

環境変数 MCP_DB_DIR でデータベースファイルの保存先を変更できます:

export MCP_DB_DIR=/shared/databases
python your_app.py

デフォルトは databases/ ディレクトリ(パッケージルートからの相対パス)です。

他のMCPサーバーから使用する例

# umw-mcp/server.py など
from database_manager import insert_data

@mcp.tool()
def capture_page_tool(url: str) -> dict:
    # Playwrightでページ取得
    markdown = get_page_as_markdown(url)
    
    # 共通DBに直接保存(LLM経由ではない)
    result = insert_data(
        database_name="umw_survey",
        table_name="page_captures",
        data={
            "url": url,
            "markdown": markdown,
            "captured_at": datetime.now().isoformat()
        }
    )
    return result

公開API一覧

以下の関数が公開されています:

  • create_database - データベース作成
  • insert_data - データ挿入
  • query_data - SQLクエリ実行
  • get_table_schema - テーブルスキーマ取得
  • get_table_info - テーブル詳細情報取得
  • get_database_info - データベース詳細情報取得
  • list_all_databases - データベース一覧取得
  • delete_database - データベース削除
  • create_table_from_csv - CSVからテーブル作成
  • export_table_to_csv - テーブルをCSVにエクスポート
  • execute_transaction - トランザクション実行
  • bulk_insert_optimized - バルク挿入最適化
  • prepare_statement - Prepared Statement作成
  • execute_prepared - Prepared Statement実行
  • close_prepared - Prepared Statementクローズ
  • execute_batch_queries - バッチクエリ実行

詳細は各関数のdocstringを参照してください。

技術スタック

  • Python: 3.10+
  • MCP Framework: FastMCP
  • Database: SQLite
  • Package Manager: uv

ライセンス

MIT License

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured