@quantaroute/mcp-server 1.0.0

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,368 @@
1
+ import { QuantaRouteClient } from '../src/client.js';
2
+ // CORS headers
3
+ const corsHeaders = {
4
+ 'Access-Control-Allow-Origin': '*',
5
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
6
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization, x-api-key',
7
+ 'Content-Type': 'application/json',
8
+ };
9
+ // Helper to send JSON response
10
+ function sendJson(res, status, data) {
11
+ Object.entries(corsHeaders).forEach(([key, value]) => {
12
+ res.setHeader(key, value);
13
+ });
14
+ res.status(status).json(data);
15
+ }
16
+ // Helper to handle errors
17
+ function handleError(res, error, status = 500) {
18
+ console.error('API Error:', error);
19
+ // Determine status code from error message
20
+ if (error.message?.includes('Authentication failed')) {
21
+ status = 401;
22
+ }
23
+ else if (error.message?.includes('Rate limit exceeded')) {
24
+ status = 429;
25
+ }
26
+ else if (error.message?.includes('required') || error.message?.includes('must be')) {
27
+ status = 400;
28
+ }
29
+ sendJson(res, status, {
30
+ error: error.message || 'Internal server error',
31
+ success: false,
32
+ });
33
+ }
34
+ // Get API key from request headers or environment
35
+ function getApiKey(req) {
36
+ // Priority: Request header > Environment variable
37
+ const headerKey = req.headers['x-api-key'];
38
+ const envKey = process.env.QUANTAROUTE_API_KEY;
39
+ if (headerKey) {
40
+ return headerKey;
41
+ }
42
+ if (envKey) {
43
+ return envKey;
44
+ }
45
+ throw new Error('API key is required. Set QUANTAROUTE_API_KEY environment variable or provide x-api-key header');
46
+ }
47
+ // Create client instance with API key
48
+ function createClient(req) {
49
+ const apiKey = getApiKey(req);
50
+ return new QuantaRouteClient(apiKey);
51
+ }
52
+ // Handle CORS preflight
53
+ function handleCors(req, res) {
54
+ if (req.method === 'OPTIONS') {
55
+ Object.entries(corsHeaders).forEach(([key, value]) => {
56
+ res.setHeader(key, value);
57
+ });
58
+ res.status(200).end();
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ export default async function handler(req, res) {
64
+ // Handle CORS preflight
65
+ if (handleCors(req, res)) {
66
+ return;
67
+ }
68
+ const { method, query, body } = req;
69
+ const path = query.path || [];
70
+ const endpoint = path[0] || '';
71
+ try {
72
+ // Create client instance with API key from request or environment
73
+ const client = createClient(req);
74
+ // Health check
75
+ if (endpoint === 'health' && method === 'GET') {
76
+ const result = await client.getHealth();
77
+ return sendJson(res, 200, { success: true, data: result });
78
+ }
79
+ // Get usage statistics
80
+ if (endpoint === 'usage' && method === 'GET') {
81
+ const result = await client.getUsage();
82
+ return sendJson(res, 200, { success: true, data: result });
83
+ }
84
+ // Get location statistics
85
+ if (endpoint === 'location-statistics' && method === 'GET') {
86
+ const result = await client.getLocationStatistics();
87
+ return sendJson(res, 200, { success: true, data: result });
88
+ }
89
+ // Geocode
90
+ if (endpoint === 'geocode' && method === 'POST') {
91
+ if (!body || !body.address) {
92
+ return sendJson(res, 400, {
93
+ success: false,
94
+ error: 'Address is required',
95
+ });
96
+ }
97
+ const result = await client.geocode(body);
98
+ return sendJson(res, 200, { success: true, data: result });
99
+ }
100
+ // Reverse geocode
101
+ if (endpoint === 'reverse-geocode' && method === 'POST') {
102
+ if (!body || !body.digipin) {
103
+ return sendJson(res, 400, {
104
+ success: false,
105
+ error: 'DigiPin is required',
106
+ });
107
+ }
108
+ const result = await client.reverseGeocode(body.digipin);
109
+ return sendJson(res, 200, { success: true, data: result });
110
+ }
111
+ // Coordinates to DigiPin
112
+ if (endpoint === 'coordinates-to-digipin' && method === 'POST') {
113
+ if (typeof body?.latitude !== 'number' || typeof body?.longitude !== 'number') {
114
+ return sendJson(res, 400, {
115
+ success: false,
116
+ error: 'Latitude and longitude are required and must be numbers',
117
+ });
118
+ }
119
+ if (body.latitude < -90 || body.latitude > 90) {
120
+ return sendJson(res, 400, {
121
+ success: false,
122
+ error: 'Latitude must be between -90 and 90',
123
+ });
124
+ }
125
+ if (body.longitude < -180 || body.longitude > 180) {
126
+ return sendJson(res, 400, {
127
+ success: false,
128
+ error: 'Longitude must be between -180 and 180',
129
+ });
130
+ }
131
+ const result = await client.coordinatesToDigiPin(body.latitude, body.longitude);
132
+ return sendJson(res, 200, { success: true, data: result });
133
+ }
134
+ // Validate DigiPin (GET method with query parameter)
135
+ if (endpoint === 'validate-digipin') {
136
+ if (method === 'GET') {
137
+ const digipin = query.digipin;
138
+ if (!digipin) {
139
+ return sendJson(res, 400, {
140
+ success: false,
141
+ error: 'DigiPin query parameter is required',
142
+ });
143
+ }
144
+ const result = await client.validateDigiPin(digipin);
145
+ return sendJson(res, 200, { success: true, data: result });
146
+ }
147
+ // Also support POST for consistency
148
+ if (method === 'POST') {
149
+ if (!body || !body.digipin) {
150
+ return sendJson(res, 400, {
151
+ success: false,
152
+ error: 'DigiPin is required',
153
+ });
154
+ }
155
+ const result = await client.validateDigiPin(body.digipin);
156
+ return sendJson(res, 200, { success: true, data: result });
157
+ }
158
+ }
159
+ // Batch geocode
160
+ if (endpoint === 'batch-geocode' && method === 'POST') {
161
+ if (!body || !Array.isArray(body.addresses) || body.addresses.length === 0) {
162
+ return sendJson(res, 400, {
163
+ success: false,
164
+ error: 'Addresses must be a non-empty array',
165
+ });
166
+ }
167
+ if (body.addresses.length > 100) {
168
+ return sendJson(res, 400, {
169
+ success: false,
170
+ error: 'Maximum 100 addresses allowed per batch',
171
+ });
172
+ }
173
+ const result = await client.batchGeocode(body.addresses);
174
+ return sendJson(res, 200, { success: true, data: result });
175
+ }
176
+ // Autocomplete
177
+ if (endpoint === 'autocomplete' && method === 'GET') {
178
+ const queryParam = req.query.q;
179
+ const limit = req.query.limit ? parseInt(req.query.limit, 10) : 5;
180
+ if (!queryParam || queryParam.length < 3) {
181
+ return sendJson(res, 400, {
182
+ success: false,
183
+ error: 'Query parameter "q" must be at least 3 characters long',
184
+ });
185
+ }
186
+ if (limit > 10) {
187
+ return sendJson(res, 400, {
188
+ success: false,
189
+ error: 'Limit cannot exceed 10',
190
+ });
191
+ }
192
+ const result = await client.autocomplete(queryParam, limit);
193
+ return sendJson(res, 200, { success: true, data: result });
194
+ }
195
+ // Lookup location from coordinates
196
+ if (endpoint === 'lookup-location-from-coordinates' && method === 'POST') {
197
+ if (typeof body?.latitude !== 'number' || typeof body?.longitude !== 'number') {
198
+ return sendJson(res, 400, {
199
+ success: false,
200
+ error: 'Latitude and longitude are required and must be numbers',
201
+ });
202
+ }
203
+ if (body.latitude < -90 || body.latitude > 90) {
204
+ return sendJson(res, 400, {
205
+ success: false,
206
+ error: 'Latitude must be between -90 and 90',
207
+ });
208
+ }
209
+ if (body.longitude < -180 || body.longitude > 180) {
210
+ return sendJson(res, 400, {
211
+ success: false,
212
+ error: 'Longitude must be between -180 and 180',
213
+ });
214
+ }
215
+ const result = await client.lookupLocationFromCoordinates(body.latitude, body.longitude);
216
+ return sendJson(res, 200, { success: true, data: result });
217
+ }
218
+ // Lookup location from DigiPin
219
+ if (endpoint === 'lookup-location-from-digipin' && method === 'POST') {
220
+ if (!body || !body.digipin) {
221
+ return sendJson(res, 400, {
222
+ success: false,
223
+ error: 'DigiPin is required',
224
+ });
225
+ }
226
+ const result = await client.lookupLocationFromDigiPin(body.digipin);
227
+ return sendJson(res, 200, { success: true, data: result });
228
+ }
229
+ // Batch location lookup
230
+ if (endpoint === 'batch-location-lookup' && method === 'POST') {
231
+ if (!body || !Array.isArray(body.locations) || body.locations.length === 0) {
232
+ return sendJson(res, 400, {
233
+ success: false,
234
+ error: 'Locations must be a non-empty array',
235
+ });
236
+ }
237
+ if (body.locations.length > 100) {
238
+ return sendJson(res, 400, {
239
+ success: false,
240
+ error: 'Maximum 100 locations allowed per batch',
241
+ });
242
+ }
243
+ const result = await client.batchLocationLookup(body.locations);
244
+ return sendJson(res, 200, { success: true, data: result });
245
+ }
246
+ // Find nearby boundaries
247
+ if (endpoint === 'find-nearby-boundaries' && method === 'POST') {
248
+ if (typeof body?.latitude !== 'number' || typeof body?.longitude !== 'number') {
249
+ return sendJson(res, 400, {
250
+ success: false,
251
+ error: 'Latitude and longitude are required and must be numbers',
252
+ });
253
+ }
254
+ if (body.latitude < -90 || body.latitude > 90) {
255
+ return sendJson(res, 400, {
256
+ success: false,
257
+ error: 'Latitude must be between -90 and 90',
258
+ });
259
+ }
260
+ if (body.longitude < -180 || body.longitude > 180) {
261
+ return sendJson(res, 400, {
262
+ success: false,
263
+ error: 'Longitude must be between -180 and 180',
264
+ });
265
+ }
266
+ const radius_km = typeof body.radius_km === 'number' ? body.radius_km : 5.0;
267
+ const limit = typeof body.limit === 'number' ? body.limit : 10;
268
+ if (radius_km > 100) {
269
+ return sendJson(res, 400, {
270
+ success: false,
271
+ error: 'Radius cannot exceed 100 km',
272
+ });
273
+ }
274
+ if (limit > 50) {
275
+ return sendJson(res, 400, {
276
+ success: false,
277
+ error: 'Limit cannot exceed 50',
278
+ });
279
+ }
280
+ const result = await client.findNearbyBoundaries(body.latitude, body.longitude, radius_km, limit);
281
+ return sendJson(res, 200, { success: true, data: result });
282
+ }
283
+ // Root endpoint - show API documentation
284
+ if (endpoint === '' && method === 'GET') {
285
+ return sendJson(res, 200, {
286
+ success: true,
287
+ message: 'QuantaRoute Geocoder REST API',
288
+ version: '1.0.0',
289
+ documentation: 'https://github.com/mapdevsaikat/quantaroute-geocoder',
290
+ authentication: {
291
+ method: 'API Key',
292
+ header: 'x-api-key',
293
+ env: 'QUANTAROUTE_API_KEY',
294
+ note: 'API key can be provided via x-api-key header or QUANTAROUTE_API_KEY environment variable',
295
+ },
296
+ endpoints: {
297
+ 'GET /api': 'Get API information (this endpoint)',
298
+ 'GET /api/health': 'Check API health status',
299
+ 'GET /api/usage': 'Get API usage statistics',
300
+ 'GET /api/location-statistics': 'Get location service statistics',
301
+ 'GET /api/autocomplete?q=query&limit=5': 'Get address autocomplete suggestions (min 3 chars)',
302
+ 'GET /api/validate-digipin?digipin=XXX-XXX-XXXX': 'Validate a DigiPin code',
303
+ 'POST /api/geocode': 'Geocode an address to get DigiPin and coordinates',
304
+ 'POST /api/reverse-geocode': 'Reverse geocode a DigiPin to get address',
305
+ 'POST /api/coordinates-to-digipin': 'Convert coordinates to DigiPin',
306
+ 'POST /api/validate-digipin': 'Validate a DigiPin code (alternative to GET)',
307
+ 'POST /api/batch-geocode': 'Geocode multiple addresses (up to 100)',
308
+ 'POST /api/lookup-location-from-coordinates': 'Get administrative boundaries from coordinates',
309
+ 'POST /api/lookup-location-from-digipin': 'Get administrative boundaries from DigiPin',
310
+ 'POST /api/batch-location-lookup': 'Batch lookup for multiple locations (up to 100)',
311
+ 'POST /api/find-nearby-boundaries': 'Find nearby postal boundaries within a radius',
312
+ },
313
+ examples: {
314
+ geocode: {
315
+ method: 'POST',
316
+ url: '/api/geocode',
317
+ headers: { 'Content-Type': 'application/json', 'x-api-key': 'your-api-key' },
318
+ body: {
319
+ address: '123 Main Street, New Delhi',
320
+ city: 'New Delhi',
321
+ state: 'Delhi',
322
+ pincode: '110001',
323
+ },
324
+ },
325
+ reverseGeocode: {
326
+ method: 'POST',
327
+ url: '/api/reverse-geocode',
328
+ headers: { 'Content-Type': 'application/json', 'x-api-key': 'your-api-key' },
329
+ body: { digipin: 'ABC-DEF-1234' },
330
+ },
331
+ autocomplete: {
332
+ method: 'GET',
333
+ url: '/api/autocomplete?q=New Delhi&limit=5',
334
+ headers: { 'x-api-key': 'your-api-key' },
335
+ },
336
+ },
337
+ });
338
+ }
339
+ // 404 for unknown endpoints
340
+ return sendJson(res, 404, {
341
+ success: false,
342
+ error: 'Endpoint not found',
343
+ endpoint: endpoint || '(root)',
344
+ method: method,
345
+ availableEndpoints: [
346
+ 'GET /api',
347
+ 'GET /api/health',
348
+ 'GET /api/usage',
349
+ 'GET /api/location-statistics',
350
+ 'GET /api/autocomplete?q=query&limit=5',
351
+ 'GET /api/validate-digipin?digipin=XXX-XXX-XXXX',
352
+ 'POST /api/geocode',
353
+ 'POST /api/reverse-geocode',
354
+ 'POST /api/coordinates-to-digipin',
355
+ 'POST /api/validate-digipin',
356
+ 'POST /api/batch-geocode',
357
+ 'POST /api/lookup-location-from-coordinates',
358
+ 'POST /api/lookup-location-from-digipin',
359
+ 'POST /api/batch-location-lookup',
360
+ 'POST /api/find-nearby-boundaries',
361
+ ],
362
+ });
363
+ }
364
+ catch (error) {
365
+ handleError(res, error);
366
+ }
367
+ }
368
+ //# sourceMappingURL=%5B...path%5D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"[...path].js","sourceRoot":"","sources":["../../api/[...path].ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ interface GeocodeParams {
2
+ address: string;
3
+ city?: string;
4
+ state?: string;
5
+ pincode?: string;
6
+ country?: string;
7
+ }
8
+ interface BatchGeocodeParams {
9
+ addresses: Array<{
10
+ address: string;
11
+ city?: string;
12
+ state?: string;
13
+ pincode?: string;
14
+ country?: string;
15
+ }>;
16
+ }
17
+ interface BatchLocationParams {
18
+ locations: Array<{
19
+ latitude?: number;
20
+ longitude?: number;
21
+ digipin?: string;
22
+ }>;
23
+ }
24
+ export declare class QuantaRouteClient {
25
+ private client;
26
+ private apiKey;
27
+ private baseUrl;
28
+ constructor(apiKey?: string, baseUrl?: string);
29
+ private makeRequest;
30
+ geocode(params: GeocodeParams): Promise<any>;
31
+ reverseGeocode(digipin: string): Promise<any>;
32
+ coordinatesToDigiPin(latitude: number, longitude: number): Promise<any>;
33
+ validateDigiPin(digipin: string): Promise<any>;
34
+ batchGeocode(addresses: BatchGeocodeParams['addresses']): Promise<any>;
35
+ autocomplete(query: string, limit?: number): Promise<any>;
36
+ lookupLocationFromCoordinates(latitude: number, longitude: number): Promise<any>;
37
+ lookupLocationFromDigiPin(digipin: string): Promise<any>;
38
+ batchLocationLookup(locations: BatchLocationParams['locations']): Promise<any>;
39
+ findNearbyBoundaries(latitude: number, longitude: number, radius_km?: number, limit?: number): Promise<any>;
40
+ getUsage(): Promise<any>;
41
+ getLocationStatistics(): Promise<any>;
42
+ getHealth(): Promise<any>;
43
+ }
44
+ export {};
45
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,SAAS,EAAE,KAAK,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsC;YAsB9D,WAAW;IA0BnB,OAAO,CAAC,MAAM,EAAE,aAAa;IAa7B,cAAc,CAAC,OAAO,EAAE,MAAM;IAK9B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQxD,eAAe,CAAC,OAAO,EAAE,MAAM;IAK/B,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC;IAKvD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU;IAQ7C,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQjE,yBAAyB,CAAC,OAAO,EAAE,MAAM;IAKzC,mBAAmB,CAAC,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC;IAK/D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,EAAE,KAAK,GAAE,MAAW;IAUrG,QAAQ;IAKR,qBAAqB;IAKrB,SAAS;CAIhB"}
package/dist/client.js ADDED
@@ -0,0 +1,127 @@
1
+ import axios from 'axios';
2
+ export class QuantaRouteClient {
3
+ client;
4
+ apiKey;
5
+ baseUrl;
6
+ constructor(apiKey, baseUrl = 'https://api.quantaroute.com') {
7
+ this.apiKey = apiKey || process.env.QUANTAROUTE_API_KEY || '';
8
+ this.baseUrl = baseUrl;
9
+ this.client = axios.create({
10
+ baseURL: this.baseUrl,
11
+ timeout: 30000,
12
+ headers: {
13
+ 'Content-Type': 'application/json',
14
+ 'User-Agent': '@quantaroute/mcp-server/1.0.0',
15
+ },
16
+ });
17
+ // Set API key interceptor if provided
18
+ if (this.apiKey) {
19
+ this.client.interceptors.request.use((config) => {
20
+ config.headers['x-api-key'] = this.apiKey;
21
+ return config;
22
+ });
23
+ }
24
+ }
25
+ async makeRequest(method, endpoint, data, params) {
26
+ try {
27
+ const response = await this.client.request({
28
+ method,
29
+ url: endpoint,
30
+ data,
31
+ params,
32
+ });
33
+ return response.data;
34
+ }
35
+ catch (error) {
36
+ if (error.response) {
37
+ const status = error.response.status;
38
+ const message = error.response.data?.message || error.message;
39
+ if (status === 401) {
40
+ throw new Error(`Authentication failed: ${message}`);
41
+ }
42
+ if (status === 429) {
43
+ throw new Error(`Rate limit exceeded: ${message}`);
44
+ }
45
+ throw new Error(`API error (${status}): ${message}`);
46
+ }
47
+ throw new Error(`Request failed: ${error.message}`);
48
+ }
49
+ }
50
+ async geocode(params) {
51
+ const data = {
52
+ address: params.address,
53
+ country: params.country || 'India',
54
+ };
55
+ if (params.city)
56
+ data.city = params.city;
57
+ if (params.state)
58
+ data.state = params.state;
59
+ if (params.pincode)
60
+ data.pincode = params.pincode;
61
+ const response = await this.makeRequest('POST', '/v1/digipin/geocode', data);
62
+ return response.data || response;
63
+ }
64
+ async reverseGeocode(digipin) {
65
+ const response = await this.makeRequest('POST', '/v1/digipin/reverse', { digipin });
66
+ return response.data || response;
67
+ }
68
+ async coordinatesToDigiPin(latitude, longitude) {
69
+ const response = await this.makeRequest('POST', '/v1/digipin/coordinates-to-digipin', {
70
+ latitude,
71
+ longitude,
72
+ });
73
+ return response.data || response;
74
+ }
75
+ async validateDigiPin(digipin) {
76
+ const response = await this.makeRequest('GET', `/v1/digipin/validate/${digipin}`);
77
+ return response.data || response;
78
+ }
79
+ async batchGeocode(addresses) {
80
+ const response = await this.makeRequest('POST', '/v1/digipin/batch', { addresses });
81
+ return response.data || response;
82
+ }
83
+ async autocomplete(query, limit = 5) {
84
+ const response = await this.makeRequest('GET', '/v1/digipin/autocomplete', undefined, {
85
+ q: query,
86
+ limit: Math.min(limit, 10),
87
+ });
88
+ return response.data || response;
89
+ }
90
+ async lookupLocationFromCoordinates(latitude, longitude) {
91
+ const response = await this.makeRequest('POST', '/v1/location/lookup', {
92
+ latitude,
93
+ longitude,
94
+ });
95
+ return response.data || response;
96
+ }
97
+ async lookupLocationFromDigiPin(digipin) {
98
+ const response = await this.makeRequest('POST', '/v1/location/lookup', { digipin });
99
+ return response.data || response;
100
+ }
101
+ async batchLocationLookup(locations) {
102
+ const response = await this.makeRequest('POST', '/v1/location/batch-lookup', { locations });
103
+ return response.data || response;
104
+ }
105
+ async findNearbyBoundaries(latitude, longitude, radius_km = 5.0, limit = 10) {
106
+ const response = await this.makeRequest('GET', '/v1/location/nearby', undefined, {
107
+ lat: latitude,
108
+ lng: longitude,
109
+ radius: radius_km,
110
+ limit: Math.min(limit, 50),
111
+ });
112
+ return response.data || response;
113
+ }
114
+ async getUsage() {
115
+ const response = await this.makeRequest('GET', '/v1/digipin/usage');
116
+ return response.data || response;
117
+ }
118
+ async getLocationStatistics() {
119
+ const response = await this.makeRequest('GET', '/v1/location/stats');
120
+ return response.data || response;
121
+ }
122
+ async getHealth() {
123
+ const response = await this.makeRequest('GET', '/health');
124
+ return response.data || response;
125
+ }
126
+ }
127
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AA4B7C,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAgB;IACtB,MAAM,CAAS;IACf,OAAO,CAAS;IAExB,YAAY,MAAe,EAAE,UAAkB,6BAA6B;QAC1E,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,+BAA+B;aAC9C;SACF,CAAC,CAAC;QAEH,sCAAsC;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC9C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1C,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAsB,EAAE,QAAgB,EAAE,IAAU,EAAE,MAAY;QAC1F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBACzC,MAAM;gBACN,GAAG,EAAE,QAAQ;gBACb,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;gBAE9D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAqB;QACjC,MAAM,IAAI,GAAQ;YAChB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;SACnC,CAAC;QACF,IAAI,MAAM,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5C,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAElD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAC7E,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,SAAiB;QAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,oCAAoC,EAAE;YACpF,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,wBAAwB,OAAO,EAAE,CAAC,CAAC;QAClF,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAA0C;QAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACpF,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,QAAgB,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,0BAA0B,EAAE,SAAS,EAAE;YACpF,CAAC,EAAE,KAAK;YACR,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;SAC3B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,6BAA6B,CAAC,QAAgB,EAAE,SAAiB;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,EAAE;YACrE,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,OAAe;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,SAA2C;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5F,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,SAAiB,EAAE,YAAoB,GAAG,EAAE,QAAgB,EAAE;QACzG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE;YAC/E,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;SAC3B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * QuantaRoute Geocoder MCP Server
4
+ *
5
+ * Provides MCP tools for geocoding addresses, location lookups, and DigiPin processing
6
+ * using the QuantaRoute Geocoding API.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}