nextbillion-mcp 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ import type { Coordinate } from '../shared/geo.js';
2
+ export declare function decodePolyline(encoded: string): Coordinate[];
3
+ export declare function encodePolyline(points: Coordinate[]): string;
4
+ /** Douglas-Peucker simplification with the tolerance in approximate meters. */
5
+ export declare function simplifyPoints(points: Coordinate[], toleranceMeters: number): Coordinate[];
6
+ export interface FittedGeometry {
7
+ encoded: string;
8
+ originalPointCount: number;
9
+ pointCount: number;
10
+ simplified: boolean;
11
+ }
12
+ /**
13
+ * Return an encoded polyline whose length is at most `maxEncodedChars`, simplifying
14
+ * with progressively coarser tolerances until it fits (or only endpoints remain).
15
+ */
16
+ export declare function fitPolylineToBudget(points: Coordinate[], maxEncodedChars: number): FittedGeometry;
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Google encoded polyline codec (precision 5) plus Douglas-Peucker simplification.
3
+ * Used to shrink long route geometries so the static-image GET URL stays within
4
+ * the API's 8192-byte limit: a 600 km route encodes to ~30k characters (~50 kB
5
+ * URL-encoded), far beyond what the endpoint accepts.
6
+ */
7
+ const PRECISION = 1e5;
8
+ export function decodePolyline(encoded) {
9
+ const points = [];
10
+ let index = 0;
11
+ let lat = 0;
12
+ let lng = 0;
13
+ while (index < encoded.length) {
14
+ lat += readVarint();
15
+ lng += readVarint();
16
+ points.push({ latitude: lat / PRECISION, longitude: lng / PRECISION });
17
+ }
18
+ return points;
19
+ function readVarint() {
20
+ let result = 0;
21
+ let shift = 0;
22
+ let byte;
23
+ do {
24
+ byte = encoded.charCodeAt(index++) - 63;
25
+ result |= (byte & 0x1f) << shift;
26
+ shift += 5;
27
+ } while (byte >= 0x20);
28
+ return result & 1 ? ~(result >> 1) : result >> 1;
29
+ }
30
+ }
31
+ export function encodePolyline(points) {
32
+ let output = '';
33
+ let prevLat = 0;
34
+ let prevLng = 0;
35
+ for (const point of points) {
36
+ const lat = Math.round(point.latitude * PRECISION);
37
+ const lng = Math.round(point.longitude * PRECISION);
38
+ output += encodeValue(lat - prevLat) + encodeValue(lng - prevLng);
39
+ prevLat = lat;
40
+ prevLng = lng;
41
+ }
42
+ return output;
43
+ function encodeValue(value) {
44
+ let v = value < 0 ? ~(value << 1) : value << 1;
45
+ let chunk = '';
46
+ while (v >= 0x20) {
47
+ chunk += String.fromCharCode((0x20 | (v & 0x1f)) + 63);
48
+ v >>= 5;
49
+ }
50
+ return chunk + String.fromCharCode(v + 63);
51
+ }
52
+ }
53
+ /** Douglas-Peucker simplification with the tolerance in approximate meters. */
54
+ export function simplifyPoints(points, toleranceMeters) {
55
+ if (points.length <= 2 || toleranceMeters <= 0)
56
+ return points;
57
+ const keep = new Array(points.length).fill(false);
58
+ keep[0] = keep[points.length - 1] = true;
59
+ const stack = [[0, points.length - 1]];
60
+ while (stack.length > 0) {
61
+ const [start, end] = stack.pop();
62
+ let maxDistance = 0;
63
+ let maxIndex = -1;
64
+ for (let i = start + 1; i < end; i++) {
65
+ const distance = perpendicularDistanceMeters(points[i], points[start], points[end]);
66
+ if (distance > maxDistance) {
67
+ maxDistance = distance;
68
+ maxIndex = i;
69
+ }
70
+ }
71
+ if (maxIndex !== -1 && maxDistance > toleranceMeters) {
72
+ keep[maxIndex] = true;
73
+ stack.push([start, maxIndex], [maxIndex, end]);
74
+ }
75
+ }
76
+ return points.filter((_, i) => keep[i]);
77
+ }
78
+ /** Planar approximation (equirectangular) — accurate enough for display-level simplification. */
79
+ function perpendicularDistanceMeters(p, a, b) {
80
+ const metersPerDegLat = 111_320;
81
+ const cosLat = Math.cos((a.latitude * Math.PI) / 180);
82
+ const toXY = (c) => ({
83
+ x: c.longitude * metersPerDegLat * cosLat,
84
+ y: c.latitude * metersPerDegLat,
85
+ });
86
+ const P = toXY(p);
87
+ const A = toXY(a);
88
+ const B = toXY(b);
89
+ const dx = B.x - A.x;
90
+ const dy = B.y - A.y;
91
+ const lengthSquared = dx * dx + dy * dy;
92
+ if (lengthSquared === 0)
93
+ return Math.hypot(P.x - A.x, P.y - A.y);
94
+ const t = Math.max(0, Math.min(1, ((P.x - A.x) * dx + (P.y - A.y) * dy) / lengthSquared));
95
+ return Math.hypot(P.x - (A.x + t * dx), P.y - (A.y + t * dy));
96
+ }
97
+ /**
98
+ * Return an encoded polyline whose length is at most `maxEncodedChars`, simplifying
99
+ * with progressively coarser tolerances until it fits (or only endpoints remain).
100
+ */
101
+ export function fitPolylineToBudget(points, maxEncodedChars) {
102
+ let current = points;
103
+ let encoded = encodePolyline(current);
104
+ let tolerance = 5; // meters
105
+ while (encoded.length > maxEncodedChars && current.length > 2) {
106
+ current = simplifyPoints(points, tolerance);
107
+ encoded = encodePolyline(current);
108
+ tolerance *= 2;
109
+ }
110
+ return {
111
+ encoded,
112
+ originalPointCount: points.length,
113
+ pointCount: current.length,
114
+ simplified: current.length < points.length,
115
+ };
116
+ }
117
+ //# sourceMappingURL=polyline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyline.js","sourceRoot":"","sources":["../../../src/tools/maps/polyline.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import * as z from 'zod/v4';
2
2
  import { CoordinateSchema } from '../shared/geo.js';
3
3
  import { READ_ONLY, ToolInputError } from '../types.js';
4
4
  import { fetchImageResult, markerParam, StaticImageShape, staticImagePath, } from './static-shared.js';
5
+ import { decodePolyline, fitPolylineToBudget } from './polyline.js';
5
6
  const Schema = z.object({
6
7
  encoded_polyline: z
7
8
  .string()
@@ -36,6 +37,10 @@ const Schema = z.object({
36
37
  .describe('Margin around the route as a fraction of image size (default 0.1)'),
37
38
  ...StaticImageShape,
38
39
  });
40
+ /** Stay comfortably under the API's documented 8192-byte URL limit. */
41
+ const URL_BYTE_BUDGET = 8000;
42
+ /** Progressively tighter encoded-polyline budgets tried when the URL is too long. */
43
+ const ENCODED_CHAR_BUDGETS = [4000, 3000, 2000, 1200, 600, 200];
39
44
  export const staticRouteMap = {
40
45
  name: 'static_route_map',
41
46
  title: 'Static Route Map',
@@ -56,18 +61,41 @@ export const staticRouteMap = {
56
61
  `width:${args.stroke_width ?? 4}`,
57
62
  'fill:none',
58
63
  ];
59
- // Path coordinates are `lat,lng`; `enc:` consumes the rest of the parameter value.
60
- const geometry = args.encoded_polyline
64
+ const markers = args.markers?.length ? markerParam(args.markers, 'lat-first') : undefined;
65
+ const padding = args.padding !== undefined ? String(args.padding) : undefined;
66
+ const path = staticImagePath('auto', args);
67
+ const buildQuery = (geometry) => ({
68
+ path: `${styleSegments.join('|')}|${geometry}`,
69
+ markers,
70
+ padding,
71
+ });
72
+ // First try the geometry exactly as given. Path coordinates are `lat,lng`;
73
+ // `enc:` consumes the rest of the parameter value.
74
+ let geometry = args.encoded_polyline
61
75
  ? `enc:${args.encoded_polyline}`
62
76
  : args.route_points.map((p) => `${p.latitude},${p.longitude}`).join('|');
63
- const path = `${styleSegments.join('|')}|${geometry}`;
64
- return fetchImageResult(nb, staticImagePath('auto', args), {
65
- path,
66
- // The auto-fit endpoint parses markers lat-first, unlike the center-based
67
- // endpoint (see markerParam) — verified live 2026-08-31.
68
- markers: args.markers?.length ? markerParam(args.markers, 'lat-first') : undefined,
69
- padding: args.padding !== undefined ? String(args.padding) : undefined,
70
- }, `Route map rendered${args.markers?.length ? ` with ${args.markers.length} marker(s)` : ''}.`, args);
77
+ let simplificationNote = '';
78
+ // The Static Images API is GET-only with an 8192-byte URL limit; a long route's
79
+ // full-resolution polyline blows past it (~50 kB for 600 km). When that happens,
80
+ // simplify the *display* geometry progressively until the URL fits — the route's
81
+ // distance/duration come from the directions tool and are unaffected.
82
+ if (nb.buildUrl(path, buildQuery(geometry)).length > URL_BYTE_BUDGET) {
83
+ const points = args.encoded_polyline
84
+ ? decodePolyline(args.encoded_polyline)
85
+ : args.route_points;
86
+ for (const budget of ENCODED_CHAR_BUDGETS) {
87
+ const fitted = fitPolylineToBudget(points, budget);
88
+ geometry = `enc:${fitted.encoded}`;
89
+ if (nb.buildUrl(path, buildQuery(geometry)).length <= URL_BYTE_BUDGET) {
90
+ simplificationNote =
91
+ ` Display geometry simplified from ${fitted.originalPointCount} to ` +
92
+ `${fitted.pointCount} points to fit the map URL limit; distances are unaffected.`;
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ return fetchImageResult(nb, path, buildQuery(geometry), `Route map rendered${args.markers?.length ? ` with ${args.markers.length} marker(s)` : ''}.` +
98
+ simplificationNote, args);
71
99
  },
72
100
  };
73
101
  //# sourceMappingURL=static-route-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"static-route-map.js","sourceRoot":"","sources":["../../../src/tools/maps/static-route-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static-route-map.js","sourceRoot":"","sources":["../../../src/tools/maps/static-route-map.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nextbillion-mcp",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "MCP server exposing NextBillion.ai location APIs (geocoding, places, routing, maps) as tools for AI agents",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",