# /// script
# requires-python = ">=3.10"
# dependencies = [
#     "mcp",
#     "httpx",
# ]
# ///
import os
import httpx
from mcp.server.fastmcp import FastMCP

# Provide your API Key via the environment
API_KEY = os.getenv("INDEXO_API_KEY")
API_URL = os.getenv("INDEXO_API_URL", "https://indexo.dev/api/v1")

if not API_KEY:
    raise ValueError("INDEXO_API_KEY environment variable is required. Please set it in your Claude Desktop configuration.")

mcp = FastMCP("indexo.dev")

@mcp.tool()
def get_domain(domain: str, refresh: bool = False) -> str:
    """
    Retrieve domain intelligence from indexo.dev.
    Returns JSON containing DNS, TLS certificates, html metadata, and infrastructure details.
    
    Args:
        domain: The domain to analyze (e.g., example.com)
        refresh: Set to true to force a real-time crawl of the domain (Requires Pro plan API key).
    """
    params = {}
    if refresh:
        params["refresh"] = "true"
        
    try:
        with httpx.Client(timeout=30.0) as client:
            response = client.get(
                f"{API_URL}/domains/{domain}",
                headers={"X-API-Key": API_KEY},
                params=params
            )
            
            if response.status_code == 429:
                return "Error: API Rate limit exceeded."
            elif response.status_code == 404:
                return f"Error: Domain {domain} not found or could not be analyzed."
            elif response.status_code == 403:
                return "Error: Unauthorized or lack of permissions (e.g. ?refresh requires Pro plan)."
            elif response.status_code != 200:
                return f"Error: The API returned status {response.status_code}: {response.text}"
                
            return response.text
    except Exception as e:
        return f"Request to indexo.dev failed: {str(e)}"

if __name__ == "__main__":
    mcp.run()
