Skip to main content
Glama
main.py2.89 kB
#!/usr/bin/env python """Main entry point for the Zettelkasten MCP server.""" import argparse import logging import os import sys from pathlib import Path from sqlalchemy.engine.url import make_url from zettelkasten_mcp.config import config from zettelkasten_mcp.models.db_models import init_db from zettelkasten_mcp.server.mcp_server import ZettelkastenMcpServer from zettelkasten_mcp.utils import setup_logging def parse_args(): """Parse command line arguments.""" parser = argparse.ArgumentParser(description="Zettelkasten MCP Server") parser.add_argument( "--notes-dir", help="Directory for storing note files", type=str, default=os.environ.get("ZETTELKASTEN_NOTES_DIR"), ) parser.add_argument( "--database", dest="database", help="SQLite file path or SQLAlchemy URL for the index database", type=str, default=None, ) parser.add_argument( "--database-path", dest="database", help=argparse.SUPPRESS, type=str, default=None, ) parser.add_argument( "--database-url", dest="database", help=argparse.SUPPRESS, type=str, default=None, ) parser.add_argument( "--log-level", help="Logging level", choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], default=os.environ.get("ZETTELKASTEN_LOG_LEVEL", "INFO"), ) return parser.parse_args() def update_config(args): """Update the global config with command line arguments.""" if args.notes_dir: config.notes_dir = Path(args.notes_dir) database_value = getattr(args, "database", None) if database_value: config.database = database_value def main(): """Run the Zettelkasten MCP server.""" # Parse arguments and update config args = parse_args() update_config(args) # Set up logging setup_logging(args.log_level) logger = logging.getLogger(__name__) # Ensure directories exist notes_dir = config.get_absolute_path(config.notes_dir) notes_dir.mkdir(parents=True, exist_ok=True) # Initialize database schema try: db_url = config.get_db_url() if config.uses_sqlite(): logger.info(f"Using SQLite database: {db_url}") else: safe_url = make_url(db_url).render_as_string(hide_password=True) logger.info(f"Using database URL: {safe_url}") init_db() except Exception as e: logger.error(f"Failed to initialize database: {e}") sys.exit(1) # Create and run the MCP server try: logger.info("Starting Zettelkasten MCP server") server = ZettelkastenMcpServer() server.run() except Exception as e: logger.error(f"Error running server: {e}") sys.exit(1) if __name__ == "__main__": main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Liam-Deacon/zettelkasten-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server