reunion_list_5g_sites
Retrieve 5G cell sites in La Réunion with operator, frequency bands, commune, and release date. Supports coverage analysis and infrastructure mapping.
Instructions
List mobile 5G cell sites deployed across La Réunion, sourced from ARCEP open data (the French telecoms regulator). Each row is one operator-station combination. Returns operator name, operator site ID, ANFR station ID, active frequency bands (MHz), commercial-release date for 5G service, commune, EPCI. Useful for coverage analysis, infrastructure mapping, operator comparison, real-estate / connectivity studies.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| operator | No | Operator name prefix match. Examples: "Orange", "SFR", "Bouygues Telecom", "Free Mobile" | |
| commune | No | Commune name prefix match | |
| frequency | No | Frequency band substring match. Examples: "700" (700 MHz), "2100" (2.1 GHz), "3500" (3.5 GHz, the main 5G band) | |
| limit | No | Max sites to return (1-500, default 100) |
Implementation Reference
- src/modules/telecom.ts:12-48 (registration)The tool 'reunion_list_5g_sites' is registered via server.tool() inside registerTelecomTools(). The registration includes the tool name, description, Zod schema for input params (operator, commune, frequency, limit), and the handler function.
export function registerTelecomTools(server: McpServer): void { server.tool( 'reunion_list_5g_sites', 'List mobile 5G cell sites deployed across La Réunion, sourced from ARCEP open data (the French telecoms regulator). Each row is one operator-station combination. Returns operator name, operator site ID, ANFR station ID, active frequency bands (MHz), commercial-release date for 5G service, commune, EPCI. Useful for coverage analysis, infrastructure mapping, operator comparison, real-estate / connectivity studies.', { operator: z.string().optional().describe('Operator name prefix match. Examples: "Orange", "SFR", "Bouygues Telecom", "Free Mobile"'), commune: z.string().optional().describe('Commune name prefix match'), frequency: z.string().optional().describe('Frequency band substring match. Examples: "700" (700 MHz), "2100" (2.1 GHz), "3500" (3.5 GHz, the main 5G band)'), limit: z.number().int().min(1).max(500).default(100).describe('Max sites to return (1-500, default 100)'), }, async ({ operator, commune, frequency, limit }) => { try { const data = await client.getRecords<RecordObject>(DATASET_5G, { where: buildWhere([ operator ? `op_name LIKE ${quote(`${operator}%`)}` : undefined, commune ? `com_name LIKE ${quote(`${commune}%`)}` : undefined, frequency ? `frequency LIKE ${quote(`%${frequency}%`)}` : undefined, ]), limit, }); return jsonResult({ total_sites: data.total_count, sites: data.results.map((row) => ({ operator: pickString(row, ['op_name']), site_id: pickString(row, ['op_site_id']), anfr_station_id: pickString(row, ['anfr_station_id']), frequency_bands_mhz: pickString(row, ['frequency']), commercial_release: pickString(row, ['release_date_5g']), commune: pickString(row, ['com_name']), epci: pickString(row, ['epci_name']), })), }); } catch (error) { return errorResult(error instanceof Error ? error.message : 'Failed to fetch 5G sites'); } } ); - src/modules/telecom.ts:22-47 (handler)The handler function for 'reunion_list_5g_sites'. It builds an ODSQL WHERE clause from optional filters, queries the OpenDataSoft API for dataset 'sites-mobiles-5g-a-la-reunion', maps results to a structured response (operator, site_id, anfr_station_id, frequency_bands_mhz, commercial_release, commune, epci), and returns JSON.
async ({ operator, commune, frequency, limit }) => { try { const data = await client.getRecords<RecordObject>(DATASET_5G, { where: buildWhere([ operator ? `op_name LIKE ${quote(`${operator}%`)}` : undefined, commune ? `com_name LIKE ${quote(`${commune}%`)}` : undefined, frequency ? `frequency LIKE ${quote(`%${frequency}%`)}` : undefined, ]), limit, }); return jsonResult({ total_sites: data.total_count, sites: data.results.map((row) => ({ operator: pickString(row, ['op_name']), site_id: pickString(row, ['op_site_id']), anfr_station_id: pickString(row, ['anfr_station_id']), frequency_bands_mhz: pickString(row, ['frequency']), commercial_release: pickString(row, ['release_date_5g']), commune: pickString(row, ['com_name']), epci: pickString(row, ['epci_name']), })), }); } catch (error) { return errorResult(error instanceof Error ? error.message : 'Failed to fetch 5G sites'); } } - src/modules/telecom.ts:17-21 (schema)Zod schema defining the four input parameters: operator (optional string), commune (optional string), frequency (optional string), and limit (integer 1-500, default 100).
operator: z.string().optional().describe('Operator name prefix match. Examples: "Orange", "SFR", "Bouygues Telecom", "Free Mobile"'), commune: z.string().optional().describe('Commune name prefix match'), frequency: z.string().optional().describe('Frequency band substring match. Examples: "700" (700 MHz), "2100" (2.1 GHz), "3500" (3.5 GHz, the main 5G band)'), limit: z.number().int().min(1).max(500).default(100).describe('Max sites to return (1-500, default 100)'), },