Skip to main content
Glama

geolocate

Retrieve geolocation details for an IP address or domain by inputting the query into the tool. Simplify location-based insights for seamless integration.

Instructions

Get geolocation information for an IP address or domain

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesIP address or domain to lookup

Implementation Reference

  • The main handler function for the 'geolocate' tool. It checks the cache first, enforces rate limiting, fetches geolocation data from ip-api.com if necessary, caches successful results, and returns a JSON-formatted response.
    handler: async ({ query }: { query: string }) => {
      // Check cache first
      const cached = geoCache.get(query);
      if (cached) {
        return {
          content: [{
            type: 'text',
            text: JSON.stringify({
              data: cached,
              source: 'cache'
            }, null, 2)
          }]
        };
      }
    
      // Check rate limit
      if (!rateLimiter.canMakeRequest()) {
        const timeToReset = rateLimiter.getTimeToReset();
        throw new Error(`Rate limit exceeded. Please try again in ${Math.ceil(timeToReset / 1000)} seconds.`);
      }
    
      try {
        const { data, rateLimit } = await fetchGeoData(query);
        
        // Update rate limiter based on response headers
        rateLimiter.incrementRequests();
        
        // Cache successful responses
        if (data.status === 'success') {
          geoCache.set(query, data);
        }
    
        return {
          content: [{
            type: 'text',
            text: JSON.stringify({
              data,
              rateLimit,
              source: 'api'
            }, null, 2)
          }]
        };
      } catch (error) {
        throw new Error(`Geolocation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
      }
    }
  • Tool metadata including name, description, and input schema definition for 'geolocate', specifying a required 'query' string parameter.
    geolocate: {
      name: 'geolocate',
      description: 'Get geolocation information for an IP address or domain',
      inputSchema: {
        type: 'object',
        properties: {
          query: {
            type: 'string',
            description: 'IP address or domain to lookup'
          }
        },
        required: ['query']
      },
  • src/index.ts:27-33 (registration)
    Registration of the 'geolocate' tool by spreading geoTools into the central allTools registry used for listing and dispatching tool calls.
    const allTools: ToolKit = {
      ...encodingTools,
      ...geoTools,
      ...generatorTools,
      ...dateTimeTools,
      ...securityTools
    };
  • Helper function that constructs the API request to ip-api.com, fetches geolocation data, and extracts rate limit information from headers.
    async function fetchGeoData(query: string): Promise<{ data: GeoLocation; rateLimit: RateLimitInfo }> {
      const fields = [
        'status',
        'message',
        'country',
        'countryCode',
        'region',
        'regionName',
        'city',
        'zip',
        'lat',
        'lon',
        'timezone',
        'offset',
        'isp',
        'org',
        'as',
        'query'
      ].join(',');
    
      const url = `http://ip-api.com/json/${encodeURIComponent(query)}?fields=${fields}`;
      
      const response = await fetch(url);
      const data = await response.json() as GeoLocation;
      
      const remaining = Number(response.headers.get('X-Rl') ?? '0');
      const ttl = Number(response.headers.get('X-Ttl') ?? '0');
    
      return {
        data,
        rateLimit: { remaining, ttl }
      };
    }
  • Initialization of the geolocation-specific cache (5 minutes TTL) and rate limiter (45 req/min) used by the handler.
    const geoCache = new Cache<GeoLocation>(5 * 60 * 1000); // 5 minute cache
    const rateLimiter = new RateLimiter(45, 60000); // 45 requests per minute
Install Server

Other Tools

Related Tools

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/MissionSquad/mcp-helper-tools'

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