OnceHub
El servidor MCP de OnceHub proporciona una forma estandarizada para que modelos y agentes de IA interactúen directamente con tu API de programación de OnceHub.
Documentación
Servidor MCP de OnceHub
El servidor MCP de OnceHub proporciona una forma estandarizada para que AI models y agents interactúen directamente con tu API de programación de OnceHub. En lugar de enviar a los usuarios un enlace de reserva y pedirles que programen manualmente, un agente de IA puede recuperar disponibilidad y programar reuniones en nombre del usuario utilizando las herramientas MCP, a través de un flujo de lenguaje natural.
Esta solución permite que agentes de IA externos accedan a las API de programación de OnceHub dentro de flujos de trabajo impulsados por IA utilizando el servidor remoto estandarizado Model Context Protocol (MCP).
Compatible con: VS Code Copilot, OpenAI y cualquier cliente de IA compatible con MCP.
Tabla de Contenidos
- Características
- Inicio Rápido
- Arquitectura
- Herramientas
- Configuración del Cliente
- Instalación
- Pruebas
- Despliegue en Producción
- Contribuciones
- Licencia
Características
- 🔌 Soporte del Protocolo MCP - Funciona con cualquier cliente de IA compatible con MCP
- 📅 Recuperación de Franjas Horarias - Obtén franjas de reserva disponibles de los calendarios de OnceHub
- 🗓️ Programación de Reuniones - Programa reuniones automáticamente con información del invitado
- 🔐 Autenticación Segura - Autenticación basada en clave API mediante cabeceras
- 🧪 Bien Probado - 92% de cobertura de código con pruebas unitarias exhaustivas
- 🐳 Listo para Docker - Contenerizado para un despliegue fácil
- 📝 Indicaciones Amigables para IA - Guía de flujo de trabajo integrada para asistentes de IA
Inicio Rápido
Comienza con el servidor MCP de OnceHub en tu cliente de IA:
1. Obtén tu Clave API
Obtén tu clave API de OnceHub desde la documentación de Autenticación.
2. Configura tu Cliente
Crea .vscode/mcp.json en tu espacio de trabajo:
{
"servers": {
"oncehub": {
"url": "https://mcp.oncehub.com/sse",
"type": "http",
"headers": {
"authorization": "Bearer YOUR_ONCEHUB_API_KEY"
}
}
}
}
Reemplaza YOUR_ONCEHUB_API_KEY con tu clave API real.
3. Comienza a Usar
Pide a tu asistente de IA que:
- "Muéstrame las franjas horarias disponibles para el calendario BKC-XXXXXXXXXX"
- "Programa una reunión para mañana a las 2 PM con Juan Pérez"
⚠️ ¿Ejecutando tu propio servidor MCP? Consulta Instalación y Ejecución Local para instrucciones de configuración.
✅ Servidor de Producción: Nuestro servidor MCP alojado está disponible en https://mcp.oncehub.com/sse.
Arquitectura

Estructura del Proyecto
mcp-server/
├── main.py # MCP server with tool definitions
├── models.py # Pydantic data schemas for BookingForm and Location
├── pyproject.toml # Project dependencies and configuration
├── Dockerfile # Docker image configuration
├── .dockerignore # Files to exclude from Docker build
└── README.md # This file
Herramientas
1. get_booking_time_slots
Recupera las franjas horarias disponibles de un calendario de reservas.
Parámetros:
calendar_id(str, obligatorio): El ID del calendario de reservas (ej., 'BKC-XXXXXXXXXX')start_time(str, opcional): Filtrar franjas desde esta fecha y hora en formato ISO 8601 (ej., '2026-02-15T09:00:00Z')end_time(str, opcional): Filtrar franjas hasta esta fecha y hora en formato ISO 8601 (ej., '2026-02-28T17:00:00Z')timeout(int, predeterminado: 30): Tiempo de espera de la solicitud en segundos
Ejemplo de Respuesta:
{
"success": true,
"status_code": 200,
"calendar_id": "BKC-XXXXXXXXXX",
"total_slots": 5,
"data": [
{"start_time": "2026-02-10T10:00:00Z", "end_time": "2026-02-10T11:00:00Z"},
{"start_time": "2026-02-10T14:00:00Z", "end_time": "2026-02-10T15:00:00Z"}
]
}
2. schedule_meeting
Programa una reunión en una franja horaria específica. Siempre llama a get_booking_time_slots primero para asegurarte de que la franja esté disponible.
Parámetros:
calendar_id(str, obligatorio): ID del calendario de reservas (ej., 'BKC-XXXXXXXXXX')start_time(str, obligatorio): La hora de inicio exacta de una franja disponible en formato ISO 8601guest_time_zone(str, obligatorio): Zona horaria del invitado en formato IANA (ej., 'America/New_York', 'Europe/London')guest_name(str, obligatorio): Nombre completo del invitadoguest_email(str, obligatorio): Correo electrónico del invitado para confirmaciónguest_phone(str, opcional): Número de teléfono del invitado en formato E.164 (ej., '+15551234567')location_type(str, opcional): Modo de reunión - 'virtual', 'virtual_static', 'physical' o 'guest_phone'location_value(str, opcional): Detalles de ubicación según el tipo:virtual: Nombre del proveedor (ej., 'zoom', 'google_meet', 'microsoft_teams')virtual_static: Usar nullphysical: ID de dirección (ej., 'ADD-XXXXXXXXXX')guest_phone: Número de teléfono en formato E.164
custom_fields(dict, opcional): Campos de formulario personalizados como pares clave-valor (ej.,{"company": "Acme", "interests": ["Demo"]})timeout(int, predeterminado: 30): Tiempo de espera de la solicitud en segundos
Ejemplo de Respuesta:
{
"success": true,
"status_code": 200,
"booking_id": "BKG-123456789",
"confirmation": {
"guest_name": "John Doe",
"guest_email": "john@example.com",
"scheduled_time": "2026-02-10T10:00:00Z",
"timezone": "America/New_York"
}
}
Requisitos Previos
- Python 3.13 o superior
- uv administrador de paquetes (recomendado)
- Clave API de OnceHub - Consulta la documentación de Autenticación para obtener tu clave API
- URL del endpoint de la API de OnceHub (generalmente
https://api.oncehub.com)
Variables de Entorno
Crea un archivo .env o establece estas variables de entorno:
# Required: Your OnceHub API endpoint
ONCEHUB_API_URL=https://api.oncehub.com
# Note: API key is passed via Authorization header from MCP clients
# Do NOT commit API keys to version control
Configuración del Cliente
Este servidor MCP es compatible con VS Code Copilot, Claude Desktop, OpenAI y otros clientes compatibles con MCP.
VS Code / GitHub Copilot
Paso 1: Crear el Directorio de Configuración
Windows (PowerShell):
New-Item -Path ".vscode" -ItemType Directory -Force
New-Item -Path ".vscode\mcp.json" -ItemType File -Force
macOS/Linux:
mkdir -p .vscode
touch .vscode/mcp.json
Paso 2: Configurar el Servidor
Edita .vscode/mcp.json:
{
"servers": {
"oncehub": {
"url": "http://0.0.0.0:8000/sse",
"type": "http",
"headers": {
"authorization": "Bearer YOUR_ONCEHUB_API_KEY"
}
}
}
}
Opciones de Configuración:
url: El endpoint del servidor MCP (cámbialo a la URL de tu servidor si lo autoalojas)authorization: Tu clave API de OnceHub con el prefijoBearer- Nombre del servidor (
oncehub): Se puede personalizar a cualquier identificador
Paso 3: Recargar VS Code
Después de guardar la configuración, recarga VS Code para activar la conexión del servidor MCP.
Claude Desktop
Edita el archivo de configuración de Claude Desktop:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"oncehub": {
"url": "http://0.0.0.0:8000/sse",
"headers": {
"authorization": "Bearer YOUR_ONCEHUB_API_KEY"
}
}
}
}
Reinicia Claude Desktop después de guardar.
Otros Clientes MCP
Para otros clientes compatibles con MCP, configúralos para conectarse a:
- Endpoint:
http://0.0.0.0:8000/sse - Protocolo: HTTP con Server-Sent Events (SSE)
- Autenticación: Token Bearer en la cabecera
Authorization
Nota de Seguridad: Nunca comprometas claves API en el control de versiones. Usa variables de entorno o gestión segura de secretos para despliegues en producción.
Instalación y Ejecución Local con uv
1. Instalar uv (si no está instalado)
Windows (PowerShell):
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
2. Clonar el repositorio
git clone https://github.com/scheduleonce/mcp-server.git
cd mcp-server
3. Establecer variables de entorno
Windows (PowerShell):
$env:ONCEHUB_API_URL="https://api.oncehub.com"
macOS/Linux:
export ONCEHUB_API_URL="https://api.oncehub.com"
O crear un archivo .env:
echo "ONCEHUB_API_URL=https://api.oncehub.com" > .env
Nota: La clave API se pasa a través de la cabecera
Authorizationdesde los clientes MCP (no como variable de entorno).
4. Ejecutar el servidor usando uv
Opción 1: Ejecución directa
uv run main.py
Opción 2: Usando el punto de entrada del script
uv run mcp-server
El servidor se iniciará en http://0.0.0.0:8000
5. Verificar que el servidor está funcionando
Comprobación de salud:
curl http://localhost:8000/health
Conectar al endpoint SSE:
curl http://localhost:8000/sse
Ejecución con Docker
Construir la imagen Docker
docker build -t mcp-server .
Ejecutar el contenedor
docker run -p 8000:8000 mcp-server
Con variables de entorno
docker run -p 8000:8000 \
-e ONCEHUB_API_URL="https://api.oncehub.com" \
mcp-server
Usando Docker Compose (recomendado)
Crea docker-compose.yml:
version: '3.8'
services:
mcp-server:
build: .
ports:
- "8000:8000"
environment:
- ONCEHUB_API_URL=https://api.oncehub.com
restart: unless-stopped
Luego ejecuta:
docker-compose up -d
Esquemas de Datos
Location
Representa los detalles de ubicación de la reunión.
Campos:
type(str): Tipo de ubicación ("physical", "virtual", "phone")value(str): Detalles de ubicación (dirección, URL, número de teléfono)
Registro (Logging)
El servidor incluye un registro exhaustivo para solicitudes HTTP a OnceHub:
- Solicitudes salientes (→)
- Códigos de estado de respuesta (←)
- Cuerpos de solicitud/respuesta
Los registros se emiten a la consola con marcas de tiempo y niveles de registro.
Endpoints de la API
GET /health- Endpoint de comprobación de saludGET /healthy- Endpoint alternativo de comprobación de saludGET /sse- Endpoint Server-Sent Events para comunicación del protocolo MCPGET /tools- Devuelve las herramientas MCP registradas con sus descripciones, parámetros requeridos y detalles de campos de entrada
Desarrollo
Instalar dependencias manualmente
uv pip install fastmcp pydantic httpx
Instalar dependencias de prueba
uv pip install -e ".[test]"
Ejecutar con diferentes niveles de registro
Edita main.py y cambia el parámetro log_level:
asyncio.run(mcp.run_sse_async(host="0.0.0.0", port=8000, log_level="debug"))
Niveles de registro disponibles: "debug", "info", "warning", "error", "critical"
Pruebas
El proyecto incluye pruebas unitarias exhaustivas para todas las herramientas y funciones.
Instalar Dependencias de Prueba
# Install test dependencies
uv pip install pytest pytest-asyncio pytest-cov pytest-mock
Ejecutar Pruebas
Ejecutar todas las pruebas:
uv run pytest
Ejecutar pruebas con informe de cobertura:
uv run pytest --cov=. --cov-report=html --cov-report=term
Ejecutar un archivo de prueba específico:
uv run pytest test_tools.py
Ejecutar una clase de prueba específica:
uv run pytest test_tools.py::TestGetBookingTimeSlots
Ejecutar una prueba específica:
uv run pytest test_tools.py::TestGetBookingTimeSlots::test_get_time_slots_success
Ejecutar con salida detallada:
uv run pytest -v
Ejecutar y detenerse en el primer fallo:
uv run pytest -x
Cobertura de Pruebas
Después de ejecutar las pruebas con cobertura, abre el informe HTML:
# Windows
start htmlcov/index.html
# macOS
open htmlcov/index.html
# Linux
xdg-open htmlcov/index.html
Estructura de Pruebas
test_tools.py- Pruebas unitarias para todas las funciones de herramientasTestGetApiKeyFromContext- Pruebas para la extracción de clave APITestGetBookingTimeSlots- Pruebas para la recuperación de franjas horariasTestScheduleMeeting- Pruebas para la programación de reuniones
Todas las pruebas usan mocking para evitar llamadas API reales y garantizar una ejecución rápida y confiable.
Despliegue en Producción
Mejores Prácticas de Seguridad
-
Gestión de Claves API
- Nunca comprometas claves API en el control de versiones
- Usa variables de entorno o sistemas de gestión de secretos
- Rota las claves API regularmente
-
Seguridad de Red
- Usa HTTPS en producción (agrega un proxy inverso como nginx)
- Implementa limitación de velocidad para prevenir abusos
- Usa reglas de firewall para restringir el acceso
-
Monitoreo
- Monitorea el endpoint
/healthpara disponibilidad - Configura agregación de registros (ej., stack ELK, CloudWatch)
- Realiza seguimiento de tiempos de respuesta y tasas de error de la API
- Monitorea el endpoint
Opciones de Despliegue
Despliegue con Docker
# Build and tag the image
docker build -t oncehub-mcp-server:1.0.0 .
# Run with restart policy
docker run -d \
--name oncehub-mcp \
--restart unless-stopped \
-p 8000:8000 \
-e ONCEHUB_API_URL="https://api.oncehub.com" \
oncehub-mcp-server:1.0.0
Despliegue en la Nube
- AWS: Usa ECS, Fargate o EC2 con Application Load Balancer
- Azure: Despliega en Azure Container Instances o App Service
- GCP: Usa Cloud Run o Google Kubernetes Engine
Consideraciones de Rendimiento
- El tiempo de espera predeterminado es de 30 segundos - ajústalo según tus necesidades
- El servidor usa asyncio para el manejo concurrente de solicitudes
- Considera el escalado horizontal para escenarios de alto tráfico
- Usa agrupación de conexiones para base de datos/caché si se agrega
Monitoreo de Salud
# Simple health check script
curl -f http://localhost:8000/health || exit 1
# Docker healthcheck (add to Dockerfile)
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
Solución de Problemas
Error: "API key is required"
Asegúrate de pasar el parámetro api_key al llamar a las herramientas.
Error: "404 Not Found" en /health
Asegúrate de que el servidor esté funcionando y sea accesible en el puerto 8000.
Error: "405 Method Not Allowed" en /sse
El endpoint SSE requiere una solicitud GET, no POST. Usa bibliotecas de cliente MCP adecuadas o curl con GET.
No se muestran registros para solicitudes de OnceHub
Verifica que el registro esté configurado correctamente en main.py y que el servidor se esté ejecutando con log_level="info" o "debug".
Licencia
Este proyecto está licenciado bajo los términos de la licencia de código abierto MIT. Consulta MIT para los términos completos.
Soporte
- Documentación: Documentación de la API de OnceHub
- Problemas: Problemas de GitHub
- Protocolo MCP: Model Context Protocol
Agradecimientos
- Construido con FastMCP
- Compatible con el Model Context Protocol
- Impulsado por OnceHub API
Hecho por el equipo de Oncehub