#!/usr/bin/env python3 """ FleetMind API Key Generator Generate API keys for users to authenticate with FleetMind MCP Server. Usage: python generate_api_key.py python generate_api_key.py --email user@example.com --name "John Doe" python generate_api_key.py --list python generate_api_key.py --revoke user@example.com """ import argparse import sys from database.api_keys import generate_api_key, list_api_keys, revoke_api_key def main(): parser = argparse.ArgumentParser( description='FleetMind API Key Management', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: # Interactive mode (prompts for email and name) python generate_api_key.py # Generate key with arguments python generate_api_key.py --email alice@company.com --name "Alice Smith" # List all API keys python generate_api_key.py --list # Revoke a key python generate_api_key.py --revoke alice@company.com """ ) parser.add_argument('--email', help='User email address') parser.add_argument('--name', help='User display name') parser.add_argument('--list', action='store_true', help='List all API keys') parser.add_argument('--revoke', metavar='EMAIL', help='Revoke API key for email') args = parser.parse_args() # List API keys if args.list: print("\n" + "="*80) print("FLEETMIND API KEYS") print("="*80 + "\n") keys = list_api_keys() if not keys: print("No API keys found.\n") return for key in keys: status = "✅ Active" if key['is_active'] else "❌ Revoked" print(f"Email: {key['email']}") print(f"Name: {key['name']}") print(f"User ID: {key['user_id']}") print(f"Key: {key['key_preview']}") print(f"Created: {key['created_at']}") print(f"Last Used: {key['last_used_at'] or 'Never'}") print(f"Status: {status}") print("-" * 80) print() return # Revoke API key if args.revoke: print(f"\n⚠️ Revoking API key for {args.revoke}...") result = revoke_api_key(args.revoke) if result['success']: print(f"✅ {result['message']}\n") else: print(f"❌ Error: {result['error']}\n") sys.exit(1) return # Generate new API key if not args.email: # Interactive mode print("\n" + "="*80) print("GENERATE NEW FLEETMIND API KEY") print("="*80 + "\n") email = input("Enter user email: ").strip() if not email: print("❌ Email is required") sys.exit(1) name = input("Enter user name (optional): ").strip() or None else: email = args.email name = args.name print(f"\nGenerating API key for {email}...") result = generate_api_key(email, name) if not result['success']: print(f"\n❌ Error: {result['error']}\n") sys.exit(1) # Success! Display the API key print("\n" + "="*80) print("✅ API KEY GENERATED SUCCESSFULLY") print("="*80 + "\n") print(f"Email: {result['email']}") print(f"Name: {result['name']}") print(f"User ID: {result['user_id']}") print(f"Created: {result['created_at']}") print() print("🔑 API KEY (copy this now - it won't be shown again!):") print("-" * 80) print(result['api_key']) print("-" * 80) print() print("📋 Add this to your Claude Desktop config:") print() print(' {') print(' "mcpServers": {') print(' "fleetmind": {') print(' "command": "npx",') print(' "args": [') print(' "mcp-remote",') print(' "https://mcp-1st-birthday-fleetmind-dispatch-ai.hf.space/sse"') print(' ],') print(' "env": {') print(f' "FLEETMIND_API_KEY": "{result["api_key"]}"') print(' }') print(' }') print(' }') print(' }') print() print("⚠️ IMPORTANT: Save this API key securely. You won't be able to see it again!") print() if __name__ == "__main__": main()