luz-mcp 0.1.0__tar.gz
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.
- luz_mcp-0.1.0/.gitignore +7 -0
- luz_mcp-0.1.0/CHANGELOG.md +13 -0
- luz_mcp-0.1.0/CITATION.cff +22 -0
- luz_mcp-0.1.0/LICENSE +21 -0
- luz_mcp-0.1.0/PKG-INFO +181 -0
- luz_mcp-0.1.0/README.md +157 -0
- luz_mcp-0.1.0/docs/PLAN_mcp.md +261 -0
- luz_mcp-0.1.0/pyproject.toml +40 -0
- luz_mcp-0.1.0/src/luz_mcp/__init__.py +3 -0
- luz_mcp-0.1.0/src/luz_mcp/afinidades.py +695 -0
- luz_mcp-0.1.0/src/luz_mcp/cli.py +52 -0
- luz_mcp-0.1.0/src/luz_mcp/data.py +157 -0
- luz_mcp-0.1.0/src/luz_mcp/profile.py +96 -0
- luz_mcp-0.1.0/src/luz_mcp/server.py +485 -0
- luz_mcp-0.1.0/tests/test_offline.py +204 -0
luz_mcp-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0 · sin publicar
|
|
4
|
+
|
|
5
|
+
Primera versión (plan: `docs/PLAN_mcp.md`).
|
|
6
|
+
|
|
7
|
+
- Perfil de Luz y Taquígrafos V3 sobre el motor de parlaibero-mcp 0.4: las herramientas de discurso,
|
|
8
|
+
bibliotecas y exportación, con `party_family`, `ideology` y las etiquetas del registro (`reg_*`).
|
|
9
|
+
- Tablas de Afinidades Elegidas 2.0 y nueve herramientas: medidas y firmas, red de coautorías,
|
|
10
|
+
métricas y roles publicados, y discurso × red.
|
|
11
|
+
- Comprobaciones en cada carga: las cifras publicadas, los enlaces de las medidas al Diario (fecha y
|
|
12
|
+
defensor) y el grado de cada diputado, recalculado desde la lista de aristas.
|
|
13
|
+
- Bibliotecas para el explorador de Luz con los números de fila de la V3, comprobadas contra su motor real.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use this software, cite it as below. Cite also each dataset you use, with its version."
|
|
3
|
+
title: "luz-mcp: MCP server for Luz y Taquígrafos and Afinidades Elegidas"
|
|
4
|
+
type: software
|
|
5
|
+
authors:
|
|
6
|
+
- family-names: Rodrigues-Silveira
|
|
7
|
+
given-names: Rodrigo
|
|
8
|
+
orcid: "https://orcid.org/0000-0002-6912-7689"
|
|
9
|
+
affiliation: "Universidad de Salamanca"
|
|
10
|
+
version: "0.1.0"
|
|
11
|
+
date-released: "2026-10-04"
|
|
12
|
+
license: MIT
|
|
13
|
+
repository-code: "https://github.com/rodrodr/luz-tools"
|
|
14
|
+
references:
|
|
15
|
+
- type: dataset
|
|
16
|
+
title: "Luz y Taquígrafos: Parliamentary Debates in the Second Spanish Republic, 1931–1945"
|
|
17
|
+
doi: "10.7910/DVN/THQCMI"
|
|
18
|
+
authors: [{family-names: Rodrigues-Silveira, given-names: Rodrigo}, {family-names: García-Díez, given-names: Fátima}, {family-names: Llamazares, given-names: Iván}, {family-names: Martínez-Barahona, given-names: Elena}, {family-names: Barreto Martín, given-names: Eduardo}]
|
|
19
|
+
- type: dataset
|
|
20
|
+
title: "Afinidades Elegidas: Parliamentary Cosponsorship Networks of the Spanish Second Republic (1931-1939)"
|
|
21
|
+
doi: "10.7910/DVN/CGOCUS"
|
|
22
|
+
authors: [{family-names: Rodrigues-Silveira, given-names: Rodrigo}, {family-names: García-Díez, given-names: Fátima}, {family-names: Llamazares, given-names: Iván}, {family-names: Martínez-Barahona, given-names: Elena}, {family-names: Barreto Martín, given-names: Eduardo}]
|
luz_mcp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Rodrigo Rodrigues-Silveira, Instituto de Iberoamérica, Universidad de Salamanca
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
luz_mcp-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: luz-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for Luz y Taquígrafos (debates of the Spanish Second Republic) and Afinidades Elegidas (its co-sponsorship networks)
|
|
5
|
+
Project-URL: Repository, https://github.com/rodrodr/luz-tools
|
|
6
|
+
Project-URL: Luz y Taquígrafos, https://doi.org/10.7910/DVN/THQCMI
|
|
7
|
+
Project-URL: Afinidades Elegidas, https://doi.org/10.7910/DVN/CGOCUS
|
|
8
|
+
Author: Rodrigo Rodrigues-Silveira
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: Second Spanish Republic,Segunda República,co-sponsorship networks,corpus,mcp,parliament,parliamentary speeches
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Natural Language :: English
|
|
15
|
+
Classifier: Natural Language :: Spanish
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
19
|
+
Classifier: Topic :: Sociology :: History
|
|
20
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: parlaibero-mcp<0.5,>=0.4
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# luz-mcp · Segunda República
|
|
26
|
+
|
|
27
|
+
**Español** · [English](#english)
|
|
28
|
+
|
|
29
|
+
Servidor MCP para consultar, desde Claude, ChatGPT, Cursor, Antigravity, OpenCode o cualquier
|
|
30
|
+
asistente de IA compatible, dos conjuntos de datos del Congreso de los Diputados de la Segunda
|
|
31
|
+
República española:
|
|
32
|
+
|
|
33
|
+
- **[Luz y Taquígrafos](https://doi.org/10.7910/DVN/THQCMI)**: los debates del pleno de 1931 a 1939,
|
|
34
|
+
más cinco sesiones del exilio en 1945. Son 121 700 filas en 755 sesiones, cada intervención con su
|
|
35
|
+
diputado.
|
|
36
|
+
- **[Afinidades Elegidas](https://doi.org/10.7910/DVN/CGOCUS)**: las 1 560 iniciativas firmadas
|
|
37
|
+
colectivamente, con su texto íntegro, sus 13 028 firmas, la red de coautorías y sus métricas de
|
|
38
|
+
red publicadas.
|
|
39
|
+
|
|
40
|
+
Los dos están en Harvard Dataverse con licencia CC BY 4.0, y el servidor los cruza: de una medida
|
|
41
|
+
salta al debate en que se leyó y se defendió, y de la posición de un diputado en la red, a lo que
|
|
42
|
+
dijo en el pleno.
|
|
43
|
+
|
|
44
|
+
## Instalación
|
|
45
|
+
|
|
46
|
+
Requisito: [uv](https://docs.astral.sh/uv/getting-started/installation/).
|
|
47
|
+
|
|
48
|
+
**Claude Code**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
claude mcp add luz -s user -- uvx luz-mcp
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Otros clientes** (bloque `mcpServers` de su configuración):
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{ "mcpServers": { "luz": { "command": "uvx", "args": ["luz-mcp"] } } }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Los datos se descargan una vez, con la herramienta `download_data` o desde la terminal. Son unos
|
|
61
|
+
210 MB y se guardan en `~/.luz`, o en la carpeta que indique `LUZ_HOME`:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
uvx luz-mcp download
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Qué se puede preguntar
|
|
68
|
+
|
|
69
|
+
- *«¿Cómo evoluciona "reforma agraria" frente a "orden público" entre 1931 y 1936?»*: `ngram_viewer`
|
|
70
|
+
- *«¿Qué familias políticas hablan más de lo que les corresponde por escaños en las Constituyentes?»*:
|
|
71
|
+
`share_of_voice`
|
|
72
|
+
- *«¿Qué palabras distinguen a los socialistas de los conservadores, sin la presidencia?»*:
|
|
73
|
+
`distinctive_words`
|
|
74
|
+
- *«Busca las enmiendas de tema agrario defendidas en el pleno y enséñame el debate»*:
|
|
75
|
+
`search_measures` y `get_measure`
|
|
76
|
+
- *«¿Entre qué familias se firman más iniciativas conjuntas en la segunda legislatura?»*:
|
|
77
|
+
`cross_group_coauthorship`
|
|
78
|
+
- *«¿Hablan distinto en el pleno los diputados que articulan la red y los que se quedan en su
|
|
79
|
+
partido?»*: `speech_by_network` y `distinctive_words`
|
|
80
|
+
|
|
81
|
+
## Herramientas
|
|
82
|
+
|
|
83
|
+
| grupo | herramientas |
|
|
84
|
+
|---|---|
|
|
85
|
+
| datos | `list_datasets` · `download_data` · `get_documentation` · `how_to_cite` · `describe_data` |
|
|
86
|
+
| discurso | `coverage` · `ngram_viewer` · `term_counter` · `term_frequency` · `share_of_voice` · `distinctive_words` · `kwic` · `collocations` · `search_text` · `get_intervention` · `get_session` |
|
|
87
|
+
| bibliotecas | `library_create` · `library_describe` · `library_edit` · `library_combine` · `library_rebuild` · `library_delete` · `library_export` · `library_import` |
|
|
88
|
+
| medidas | `search_measures` · `get_measure` |
|
|
89
|
+
| red | `coauthorship_network` (exporta GraphML o CSV para Gephi, igraph o R) · `deputy_neighbors` · `cross_group_coauthorship` |
|
|
90
|
+
| métricas | `network_metrics` · `structural_roles` (las publicadas, sin recalcular) |
|
|
91
|
+
| discurso × red | `speech_by_network` · `deputy_profile` |
|
|
92
|
+
| reproducibilidad | `query_sql` (SQL de solo lectura) · `export_result` · `query_log` |
|
|
93
|
+
|
|
94
|
+
## Lo que conviene saber
|
|
95
|
+
|
|
96
|
+
- **No hay variable de sexo** en ninguno de los dos conjuntos, así que nada se desglosa por sexo.
|
|
97
|
+
- **No todo es discurso.** `SUMARIO`, el sumario de cada sesión, y `COMENTARIOS`, que son documentos
|
|
98
|
+
leídos, votaciones y la narración del Diario, son `dm_speech = 0`.
|
|
99
|
+
- **Hay dos juegos de etiquetas.** El de Luz y Taquígrafos (`party`, `party_family`, `ideology`) y el
|
|
100
|
+
del registro revisado de Afinidades (`reg_party`, `reg_family`, `reg_ideology`). Para comparar voz
|
|
101
|
+
y escaños se usan los segundos, porque son los que comparte la lista de miembros. Los ministros
|
|
102
|
+
que hablan en una legislatura en la que no tenían escaño no tienen etiqueta de registro.
|
|
103
|
+
- **La misma legislatura se rotula distinto.** Luz y Taquígrafos dice 1933-1935 y Afinidades,
|
|
104
|
+
1933-1936.
|
|
105
|
+
- **Las métricas y roles de red son los publicados.** Al cargar los datos, el grado de cada
|
|
106
|
+
diputado se recalcula desde la lista de aristas y se comprueba que coincide.
|
|
107
|
+
- **Algunas listas de firmas están truncadas en el Diario,** y a esas medidas les faltan aristas.
|
|
108
|
+
- **La presidencia queda fuera de `speech_by_network` por defecto.** No firma iniciativas, así que
|
|
109
|
+
aparece entre los diputados aislados de la red, pero habla en todas las sesiones para dar la
|
|
110
|
+
palabra.
|
|
111
|
+
- **Bibliotecas y explorador.** Las bibliotecas se exportan para el
|
|
112
|
+
[explorador de Luz y Taquígrafos](https://rodrodr.github.io/luz_explorer) con los números de
|
|
113
|
+
fila de la **versión 3**. Hay que importarlas allí con el CSV de la versión 3 cargado: el
|
|
114
|
+
explorador acepta también la versión 2, y en ella los mismos números son otras intervenciones.
|
|
115
|
+
|
|
116
|
+
## Cómo está hecho
|
|
117
|
+
|
|
118
|
+
luz-mcp es un perfil del motor de [parlaibero-mcp](https://github.com/rodrodr/parlaibero-tools), el
|
|
119
|
+
servidor de los 16 parlamentos iberoamericanos. La búsqueda, los recuentos, las bibliotecas y la
|
|
120
|
+
exportación son el mismo código. Este paquete añade:
|
|
121
|
+
|
|
122
|
+
- cómo se leen los dos conjuntos;
|
|
123
|
+
- las tablas de Afinidades;
|
|
124
|
+
- las herramientas de medidas y red.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
uv run --with pytest pytest # pruebas sin red
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Cita y licencia
|
|
131
|
+
|
|
132
|
+
Cite cada conjunto con su versión (`how_to_cite`):
|
|
133
|
+
|
|
134
|
+
- Rodrigues-Silveira, R.; García-Díez, F.; Llamazares, I.; Martínez-Barahona, E.; Barreto Martín,
|
|
135
|
+
E. (2026). *Luz y Taquígrafos: Parliamentary Debates in the Second Spanish Republic, 1931–1945*.
|
|
136
|
+
Harvard Dataverse. https://doi.org/10.7910/DVN/THQCMI
|
|
137
|
+
- Rodrigues-Silveira, R.; García-Díez, F.; Llamazares, I.; Martínez-Barahona, E.; Barreto Martín,
|
|
138
|
+
E. (2026). *Afinidades Elegidas: Parliamentary Cosponsorship Networks of the Spanish Second
|
|
139
|
+
Republic (1931-1939)*. Harvard Dataverse. https://doi.org/10.7910/DVN/CGOCUS
|
|
140
|
+
|
|
141
|
+
El código tiene licencia MIT, y los datos, CC BY 4.0.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## English
|
|
146
|
+
|
|
147
|
+
An MCP server to query two datasets on the Congress of Deputies of the Spanish Second Republic
|
|
148
|
+
from Claude, ChatGPT, Cursor, Antigravity, OpenCode or any MCP-capable assistant:
|
|
149
|
+
|
|
150
|
+
- **[Luz y Taquígrafos](https://doi.org/10.7910/DVN/THQCMI)**: the plenary debates, 1931-1939, plus
|
|
151
|
+
five sessions in exile in 1945. That is 121,700 rows in 755 sessions, each intervention linked to
|
|
152
|
+
its deputy.
|
|
153
|
+
- **[Afinidades Elegidas](https://doi.org/10.7910/DVN/CGOCUS)**: the 1,560 collectively signed
|
|
154
|
+
initiatives, with their full text, 13,028 signatures, the co-authorship network and its published
|
|
155
|
+
network metrics.
|
|
156
|
+
|
|
157
|
+
Both are in Harvard Dataverse under CC BY 4.0, and the server joins them. From a measure it jumps
|
|
158
|
+
to the debate where the measure was read and defended; from a deputy's position in the network, to
|
|
159
|
+
what that deputy said on the floor.
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
claude mcp add luz -s user -- uvx luz-mcp # Claude Code
|
|
163
|
+
uvx luz-mcp download # the data, once (about 210 MB, in ~/.luz)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The tools are listed in the table above. What to keep in mind:
|
|
167
|
+
|
|
168
|
+
- **There is no sex variable.**
|
|
169
|
+
- **Not all rows are speech.** `SUMARIO` and `COMENTARIOS` rows have `dm_speech = 0`.
|
|
170
|
+
- **There are two sets of party labels.** Compare voice with seats using the `reg_*` labels, those
|
|
171
|
+
of the revised register.
|
|
172
|
+
- **The two datasets label the second legislature differently:** 1933-1935 and 1933-1936.
|
|
173
|
+
- **The network metrics are the published ones,** checked on import against the edge list.
|
|
174
|
+
- **Some signature lists are truncated.**
|
|
175
|
+
- **The chair is left out of `speech_by_network` by default.** It signs no initiatives but speaks
|
|
176
|
+
in every sitting.
|
|
177
|
+
- **Libraries are written for the Luz y Taquígrafos explorer with the row numbers of version 3.**
|
|
178
|
+
Import them there only with the version 3 CSV loaded.
|
|
179
|
+
|
|
180
|
+
luz-mcp is a profile of the [parlaibero-mcp](https://github.com/rodrodr/parlaibero-tools) engine.
|
|
181
|
+
The code is MIT-licensed; the data are CC BY 4.0. Cite each dataset with its version.
|
luz_mcp-0.1.0/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# luz-mcp · Segunda República
|
|
2
|
+
|
|
3
|
+
**Español** · [English](#english)
|
|
4
|
+
|
|
5
|
+
Servidor MCP para consultar, desde Claude, ChatGPT, Cursor, Antigravity, OpenCode o cualquier
|
|
6
|
+
asistente de IA compatible, dos conjuntos de datos del Congreso de los Diputados de la Segunda
|
|
7
|
+
República española:
|
|
8
|
+
|
|
9
|
+
- **[Luz y Taquígrafos](https://doi.org/10.7910/DVN/THQCMI)**: los debates del pleno de 1931 a 1939,
|
|
10
|
+
más cinco sesiones del exilio en 1945. Son 121 700 filas en 755 sesiones, cada intervención con su
|
|
11
|
+
diputado.
|
|
12
|
+
- **[Afinidades Elegidas](https://doi.org/10.7910/DVN/CGOCUS)**: las 1 560 iniciativas firmadas
|
|
13
|
+
colectivamente, con su texto íntegro, sus 13 028 firmas, la red de coautorías y sus métricas de
|
|
14
|
+
red publicadas.
|
|
15
|
+
|
|
16
|
+
Los dos están en Harvard Dataverse con licencia CC BY 4.0, y el servidor los cruza: de una medida
|
|
17
|
+
salta al debate en que se leyó y se defendió, y de la posición de un diputado en la red, a lo que
|
|
18
|
+
dijo en el pleno.
|
|
19
|
+
|
|
20
|
+
## Instalación
|
|
21
|
+
|
|
22
|
+
Requisito: [uv](https://docs.astral.sh/uv/getting-started/installation/).
|
|
23
|
+
|
|
24
|
+
**Claude Code**
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
claude mcp add luz -s user -- uvx luz-mcp
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Otros clientes** (bloque `mcpServers` de su configuración):
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{ "mcpServers": { "luz": { "command": "uvx", "args": ["luz-mcp"] } } }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Los datos se descargan una vez, con la herramienta `download_data` o desde la terminal. Son unos
|
|
37
|
+
210 MB y se guardan en `~/.luz`, o en la carpeta que indique `LUZ_HOME`:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
uvx luz-mcp download
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Qué se puede preguntar
|
|
44
|
+
|
|
45
|
+
- *«¿Cómo evoluciona "reforma agraria" frente a "orden público" entre 1931 y 1936?»*: `ngram_viewer`
|
|
46
|
+
- *«¿Qué familias políticas hablan más de lo que les corresponde por escaños en las Constituyentes?»*:
|
|
47
|
+
`share_of_voice`
|
|
48
|
+
- *«¿Qué palabras distinguen a los socialistas de los conservadores, sin la presidencia?»*:
|
|
49
|
+
`distinctive_words`
|
|
50
|
+
- *«Busca las enmiendas de tema agrario defendidas en el pleno y enséñame el debate»*:
|
|
51
|
+
`search_measures` y `get_measure`
|
|
52
|
+
- *«¿Entre qué familias se firman más iniciativas conjuntas en la segunda legislatura?»*:
|
|
53
|
+
`cross_group_coauthorship`
|
|
54
|
+
- *«¿Hablan distinto en el pleno los diputados que articulan la red y los que se quedan en su
|
|
55
|
+
partido?»*: `speech_by_network` y `distinctive_words`
|
|
56
|
+
|
|
57
|
+
## Herramientas
|
|
58
|
+
|
|
59
|
+
| grupo | herramientas |
|
|
60
|
+
|---|---|
|
|
61
|
+
| datos | `list_datasets` · `download_data` · `get_documentation` · `how_to_cite` · `describe_data` |
|
|
62
|
+
| discurso | `coverage` · `ngram_viewer` · `term_counter` · `term_frequency` · `share_of_voice` · `distinctive_words` · `kwic` · `collocations` · `search_text` · `get_intervention` · `get_session` |
|
|
63
|
+
| bibliotecas | `library_create` · `library_describe` · `library_edit` · `library_combine` · `library_rebuild` · `library_delete` · `library_export` · `library_import` |
|
|
64
|
+
| medidas | `search_measures` · `get_measure` |
|
|
65
|
+
| red | `coauthorship_network` (exporta GraphML o CSV para Gephi, igraph o R) · `deputy_neighbors` · `cross_group_coauthorship` |
|
|
66
|
+
| métricas | `network_metrics` · `structural_roles` (las publicadas, sin recalcular) |
|
|
67
|
+
| discurso × red | `speech_by_network` · `deputy_profile` |
|
|
68
|
+
| reproducibilidad | `query_sql` (SQL de solo lectura) · `export_result` · `query_log` |
|
|
69
|
+
|
|
70
|
+
## Lo que conviene saber
|
|
71
|
+
|
|
72
|
+
- **No hay variable de sexo** en ninguno de los dos conjuntos, así que nada se desglosa por sexo.
|
|
73
|
+
- **No todo es discurso.** `SUMARIO`, el sumario de cada sesión, y `COMENTARIOS`, que son documentos
|
|
74
|
+
leídos, votaciones y la narración del Diario, son `dm_speech = 0`.
|
|
75
|
+
- **Hay dos juegos de etiquetas.** El de Luz y Taquígrafos (`party`, `party_family`, `ideology`) y el
|
|
76
|
+
del registro revisado de Afinidades (`reg_party`, `reg_family`, `reg_ideology`). Para comparar voz
|
|
77
|
+
y escaños se usan los segundos, porque son los que comparte la lista de miembros. Los ministros
|
|
78
|
+
que hablan en una legislatura en la que no tenían escaño no tienen etiqueta de registro.
|
|
79
|
+
- **La misma legislatura se rotula distinto.** Luz y Taquígrafos dice 1933-1935 y Afinidades,
|
|
80
|
+
1933-1936.
|
|
81
|
+
- **Las métricas y roles de red son los publicados.** Al cargar los datos, el grado de cada
|
|
82
|
+
diputado se recalcula desde la lista de aristas y se comprueba que coincide.
|
|
83
|
+
- **Algunas listas de firmas están truncadas en el Diario,** y a esas medidas les faltan aristas.
|
|
84
|
+
- **La presidencia queda fuera de `speech_by_network` por defecto.** No firma iniciativas, así que
|
|
85
|
+
aparece entre los diputados aislados de la red, pero habla en todas las sesiones para dar la
|
|
86
|
+
palabra.
|
|
87
|
+
- **Bibliotecas y explorador.** Las bibliotecas se exportan para el
|
|
88
|
+
[explorador de Luz y Taquígrafos](https://rodrodr.github.io/luz_explorer) con los números de
|
|
89
|
+
fila de la **versión 3**. Hay que importarlas allí con el CSV de la versión 3 cargado: el
|
|
90
|
+
explorador acepta también la versión 2, y en ella los mismos números son otras intervenciones.
|
|
91
|
+
|
|
92
|
+
## Cómo está hecho
|
|
93
|
+
|
|
94
|
+
luz-mcp es un perfil del motor de [parlaibero-mcp](https://github.com/rodrodr/parlaibero-tools), el
|
|
95
|
+
servidor de los 16 parlamentos iberoamericanos. La búsqueda, los recuentos, las bibliotecas y la
|
|
96
|
+
exportación son el mismo código. Este paquete añade:
|
|
97
|
+
|
|
98
|
+
- cómo se leen los dos conjuntos;
|
|
99
|
+
- las tablas de Afinidades;
|
|
100
|
+
- las herramientas de medidas y red.
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
uv run --with pytest pytest # pruebas sin red
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Cita y licencia
|
|
107
|
+
|
|
108
|
+
Cite cada conjunto con su versión (`how_to_cite`):
|
|
109
|
+
|
|
110
|
+
- Rodrigues-Silveira, R.; García-Díez, F.; Llamazares, I.; Martínez-Barahona, E.; Barreto Martín,
|
|
111
|
+
E. (2026). *Luz y Taquígrafos: Parliamentary Debates in the Second Spanish Republic, 1931–1945*.
|
|
112
|
+
Harvard Dataverse. https://doi.org/10.7910/DVN/THQCMI
|
|
113
|
+
- Rodrigues-Silveira, R.; García-Díez, F.; Llamazares, I.; Martínez-Barahona, E.; Barreto Martín,
|
|
114
|
+
E. (2026). *Afinidades Elegidas: Parliamentary Cosponsorship Networks of the Spanish Second
|
|
115
|
+
Republic (1931-1939)*. Harvard Dataverse. https://doi.org/10.7910/DVN/CGOCUS
|
|
116
|
+
|
|
117
|
+
El código tiene licencia MIT, y los datos, CC BY 4.0.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## English
|
|
122
|
+
|
|
123
|
+
An MCP server to query two datasets on the Congress of Deputies of the Spanish Second Republic
|
|
124
|
+
from Claude, ChatGPT, Cursor, Antigravity, OpenCode or any MCP-capable assistant:
|
|
125
|
+
|
|
126
|
+
- **[Luz y Taquígrafos](https://doi.org/10.7910/DVN/THQCMI)**: the plenary debates, 1931-1939, plus
|
|
127
|
+
five sessions in exile in 1945. That is 121,700 rows in 755 sessions, each intervention linked to
|
|
128
|
+
its deputy.
|
|
129
|
+
- **[Afinidades Elegidas](https://doi.org/10.7910/DVN/CGOCUS)**: the 1,560 collectively signed
|
|
130
|
+
initiatives, with their full text, 13,028 signatures, the co-authorship network and its published
|
|
131
|
+
network metrics.
|
|
132
|
+
|
|
133
|
+
Both are in Harvard Dataverse under CC BY 4.0, and the server joins them. From a measure it jumps
|
|
134
|
+
to the debate where the measure was read and defended; from a deputy's position in the network, to
|
|
135
|
+
what that deputy said on the floor.
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
claude mcp add luz -s user -- uvx luz-mcp # Claude Code
|
|
139
|
+
uvx luz-mcp download # the data, once (about 210 MB, in ~/.luz)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The tools are listed in the table above. What to keep in mind:
|
|
143
|
+
|
|
144
|
+
- **There is no sex variable.**
|
|
145
|
+
- **Not all rows are speech.** `SUMARIO` and `COMENTARIOS` rows have `dm_speech = 0`.
|
|
146
|
+
- **There are two sets of party labels.** Compare voice with seats using the `reg_*` labels, those
|
|
147
|
+
of the revised register.
|
|
148
|
+
- **The two datasets label the second legislature differently:** 1933-1935 and 1933-1936.
|
|
149
|
+
- **The network metrics are the published ones,** checked on import against the edge list.
|
|
150
|
+
- **Some signature lists are truncated.**
|
|
151
|
+
- **The chair is left out of `speech_by_network` by default.** It signs no initiatives but speaks
|
|
152
|
+
in every sitting.
|
|
153
|
+
- **Libraries are written for the Luz y Taquígrafos explorer with the row numbers of version 3.**
|
|
154
|
+
Import them there only with the version 3 CSV loaded.
|
|
155
|
+
|
|
156
|
+
luz-mcp is a profile of the [parlaibero-mcp](https://github.com/rodrodr/parlaibero-tools) engine.
|
|
157
|
+
The code is MIT-licensed; the data are CC BY 4.0. Cite each dataset with its version.
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Plan · MCP de *Luz y Taquígrafos* y *Afinidades Elegidas*
|
|
2
|
+
|
|
3
|
+
> **Estado: CONSTRUIDO** (2026-10-04), fases A, C, D y E; faltan la B y la F (publicar
|
|
4
|
+
> parlaibero-mcp 0.4.0 y luz-mcp 0.1.0, que publica el investigador, y crear el repositorio).
|
|
5
|
+
|
|
6
|
+
**Resultado de las puertas (2026-10-04):**
|
|
7
|
+
1. parlaibero-mcp 0.4.0: 38 pruebas; la batería de 21 llamadas da la misma salida que la 0.3.0. La única
|
|
8
|
+
diferencia era el orden de los empates de `term_frequency(by='session')`, arbitrario ya en la 0.3.0, y
|
|
9
|
+
se ha fijado.
|
|
10
|
+
2. Las cifras publicadas se reproducen todas:
|
|
11
|
+
- Luz y Taquígrafos: 121 700 filas, 755 sesiones y 108 291 de discurso;
|
|
12
|
+
- Afinidades Elegidas: 1 560 medidas, 13 028 firmas, 65 051 aristas, 1 446 fichas, 1 026 diputados,
|
|
13
|
+
912 con coautoría y 782 medidas defendidas.
|
|
14
|
+
3. Comprobaciones independientes, todas a cero o completas:
|
|
15
|
+
- ninguna fila de inicio o de defensa falta ni cae en otra fecha;
|
|
16
|
+
- ningún defensor es otro diputado;
|
|
17
|
+
- el grado recalculado coincide en los 2 128 diputados-periodo;
|
|
18
|
+
- los roles concuerdan con las métricas.
|
|
19
|
+
|
|
20
|
+
440 filas de habla de 14 personas que hablan en una legislatura sin escaño en ella (ministros) no
|
|
21
|
+
tienen etiqueta de registro, y así se declara.
|
|
22
|
+
4. Ida y vuelta contra el motor real del explorador de Luz: **carga la V3 sin avisos** (121 700 filas) e
|
|
23
|
+
importa y reexporta una biblioteca del MCP sin una sola diferencia (605 items), reconociendo la fuente.
|
|
24
|
+
Por eso el corpus se llama `2REP_Diaries`, como en el explorador, y la decisión (a) no exige cambiarlo:
|
|
25
|
+
basta con cargar allí la V3.
|
|
26
|
+
5. 8 pruebas sin red de luz-mcp y una prueba de punta a punta por el protocolo MCP con las 36
|
|
27
|
+
herramientas.
|
|
28
|
+
|
|
29
|
+
Hallazgo de las pruebas: en `speech_by_network`, la presidencia de la Cámara cae entre los diputados
|
|
30
|
+
aislados (no firma) y les daba 21 774 turnos; sin ella son 77. La presidencia queda fuera por defecto
|
|
31
|
+
(`exclude_chair`).
|
|
32
|
+
> Decidido por el investigador: un **servidor propio** que reutiliza el **motor de parlaibero-mcp** (sin copiarlo),
|
|
33
|
+
> en un **repositorio nuevo**, con las cuatro familias de herramientas de *Afinidades Elegidas*: medidas y firmas,
|
|
34
|
+
> red de coautorías, métricas y roles, y discurso × red.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. Qué hay, medido hoy en Dataverse (solo lectura)
|
|
39
|
+
|
|
40
|
+
**Luz y Taquígrafos** — doi:10.7910/DVN/THQCMI, **V3 publicada hoy** (2026-10-03 13:39 UTC), CC BY 4.0.
|
|
41
|
+
|
|
42
|
+
- Un solo archivo de datos, `2REP_Diaries.csv`: 173 899 410 bytes, MD5 `1cc232de…`, separador `;`, todo entre
|
|
43
|
+
comillas, 14 columnas: `id, num_session, order, date, speaker, speech, rep_id, rep_name, district, party,
|
|
44
|
+
party_family, ideology, nwords, legislature`. Más `mapa_v2_v3.json` (12,8 MB), que traduce cada fila de la V3 a
|
|
45
|
+
la fila y el tramo de la V2.
|
|
46
|
+
- 121 700 filas en 755 sesiones, de 1931-07-14 a 1945-11-09 (cinco sesiones del exilio en México).
|
|
47
|
+
- `speaker = "SUMARIO"` (755 filas, `order` 0) y `"COMENTARIOS"` (12 654 filas) marcan lo que no es discurso.
|
|
48
|
+
- **Medido en un borrador local:** en él, `id` coincidía fila a fila con el número de registro del archivo, y
|
|
49
|
+
`num_session` se reinicia en cada legislatura (405 valores para 755 sesiones). La clave de una sesión es, por
|
|
50
|
+
tanto, `(legislature, num_session)`. Esto se vuelve a medir sobre el archivo publicado al construir.
|
|
51
|
+
- **No tiene variable de sexo.** El padrón de diputados «está disponible a petición»: no se publica.
|
|
52
|
+
|
|
53
|
+
**Afinidades Elegidas** — doi:10.7910/DVN/CGOCUS, V2 publicada hoy (archivos con sufijo `_v3`), CC BY 4.0.
|
|
54
|
+
|
|
55
|
+
- `2REP_measures_v3.csv`: 1 560 medidas con texto íntegro, título, tema (13 categorías), primer autor, defensa en
|
|
56
|
+
el pleno, y las filas de *Luz y Taquígrafos* donde empieza el texto (`diaries_id_inicio`) y donde se defiende
|
|
57
|
+
(`diaries_id_defensa`).
|
|
58
|
+
- `2REP_cosponsorship_v3.csv` (13 028 firmas, con `truncada` cuando el Diario no reproduce todas),
|
|
59
|
+
`2REP_coauthor_edgelist_v3.csv` (65 051 pares por medida), `representative_metadata_v3.csv` (1 446 fichas
|
|
60
|
+
diputado-legislatura de 1 026 diputados: partido, familia, ideología, distrito, variantes del nombre; **sin
|
|
61
|
+
sexo**), `representatives_metrics_v3.json` (centralidades, Guimerà-Amaral, ego-redes, perfiles y roles por
|
|
62
|
+
diputado y periodo, más proximidades y comunidades por partido y familia), `representatives_roles_v3.json`,
|
|
63
|
+
diccionarios de partidos y temas, y los registros de correcciones.
|
|
64
|
+
|
|
65
|
+
**Cómo se enlazan.** El `rep_id` de *Luz y Taquígrafos* es el `id_dip` de *Afinidades*: se comprobaron 400 de 400.
|
|
66
|
+
Las medidas apuntan a filas de la V3 (`diaries_id_*`).
|
|
67
|
+
|
|
68
|
+
Tres desajustes que el MCP tiene que resolver, y decir:
|
|
69
|
+
|
|
70
|
+
1. **Las etiquetas de legislatura no coinciden.** *Luz* usa `1933-1935`; *Afinidades*, `1933-1936`. Se cruza por
|
|
71
|
+
fecha, no por etiqueta.
|
|
72
|
+
2. **El explorador web público de *Luz* lee la V2**, no la V3: reconoce el archivo de 165 785 782 bytes y su
|
|
73
|
+
número de fila es el de la V2. Una biblioteca exportada con números de la V3 apuntaría allí a otras
|
|
74
|
+
intervenciones. (§6)
|
|
75
|
+
3. **Su `2REP_Diaries_v3.csv` local no es el publicado** (MD5 distinto: es un borrador anterior a la
|
|
76
|
+
normalización de etiquetas). El MCP descarga siempre de Dataverse.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 2. Arquitectura
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
parlaibero-mcp 0.4.0 (repo parlaibero-tools, PyPI)
|
|
84
|
+
└─ motor generalizado: almacén, búsqueda, conteo, ngram, kwic, colocaciones, distinctive_words,
|
|
85
|
+
share_of_voice, bibliotecas, exportación — parametrizado por un PERFIL DE COLECCIÓN
|
|
86
|
+
├─ perfil «parlaibero» (los 16 países; comportamiento idéntico al de hoy, con las 38 pruebas de guarda)
|
|
87
|
+
└─ (expone el perfil como API para otros paquetes)
|
|
88
|
+
|
|
89
|
+
luz-mcp 0.1.0 (repo nuevo, PyPI; depende de parlaibero-mcp >=0.4,<0.5)
|
|
90
|
+
├─ perfil «luz»: catálogo (2 DOI), lectura del CSV `;`, mapeo de columnas, filtros propios
|
|
91
|
+
│ (party_family, ideology), instrucciones del servidor, formato del explorador de Luz
|
|
92
|
+
├─ tablas de Afinidades (medidas, firmas, aristas, métricas, roles, diccionarios)
|
|
93
|
+
└─ herramientas de Afinidades (§4)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**El perfil de colección** es lo único nuevo en parlaibero-mcp. Reúne:
|
|
97
|
+
|
|
98
|
+
- el catálogo de conjuntos, con sus DOI y archivos;
|
|
99
|
+
- cómo se lee cada CSV (separador y columnas) y cómo se mapea a las columnas canónicas;
|
|
100
|
+
- qué filas no son discurso;
|
|
101
|
+
- las columnas extra que se pueden filtrar;
|
|
102
|
+
- el texto de instrucciones del servidor;
|
|
103
|
+
- el directorio del almacén;
|
|
104
|
+
- el formato de biblioteca del explorador (nombre del corpus y número de fila).
|
|
105
|
+
|
|
106
|
+
ParlaIbero pasa a ser el primer perfil, y su comportamiento no cambia: lo vigilan las 38 pruebas actuales, más una
|
|
107
|
+
que compara herramienta por herramienta la 0.3.0 con la 0.4.0 sobre la misma base.
|
|
108
|
+
|
|
109
|
+
**Mapeo de *Luz y Taquígrafos* al esquema del motor:**
|
|
110
|
+
|
|
111
|
+
| motor | Luz y Taquígrafos |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `id_int` | `LT` + `id` con ceros, para que sea único y legible: `LT0075580` |
|
|
114
|
+
| `row_n` | `id`, el número de registro, comprobado contra el archivo como en ParlaIbero |
|
|
115
|
+
| `id_session` | `LT` + legislatura + `num_session` |
|
|
116
|
+
| `intervention_order` | `order` |
|
|
117
|
+
| `speaker_raw` · `id_dep` · `speaker_name` | `speaker` · `rep_id` · `rep_name` |
|
|
118
|
+
| `party` · `district` · `legislature` · `date` · `text` | `party` · `district` · `legislature` · `date` · `speech` |
|
|
119
|
+
| `dm_speech` | `0` si `speaker` es `SUMARIO` o `COMENTARIOS`; `1` en el resto |
|
|
120
|
+
| `sex` | vacío: no existe; el servidor lo dice y no ofrece análisis por sexo |
|
|
121
|
+
| extra | `party_family`, `ideology` (filtrables y como grupo en `share_of_voice` y `distinctive_words`) |
|
|
122
|
+
|
|
123
|
+
`n_words` se recalcula con la definición del motor, y la columna `nwords` publicada se conserva aparte, para que
|
|
124
|
+
cualquiera pueda contrastar las dos.
|
|
125
|
+
|
|
126
|
+
Almacén propio en `~/.luz` (`LUZ_HOME`), separado del de ParlaIbero, con sus bibliotecas en su propio archivo.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 3. Herramientas heredadas del motor
|
|
131
|
+
|
|
132
|
+
Funcionan igual que en ParlaIbero:
|
|
133
|
+
|
|
134
|
+
- **búsqueda y lectura:** `search_text`, `get_intervention`, `get_session`;
|
|
135
|
+
- **recuentos en el tiempo:** `ngram_viewer` (por año o por legislatura), `term_counter`, `term_frequency`;
|
|
136
|
+
- **comparación y contexto:** `distinctive_words` (también por familia e ideología), `share_of_voice` (por partido,
|
|
137
|
+
familia o ideología, nunca por sexo), `kwic`, `collocations`;
|
|
138
|
+
- **control de la base:** `coverage`;
|
|
139
|
+
- **SQL, exportación y trazabilidad:** `query_sql`, `export_result`, `query_log`;
|
|
140
|
+
- **las ocho herramientas de bibliotecas.**
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 4. Herramientas de *Afinidades Elegidas* (nuevas)
|
|
145
|
+
|
|
146
|
+
**Medidas y firmas**
|
|
147
|
+
|
|
148
|
+
- `search_measures`: por tema principal o secundario, tipo, legislatura, fechas, firmante, primer autor, partido o
|
|
149
|
+
familia de los firmantes, defensa en el pleno, o texto. Devuelve título, tema, firmas y defensa.
|
|
150
|
+
- `get_measure`: el texto íntegro, los firmantes (marcando las firmas ilegibles y las listas truncadas) y la
|
|
151
|
+
defensa. **Salta al debate:** devuelve la intervención de *Luz y Taquígrafos* donde se lee la medida y la de su
|
|
152
|
+
defensa, con los turnos de alrededor.
|
|
153
|
+
|
|
154
|
+
**Red de coautorías**
|
|
155
|
+
|
|
156
|
+
- `coauthorship_network`: la red de una legislatura, de un tema o de un conjunto de medidas. Dice nodos, aristas,
|
|
157
|
+
densidad y componentes, y la escribe en GraphML o en CSV de aristas y nodos, para Gephi, igraph o R.
|
|
158
|
+
- `deputy_neighbors`: la ego-red de un diputado (coautores, peso y partido), por legislatura.
|
|
159
|
+
- `cross_group_coauthorship`: coautorías entre partidos, familias o ideologías. Para cada par de grupos, observado
|
|
160
|
+
frente a esperado e índice E-I. Las proximidades publicadas por partido y familia se leen, no se recalculan.
|
|
161
|
+
|
|
162
|
+
**Métricas y roles** (las publicadas; **no se recalculan**)
|
|
163
|
+
|
|
164
|
+
- `network_metrics`: las métricas de un diputado por periodo, o el ranking de una métrica (centralidades,
|
|
165
|
+
Guimerà-Amaral, ego-redes, perfiles) con filtros por partido, familia o legislatura.
|
|
166
|
+
- `structural_roles`: la distribución de los seis roles por partido, familia o legislatura, y quién ocupa cada
|
|
167
|
+
rol.
|
|
168
|
+
|
|
169
|
+
Antes de dar por buena la tabla, una comprobación independiente recalcula el grado de cada diputado desde la lista
|
|
170
|
+
de aristas y lo compara con el publicado.
|
|
171
|
+
|
|
172
|
+
**Discurso × red**
|
|
173
|
+
|
|
174
|
+
- `speech_by_network`: une a cada diputado su rol o una métrica, y lo que dijo en el pleno. Por ejemplo:
|
|
175
|
+
- cuánto hablan los diputados puente frente a los periféricos;
|
|
176
|
+
- qué palabras los distinguen (`distinctive_words` entre los dos grupos);
|
|
177
|
+
- qué temas defienden en el pleno.
|
|
178
|
+
|
|
179
|
+
Lo hace construyendo **bibliotecas** con las intervenciones de cada grupo, de modo que todas las herramientas
|
|
180
|
+
de texto sirven después sobre ellas.
|
|
181
|
+
- `deputy_profile`: la ficha completa de un diputado: legislaturas y partido, cuánto habla y en qué sesiones, sus
|
|
182
|
+
medidas (firmadas, primeras firmas, defendidas), su posición en la red y su rol.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 5. Avisos que el servidor da al agente
|
|
187
|
+
|
|
188
|
+
- **No hay variable de sexo** en ninguno de los dos conjuntos: nada se analiza por sexo, y se dice si se pide.
|
|
189
|
+
- **Lo que no es discurso:** `SUMARIO` y `COMENTARIOS` (lecturas de documentos, votaciones, narración del Diario)
|
|
190
|
+
son `dm_speech = 0`.
|
|
191
|
+
- **Las listas de firmas truncadas** (`truncada`) dejan incompleta la red de esa medida, y el servidor la marca
|
|
192
|
+
donde pesa.
|
|
193
|
+
- **Tema, título y defensa** se asignaron con modelos de lenguaje y revisión humana, según la metodología
|
|
194
|
+
publicada. El tema es una clasificación, no un dato del Diario.
|
|
195
|
+
- **Las etiquetas de legislatura difieren** entre los dos conjuntos.
|
|
196
|
+
- **Las sesiones del exilio de 1945** se tratan como una base escasa.
|
|
197
|
+
- **Los identificadores solo son estables dentro de una versión:** se cita siempre la versión, y la V2 se traduce
|
|
198
|
+
con el mapa.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 6. Bibliotecas y el explorador de *Luz*
|
|
203
|
+
|
|
204
|
+
El explorador de escritorio guarda las bibliotecas como `2replib/1`, con `corpus = "2REP_Diaries_v3"` y `speech_id`
|
|
205
|
+
igual al número de fila: es el formato de partida del de ParlaIbero. El explorador web público, en cambio, **lee la
|
|
206
|
+
V2**. Hay tres caminos (decisión 2 del §9):
|
|
207
|
+
|
|
208
|
+
- **(a) Solo V3.** Las bibliotecas se exportan con números de la V3. Sirven en cuanto el explorador lea la V3, lo
|
|
209
|
+
que exige actualizarlo aparte: es un cambio en otro repositorio.
|
|
210
|
+
- **(b) V3 y traducción a la V2 con `mapa_v2_v3.json`.** Al exportar para un explorador en V2, cada intervención de
|
|
211
|
+
la V3 se lleva a la fila de la V2 que la contiene. Es una traducción con pérdida: varias filas de la V3 pueden
|
|
212
|
+
caer en la misma de la V2. Al importar desde la V2, una fila se abre en todas sus piezas de la V3. El informe
|
|
213
|
+
dice cuántas se fundieron o se abrieron.
|
|
214
|
+
- **(c) No exportar al explorador de Luz por ahora;** solo CSV o Parquet.
|
|
215
|
+
|
|
216
|
+
Recomendación: **(b)** mientras el explorador siga en la V2, y **(a)** cuando pase a la V3. El código de traducción
|
|
217
|
+
es pequeño, porque el mapa ya está publicado.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 7. Puertas antes de publicar
|
|
222
|
+
|
|
223
|
+
1. **parlaibero-mcp 0.4.0 no cambia ningún resultado.** Las 38 pruebas pasan, y la comparación herramienta por
|
|
224
|
+
herramienta entre 0.3.0 y 0.4.0, sobre BR, ES y SV, da salidas idénticas.
|
|
225
|
+
2. **Las cifras publicadas se reproducen:**
|
|
226
|
+
- *Luz y Taquígrafos*: 121 700 filas, 755 sesiones, 755 `SUMARIO` y 12 654 `COMENTARIOS`;
|
|
227
|
+
- *Afinidades Elegidas*: 1 560 medidas, 13 028 firmas, 65 051 aristas, 1 446 fichas y 912 diputados con al
|
|
228
|
+
menos una coautoría;
|
|
229
|
+
- el MD5 de cada archivo es igual al de Dataverse.
|
|
230
|
+
3. **Comprobaciones independientes:**
|
|
231
|
+
- el grado recalculado desde las aristas coincide con el publicado;
|
|
232
|
+
- cada `diaries_id_inicio` y `diaries_id_defensa` existe y cae en la sesión y la fecha de su medida;
|
|
233
|
+
- el número de fila coincide con el archivo.
|
|
234
|
+
4. **Ida y vuelta de bibliotecas contra el motor real del explorador de Luz**, como con ParlaIbero, según la
|
|
235
|
+
opción que se elija en el §6.
|
|
236
|
+
5. **Prueba de punta a punta por el protocolo MCP**, más pruebas sin red con un corpus sintético.
|
|
237
|
+
6. **README:** sin nombres de parlamentarios en los ejemplos (norma de divulgación del proyecto: cargo, partido y fecha), y
|
|
238
|
+
con la mención de financiación que corresponda (decisión 3 del §9).
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 8. Fases
|
|
243
|
+
|
|
244
|
+
| fase | contenido | dónde |
|
|
245
|
+
|---|---|---|
|
|
246
|
+
| A | perfil de colección en el motor; ParlaIbero como primer perfil; la comparación 0.3 = 0.4 | parlaibero-tools |
|
|
247
|
+
| B | publicar parlaibero-mcp 0.4.0 (la publica usted) | PyPI |
|
|
248
|
+
| C | luz-mcp: perfil, descarga, importación, herramientas heredadas, avisos | repositorio nuevo |
|
|
249
|
+
| D | tablas y herramientas de Afinidades; discurso × red | repositorio nuevo |
|
|
250
|
+
| E | bibliotecas y explorador de Luz (§6); puertas del §7 | ambos |
|
|
251
|
+
| F | README ES/EN, CITATION, publicar luz-mcp 0.1.0 (lo publica usted) | repositorio nuevo, PyPI |
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 9. Decisiones (del investigador, 3-oct)
|
|
256
|
+
|
|
257
|
+
1. **Nombre:** paquete `luz-mcp` (`uvx luz-mcp`), repositorio `rodrodr/luz-tools`.
|
|
258
|
+
2. **Explorador de Luz: (a), solo V3.** Las bibliotecas se exportan con los números de fila de la V3; sirven en el
|
|
259
|
+
explorador cuando este lea la V3 (cambio aparte, en su repositorio). No se traduce a la V2.
|
|
260
|
+
3. **Sin mención de financiación.**
|
|
261
|
+
4. **Instrucciones del servidor en inglés**; README en español e inglés.
|