balizamcp 1.0.0 → 1.0.2
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 +7 -23
- package/dist/index.d.ts +1 -3
- package/dist/index.js +12 -21
- package/package.json +6 -5
package/README.md
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
**Servidor MCP oficial de [balizame.com](https://balizame.com) para datos en tiempo real de balizas V16 activas en Espana.**
|
|
9
9
|
|
|
10
|
-
Conecta Claude y otros LLMs con
|
|
10
|
+
Conecta Claude y otros LLMs con datos de balizas V16, obteniendo las ubicaciones de vehiculos detenidos/averiados que estan transmitiendo su posicion mediante balizas V16 conectadas.
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
## Caracteristicas
|
|
15
15
|
|
|
16
|
-
- **Datos en tiempo real**: Actualizacion cada minuto
|
|
16
|
+
- **Datos en tiempo real**: Actualizacion cada minuto
|
|
17
17
|
- **Filtrado inteligente**: Solo muestra incidentes tipo `vehicleObstruction` (balizas V16 activas)
|
|
18
18
|
- **Cobertura nacional**: Todas las balizas V16 conectadas en Espana
|
|
19
19
|
- **Informacion completa**: Coordenadas GPS, carretera, km, municipio, provincia, severidad
|
|
@@ -38,7 +38,7 @@ npm install -g balizamcp
|
|
|
38
38
|
### Opcion 3: Desde codigo fuente
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
git clone https://github.com/
|
|
41
|
+
git clone https://github.com/granerodev/balizamcp.git
|
|
42
42
|
cd balizamcp
|
|
43
43
|
npm install
|
|
44
44
|
npm run build
|
|
@@ -108,7 +108,7 @@ Obtiene las balizas V16 actualmente activas en Espana.
|
|
|
108
108
|
|
|
109
109
|
```json
|
|
110
110
|
{
|
|
111
|
-
"fuente": "
|
|
111
|
+
"fuente": "balizame.com",
|
|
112
112
|
"actualizadoEn": "2026-01-16T17:00:00.000Z",
|
|
113
113
|
"totalEncontradas": 33,
|
|
114
114
|
"totalEspana": 322,
|
|
@@ -172,7 +172,7 @@ El servidor tambien expone un recurso MCP:
|
|
|
172
172
|
|
|
173
173
|
## Que son las balizas V16?
|
|
174
174
|
|
|
175
|
-
Las **balizas V16** son dispositivos de senalizacion luminosa de emergencia que sustituyen a los triangulos de emergencia en Espana. Las balizas V16 **conectadas** (IoT) transmiten automaticamente su posicion GPS
|
|
175
|
+
Las **balizas V16** son dispositivos de senalizacion luminosa de emergencia que sustituyen a los triangulos de emergencia en Espana. Las balizas V16 **conectadas** (IoT) transmiten automaticamente su posicion GPS cuando se activan, permitiendo:
|
|
176
176
|
|
|
177
177
|
- Alertar a otros conductores a traves de sistemas de navegacion
|
|
178
178
|
- Mejorar la respuesta de servicios de emergencia
|
|
@@ -180,21 +180,11 @@ Las **balizas V16** son dispositivos de senalizacion luminosa de emergencia que
|
|
|
180
180
|
|
|
181
181
|
> Mas informacion: [balizame.com](https://balizame.com)
|
|
182
182
|
|
|
183
|
-
## Fuente de datos
|
|
184
|
-
|
|
185
|
-
Los datos provienen del **Punto de Acceso Nacional (NAP)** de la DGT en formato DATEX2:
|
|
186
|
-
|
|
187
|
-
```
|
|
188
|
-
https://nap.dgt.es/datex2/v3/dgt/SituationPublication/datex2_v36.xml
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
Este MCP filtra especificamente los incidentes de tipo `vehicleObstruction` y `obstruction`, que corresponden a vehiculos detenidos/averiados con baliza V16 activa.
|
|
192
|
-
|
|
193
183
|
## Desarrollo
|
|
194
184
|
|
|
195
185
|
```bash
|
|
196
186
|
# Clonar repositorio
|
|
197
|
-
git clone https://github.com/
|
|
187
|
+
git clone https://github.com/granerodev/balizamcp.git
|
|
198
188
|
cd balizamcp
|
|
199
189
|
|
|
200
190
|
# Instalar dependencias
|
|
@@ -214,12 +204,6 @@ npx @modelcontextprotocol/inspector node dist/index.js
|
|
|
214
204
|
|
|
215
205
|
[MIT](LICENSE) - Libre para uso personal y comercial.
|
|
216
206
|
|
|
217
|
-
## Creditos
|
|
218
|
-
|
|
219
|
-
- Datos: [DGT - Punto de Acceso Nacional](https://nap.dgt.es)
|
|
220
|
-
- Inspiracion: [balizame.com](https://balizame.com)
|
|
221
|
-
- Protocolo: [Model Context Protocol](https://modelcontextprotocol.io)
|
|
222
|
-
|
|
223
207
|
---
|
|
224
208
|
|
|
225
|
-
**Problemas o sugerencias?** [Abre un issue](https://github.com/
|
|
209
|
+
**Problemas o sugerencias?** [Abre un issue](https://github.com/granerodev/balizamcp/issues)
|
package/dist/index.d.ts
CHANGED
|
@@ -3,12 +3,10 @@
|
|
|
3
3
|
* balizamcp - Datos en tiempo real de balizas V16 activas en España
|
|
4
4
|
*
|
|
5
5
|
* Servidor MCP oficial de balizame.com
|
|
6
|
-
* Obtiene información del Punto de Acceso Nacional (NAP) de la DGT
|
|
7
|
-
* filtrando incidentes de tipo vehicleObstruction (vehículos detenidos/averiados).
|
|
8
6
|
*
|
|
9
7
|
* @author granero
|
|
10
8
|
* @license MIT
|
|
11
9
|
* @see https://balizame.com
|
|
12
|
-
* @see https://github.com/
|
|
10
|
+
* @see https://github.com/granerodev/balizamcp
|
|
13
11
|
*/
|
|
14
12
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -3,28 +3,20 @@
|
|
|
3
3
|
* balizamcp - Datos en tiempo real de balizas V16 activas en España
|
|
4
4
|
*
|
|
5
5
|
* Servidor MCP oficial de balizame.com
|
|
6
|
-
* Obtiene información del Punto de Acceso Nacional (NAP) de la DGT
|
|
7
|
-
* filtrando incidentes de tipo vehicleObstruction (vehículos detenidos/averiados).
|
|
8
6
|
*
|
|
9
7
|
* @author granero
|
|
10
8
|
* @license MIT
|
|
11
9
|
* @see https://balizame.com
|
|
12
|
-
* @see https://github.com/
|
|
10
|
+
* @see https://github.com/granerodev/balizamcp
|
|
13
11
|
*/
|
|
14
12
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
15
13
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
16
14
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
17
15
|
// ============= CONFIGURACIÓN =============
|
|
18
|
-
const
|
|
19
|
-
const CACHE_TTL_MS = 60_000;
|
|
16
|
+
const DATA_SOURCE_URL = "https://nap.dgt.es/datex2/v3/dgt/SituationPublication/datex2_v36.xml";
|
|
17
|
+
const CACHE_TTL_MS = 60_000;
|
|
20
18
|
const VERSION = "1.0.0";
|
|
21
|
-
/**
|
|
22
|
-
* Causas DATEX2 que indican vehículo detenido/avería.
|
|
23
|
-
* Estos son los casos donde típicamente se activa una baliza V16.
|
|
24
|
-
* @see https://balizame.com para más información sobre balizas V16
|
|
25
|
-
*/
|
|
26
19
|
const VEHICLE_OBSTRUCTION_CAUSES = new Set(["vehicleObstruction", "obstruction"]);
|
|
27
|
-
// ============= PARSING DATEX2 =============
|
|
28
20
|
function extractCoordinates(xml) {
|
|
29
21
|
// Buscar latitud y longitud
|
|
30
22
|
const latMatch = xml.match(/<[^:]*:?latitude[^>]*>([^<]+)</i);
|
|
@@ -130,12 +122,12 @@ let cachedData = null;
|
|
|
130
122
|
let cacheTimestamp = 0;
|
|
131
123
|
async function obtenerBalizasActivas() {
|
|
132
124
|
const now = Date.now();
|
|
133
|
-
// Usar caché si es válida
|
|
125
|
+
// Usar caché si es válida
|
|
134
126
|
if (cachedData && (now - cacheTimestamp) < CACHE_TTL_MS) {
|
|
135
127
|
return cachedData;
|
|
136
128
|
}
|
|
137
129
|
try {
|
|
138
|
-
const response = await fetch(
|
|
130
|
+
const response = await fetch(DATA_SOURCE_URL, {
|
|
139
131
|
headers: {
|
|
140
132
|
"User-Agent": `balizamcp/${VERSION} (+https://balizame.com)`,
|
|
141
133
|
"Accept": "application/xml, text/xml, */*",
|
|
@@ -151,7 +143,7 @@ async function obtenerBalizasActivas() {
|
|
|
151
143
|
timestamp: now,
|
|
152
144
|
total: balizas.length,
|
|
153
145
|
balizasActivas: balizas,
|
|
154
|
-
fuente: "
|
|
146
|
+
fuente: "balizame.com",
|
|
155
147
|
ultimaActualizacion: new Date().toISOString(),
|
|
156
148
|
};
|
|
157
149
|
cacheTimestamp = now;
|
|
@@ -159,19 +151,19 @@ async function obtenerBalizasActivas() {
|
|
|
159
151
|
}
|
|
160
152
|
catch (error) {
|
|
161
153
|
const errorMsg = error instanceof Error ? error.message : "Error desconocido";
|
|
162
|
-
console.error(`[MCP Balizas V16] Error obteniendo datos
|
|
154
|
+
console.error(`[MCP Balizas V16] Error obteniendo datos: ${errorMsg}`);
|
|
163
155
|
// Devolver caché antigua si existe, o datos vacíos
|
|
164
156
|
if (cachedData) {
|
|
165
157
|
return {
|
|
166
158
|
...cachedData,
|
|
167
|
-
fuente: `
|
|
159
|
+
fuente: `balizame.com (caché: ${errorMsg})`,
|
|
168
160
|
};
|
|
169
161
|
}
|
|
170
162
|
return {
|
|
171
163
|
timestamp: now,
|
|
172
164
|
total: 0,
|
|
173
165
|
balizasActivas: [],
|
|
174
|
-
fuente: `
|
|
166
|
+
fuente: `balizame.com (error: ${errorMsg})`,
|
|
175
167
|
ultimaActualizacion: new Date().toISOString(),
|
|
176
168
|
};
|
|
177
169
|
}
|
|
@@ -191,7 +183,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
191
183
|
tools: [
|
|
192
184
|
{
|
|
193
185
|
name: "obtener_balizas_activas",
|
|
194
|
-
description: "Obtiene en TIEMPO REAL las balizas V16 actualmente activas en España. Devuelve las ubicaciones de vehículos detenidos/averiados que han activado su baliza V16
|
|
186
|
+
description: "Obtiene en TIEMPO REAL las balizas V16 actualmente activas en España. Devuelve las ubicaciones de vehículos detenidos/averiados que han activado su baliza V16. Incluye coordenadas GPS, carretera, km, municipio, provincia y tiempo de activación.",
|
|
195
187
|
inputSchema: {
|
|
196
188
|
type: "object",
|
|
197
189
|
properties: {
|
|
@@ -253,7 +245,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
253
245
|
text: JSON.stringify({
|
|
254
246
|
fuente: datos.fuente,
|
|
255
247
|
actualizadoEn: datos.ultimaActualizacion,
|
|
256
|
-
nota: "Datos en tiempo real de vehículos detenidos/averiados con baliza V16 activa
|
|
248
|
+
nota: "Datos en tiempo real de vehículos detenidos/averiados con baliza V16 activa",
|
|
257
249
|
totalEncontradas: balizas.length,
|
|
258
250
|
totalEspana: datos.total,
|
|
259
251
|
balizas: balizas.map(b => ({
|
|
@@ -335,7 +327,7 @@ server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
|
335
327
|
{
|
|
336
328
|
uri: "balizas://activas",
|
|
337
329
|
name: "Balizas V16 activas en tiempo real",
|
|
338
|
-
description: "Listado de vehículos detenidos/averiados con baliza V16 activa
|
|
330
|
+
description: "Listado de vehículos detenidos/averiados con baliza V16 activa",
|
|
339
331
|
mimeType: "application/json",
|
|
340
332
|
},
|
|
341
333
|
],
|
|
@@ -366,6 +358,5 @@ async function main() {
|
|
|
366
358
|
const transport = new StdioServerTransport();
|
|
367
359
|
await server.connect(transport);
|
|
368
360
|
console.error(`balizamcp v${VERSION} - https://balizame.com`);
|
|
369
|
-
console.error("Datos en tiempo real de balizas V16 desde DGT NAP");
|
|
370
361
|
}
|
|
371
362
|
main().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "balizamcp",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "MCP Server oficial de balizame.com - Datos en tiempo real de balizas V16 activas en Espana
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "MCP Server oficial de balizame.com - Datos en tiempo real de balizas V16 activas en Espana",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
40
|
+
"balizamcp": "^1.0.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@types/node": "^20.10.0",
|
|
@@ -53,10 +54,10 @@
|
|
|
53
54
|
],
|
|
54
55
|
"repository": {
|
|
55
56
|
"type": "git",
|
|
56
|
-
"url": "git+https://github.com/
|
|
57
|
+
"url": "git+https://github.com/granerodev/balizamcp.git"
|
|
57
58
|
},
|
|
58
59
|
"bugs": {
|
|
59
|
-
"url": "https://github.com/
|
|
60
|
+
"url": "https://github.com/granerodev/balizamcp/issues"
|
|
60
61
|
},
|
|
61
62
|
"homepage": "https://balizame.com"
|
|
62
63
|
}
|