OMNIAGH/notion-mcp-server
If you are the rightful owner of notion-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Notion MCP Server is a comprehensive server for the Notion API, providing full read and write access to Notion databases and pages.
Notion MCP Server
Un servidor MCP completo para la API de Notion que proporciona acceso integral de lectura y escritura a bases de datos y páginas de Notion.
🚀 Características
Funciones de Lectura
- list_databases: Lista todas las bases de datos accesibles
- get_database: Obtiene información detallada de una base de datos específica
- get_page: Obtiene información detallada de una página específica
- search_pages: Busca páginas en el espacio de trabajo
- search_databases: Busca bases de datos en el espacio de trabajo
- get_block_children: Obtiene bloques hijos de un bloque padre
Funciones de Escritura
- create_page: Crea una nueva página en Notion
- create_database: Crea una nueva base de datos en una página padre
- create_database_with_properties: Crea una base de datos con propiedades predefinidas
- update_page: Actualiza propiedades de una página
- append_block_children: Agrega bloques hijos a un bloque padre
Gestión de Credenciales
- Configuración automática de NOTION_TOKEN en variables de entorno
- Validación de credenciales y conectividad
- Autenticación segura con la API de Notion
Manejo de Errores
- Captura y manejo de errores de API
- Validación de parámetros con Pydantic
- Logging detallado para debugging
- Manejo de rate limits automático
Estructura de Respuesta
- Respuestas en formato JSON estructurado
- Conversión automática a formato legible
- Paginación para grandes conjuntos de datos
- Manejo de rate limits y reintentos
📋 Requisitos
- Python 3.10 o superior
- uv (gestor de paquetes moderno)
- Token de integración de Notion
🛠️ Instalación
1. Obtener Token de Notion
- Ve a https://www.notion.so/my-integrations
- Crea una nueva integración interna
- Copia el token de integración
- Comparte tus páginas y bases de datos con la integración
2. Configurar Variables de Entorno
export NOTION_TOKEN="tu_token_de_integracion_aqui"
3. Instalar Dependencias
# Instalar uv si no lo tienes
curl -LsSf https://astral.sh/uv/install.sh | sh
# Navegar al directorio del proyecto
cd notion-mcp-server
# Las dependencias se instalarán automáticamente al ejecutar run.sh
🚀 Uso
Uso Básico
# Ejecutar el servidor MCP
./run.sh
Ejemplos de Herramientas
Listar Bases de Datos
# Lista todas las bases de datos accesibles
result = await mcp_client.call_tool("list_databases", {
"page_size": 10
})
Buscar Páginas
# Buscar páginas que contengan "proyecto"
result = await mcp_client.call_tool("search_pages", {
"query": "proyecto",
"page_size": 20
})
Crear Página
# Crear una nueva página
result = await mcp_client.call_tool("create_page", {
"parent_type": "page_id",
"parent_id": "id_de_la_pagina_padre",
"title": "Nueva Página",
"properties": {
"status": {
"select": {"name": "En progreso"}
}
}
})
Crear Base de Datos
# Crear una nueva base de datos
properties = {
"Nombre": {
"title": {}
},
"Estado": {
"select": {
"options": [
{"name": "Por hacer", "color": "red"},
{"name": "En progreso", "color": "yellow"},
{"name": "Completado", "color": "green"}
]
}
}
}
result = await mcp_client.call_tool("create_database", {
"parent_page_id": "id_de_la_pagina_padre",
"title": "Mi Base de Datos",
"properties": properties
})
📖 Documentación de Herramientas
Funciones de Lectura
list_databases
Lista todas las bases de datos accesibles por la integración.
Parámetros:
start_cursor(opcional): Cursor para paginaciónpage_size(opcional): Número de elementos por página (1-100, por defecto 100)
Retorna: JSON con lista de bases de datos e información de paginación
get_database
Obtiene información detallada de una base de datos específica.
Parámetros:
database_id(requerido): ID de la base de datos a obtener
Retorna: JSON con detalles de la base de datos
get_page
Obtiene información detallada de una página específica.
Parámetros:
page_id(requerido): ID de la página a obtener
Retorna: JSON con detalles de la página
search_pages
Busca páginas en el espacio de trabajo.
Parámetros:
query(opcional): Consulta de búsqueda para filtrar páginaspage_size(opcional): Número de resultados a devolver (1-100, por defecto 100)start_cursor(opcional): Cursor para paginación
Retorna: JSON con resultados de búsqueda
search_databases
Busca bases de datos en el espacio de trabajo.
Parámetros:
query(opcional): Consulta de búsqueda para filtrar bases de datospage_size(opcional): Número de resultados a devolver (1-100, por defecto 100)start_cursor(opcional): Cursor para paginación
Retorna: JSON con resultados de búsqueda
get_block_children
Obtiene bloques hijos de un bloque padre.
Parámetros:
block_id(requerido): ID del bloque padrestart_cursor(opcional): Cursor para paginaciónpage_size(opcional): Número de resultados a devolver (1-100, por defecto 100)
Retorna: JSON con bloques hijos
Funciones de Escritura
create_page
Crea una nueva página en Notion.
Parámetros:
parent_type(requerido): Tipo de padre ('page_id' o 'database_id')parent_id(requerido): ID del padre (página o base de datos)title(requerido): Título de la nueva páginaproperties(opcional): Propiedades adicionales de la página
Retorna: JSON con información de la página creada
create_database
Crea una nueva base de datos en una página padre.
Parámetros:
parent_page_id(requerido): ID de la página padre donde se creará la base de datostitle(requerido): Título de la nueva base de datosproperties(requerido): Configuración de propiedades de la base de datos
Retorna: JSON con información de la base de datos creada
create_database_with_properties
Crea una base de datos con propiedades predefinidas.
Parámetros:
parent_page_id(requerido): ID de la página padre donde se creará la base de datostitle(requerido): Título de la nueva base de datosproperties(requerido): Configuración de propiedades de la base de datos
Retorna: JSON con información de la base de datos creada
update_page
Actualiza propiedades de una página.
Parámetros:
page_id(requerido): ID de la página a actualizarproperties(requerido): Propiedades de la página a actualizar
Retorna: JSON con información de la página actualizada
append_block_children
Agrega bloques hijos a un bloque padre.
Parámetros:
block_id(requerido): ID del bloque padrechildren(requerido): Lista de bloques hijos a agregar
Retorna: JSON con información del resultado
Herramientas de Utilidad
validate_credentials
Valida las credenciales de la API de Notion y la conectividad.
Parámetros: Ninguno
Retorna: JSON con estado de validación
🔧 Configuración Avanzada
Variables de Entorno
NOTION_TOKEN: Token de integración de Notion (requerido)
Rate Limiting
El servidor maneja automáticamente los límites de tasa de la API de Notion:
- Retraso configurable entre solicitudes
- Reintentos automáticos en caso de rate limiting
- Logging detallado de operaciones
Configuración de MCP
El archivo mcp-server.json contiene la configuración del servidor MCP:
{
"name": "agent_generated_notion_mcp_server",
"exhibit_name": "Notion MCP Server",
"type": 3,
"command": "sh /ruta/a/notion-mcp-server/run.sh",
"description": "Servidor MCP completo para la API de Notion..."
}
🧪 Testing
Ejecutar Pruebas
# Instalar dependencias de desarrollo
uv sync --dev
# Ejecutar pruebas
pytest
# Ejecutar pruebas con cobertura
pytest --cov=src tests/
Ejemplos de Uso
# Ejecutar ejemplos
python examples/usage_examples.py
📝 Ejemplos de Casos de Uso
1. Gestión de Proyectos
# Crear base de datos de proyectos
await mcp_client.call_tool("create_database", {
"parent_page_id": "id_espacio_trabajo",
"title": "Proyectos",
"properties": {
"Nombre": {"title": {}},
"Estado": {
"select": {
"options": [
{"name": "Planificación", "color": "blue"},
{"name": "Desarrollo", "color": "yellow"},
{"name": "Completado", "color": "green"}
]
}
},
"Fecha Límite": {"date": {}},
"Asignado a": {"people": {}}
}
})
2. Automatización de Contenido
# Buscar y actualizar páginas
pages = await mcp_client.call_tool("search_pages", {"query": "tarea pendiente"})
for page in pages["pages"]:
await mcp_client.call_tool("update_page", {
"page_id": page["id"],
"properties": {
"Estado": {
"select": {"name": "En progreso"}
}
}
})
3. Reportes y Análisis
# Obtener todas las bases de datos
databases = await mcp_client.call_tool("list_databases", {"page_size": 100})
# Analizar estructura de cada base de datos
for db in databases["databases"]:
details = await mcp_client.call_tool("get_database", {
"database_id": db["id"]
})
print(f"Base de datos: {db['title']}")
print(f"Propiedades: {list(details['database']['properties'].keys())}")
🐛 Solución de Problemas
Error: NOTION_TOKEN no configurado
export NOTION_TOKEN="tu_token_aqui"
Error: Permisos insuficientes
- Verifica que la integración tenga acceso a las páginas/bases de datos
- En Notion, ve a la página y haz clic en "Compartir"
- Agrega tu integración a la lista de acceso
Error: Rate limit
El servidor maneja automáticamente los rate limits, pero si hay muchos errores:
- Reduce la frecuencia de las solicitudes
- Aumenta el delay entre solicitudes en el código
Error: ID inválido
- Verifica que estés usando el ID correcto (formato UUID)
- Asegúrate de que el recurso existe y tienes acceso
📚 Referencias
🤝 Contribuciones
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama para tu feature
- Commit tus cambios
- Push a la rama
- Abre un Pull Request
📄 Licencia
MIT License - Ver archivo LICENSE para más detalles.
👤 Autor
Desarrollado por MiniMax Agent
¡Listo para usar inmediatamente después del deploy! 🚀