feat: add direct database access for scripts (v0.2.0)
Implement persistent SQLite database feature that allows scripts to query schedule data directly via SQL after loading XER files through MCP. Key changes: - Extend load_xer with db_path parameter for persistent database - Add get_database_info tool to retrieve database connection details - Add schema introspection with tables, columns, primary/foreign keys - Support WAL mode for concurrent read access - Use atomic write pattern to prevent corruption New features: - db_path=None: in-memory database (default, backward compatible) - db_path="": auto-generate path from XER filename (.sqlite extension) - db_path="/path/to/db": explicit persistent database path Response includes complete DatabaseInfo: - db_path: absolute path (or :memory:) - is_persistent: boolean - source_file: loaded XER path - loaded_at: ISO timestamp - schema: tables with columns, primary keys, foreign keys, row counts Closes: User Story 1, 2, 3 from 002-direct-db-access spec
This commit is contained in:
25
src/xer_mcp/tools/get_database_info.py
Normal file
25
src/xer_mcp/tools/get_database_info.py
Normal file
@@ -0,0 +1,25 @@
|
||||
"""get_database_info MCP tool implementation."""
|
||||
|
||||
from xer_mcp.db import db
|
||||
|
||||
|
||||
async def get_database_info() -> dict:
|
||||
"""Get information about the currently loaded database.
|
||||
|
||||
Returns connection details for direct SQL access including
|
||||
database path, schema information, and metadata.
|
||||
|
||||
Returns:
|
||||
Dictionary with database info or error if no database loaded
|
||||
"""
|
||||
if not db.is_initialized:
|
||||
return {
|
||||
"error": {
|
||||
"code": "NO_FILE_LOADED",
|
||||
"message": "No XER file is loaded. Use the load_xer tool first.",
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
"database": db.get_database_info(),
|
||||
}
|
||||
Reference in New Issue
Block a user