atlasfetch-mcp 0.1.2 → 0.1.4

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.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # atlasfetch-mcp
2
2
 
3
+ **No signup needed to try it:** without a key it falls back to a shared public demo key, capped at 1,000 lookups a month across everyone using it. Get your own limits with a free sign-up at [atlasfetch.xyz](https://atlasfetch.xyz/dashboard).
4
+
3
5
  An [MCP](https://modelcontextprotocol.io) server for [AtlasFetch](https://atlasfetch.xyz) — **reverse geocoding to administrative boundaries, and geofencing**, as tools your AI assistant can call directly.
4
6
 
5
7
  Ask "which municipality is -33.9249, 18.4241 in?" and get **Cape Town, Western Cape, South Africa** with ISO 3166 codes — from a real point-in-polygon lookup, not the model's memory.
@@ -23,8 +25,6 @@ country: United Kingdom (GB) · region: England (GB-ENG) · municipal: City of W
23
25
 
24
26
  ## Install
25
27
 
26
- No signup needed to try it: without a key it falls back to a shared public demo key.
27
-
28
28
  ### Claude Code
29
29
 
30
30
  ```bash
package/dist/api.d.ts CHANGED
@@ -6,6 +6,12 @@
6
6
  * model nothing; "monthly allowance exhausted, resets at the start of the next
7
7
  * period" tells it to stop retrying and say so.
8
8
  */
9
+ /**
10
+ * Identifies this server to the API so adoption can be measured. The API keeps
11
+ * only `atlasfetch-mcp/<version>` from it — never the rest, and never anything
12
+ * about the user. See src/lib/clientId.ts in the API.
13
+ */
14
+ export declare const USER_AGENT = "atlasfetch-mcp/0.1.4 (+https://github.com/atlasfetch-dev/atlasfetch-mcp)";
9
15
  export declare function baseUrl(): string;
10
16
  /** A failure the caller should be told about verbatim, not retried blindly. */
11
17
  export declare class ApiError extends Error {
package/dist/api.js CHANGED
@@ -6,7 +6,14 @@
6
6
  * model nothing; "monthly allowance exhausted, resets at the start of the next
7
7
  * period" tells it to stop retrying and say so.
8
8
  */
9
+ import { VERSION } from './version.js';
9
10
  const DEFAULT_BASE_URL = 'https://api.atlasfetch.xyz';
11
+ /**
12
+ * Identifies this server to the API so adoption can be measured. The API keeps
13
+ * only `atlasfetch-mcp/<version>` from it — never the rest, and never anything
14
+ * about the user. See src/lib/clientId.ts in the API.
15
+ */
16
+ export const USER_AGENT = `atlasfetch-mcp/${VERSION} (+https://github.com/atlasfetch-dev/atlasfetch-mcp)`;
10
17
  export function baseUrl() {
11
18
  return (process.env.ATLASFETCH_API_URL ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
12
19
  }
@@ -40,7 +47,7 @@ export async function resolveKey() {
40
47
  return configured;
41
48
  if (cachedDemoKey)
42
49
  return cachedDemoKey;
43
- const response = await fetch(`${baseUrl()}/demo/key`);
50
+ const response = await fetch(`${baseUrl()}/demo/key`, { headers: { 'User-Agent': USER_AGENT } });
44
51
  if (!response.ok) {
45
52
  throw new ApiError('No ATLASFETCH_API_KEY is configured and the public demo key could not be fetched. ' +
46
53
  'Create a key at https://atlasfetch.xyz/dashboard and set ATLASFETCH_API_KEY.', response.status);
@@ -83,6 +90,7 @@ export async function request(path, init = {}) {
83
90
  method: init.method ?? 'GET',
84
91
  headers: {
85
92
  Authorization: `Bearer ${key}`,
93
+ 'User-Agent': USER_AGENT,
86
94
  ...(init.body === undefined ? {} : { 'Content-Type': 'application/json' }),
87
95
  },
88
96
  body: init.body === undefined ? undefined : JSON.stringify(init.body),
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -1,19 +1,7 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { z } from 'zod';
3
3
  import { ApiError, DEMO_KEY_NOTICE, request, usingDemoKey, } from './api.js';
4
- /**
5
- * The AtlasFetch tools.
6
- *
7
- * Kept apart from any transport so the same definitions serve the stdio entry
8
- * point (`npx atlasfetch-mcp`, the published package) and, later, a hosted
9
- * Streamable HTTP endpoint. A transport decides who is connected; it does not
10
- * change what the tools do.
11
- *
12
- * Descriptions carry the caveats the API itself documents, because a model
13
- * choosing a tool reads only these. The two that cause real mistakes:
14
- * `municipal` is not always a city, and grid codes are output only.
15
- */
16
- const VERSION = '0.1.2';
4
+ import { VERSION } from './version.js';
17
5
  /** Every successful result carries the demo-key warning while one is in use. */
18
6
  function ok(text) {
19
7
  const body = usingDemoKey() ? `${text}\n\n${DEMO_KEY_NOTICE}` : text;
@@ -118,9 +106,9 @@ export function createServer() {
118
106
  // ── Boundary sets ──────────────────────────────────────────────────────────
119
107
  server.registerTool('list_boundary_sets', {
120
108
  title: 'List the boundary sets on this account',
121
- description: 'Lists the boundary sets on this account with their boundary counts and the API key ids ' +
122
- 'each is granted to. A set only matches during a lookup when it is available AND granted ' +
123
- 'to the key making the call.',
109
+ description: 'Lists the boundary sets on this account with their boundary counts and the API keys (id ' +
110
+ 'and label) each is granted to. A set only matches during a lookup when it is available AND ' +
111
+ 'granted to the key making the call.',
124
112
  inputSchema: {},
125
113
  annotations: { readOnlyHint: true, openWorldHint: true },
126
114
  }, async () => {
@@ -148,7 +136,11 @@ export function createServer() {
148
136
  'the user to finish that at https://atlasfetch.xyz/dashboard.',
149
137
  ].join('\n'),
150
138
  inputSchema: {
151
- name: z.string().min(1).max(32).describe('A short name, used to reference the set in lookups.'),
139
+ name: z
140
+ .string()
141
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/)
142
+ .describe('A short name, used to reference the set in lookups: 1-32 letters, digits, hyphens or ' +
143
+ 'underscores, starting with a letter or digit.'),
152
144
  },
153
145
  annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
154
146
  }, async ({ name }) => {
@@ -162,37 +154,69 @@ export function createServer() {
162
154
  return fail(error);
163
155
  }
164
156
  });
157
+ // Rules transcribed from the API's boundaryService (validatePolygon,
158
+ // validateProps, createBoundary) and plans.ts. The geometry schema is typed
159
+ // rather than a free record, so a MultiPolygon or a whole Feature is refused
160
+ // by the client before any request, and the schema itself tells the model
161
+ // what shape to build.
165
162
  server.registerTool('add_boundary', {
166
- title: 'Add a boundary to a set',
167
- description: 'Adds one GeoJSON polygon to a set on this account, with optional flat properties that come ' +
168
- 'back on every match. Plan caps limit vertices per boundary, properties per boundary, and ' +
169
- 'boundaries per set.',
163
+ title: 'Add a polygon to a boundary set',
164
+ description: [
165
+ 'Adds ONE polygon to an existing boundary set on this account, so that lookup_location',
166
+ 'reports when a point falls inside it — delivery zones, service areas, sales territories.',
167
+ 'Each call creates a new boundary: calling twice with the same name stores two.',
168
+ '',
169
+ 'Before calling: the set must already exist (create_boundary_set). A set matches nothing in',
170
+ 'lookups until it is switched on and granted to an API key in the dashboard at',
171
+ 'https://atlasfetch.xyz/dashboard, which this server cannot do.',
172
+ '',
173
+ 'geometry must be a single GeoJSON Polygon — not a MultiPolygon, Feature or',
174
+ 'FeatureCollection. Positions are [longitude, latitude]. Each ring needs at least 4',
175
+ 'positions and must be closed (last position equals the first); extra rings are holes.',
176
+ 'Self-intersecting shapes are rejected. To store a MultiPolygon, add each part separately.',
177
+ '',
178
+ 'Plan limits cap vertices per polygon (every position counts, including the closing one),',
179
+ 'properties per boundary and boundaries per set; a limit hit is refused with a message naming',
180
+ 'it. WITHOUT YOUR OWN KEY, the shared demo key is on the Public plan: at most 5 positions per',
181
+ 'polygon (a closed quadrilateral), properties only category (zone, area, route, place,',
182
+ 'other), color (green, blue, red, yellow, purple, orange) and priority (low, medium, high),',
183
+ 'and one set shared with every demo user, where adding to a full set silently deletes its',
184
+ 'oldest boundary. Never upload anything private with the demo key.',
185
+ '',
186
+ 'Returns the stored boundary: id, set, name, properties, pointCount and createdAt.',
187
+ ].join('\n'),
170
188
  inputSchema: {
171
- set: z.string().min(1).max(32).describe('The set to add it to. It must already exist.'),
172
- name: z.string().min(1).max(100).describe('A name for this boundary, returned on a match.'),
189
+ set: z
190
+ .string()
191
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,31}$/)
192
+ .describe('Name of an existing set on this account (see list_boundary_sets).'),
193
+ name: z
194
+ .string()
195
+ .min(1)
196
+ .max(100)
197
+ .describe('Label returned when a looked-up point falls inside this polygon, e.g. "Zone A".'),
173
198
  geometry: z
174
- .record(z.string(), z.unknown())
175
- .describe('GeoJSON geometry, e.g. {"type":"Polygon","coordinates":[[[lng,lat],...]]}. ' +
176
- 'Longitude comes first. A Feature or FeatureCollection is not accepted.'),
199
+ .object({
200
+ type: z.literal('Polygon'),
201
+ coordinates: z
202
+ .array(z.array(z.array(z.number()).min(2).max(3)).min(4))
203
+ .min(1)
204
+ .describe('Rings of [longitude, latitude] positions. The first ring is the outline; any further ' +
205
+ 'rings are holes. Each ring is closed: its last position repeats its first.'),
206
+ })
207
+ .describe('A GeoJSON Polygon, e.g. {"type":"Polygon","coordinates":[[[18.40,-33.93],[18.40,-33.90],' +
208
+ '[18.44,-33.90],[18.44,-33.93],[18.40,-33.93]]]}.'),
177
209
  properties: z
178
- .record(z.string(), z.unknown())
210
+ .record(z.string().max(32), z.union([z.string().max(256), z.number(), z.boolean()]))
179
211
  .optional()
180
- .describe('Flat key/value pairs returned with every match of this boundary.'),
212
+ .describe('Optional flat key/value pairs returned with every match: keys up to 32 characters, values ' +
213
+ 'a string (up to 256 characters), number or boolean. The demo key accepts only category, ' +
214
+ 'color and priority, from fixed lists.'),
181
215
  },
182
- annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
216
+ // destructiveHint is true because of the Public plan: adding to its full,
217
+ // shared set deletes the oldest boundary, which may be someone else's.
218
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true },
183
219
  }, async ({ set, name, geometry, properties }) => {
184
- // Caught here rather than at the API, so the message can name the actual
185
- // mistake — passing a whole Feature is the common one.
186
- if (typeof geometry.type !== 'string' || !('coordinates' in geometry)) {
187
- return {
188
- content: [{
189
- type: 'text',
190
- text: 'geometry must be a GeoJSON geometry object with "type" and "coordinates" — a ' +
191
- 'Feature or FeatureCollection is not accepted. Coordinates are [longitude, latitude].',
192
- }],
193
- isError: true,
194
- };
195
- }
196
220
  try {
197
221
  const created = await request('/boundaries', {
198
222
  method: 'POST',
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The published version, in one place: reported to MCP clients, sent to the API
3
+ * in the User-Agent so adoption can be measured, and checked against
4
+ * package.json, server.json and manifest.json by scripts/release.mjs, which
5
+ * refuses to release if they disagree.
6
+ */
7
+ export declare const VERSION = "0.1.4";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The published version, in one place: reported to MCP clients, sent to the API
3
+ * in the User-Agent so adoption can be measured, and checked against
4
+ * package.json, server.json and manifest.json by scripts/release.mjs, which
5
+ * refuses to release if they disagree.
6
+ */
7
+ export const VERSION = '0.1.4';
8
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atlasfetch-mcp",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "mcpName": "xyz.atlasfetch/atlasfetch",
5
5
  "description": "MCP server for AtlasFetch — reverse geocode a coordinate to its country, region and municipality (ISO 3166 codes), and match it against your own geofences.",
6
6
  "keywords": [
@@ -42,14 +42,19 @@
42
42
  "build": "tsc",
43
43
  "prepublishOnly": "npm run build",
44
44
  "start": "node dist/stdio.js",
45
- "typecheck": "tsc --noEmit"
45
+ "typecheck": "tsc --noEmit",
46
+ "pack:mcpb": "npm run build && node scripts/pack-mcpb.mjs",
47
+ "release": "node scripts/release.mjs",
48
+ "release:dry": "node scripts/release.mjs --dry-run"
46
49
  },
47
50
  "dependencies": {
48
51
  "@modelcontextprotocol/sdk": "^1.30.0",
49
52
  "zod": "^4.6.5"
50
53
  },
51
54
  "devDependencies": {
55
+ "@anthropic-ai/mcpb": "2.1.2",
52
56
  "@types/node": "^24.0.0",
57
+ "fflate": "0.8.3",
53
58
  "typescript": "^5.9.0"
54
59
  }
55
60
  }
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "xyz.atlasfetch/atlasfetch",
4
4
  "title": "AtlasFetch",
5
5
  "description": "Reverse geocode a coordinate to country, region and municipality, and match your own geofences.",
6
- "version": "0.1.2",
6
+ "version": "0.1.4",
7
7
  "websiteUrl": "https://atlasfetch.xyz",
8
8
  "repository": {
9
9
  "url": "https://github.com/atlasfetch-dev/atlasfetch-mcp",
@@ -13,7 +13,7 @@
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "atlasfetch-mcp",
16
- "version": "0.1.2",
16
+ "version": "0.1.4",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },