Ip Api — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Ip Api (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
현재 공인 IP 또는 특정 IP 주소의 대략적인 위치 정보를 조회하는 Python FastMCP 서버입니다.
ip-api.com의 무료 JSON API를 MCP tool로 감싸서, AI 클라이언트가 사용자의 현재 네트워크 위치나 특정 IP의 지역 기반 컨텍스트를 확인할 수 있게 합니다.
lookup_ip_locationip_address를 생략하면 MCP 서버가 실행 중인 컴퓨터의 공인 IP 위치를 조회합니다.ip_address를 넘기면 해당 IPv4 또는 IPv6 주소의 위치를 조회합니다.message도 함께 반환합니다.GET /healthGET /my-ip-locationX-Forwarded-For, X-Real-IP, request client 순서로 브라우저 요청 IP를 읽고 위치를 조회합니다.POST /mcpip-api.com은 비상업적 이용에 한해 API 키 없이 무료로 사용할 수 있습니다.
http://ip-api.com/jsonhttp://ip-api.com/json/8.8.8.8이 서버는 프로세스 내부에서 분당 45회 제한을 방어합니다. 상업적 이용 여부와 최신 정책은 ip-api.com의 공식 약관을 확인하세요.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
python server.py기본 MCP 엔드포인트:
http://localhost:8000/mcp상태 확인:
curl http://localhost:8000/health브라우저 요청 IP 기준 위치 확인:
curl http://localhost:8000/my-ip-location포트를 바꾸려면 PORT 환경 변수를 사용합니다.
PORT=9000 python server.pylookup_ip_locationIP 주소 위치 정보를 조회합니다.
입력:
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
ip_address | string 또는 null | 아니오 | 조회할 IPv4 또는 IPv6 주소입니다. 생략하면 현재 MCP 서버가 실행 중인 환경의 공인 IP를 조회합니다. |
본인 공인 IP 조회:
{}특정 IP 조회:
{
"ip_address": "8.8.8.8"
}출력 예시:
{
"query": "8.8.8.8",
"country": "United States",
"city": "Ashburn",
"isp": "Google LLC",
"latitude": 39.03,
"longitude": -77.5,
"source": "ip-api.com",
"message": "IP 8.8.8.8 위치는 United States, Ashburn이며 ISP는 Google LLC입니다."
}서버를 실행한 뒤 다른 터미널에서 실행합니다.
python - <<'PY'
import asyncio
from fastmcp import Client
async def main():
async with Client("http://localhost:8000/mcp") as client:
result = await client.call_tool(
"lookup_ip_location",
{"ip_address": "8.8.8.8"},
)
print(result.data)
asyncio.run(main())
PY현재 공인 IP를 자동 조회하려면 빈 입력을 넘깁니다.
{}ChatGPT에서 MCP tool을 호출하면 요청 주체는 사용자의 브라우저가 아니라 ChatGPT/OpenAI 쪽 MCP 호출 인프라입니다. 그래서 lookup_ip_location에 빈 입력을 넘기면 실제 사용자 IP가 아니라 서버나 중간 인프라 기준 IP가 조회될 수 있습니다.
사용자 브라우저의 공인 IP 기준 위치가 필요하면 ChatGPT App UI iframe 또는 일반 브라우저에서 아래 HTTP route를 직접 호출하세요.
https://your-render-service.onrender.com/my-ip-location브라우저 JavaScript 예시:
const response = await fetch("https://your-render-service.onrender.com/my-ip-location");
const location = await response.json();
console.log(location);응답 예시:
{
"query": "203.0.113.10",
"country": "South Korea",
"city": "Seoul",
"isp": "Example ISP",
"latitude": 37.5665,
"longitude": 126.978,
"source": "ip-api.com"
}이 route는 프록시 환경에서 흔히 전달되는 X-Forwarded-For 헤더의 첫 번째 IP를 우선 사용합니다. 이 값은 지역 컨텍스트 표시에는 유용하지만, 인증이나 보안 차단 같은 중요한 판단에는 그대로 신뢰하지 마세요.
source .venv/bin/activate
pytest -q현재 테스트 범위:
ip-api.com 실패 응답 처리/my-ip-location route 응답.
├── server.py
├── requirements.txt
├── requirements-dev.txt
└── tests/
└── test_server.py~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.