Lukynnnn's picture
Upload folder using huggingface_hub
93166d0 verified
Raw
History Blame Contribute Delete
2.83 kB
"""Entry point for MCP Database Server."""
import asyncio
import os
import sys
import logging
from urllib.parse import urlparse
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
stream=sys.stderr,
)
logger = logging.getLogger("mcp-db")
def _parse_url(url: str) -> tuple[str, dict]:
"""Parse DATABASE_URL into engine name and connection kwargs."""
parsed = urlparse(url)
scheme = parsed.scheme.lower()
if scheme == "sqlite":
if parsed.path == ":memory:" or parsed.netloc + parsed.path == ":memory:":
return "sqlite", {"path": ":memory:"}
path = parsed.netloc + parsed.path
if path.startswith("/") and len(path) > 1:
path = path[1:]
return "sqlite", {"path": path}
if scheme in ("postgresql", "postgres"):
host = parsed.hostname or "localhost"
port = parsed.port or 5432
database = parsed.path.lstrip("/") or "postgres"
user = parsed.username
password = parsed.password
return "postgresql", {
"host": host,
"port": port,
"database": database,
"user": user,
"password": password,
}
if scheme == "mysql":
host = parsed.hostname or "localhost"
port = parsed.port or 3306
database = parsed.path.lstrip("/") or "mysql"
user = parsed.username
password = parsed.password
return "mysql", {
"host": host,
"port": port,
"database": database,
"user": user,
"password": password,
}
if scheme in ("mssql", "sqlserver"):
host = parsed.hostname or "localhost"
port = parsed.port or 1433
database = parsed.path.lstrip("/") or "master"
user = parsed.username
password = parsed.password
return "mssql", {
"host": host,
"port": port,
"database": database,
"user": user,
"password": password,
}
raise ValueError(f"Unsupported DATABASE_URL scheme: {scheme}")
async def main():
from mcp_database_universal.config import DatabaseConfig
from mcp_database_universal.engines import get_engine
from mcp_database_universal.server import create_server
config = DatabaseConfig.from_env()
engine = get_engine(config.url)
await engine.connect()
server = await create_server(config, engine)
logger.info("MCP Database Server starting (STDIO transport)")
await server.run_stdio_async()
if __name__ == "__main__":
if sys.platform == "win32":
# psycopg async does not work with ProactorEventLoop (Windows default)
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())