Skip to main content
Glama
main.py3.29 kB
""" Main entry point for OpenZIM MCP server. """ import argparse import atexit import sys from .config import OpenZimMcpConfig from .constants import TOOL_MODE_SIMPLE, VALID_TOOL_MODES from .exceptions import OpenZimMcpConfigurationError from .instance_tracker import InstanceTracker from .server import OpenZimMcpServer def main() -> None: """Main entry point for OpenZIM MCP server.""" # Parse command line arguments parser = argparse.ArgumentParser( description="OpenZIM MCP Server - Access ZIM files through MCP", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: # Simple mode (default - 2 intelligent tools) python -m openzim_mcp /path/to/zim/files python -m openzim_mcp --mode simple /path/to/zim/files # Advanced mode (all 15 tools) python -m openzim_mcp --mode advanced /path/to/zim/files Environment Variables: OPENZIM_MCP_TOOL_MODE - Set tool mode (advanced or simple) """, ) parser.add_argument( "directories", nargs="+", help="One or more directories containing ZIM files", ) parser.add_argument( "--mode", choices=list(VALID_TOOL_MODES), default=None, help=( f"Tool mode: 'advanced' for all 15 tools, 'simple' for 2 " f"intelligent tools (default: {TOOL_MODE_SIMPLE}, or from " f"OPENZIM_MCP_TOOL_MODE env var)" ), ) # Handle case where no arguments provided if len(sys.argv) == 1: parser.print_help(sys.stderr) sys.exit(1) args = parser.parse_args() try: # Create configuration with tool mode config_kwargs = {"allowed_directories": args.directories} if args.mode: config_kwargs["tool_mode"] = args.mode config = OpenZimMcpConfig(**config_kwargs) # Initialize instance tracker instance_tracker = InstanceTracker() # Register this server instance instance_tracker.register_instance( config_hash=config.get_config_hash(), allowed_directories=config.allowed_directories, server_name=config.server_name, ) # Register cleanup function def cleanup_instance() -> None: # Use silent mode to avoid logging during shutdown when logging system may be closed instance_tracker.unregister_instance(silent=True) atexit.register(cleanup_instance) # Create and run server server = OpenZimMcpServer(config, instance_tracker) mode_desc = ( "SIMPLE mode (2 intelligent tools)" if config.tool_mode == TOOL_MODE_SIMPLE else "ADVANCED mode (15 specialized tools)" ) print( f"OpenZIM MCP server started in {mode_desc}", file=sys.stderr, ) print( f"Allowed directories: {', '.join(args.directories)}", file=sys.stderr, ) server.run(transport="stdio") except OpenZimMcpConfigurationError as e: print(f"Configuration error: {e}", file=sys.stderr) sys.exit(1) except Exception as e: print(f"Server startup error: {e}", file=sys.stderr) 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/cameronrye/openzim-mcp'

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