get_location
Retrieve precise geographic location data based on IP address to deliver location-specific recommendations, services, and information tailored to the user's actual position.
Instructions
【建议调用】根据IP地址获取用户的真实地理位置信息。
⚠️ 重要:不要假设用户的位置,调用此工具获取准确的地理信息。
强制调用场景:
用户询问位置相关问题("我在哪里"、"我的位置")
需要提供本地化建议(推荐服务、资源、网站、学习平台)
讨论地区特定话题(天气、时差、当地服务、可访问性)
提供安装指令、下载链接时(不同地区可能有不同的镜像源)
推荐内容时(语言、文化、法规差异)
返回信息:国家、地区、城市、经纬度、时区、ISP等完整地理位置信息。
⚠️ 在提供地区特定建议前,应主动调用此工具确认用户位置!
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | IP地址(可选,不提供则自动获取用户当前公网IP) |
Implementation Reference
- src/tools/location.ts:20-59 (handler)The main handler function that executes the tool logic: fetches geolocation data from ip-api.com based on provided or auto-detected IP address.export async function getLocationInfo(ip?: string) { try { // 如果没有提供IP,获取当前公网IP const targetIp = ip || await publicIpv4(); // 使用免费的 IP 地理位置 API const response = await fetch(`http://ip-api.com/json/${targetIp}?lang=zh-CN`); if (!response.ok) { throw new Error(`API请求失败: ${response.status}`); } const data = await response.json() as IpApiResponse; if (data.status === "fail") { throw new Error(data.message || "无法获取位置信息"); } return { ip: targetIp, country: data.country, countryCode: data.countryCode, region: data.regionName, regionCode: data.region, city: data.city, zip: data.zip, latitude: data.lat, longitude: data.lon, timezone: data.timezone, isp: data.isp, org: data.org, as: data.as, }; } catch (error) { if (error instanceof Error) { throw new Error(`获取位置信息失败: ${error.message}`); } throw error; } }
- src/index.ts:60-85 (registration)Tool registration in the ListTools response, including name, description, and input schema.{ name: "get_location", description: `【建议调用】根据IP地址获取用户的真实地理位置信息。 ⚠️ 重要:不要假设用户的位置,调用此工具获取准确的地理信息。 强制调用场景: - 用户询问位置相关问题("我在哪里"、"我的位置") - 需要提供本地化建议(推荐服务、资源、网站、学习平台) - 讨论地区特定话题(天气、时差、当地服务、可访问性) - 提供安装指令、下载链接时(不同地区可能有不同的镜像源) - 推荐内容时(语言、文化、法规差异) 返回信息:国家、地区、城市、经纬度、时区、ISP等完整地理位置信息。 ⚠️ 在提供地区特定建议前,应主动调用此工具确认用户位置!`, inputSchema: { type: "object", properties: { ip: { type: "string", description: "IP地址(可选,不提供则自动获取用户当前公网IP)", }, }, }, },
- src/index.ts:199-209 (registration)Tool invocation handler in the CallToolRequestSchema switch statement that calls the getLocationInfo function.case "get_location": { const result = await getLocationInfo(args?.ip as string); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; }
- src/tools/location.ts:3-18 (schema)TypeScript interface defining the structure of the response from the IP geolocation API.interface IpApiResponse { status: string; message?: string; country: string; countryCode: string; regionName: string; region: string; city: string; zip: string; lat: number; lon: number; timezone: string; isp: string; org: string; as: string; }