ntc-cdmx-mcp
RAG · Экспертный чат-бот по NTC CDMX (2004 / 2017 / 2023)
Система Retrieval-Augmented Generation на основе Normas Técnicas Complementarias del Reglamento de Construcciones de la Ciudad de México, с гибридным поиском (BM25 + мультиязычные эмбеддинги + RRF) и цитированием по редакции и пункту.
Структура
RAG/
├── src/
│ ├── config.py # rutas y mapeo PDF → (edición, norma)
│ ├── extract.py # PDF → páginas de texto por norma (temp/extracted_text/)
│ ├── structure.py # páginas → secciones X.Y.Z (data/corpus/*.json)
│ ├── index_build.py # secciones → catálogo + BM25 + embeddings (data/index/)
│ ├── retrieve.py # retriever híbrido (BM25 + embeddings + RRF + numeral)
│ ├── answer.py # generador de respuestas con LLM (DeepSeek V4 Flash)
│ ├── calc.py # cálculos validados (viento, sismo, combinaciones)
│ ├── evaluate.py # evaluación recall@k con el dataset de 21k Q&A
│ └── finetune_gen.py # genera dataset RAG-formateado para fine-tune del generador
├── app/app.py # interfaz web (Streamlit)
└── scripts/run_all.py # orquesta el pipeline completoMCP-сервер (для opencode, codex, Claude Desktop и т. д.)
Tool | Что делает |
| Отвечает с помощью RAG + LLM (DeepSeek V4 Flash), цитируя редакцию, норму и пункт; также решает проверенные вычисления |
| Возвращает релевантные разделы в сыром виде |
| Возвращает полный текст конкретного пункта |
Автоматическая установка (регистрирует сервер в opencode и/или codex):
.venv\Scripts\python.exe scripts\install_mcp.py # opencode + codex
.venv\Scripts\python.exe scripts\install_mcp.py --opencode # solo opencode
.venv\Scripts\python.exe scripts\install_mcp.py --codex # solo codexПерезапустите opencode/codex, и RAG будет доступен в виде tools (answer_ntc и т. д.). Сервер читает API-ключ провайдера из RAG/.env, соответствующей переменной окружения или ~/.config/ntc-cdmx/.env.
Установка одной командой (GitHub + uv)
uvx --from git+https://github.com/Sobrio25/ntc-cdmx-mcp ntc-cdmx-installЭта команда устанавливает и регистрирует MCP в opencode, Codex, Command Code и Kilo Code. Перезапустите клиенты, и answer_ntc, search_ntc и get_section будут доступны. Индекс (BM25 + эмбеддинги) поставляется внутри пакета; API-ключ провайдера настраивается в ~/.config/ntc-cdmx/.env.
Чтобы установить только исполняемый файл:
uv tool install git+https://github.com/Sobrio25/ntc-cdmx-mcpПроверить сервер вручную:
ntc-cdmx # stdio (modo instalado)
.venv\Scripts\python.exe src\mcp_server.py # stdio (modo desarrollo)Пайплайн
# 1) Extraer y estructurar e indexar
.venv/Scripts/python.exe scripts/run_all.py --steps extract structure index
# 2) Evaluar recall del retriever (muestra 400 preguntas del dataset de 21k)
.venv/Scripts/python.exe scripts/run_all.py --steps eval
# 3) Interfaz web
.venv/Scripts/python.exe -m streamlit run app/app.pyНастройка LLM
Ответы используют DeepSeek V4 Flash. Настройте провайдера/API-ключ в src/answer.py (LLM_MODEL, LLM_BASE_URL). Без ключа чат-бот отвечает извлечёнными разделами (без LLM), что полезно для отладки.
Проверенные вычисления (src/calc.py)
Если вопрос требует расчёта (например, «рассчитай давление ветра для Vz=35 м/с»), движок это определяет и использует формулу проверенную по тексту нормы, не обращаясь к LLM. Включены калькуляторы:
Расчёт | Формула | Источник |
Динамическое давление ветра | qz = 0.52·Vz² (m/s → Pa) | NTC-Viento 2023, §5.1.3 |
Расчётное давление ветра | pz = 0.47·Cp·VD² | NTC-Viento 2017/2004, §3.2 |
Сила аэродинамического сопротивления ветра | F = 0.47·CD·VD²·A | NTC-Viento 2017/2004, §3.3 |
Минимальная базовая сейсмическая поперечная сила | Vo,min = amin·Wo | NTC-Sismo 2023, §7.5 |
Комбинация нагрузок | Группа B: 1.3·CM+1.5·CV · Группа A: 1.5·CM+1.7·CV | NTC-Criterios 2023, §3.4.1 |
Если данных не хватает, чат-бот явно запрашивает их.
Тонкая настройка генератора (src/finetune_gen.py)
Создаёт набор данных в формате chat, где каждый пример включает извлечённый контекст (чтобы генератор учился отвечать из контекста, а не запоминать нормы):
.venv/Scripts/python.exe src/finetune_gen.py --max 2000 --top_k 8 --require_allАвтоматически отфильтровывает примеры, чей «золотой» ответ НЕ подтверждается извлечённым контекстом (отсутствующие цитируемые пункты → отбрасываются).
Оценка
Модуль evaluate.py использует ваш набор данных из Documents\Fine_Tunning\NTC_CDMX\dataset.jsonl: для каждого вопроса с цитируемыми пунктами в «золотом» ответе проверяется, появляется ли этот пункт среди извлечённых разделов.
Базовый результат (выборка 164 вопросов с цитатами, top-6): recall@q ≈ 0.58. Около 18 % пунктов, цитируемых датасетом, не существуют в корпусе своей редакции (возможные ошибочные цитаты в датасете или пробелы извлечения).
Технические примечания
Редакции 2004 и 2017 выходят в официальных вестниках (по несколько документов на PDF); границы каждой нормы определены в
src/config.py.Разбиение выполняется по нумерованным разделам (никогда по абзацам), с сохранением формул/таблиц.
Каждый раздел содержит метаданные
{edición, norma, numeral, página}для точного цитирования.У PDF-файлов 2023 года имена с повреждёнными символами на диске; экстрактор определяет их по числовому префиксу.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sobrio25/ntc-cdmx-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server