Skip to main content
Glama
NimbleBrainInc

IPInfo MCP Server

whois_lookup_by_domain

Retrieve WHOIS records for any domain to identify ownership details, registration information, and contact data using IPInfo's database.

Instructions

WHOIS lookup by organization domain.

Args: domain: Domain name to lookup page: Page number for paginated results source: Filter by WHOIS source (arin, ripe, afrinic, apnic, lacnic)

Returns: WHOIS records for the domain.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
domainYes
pageNo
sourceNo

Implementation Reference

  • The primary handler function decorated with @mcp.tool(), which registers and executes the whois_lookup_by_domain tool. It invokes the IPInfoClient to fetch WHOIS data by domain.
    @mcp.tool()
    async def whois_lookup_by_domain(
        domain: str, ctx: Context[Any, Any, Any], page: int | None = None, source: str | None = None
    ) -> dict[str, Any]:
        """WHOIS lookup by organization domain.
    
        Args:
            domain: Domain name to lookup
            page: Page number for paginated results
            source: Filter by WHOIS source (arin, ripe, afrinic, apnic, lacnic)
    
        Returns:
            WHOIS records for the domain.
        """
        client = get_client(ctx)
        whois_source = WhoisSource(source) if source else None
        try:
            result = await client.get_whois_net_by_domain(domain, page, whois_source)
            return result.model_dump(exclude_none=True)
        except IPInfoAPIError as e:
            ctx.error(f"API error: {e.message}")
            raise
  • Pydantic models defining the output structure: WhoisDomainResponse for the response container and WhoisRecord for individual records.
    class WhoisRecord(BaseModel):
        range: str | None = None
        id: str | None = None
        name: str | None = None
        country: str | None = None
        org: str | None = None
        admin: Any | None = None
        abuse: Any | None = None
        tech: Any | None = None
        maintainer: Any | None = None
        updated: str | None = None
        status: str | None = None
        source: str | None = None
        raw: str | None = None
        domain: str | None = None
    
    
    class WhoisNetIdResponse(BaseModel):
        net: str | None = None
        total: int | None = None
        page: int | None = None
        records: list[WhoisRecord] | None = None
    
    
    class WhoisIpResponse(BaseModel):
        net: str | None = None
        total: int | None = None
        page: int | None = None
        records: list[WhoisRecord] | None = None
    
    
    class WhoisDomainResponse(BaseModel):
        net: str | None = None
        total: int | None = None
        page: int | None = None
        records: list[WhoisRecord] | None = None
  • Enum for the optional 'source' input parameter to filter WHOIS records by regional registry.
    class WhoisSource(str, Enum):
        ARIN = "arin"
        RIPE = "ripe"
        AFRINIC = "afrinic"
        APNIC = "apnic"
        LACNIC = "lacnic"
  • Supporting method in IPInfoClient that makes the HTTP GET request to the IPInfo WHOIS API endpoint for domain-based lookups and parses the response into the WhoisDomainResponse model.
    async def get_whois_net_by_domain(
        self, domain: str, page: int | None = None, source: WhoisSource | None = None
    ) -> WhoisDomainResponse:
        """Get WHOIS information by domain."""
        params: dict[str, Any] = {}
        if page is not None:
            params["page"] = page
        if source:
            params["source"] = source.value
    
        data = await self._request("GET", f"/whois/net/{domain}", params=params or None)
        return WhoisDomainResponse(**data)

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/NimbleBrainInc/mcp-ipinfo'

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