Skip to main content
Glama
NimbleBrainInc

IPInfo MCP Server

get_ip_info

Retrieve detailed IP address information including geolocation, ASN data, company details, and privacy status for network analysis and intelligence gathering.

Instructions

Get comprehensive information about an IP address.

Args: ip: IP address to lookup. If None, returns info about current IP. ctx: MCP context

Returns: Complete IP information including location, ASN, company, privacy, etc.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ipYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
ipYesIP address
asnNoASN details
locNoLocation coordinates
orgNoOrganization
cityNoCity
abuseNoAbuse contact
bogonNoBogon IP
postalNoPostal code
regionNoRegion/State
carrierNoCarrier details
companyNoCompany details
countryNoCountry code
domainsNoHosted domains
privacyNoPrivacy detection
hostnameNoHostname
timezoneNoTimezone

Implementation Reference

  • The main handler function for the 'get_ip_info' tool, decorated with @mcp.tool() for registration, implementing the core logic by fetching IP information from IPInfoClient.
    @mcp.tool()
    async def get_ip_info(ip: str | None, ctx: Context[Any, Any, Any]) -> FullResponse:
        """Get comprehensive information about an IP address.
    
        Args:
            ip: IP address to lookup. If None, returns info about current IP.
            ctx: MCP context
    
        Returns:
            Complete IP information including location, ASN, company, privacy, etc.
        """
        client = get_client(ctx)
        try:
            if ip:
                return await client.get_info_by_ip(ip)
            else:
                return await client.get_current_info()
        except IPInfoAPIError as e:
            ctx.error(f"API error: {e.message}")
            raise
  • Pydantic model defining the output schema returned by the get_ip_info tool.
    class FullResponse(BaseModel):
        ip: str = Field(..., description="IP address")
        bogon: bool | None = Field(None, description="Bogon IP")
        hostname: str | None = Field(None, description="Hostname")
        city: str | None = Field(None, description="City")
        region: str | None = Field(None, description="Region/State")
        country: str | None = Field(None, description="Country code")
        loc: str | None = Field(None, description="Location coordinates")
        postal: str | None = Field(None, description="Postal code")
        timezone: str | None = Field(None, description="Timezone")
        org: str | None = Field(None, description="Organization")
        asn: AsnResponse | None = Field(None, description="ASN details")
        company: CompanyResponse | None = Field(None, description="Company details")
        carrier: CarrierResponse | None = Field(None, description="Carrier details")
        privacy: PrivacyResponse | None = Field(None, description="Privacy detection")
        domains: DomainsResponse | None = Field(None, description="Hosted domains")
        abuse: AbuseResponse | None = Field(None, description="Abuse contact")
  • Helper function used by get_ip_info to obtain the IPInfoClient instance.
    def get_client(ctx: Context[Any, Any, Any]) -> IPInfoClient:
        """Get or create the API client instance."""
        global _client
        if _client is None:
            api_token = os.environ.get("IPINFO_API_TOKEN")
            if not api_token:
                ctx.warning("IPINFO_API_TOKEN is not set - some features may be limited")
            _client = IPInfoClient(api_token=api_token)
        return _client

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