MCP Database Manager
Self-documenting MCP server enabling AI agents to autonomously create, manage, and query SQLite databases with enforced metadata requirements for discoverability.
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/uvをuvの実際のパスに置き換えてください(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
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.