@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.
package/dist/index.js ADDED
@@ -0,0 +1,508 @@
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
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
9
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
10
+ import { CallToolRequestSchema, ListToolsRequestSchema, ErrorCode, McpError, } from '@modelcontextprotocol/sdk/types.js';
11
+ import { QuantaRouteClient } from './client.js';
12
+ // Initialize MCP server
13
+ const server = new Server({
14
+ name: '@quantaroute/mcp-server',
15
+ version: '1.0.0',
16
+ }, {
17
+ capabilities: {
18
+ tools: {},
19
+ },
20
+ });
21
+ // Initialize client
22
+ const client = new QuantaRouteClient();
23
+ // List available tools
24
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
25
+ return {
26
+ tools: [
27
+ {
28
+ name: 'geocode',
29
+ description: 'Geocode an address to get DigiPin code and coordinates. Returns location information including latitude, longitude, and DigiPin.',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ address: {
34
+ type: 'string',
35
+ description: 'The address to geocode (required)',
36
+ },
37
+ city: {
38
+ type: 'string',
39
+ description: 'City name (optional)',
40
+ },
41
+ state: {
42
+ type: 'string',
43
+ description: 'State name (optional)',
44
+ },
45
+ pincode: {
46
+ type: 'string',
47
+ description: 'Postal code (optional)',
48
+ },
49
+ country: {
50
+ type: 'string',
51
+ description: 'Country name (optional, defaults to India)',
52
+ },
53
+ },
54
+ required: ['address'],
55
+ },
56
+ },
57
+ {
58
+ name: 'reverse_geocode',
59
+ description: 'Reverse geocode a DigiPin code to get coordinates and address information.',
60
+ inputSchema: {
61
+ type: 'object',
62
+ properties: {
63
+ digipin: {
64
+ type: 'string',
65
+ description: 'The DigiPin code to reverse geocode (format: XXX-XXX-XXXX)',
66
+ },
67
+ },
68
+ required: ['digipin'],
69
+ },
70
+ },
71
+ {
72
+ name: 'coordinates_to_digipin',
73
+ description: 'Convert latitude and longitude coordinates to a DigiPin code.',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ latitude: {
78
+ type: 'number',
79
+ description: 'Latitude coordinate (-90 to 90)',
80
+ },
81
+ longitude: {
82
+ type: 'number',
83
+ description: 'Longitude coordinate (-180 to 180)',
84
+ },
85
+ },
86
+ required: ['latitude', 'longitude'],
87
+ },
88
+ },
89
+ {
90
+ name: 'validate_digipin',
91
+ description: 'Validate a DigiPin format and check if it corresponds to a real location.',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ digipin: {
96
+ type: 'string',
97
+ description: 'The DigiPin code to validate',
98
+ },
99
+ },
100
+ required: ['digipin'],
101
+ },
102
+ },
103
+ {
104
+ name: 'batch_geocode',
105
+ description: 'Geocode multiple addresses in a single batch request (up to 100 addresses).',
106
+ inputSchema: {
107
+ type: 'object',
108
+ properties: {
109
+ addresses: {
110
+ type: 'array',
111
+ description: 'Array of address objects to geocode',
112
+ items: {
113
+ type: 'object',
114
+ properties: {
115
+ address: { type: 'string' },
116
+ city: { type: 'string' },
117
+ state: { type: 'string' },
118
+ pincode: { type: 'string' },
119
+ country: { type: 'string' },
120
+ },
121
+ required: ['address'],
122
+ },
123
+ maxItems: 100,
124
+ },
125
+ },
126
+ required: ['addresses'],
127
+ },
128
+ },
129
+ {
130
+ name: 'autocomplete',
131
+ description: 'Get autocomplete suggestions for addresses (minimum 3 characters).',
132
+ inputSchema: {
133
+ type: 'object',
134
+ properties: {
135
+ query: {
136
+ type: 'string',
137
+ description: 'Search query (minimum 3 characters)',
138
+ },
139
+ limit: {
140
+ type: 'number',
141
+ description: 'Maximum number of suggestions (default: 5, max: 10)',
142
+ default: 5,
143
+ },
144
+ },
145
+ required: ['query'],
146
+ },
147
+ },
148
+ {
149
+ name: 'lookup_location_from_coordinates',
150
+ description: '🚀 REVOLUTIONARY: Get administrative boundaries (pincode, state, division, locality) from coordinates. Provides precision that even government services don\'t offer.',
151
+ inputSchema: {
152
+ type: 'object',
153
+ properties: {
154
+ latitude: {
155
+ type: 'number',
156
+ description: 'Latitude coordinate (-90 to 90)',
157
+ },
158
+ longitude: {
159
+ type: 'number',
160
+ description: 'Longitude coordinate (-180 to 180)',
161
+ },
162
+ },
163
+ required: ['latitude', 'longitude'],
164
+ },
165
+ },
166
+ {
167
+ name: 'lookup_location_from_digipin',
168
+ description: '🚀 REVOLUTIONARY: Get administrative boundaries from a DigiPin code.',
169
+ inputSchema: {
170
+ type: 'object',
171
+ properties: {
172
+ digipin: {
173
+ type: 'string',
174
+ description: 'DigiPin code (format: XXX-XXX-XXXX)',
175
+ },
176
+ },
177
+ required: ['digipin'],
178
+ },
179
+ },
180
+ {
181
+ name: 'batch_location_lookup',
182
+ description: '🚀 REVOLUTIONARY: Batch lookup for multiple locations. Each location can be specified by coordinates or DigiPin (up to 100 locations).',
183
+ inputSchema: {
184
+ type: 'object',
185
+ properties: {
186
+ locations: {
187
+ type: 'array',
188
+ description: 'Array of location objects (each with latitude+longitude OR digipin)',
189
+ items: {
190
+ type: 'object',
191
+ oneOf: [
192
+ {
193
+ properties: {
194
+ latitude: { type: 'number' },
195
+ longitude: { type: 'number' },
196
+ },
197
+ required: ['latitude', 'longitude'],
198
+ },
199
+ {
200
+ properties: {
201
+ digipin: { type: 'string' },
202
+ },
203
+ required: ['digipin'],
204
+ },
205
+ ],
206
+ },
207
+ maxItems: 100,
208
+ },
209
+ },
210
+ required: ['locations'],
211
+ },
212
+ },
213
+ {
214
+ name: 'find_nearby_boundaries',
215
+ description: 'Find nearby postal boundaries within a specified radius (NOT YET IMPLEMENTED - Coming Soon). The backend endpoint /v1/location/nearby needs to be implemented first.',
216
+ inputSchema: {
217
+ type: 'object',
218
+ properties: {
219
+ latitude: {
220
+ type: 'number',
221
+ description: 'Center latitude',
222
+ },
223
+ longitude: {
224
+ type: 'number',
225
+ description: 'Center longitude',
226
+ },
227
+ radius_km: {
228
+ type: 'number',
229
+ description: 'Search radius in kilometers (default: 5.0, max: 100)',
230
+ default: 5.0,
231
+ },
232
+ limit: {
233
+ type: 'number',
234
+ description: 'Maximum number of results (default: 10, max: 50)',
235
+ default: 10,
236
+ },
237
+ },
238
+ required: ['latitude', 'longitude'],
239
+ },
240
+ },
241
+ {
242
+ name: 'get_usage',
243
+ description: 'Get API usage statistics and quota information.',
244
+ inputSchema: {
245
+ type: 'object',
246
+ properties: {},
247
+ },
248
+ },
249
+ {
250
+ name: 'get_location_statistics',
251
+ description: 'Get live statistics about the Location Lookup service (total boundaries, states, divisions, etc.).',
252
+ inputSchema: {
253
+ type: 'object',
254
+ properties: {},
255
+ },
256
+ },
257
+ {
258
+ name: 'get_health',
259
+ description: 'Check API health status and availability.',
260
+ inputSchema: {
261
+ type: 'object',
262
+ properties: {},
263
+ },
264
+ },
265
+ ],
266
+ };
267
+ });
268
+ // Handle tool calls
269
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
270
+ const { name, arguments: args } = request.params;
271
+ if (!args || typeof args !== 'object') {
272
+ throw new McpError(ErrorCode.InvalidParams, 'Invalid arguments');
273
+ }
274
+ try {
275
+ switch (name) {
276
+ case 'geocode': {
277
+ const params = args;
278
+ if (!params.address || typeof params.address !== 'string') {
279
+ throw new McpError(ErrorCode.InvalidParams, 'Address is required');
280
+ }
281
+ const result = await client.geocode(params);
282
+ return {
283
+ content: [
284
+ {
285
+ type: 'text',
286
+ text: JSON.stringify(result, null, 2),
287
+ },
288
+ ],
289
+ };
290
+ }
291
+ case 'reverse_geocode': {
292
+ const params = args;
293
+ if (!params.digipin || typeof params.digipin !== 'string') {
294
+ throw new McpError(ErrorCode.InvalidParams, 'DigiPin is required');
295
+ }
296
+ const result = await client.reverseGeocode(params.digipin);
297
+ return {
298
+ content: [
299
+ {
300
+ type: 'text',
301
+ text: JSON.stringify(result, null, 2),
302
+ },
303
+ ],
304
+ };
305
+ }
306
+ case 'coordinates_to_digipin': {
307
+ const params = args;
308
+ if (typeof params.latitude !== 'number' || typeof params.longitude !== 'number') {
309
+ throw new McpError(ErrorCode.InvalidParams, 'Latitude and longitude must be numbers');
310
+ }
311
+ if (params.latitude < -90 || params.latitude > 90) {
312
+ throw new McpError(ErrorCode.InvalidParams, 'Latitude must be between -90 and 90');
313
+ }
314
+ if (params.longitude < -180 || params.longitude > 180) {
315
+ throw new McpError(ErrorCode.InvalidParams, 'Longitude must be between -180 and 180');
316
+ }
317
+ const result = await client.coordinatesToDigiPin(params.latitude, params.longitude);
318
+ return {
319
+ content: [
320
+ {
321
+ type: 'text',
322
+ text: JSON.stringify(result, null, 2),
323
+ },
324
+ ],
325
+ };
326
+ }
327
+ case 'validate_digipin': {
328
+ const params = args;
329
+ if (!params.digipin || typeof params.digipin !== 'string') {
330
+ throw new McpError(ErrorCode.InvalidParams, 'DigiPin is required');
331
+ }
332
+ const result = await client.validateDigiPin(params.digipin);
333
+ return {
334
+ content: [
335
+ {
336
+ type: 'text',
337
+ text: JSON.stringify(result, null, 2),
338
+ },
339
+ ],
340
+ };
341
+ }
342
+ case 'batch_geocode': {
343
+ const params = args;
344
+ if (!params.addresses || !Array.isArray(params.addresses) || params.addresses.length === 0) {
345
+ throw new McpError(ErrorCode.InvalidParams, 'Addresses must be a non-empty array');
346
+ }
347
+ if (params.addresses.length > 100) {
348
+ throw new McpError(ErrorCode.InvalidParams, 'Maximum 100 addresses allowed per batch');
349
+ }
350
+ const result = await client.batchGeocode(params.addresses);
351
+ return {
352
+ content: [
353
+ {
354
+ type: 'text',
355
+ text: JSON.stringify(result, null, 2),
356
+ },
357
+ ],
358
+ };
359
+ }
360
+ case 'autocomplete': {
361
+ const params = args;
362
+ if (!params.query || typeof params.query !== 'string' || params.query.length < 3) {
363
+ throw new McpError(ErrorCode.InvalidParams, 'Query must be at least 3 characters long');
364
+ }
365
+ const result = await client.autocomplete(params.query, params.limit);
366
+ return {
367
+ content: [
368
+ {
369
+ type: 'text',
370
+ text: JSON.stringify(result, null, 2),
371
+ },
372
+ ],
373
+ };
374
+ }
375
+ case 'lookup_location_from_coordinates': {
376
+ const params = args;
377
+ if (typeof params.latitude !== 'number' || typeof params.longitude !== 'number') {
378
+ throw new McpError(ErrorCode.InvalidParams, 'Latitude and longitude must be numbers');
379
+ }
380
+ if (params.latitude < -90 || params.latitude > 90) {
381
+ throw new McpError(ErrorCode.InvalidParams, 'Latitude must be between -90 and 90');
382
+ }
383
+ if (params.longitude < -180 || params.longitude > 180) {
384
+ throw new McpError(ErrorCode.InvalidParams, 'Longitude must be between -180 and 180');
385
+ }
386
+ const result = await client.lookupLocationFromCoordinates(params.latitude, params.longitude);
387
+ return {
388
+ content: [
389
+ {
390
+ type: 'text',
391
+ text: JSON.stringify(result, null, 2),
392
+ },
393
+ ],
394
+ };
395
+ }
396
+ case 'lookup_location_from_digipin': {
397
+ const params = args;
398
+ if (!params.digipin || typeof params.digipin !== 'string') {
399
+ throw new McpError(ErrorCode.InvalidParams, 'DigiPin is required');
400
+ }
401
+ const result = await client.lookupLocationFromDigiPin(params.digipin);
402
+ return {
403
+ content: [
404
+ {
405
+ type: 'text',
406
+ text: JSON.stringify(result, null, 2),
407
+ },
408
+ ],
409
+ };
410
+ }
411
+ case 'batch_location_lookup': {
412
+ const params = args;
413
+ if (!params.locations || !Array.isArray(params.locations) || params.locations.length === 0) {
414
+ throw new McpError(ErrorCode.InvalidParams, 'Locations must be a non-empty array');
415
+ }
416
+ if (params.locations.length > 100) {
417
+ throw new McpError(ErrorCode.InvalidParams, 'Maximum 100 locations allowed per batch');
418
+ }
419
+ const result = await client.batchLocationLookup(params.locations);
420
+ return {
421
+ content: [
422
+ {
423
+ type: 'text',
424
+ text: JSON.stringify(result, null, 2),
425
+ },
426
+ ],
427
+ };
428
+ }
429
+ case 'find_nearby_boundaries': {
430
+ // TODO: This endpoint is not yet implemented in the backend API
431
+ // The backend endpoint /v1/location/nearby does not exist
432
+ throw new McpError(ErrorCode.InternalError, 'The find_nearby_boundaries feature is not yet implemented in the backend API. The endpoint /v1/location/nearby needs to be implemented first. This feature is coming soon.');
433
+ /* Original implementation - Commented out until backend endpoint is available
434
+ const params = args as unknown as NearbyBoundariesParams;
435
+ if (typeof params.latitude !== 'number' || typeof params.longitude !== 'number') {
436
+ throw new McpError(ErrorCode.InvalidParams, 'Latitude and longitude must be numbers');
437
+ }
438
+ const result = await client.findNearbyBoundaries(
439
+ params.latitude,
440
+ params.longitude,
441
+ params.radius_km,
442
+ params.limit
443
+ );
444
+ return {
445
+ content: [
446
+ {
447
+ type: 'text',
448
+ text: JSON.stringify(result, null, 2),
449
+ },
450
+ ],
451
+ };
452
+ */
453
+ }
454
+ case 'get_usage': {
455
+ const result = await client.getUsage();
456
+ return {
457
+ content: [
458
+ {
459
+ type: 'text',
460
+ text: JSON.stringify(result, null, 2),
461
+ },
462
+ ],
463
+ };
464
+ }
465
+ case 'get_location_statistics': {
466
+ const result = await client.getLocationStatistics();
467
+ return {
468
+ content: [
469
+ {
470
+ type: 'text',
471
+ text: JSON.stringify(result, null, 2),
472
+ },
473
+ ],
474
+ };
475
+ }
476
+ case 'get_health': {
477
+ const result = await client.getHealth();
478
+ return {
479
+ content: [
480
+ {
481
+ type: 'text',
482
+ text: JSON.stringify(result, null, 2),
483
+ },
484
+ ],
485
+ };
486
+ }
487
+ default:
488
+ throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
489
+ }
490
+ }
491
+ catch (error) {
492
+ if (error instanceof McpError) {
493
+ throw error;
494
+ }
495
+ throw new McpError(ErrorCode.InternalError, `Tool execution failed: ${error.message}`);
496
+ }
497
+ });
498
+ // Start the server
499
+ async function main() {
500
+ const transport = new StdioServerTransport();
501
+ await server.connect(transport);
502
+ console.error('QuantaRoute MCP Server running on stdio');
503
+ }
504
+ main().catch((error) => {
505
+ console.error('Fatal error in main():', error);
506
+ process.exit(1);
507
+ });
508
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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"}