README profesional (en español) para el proyecto FiscMCP. Este documento explica qué hace el proyecto, cómo instalarlo y ejecutarlo, cómo configurarlo y pasos de desarrollo y despliegue.
FiscAI MCP (FiscMCP) es un servidor de herramientas (MCP) orientado a ofrecer asesoría fiscal y financiera para micro y pequeñas empresas en México. Combina:
- Un motor de inteligencia artificial (Google Gemini) para generación de lenguaje y embeddings.
- Un backend de búsqueda semántica y almacenamiento (Supabase) para RAG (Retrieval-Augmented Generation).
- Herramientas para: recomendaciones fiscales, chat asistido, análisis de riesgo, búsqueda de documentos, roadmap de formalización, predicción de crecimiento (modelo ML) y apertura de mapas (deep links).
El núcleo está implementado con fastmcp (instancia mcp en src/main.py) y ofrece además un servidor HTTP opcional (src/http_server.py) para probar endpoints REST.
- Recomendaciones fiscales personalizadas gracias a RAG (embeddings + documentos relevantes).
- Chat asistido con detección automática de intención (por ejemplo, abrir mapa para bancos o SAT).
- Búsqueda semántica de documentos fiscales en Supabase.
- Análisis de riesgo fiscal y generación de roadmap de formalización.
- Predicción de crecimiento del negocio con un modelo entrenado (en
src/modelDemo).
run_server.py— Entrypoint para ejecutar el servidor MCP (modo FastMCP).run_http_server.py— Script para ejecutar el servidor HTTP (FastAPI + Uvicorn).server.py— Archivo preparado para deployment (exportamcppara detectores automáticos).requirements.txt— Dependencias del proyecto.src/— Código fuente principal:main.py— Registro de herramientas MCP (@mcp.tool()y prompts@mcp.prompt()).http_server.py— API REST para probar herramientas.gemini.py— Cliente e integración con Google Gemini (LLM & embeddings).supabase_client.py— Cliente para Supabase (búsqueda semántica, historial de chat, etc.).places.py— Integración con Google Places para búsqueda de ubicaciones.config.py— Carga de variables de entorno y validaciones.modelDemo/— Datos y scripts de ejemplo para el modelo ML (entrenamiento y demo).
test_*.py— Suites de tests unitarios y de integración (varios archivostest_*.py).
- Python 3.10+ (preferible).
- Pip.
- Acceso a las APIs externas usadas:
- Google Gemini (clave
GEMINI_API_KEY) - Supabase (URL y service role key)
- Google Places API (para búsqueda de lugares)
- Google Gemini (clave
Dependencias listadas en requirements.txt. Adicionalmente para el servidor HTTP se recomienda instalar fastapi y uvicorn[standard].
Configurar en un archivo .env en la raíz del proyecto o en el entorno del sistema:
- SUPABASE_URL — URL del proyecto Supabase.
- SUPABASE_SERVICE_ROLE_KEY — Service role key para Supabase (se usa para RPCs/privilegios).
- GEMINI_API_KEY — API key para Google Gemini.
- EXPO_PUBLIC_GOOGLE_MAPS_API_KEY o GOOGLE_MAPS_API_KEY — para
places. - PORT — Puerto para el servidor HTTP (por defecto
8000). - NODE_ENV —
developmentoproduction. - Opcionales:
- GEMINI_MODEL — Nombre del modelo Gemini (por defecto
gemini-2.5-flash). - GEMINI_FALLBACK_MODELS — Lista separada por comas de modelos de respaldo (por defecto
gemini-2.5-flash-lite,gemini-2.5-pro,gemini-3.1-pro-preview,gemini-3-flash-preview,gemini-3.1-flash-lite-preview). - GEMINI_EMBED_MODEL — Modelo de embeddings (por defecto
gemini-embedding-001). - EMBED_DIM — Dimensionalidad del embedding (por defecto
768). - SIMILARITY_THRESHOLD — Umbral de similitud (por defecto
0.6). - TOPK_DOCUMENTS — Número de documentos a recuperar (por defecto
6).
- GEMINI_MODEL — Nombre del modelo Gemini (por defecto
Importante: No publiques claves secretas en repositorios públicos. Usa secretos en tu plataforma de despliegue.
- Clona el repositorio y navega a la carpeta:
cd C:\Users\Owner\Downloads\FiscMCP- (Opcional) Crea y activa un entorno virtual:
python -m venv .venv; .\.venv\Scripts\Activate.ps1- Instala las dependencias:
pip install -r requirements.txt
# Recomendado para la API HTTP (si vas a usarla):
pip install fastapi uvicorn[standard]- Crea un archivo
.envsiguiendo la sección "Variables de entorno" y añade las claves necesarias.
Hay dos modos principales para ejecutar el proyecto:
- Servidor MCP (modo FastMCP)
- Uso (desde la raíz del repo):
python run_server.pyEste script añade src al PYTHONPATH y ejecuta main() en src/main.py, que registra las herramientas y ejecuta mcp.run().
- Servidor HTTP (FastAPI) — para probar endpoints REST
- Uso (desde la raíz del repo):
python run_http_server.py- El script usa
uvicorninternamente y expondrá:- Health: http://localhost:8000/health
- Documentación interactiva (Swagger/OpenAPI): http://localhost:8000/docs
- Endpoints principales:
/api/fiscal-advice,/api/chat,/api/risk-analysis,/api/search,/api/user-context.
Si cambias el puerto, define PORT en .env.
- Health check
# Obtener estado
Invoke-RestMethod -Method Get -Uri http://localhost:8000/health- Solicitar recomendación fiscal (ejemplo)
$body = @{ actividad = 'Ventas en línea'; ingresos_anuales = 300000; estado = 'CDMX' } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://localhost:8000/api/fiscal-advice -Body $body -ContentType 'application/json'- Chat con el asistente
$body = @{ message = '¿Dónde está un Banorte cerca de Reforma?'; user_id = 'guest' } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://localhost:8000/api/chat -Body $body -ContentType 'application/json'- Búsqueda semántica de documentos
$body = @{ query = 'beneficios régimen RESICO'; limit = 5 } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://localhost:8000/api/search -Body $body -ContentType 'application/json'src/main.pyregistra múltiples herramientas como@mcp.tool()y prompts con@mcp.prompt()que implementan la lógica de negocio (RAG, chat, análisis de riesgo, roadmap, etc.).src/gemini.pyencapsula la integración con Google Gemini: generación de embeddings, prompts, y lógica para el chat y RAG.src/supabase_client.pyencapsula acceso a Supabase — incluye RPCs para búsqueda semántica (match_fiscai_documents) y tablas para historial de chat y usuarios.src/places.pyusa Google Places APIs para búsquedas de establecimientos y generadeepLinkpara la app móvil (fiscai://...).src/config.pycentraliza la configuración y valida variables de entorno críticas.
- El repo contiene tests
test_*.pypara pruebas unitarias básicas. Puedes ejecutar los tests conpytest.
pip install pytest
pytest -q- Para desarrollo iterativo recomendamos usar un entorno virtual y reiniciar el servidor cuando cambies código.
- Error: "Faltan variables de entorno..." — Asegúrate de crear
.envconSUPABASE_URL,SUPABASE_SERVICE_ROLE_KEY,GEMINI_API_KEYyEXPO_PUBLIC_GOOGLE_MAPS_API_KEYsi usasplaces. - Error de Gemini: Verifica que
GEMINI_API_KEYsea válida y que el modelo configurado exista en tu cuenta. - Supabase: Si las funciones RPC fallan, verifica que los nombres (
match_fiscai_documents,match_documents) existan en tu proyecto Supabase.
- Nunca subas
SUPABASE_SERVICE_ROLE_KEYniGEMINI_API_KEYa repositorios públicos. - Para producción, utiliza secretos gestionados por la plataforma de hosting (Vercel, Railway, Fly, AWS, etc.) en lugar de
.enven disco.
- Plataformas recomendadas: Railway, Fly.io, Azure App Service, DigitalOcean App Platform.
- Recomendación: desplegar el servidor HTTP (
run_http_server.py) detrás de un proxy y gestionar secretos con el proveedor. - Considerar usar contenedor Docker para portabilidad (Dockerfile no incluido — puede añadirse fácilmente).
- Abre issues para sugerencias o bugs.
- Fork + PR: agrega tests para cambios funcionales.
- Sigue el estilo de codificación existente y documenta cambios en
README.mdcuando alteres el comportamiento público.
- Añadir un
Dockerfileydocker-composepara facilitar despliegue local. - Añadir CI (GitHub Actions) que valide linting y tests.
- Añadir un ejemplo de
.env.examplecon variables no sensibles (nombres de variables y descripciones). - Mejorar la cobertura de tests para
src/gemini.py(simular responses) ysrc/supabase_client.py(mock de RPCs).
Resumen: he analizado la estructura y el código principal del proyecto (src/main.py, src/http_server.py, src/gemini.py, src/supabase_client.py, src/places.py, src/config.py) y he preparado este README en español con guías de instalación, configuración y uso. Si quieres, puedo:
- Añadir un archivo
.env.exampleal repo con las variables de entorno listadas. - Crear un
Dockerfileydocker-compose.ymlde ejemplo. - Añadir un script de comprobación (makefile / ps1) para desarrollo local.
Dime qué prefieres y lo implemento a continuación.