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
26 lines
667 B
Python
26 lines
667 B
Python
"""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(),
|
|
}
|