This release includes 3 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Affected surfaces
ReleasePort's take
Moderate signalThe ipinfo_lookup_ips API now defaults to a summary detail level, omitting heavy nested blocks, and several deprecated aliases have been removed.
Why it matters: Clients expecting full response data must explicitly request "detail=full"; otherwise they receive trimmed output. Removal of get_ip_details, get_residential_proxy_info, and get_map_url aliases breaks existing call sites that used those names.
Summary
AI summaryUpdates fix, capped, and deps across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
ipinfo_lookup_ips now defaults detail to "summary" (was "full"). ipinfo_lookup_ips now defaults detail to "summary" (was "full"). Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Breaking | High |
detail="summary" now omits heavy nested blocks entirely. detail="summary" now omits heavy nested blocks entirely. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Breaking | High |
Removed deprecated aliases get_ip_details, get_residential_proxy_info, get_map_url. Removed deprecated aliases get_ip_details, get_residential_proxy_info, get_map_url. Source: llm_adapter@2026-05-31 Confidence: low |
— |
| Feature | Medium |
Added ipinfo_summarize_ips for server‑side aggregation of large IP batches. Added ipinfo_summarize_ips for server‑side aggregation of large IP batches. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Feature | Low |
ToolErrorEnvelope.request_id now populated with a server‑generated correlation ID on errors. ToolErrorEnvelope.request_id now populated with a server‑generated correlation ID on errors. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Feature | Low |
serverInfo.version now reports the package version (e.g., 0.6.0) via FastMCP. serverInfo.version now reports the package version (e.g., 0.6.0) via FastMCP. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Feature | Low |
Added website_url field on the server for discoverability. Added website_url field on the server for discoverability. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Dependency | Low |
Bumped fastmcp dependency from 3.2.4 to 3.3.1. Bumped fastmcp dependency from 3.2.4 to 3.3.1. Source: llm_adapter@2026-05-31 Confidence: high |
— |
| Bugfix | Medium |
Batch lookups no longer silently drop freshly‑fetched IPs. Batch lookups no longer silently drop freshly‑fetched IPs. Source: llm_adapter@2026-05-31 Confidence: low |
— |
| Bugfix | Medium |
Wholesale‑empty batch lookups now raise auth_insufficient_scope instead of retryable api_error. Wholesale‑empty batch lookups now raise auth_insufficient_scope instead of retryable api_error. Source: llm_adapter@2026-05-31 Confidence: low |
— |
Full changelog
This cycle hardens the agent-facing contract from a joint Claude + Codex
audit and completes the 0.5.0 deprecation cycle by removing the legacy tool
aliases. The headline fix is a correctness bug: multi-IP lookups silently
returned nothing on a cold cache.
Added
ipinfo_summarize_ips(ips, group_by=("country", "asn"), top_n=50)for
server-side aggregation of large IP batches into fixed-size counts and
percentages by country, continent, ASN, and privacy flags. The tool reuses
the batch lookup path, reports mapped/skipped/failed counts, caps each group
attop_n, and records true distinct group counts intruncated_groups
when capped. (#51)- Partial batch failures are surfaced: IPs that fail upstream are logged
per-IP (capped) and counted in the summary instead of vanishing. If a
multi-IP batch resolves no IPs at all, the failure is raised rather than
masked behind an empty list, and the two total-failure modes are told apart:
a wholesale-empty/batchresponse (every IP missing from the response) now
raises a non-temporaryauth_insufficient_scopeinstead of a "retry"
api_error— it is overwhelmingly a token-tier problem, since the SDK
swallows the/batchauthorization failure for Lite-tier tokens (which must
use/batch/lite) and returns an empty map. The hint points the agent at
per-IP lookups or a Core+ upgrade instead of retrying a call that can never
succeed. A batch whose entries were returned but all failed to parse stays a
retryableapi_error. (#52) serverInfo.versionnow reports the package version (e.g.0.6.0) via
FastMCP(version=...); it previously leaked the FastMCP library version,
defeating client-side capability fingerprinting and version gating.website_urlon the server for discoverability.- Per-tool
meta.error_codeslists the stable codes each tool can raise, so
agents see the branch set from tool introspection without parsing the
server instructions. idempotentHint: trueannotation on all read-only tools.- A
format: "ip"JSON Schema hint on IP-string inputs (non-enforcing; soft
runtime validation still returns structured envelopes for bad input). - Coarse progress reporting (
ctx.report_progress) on the batch lookup path.
Changed
- Breaking:
ipinfo_lookup_ipsnow defaults todetail="summary"(was
"full"). Lean-by-default for token efficiency; passdetail="full"for
every field. - Breaking:
detail="summary"now omits the heavy nested blocks
(continent,country_flag,country_flag_url,country_currency,
abuse,domains) entirely rather than nulling them. The previous
shape-parity guarantee is dropped; callers usingrecord.get("continent")
are unaffected, callers usingrecord["continent"]should switch to.get.
The tool's output schema is unchanged (those fields remain optional).
Removed
- Breaking: the deprecated forwarding aliases
get_ip_details,
get_residential_proxy_info, andget_map_url(deprecated in 0.5.0) are
removed as scheduled. Callipinfo_lookup_my_ip/ipinfo_lookup_ips,
ipinfo_check_residential_proxy, andipinfo_generate_map_urlrespectively.
Note thatget_map_urlreturned a bare URL string;ipinfo_generate_map_url
returns a structuredMapResult.
Fixed
- Batch lookups silently dropped every freshly-fetched IP. The ipinfo SDK
returns fresh batch entries as rawdicts (only cache/bogon hits are
Detailsobjects), butipinfo_batch_lookupkept entries only
if hasattr(details, "all")— soipinfo_lookup_ipswith 2+ uncached IPs
returned[]. The parser now accepts both shapes. (Single-IP lookups were
unaffected; the unit mock returnedDetailsobjects, masking it — the mock
now mirrors the real raw-dict shape, and a live multi-IP smoke test guards
the integration path.) ToolErrorEnvelope.request_idis now populated with a server-generated
correlation id (uuid4 hex) on every raised error; previously alwaysnull.
What's Changed
- Add live-API smoke test suite (opt-in, local-only) by @briandconnelly in https://github.com/briandconnelly/mcp-server-ipinfo/pull/53
- fix: stop batch lookups silently dropping fresh IPs; harden agent contract by @briandconnelly in https://github.com/briandconnelly/mcp-server-ipinfo/pull/60
- chore(deps): bump fastmcp from 3.2.4 to 3.3.1 by @dependabot[bot] in https://github.com/briandconnelly/mcp-server-ipinfo/pull/56
- Update deps by @briandconnelly in https://github.com/briandconnelly/mcp-server-ipinfo/pull/61
- fix: classify wholesale-empty batch lookups as auth_insufficient_scope (#52) by @briandconnelly in https://github.com/briandconnelly/mcp-server-ipinfo/pull/62
- Add ipinfo_summarize_ips aggregation tool by @briandconnelly in https://github.com/briandconnelly/mcp-server-ipinfo/pull/63
- Release 0.6.0 by @briandconnelly in https://github.com/briandconnelly/mcp-server-ipinfo/pull/64
Full Changelog: https://github.com/briandconnelly/mcp-server-ipinfo/compare/v0.5.0...v0.6.0
Breaking Changes
- `ipinfo_lookup_ips` now defaults `detail="summary"` (was "full").
- `detail="summary"` omits heavy nested blocks entirely rather than nulling them.
- Removed deprecated aliases: `get_ip_details`, `get_residential_proxy_info`, `get_map_url`.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About briandconnelly/mcp-server-ipinfo
IP address geolocation and network information using IPInfo API
Related context
Beta — feedback welcome: [email protected]