Integrations
Uses .ENV files for flexible configuration of database connections, server settings, logging preferences, and other environment variables.
Provides tools for interacting with Apache Doris databases, enabling database metadata retrieval, SQL query execution, schema exploration, and audit log retrieval through a standardized Model Control Panel interface.
Implemented using FastAPI to provide both SSE and HTTP streaming endpoints for clients to interact with the MCP protocol, supporting tool calls and prompt interactions.
Servidor Doris MCP
El servidor Doris MCP (Panel de Control de Modelos) es un servicio backend desarrollado con Python y FastAPI. Implementa el protocolo MCP (Panel de Control de Modelos), lo que permite a los clientes interactuar con él mediante herramientas definidas. Está diseñado principalmente para conectarse a bases de datos Apache Doris, aprovechando potencialmente los Modelos de Lenguaje Grandes (LLM) para tareas como la conversión de consultas de lenguaje natural a SQL (NL2SQL), la ejecución de consultas y la gestión y el análisis de metadatos.
Características principales
- Implementación del protocolo MCP : proporciona interfaces MCP estándar, admite llamadas de herramientas, gestión de recursos e interacciones rápidas.
- Múltiples modos de comunicación :
- SSE (eventos enviados por el servidor) : se sirven a través de los puntos finales
/sse
(inicialización) y/mcp/messages
(comunicación) (src/sse_server.py
). - HTTP transmisible : se sirve a través del punto final unificado
/mcp
, que admite solicitud/respuesta y transmisión (src/streamable_server.py
). - (Opcional) Stdio : interacción posible a través de entrada/salida estándar (
src/stdio_server.py
), requiere configuración de inicio específica.
- SSE (eventos enviados por el servidor) : se sirven a través de los puntos finales
- Interfaz basada en herramientas : Las funcionalidades principales se encapsulan como herramientas MCP que los clientes pueden usar según sea necesario. Las herramientas clave disponibles actualmente se centran en la interacción directa con la base de datos:
- Ejecución de SQL (
mcp_doris_exec_query
) - Listado de bases de datos y tablas (
mcp_doris_get_db_list
,mcp_doris_get_db_table_list
) - Recuperación de metadatos (
mcp_doris_get_table_schema
,mcp_doris_get_table_comment
,mcp_doris_get_table_column_comments
,mcp_doris_get_table_indexes
) - Recuperación del registro de auditoría (
mcp_doris_get_recent_audit_logs
) Nota: Las herramientas actuales se centran principalmente en operaciones directas de la base de datos.
- Ejecución de SQL (
- Interacción con la base de datos : proporciona funcionalidad para conectarse a Apache Doris (u otras bases de datos compatibles) y ejecutar consultas (
src/utils/db.py
). - Configuración flexible : se configura a través de un archivo
.env
, que admite configuraciones para conexiones de bases de datos, proveedores/modelos LLM, claves API, niveles de registro, etc. - Extracción de metadatos : capaz de extraer información de metadatos de la base de datos (
src/utils/schema_extractor.py
).
Requisitos del sistema
- Python 3.12+
- Detalles de conexión a la base de datos (por ejemplo, Doris Host, Puerto, Usuario, Contraseña, Base de datos)
Inicio rápido
1. Clonar el repositorio
2. Instalar dependencias
3. Configurar variables de entorno
Copie el archivo .env.example
a .env
y modifique la configuración según su entorno:
Variables ambientales clave:
- Conexión a la base de datos :
DB_HOST
: Nombre de host de la base de datosDB_PORT
: Puerto de base de datos (predeterminado 9030)DB_USER
: Nombre de usuario de la base de datosDB_PASSWORD
: Contraseña de la base de datosDB_DATABASE
: Nombre de la base de datos predeterminada
- Configuración del servidor :
SERVER_HOST
: Dirección de host en la que escucha el servidor (valor predeterminado0.0.0.0
)SERVER_PORT
: Puerto en el que escucha el servidor (predeterminado3000
)ALLOWED_ORIGINS
: Orígenes permitidos por CORS (separados por comas,*
permite todos)MCP_ALLOW_CREDENTIALS
: Si se permiten credenciales CORS (valor predeterminado:false
)
- Configuración de registro :
LOG_DIR
: Directorio para archivos de registro (predeterminado./logs
)LOG_LEVEL
: Nivel de registro (por ejemplo,INFO
,DEBUG
,WARNING
,ERROR
, predeterminadoINFO
)CONSOLE_LOGGING
: Si desea enviar registros a la consola (predeterminado:false
)
Herramientas MCP disponibles
La siguiente tabla enumera las principales herramientas actualmente disponibles para la invocación a través de un cliente MCP:
Nombre de la herramienta | Descripción | Parámetros | Estado |
---|---|---|---|
mcp_doris_get_db_list | Obtenga una lista de todos los nombres de bases de datos en el servidor. | random_string (cadena, Obligatorio) | ✅ Activo |
mcp_doris_get_db_table_list | Obtenga una lista de todos los nombres de tablas en la base de datos especificada. | random_string (cadena, Obligatorio), db_name (cadena, Opcional, predeterminado a la base de datos actual) | ✅ Activo |
mcp_doris_get_table_schema | Obtenga la estructura detallada de la tabla especificada. | random_string (cadena, Obligatorio), table_name (cadena, Obligatorio), db_name (cadena, Opcional) | ✅ Activo |
mcp_doris_get_table_comment | Obtener el comentario para la tabla especificada. | random_string (cadena, Obligatorio), table_name (cadena, Obligatorio), db_name (cadena, Opcional) | ✅ Activo |
mcp_doris_get_table_column_comments | Obtener comentarios para todas las columnas de la tabla especificada. | random_string (cadena, Obligatorio), table_name (cadena, Obligatorio), db_name (cadena, Opcional) | ✅ Activo |
mcp_doris_get_table_indexes | Obtener información del índice para la tabla especificada. | random_string (cadena, Obligatorio), table_name (cadena, Obligatorio), db_name (cadena, Opcional) | ✅ Activo |
mcp_doris_exec_query | Ejecutar consulta SQL y devolver el comando de resultado. | random_string (cadena, Obligatorio), sql (cadena, Obligatorio), db_name (cadena, Opcional), max_rows (entero, Opcional, predeterminado 100), timeout (entero, Opcional, predeterminado 30) | ✅ Activo |
mcp_doris_get_recent_audit_logs | Obtenga registros de registro de auditoría de un período reciente. | random_string (cadena, Obligatorio), days (entero, Opcional, predeterminado 7), limit (entero, Opcional, predeterminado 100) | ✅ Activo |
Nota: Todas las herramientas requieren un parámetro random_string
como identificador de llamada, que normalmente gestiona automáticamente el cliente MCP. "Opcional" y "Obligatorio" se refieren a la lógica interna de la herramienta; el cliente podría necesitar proporcionar valores para todos los parámetros según su implementación. Los nombres de las herramientas que se muestran aquí son los nombres base; los clientes podrían verlos con un prefijo (p. ej., mcp_doris_stdio3_get_db_list
) según el modo de conexión.
4. Ejecutar el servicio
Si utiliza el modo SSE, ejecute el siguiente comando:
Este comando inicia la aplicación FastAPI, que proporciona servicios SSE y Streamable HTTP MCP de forma predeterminada.
Puntos finales del servicio:
- Inicialización de SSE :
http://<host>:<port>/sse
- Comunicación SSE :
http://<host>:<port>/mcp/messages
(POST) - HTTP transmisible :
http://<host>:<port>/mcp
(admite GET, POST, DELETE, OPCIONES) - Comprobación de estado :
http://<host>:<port>/health
- (Potencial) Comprobación de estado :
http://<host>:<port>/status
(Confirmar si está implementado enmain.py
)
Uso
La interacción con el servidor Doris MCP requiere un cliente MCP . El cliente se conecta a los puntos finales HTTP SSE o Streamable del servidor y envía solicitudes (como tool_call
) según la especificación MCP para invocar las herramientas del servidor.
Flujo de interacción principal:
- Inicialización del cliente : Conéctese a
/sse
(SSE) o envíe una llamada al métodoinitialize
a/mcp
(transmisible). - (Opcional) Descubrir herramientas : el cliente puede llamar a
mcp/listTools
omcp/listOfferings
para obtener la lista de herramientas compatibles, sus descripciones y esquemas de parámetros. - Herramienta de llamada : el cliente envía un mensaje/solicitud
tool_call
, especificando eltool_name
yarguments
.- Ejemplo: Obtener el esquema de la tabla
tool_name
:mcp_doris_get_table_schema
(o el nombre específico del modo)arguments
: incluyerandom_string
,table_name
,db_name
.
- Ejemplo: Obtener el esquema de la tabla
- Respuesta del manejador :
- Sin transmisión : el cliente recibe una respuesta que contiene
result
oerror
. - Transmisión : el cliente recibe una serie de
tools/progress
, seguidas de una respuesta final que contiene elresult
oerror
.
- Sin transmisión : el cliente recibe una respuesta que contiene
Los nombres y parámetros de herramientas específicos deben referenciarse desde el código src/tools/
u obtenerse mediante mecanismos de descubrimiento de MCP.
Conectando con el cursor
Puede conectar Cursor a este servidor MCP usando el modo Stdio o SSE.
Modo estudio
El modo Stdio permite a Cursor gestionar directamente el proceso del servidor. La configuración se realiza en el archivo de configuración del servidor MCP de Cursor (normalmente ~/.cursor/mcp.json
o similar).
Si usa el modo stdio, ejecute el siguiente comando para descargar y compilar el paquete de dependencia del entorno, pero tenga en cuenta que debe cambiar la ruta del proyecto a la dirección de ruta correcta :
- Configurar cursor: agregue una entrada como la siguiente a su configuración de Cursor MCP:Copy
- Puntos clave:
- Reemplace
/path/to/your/doris-mcp
con la ruta absoluta al directorio raíz del proyecto en su sistema. El argumento--project
es crucial para queuv
encuentre elpyproject.toml
y ejecute el comando correcto. - El
command
se establece enuv
(suponiendo que se usauv
para la gestión de paquetes, como se indica enuv.lock
). Losargs
incluyen--project
, la ruta,run
ymcp-doris
(que debería corresponder a un script definido enpyproject.toml
). - Los detalles de conexión a la base de datos (
DB_HOST
,DB_PORT
,DB_USER
,DB_PASSWORD
,DB_DATABASE
) se configuran directamente en el bloqueenv
del archivo de configuración. Cursor los pasará al proceso del servidor. No se necesita el archivo.env
para este modo cuando se configura mediante Cursor.
- Reemplace
Modo SSE
El modo SSE requiere que primero ejecutes el servidor MCP de forma independiente y luego le digas a Cursor cómo conectarse a él.
- Configurar
.env
: asegúrese de que las credenciales de su base de datos y cualquier otra configuración necesaria (comoSERVER_PORT
si no usa el valor predeterminado 3000) estén configuradas correctamente en el archivo.env
dentro del directorio del proyecto. - Iniciar el servidor: Ejecute el servidor desde su terminal en el directorio raíz del proyecto:Este script suele leer el archivoCopy
.env
e iniciar el servidor FastAPI en modo SSE (consulte el script ysse_server.py
para obtener más información). Anotemain.py
host y el puerto en los que escucha el servidor (el valor predeterminado es0.0.0.0:3000
). - Configurar cursor: agregue una entrada como la siguiente a su configuración de MCP de Cursor, que apunte al punto final SSE del servidor en ejecución:Nota: El ejemplo utiliza el puerto predeterminadoCopy
3000
Si su servidor está configurado para ejecutarse en un puerto diferente (como3010
en el ejemplo del usuario), ajuste la URL según corresponda.
Después de configurar cualquiera de los modos en Cursor, debería poder seleccionar el servidor (por ejemplo, doris-stdio
o doris-sse
) y utilizar sus herramientas.
Estructura del directorio
Desarrollo de nuevas herramientas
Esta sección describe el proceso para agregar nuevas herramientas MCP al servidor Doris MCP, considerando la estructura actual del proyecto.
1. Aproveche los módulos de utilidad
Antes de escribir una nueva lógica de interacción con la base de datos desde cero, verifique los módulos de utilidad existentes:
doris_mcp_server/utils/db.py
: proporciona funciones básicas para obtener conexiones de base de datos (get_db_connection
) y ejecutar consultas sin procesar (execute_query
,execute_query_df
).doris_mcp_server/utils/schema_extractor.py
(claseMetadataExtractor
) : Ofrece métodos avanzados para recuperar metadatos de bases de datos, como listar bases de datos/tablas (get_all_databases
,get_database_tables
), obtener esquemas/comentarios/índices de tablas (get_table_schema
,get_table_comment
,get_column_comments
,get_table_indexes
) y acceder a registros de auditoría (get_recent_audit_logs
). Incluye mecanismos de almacenamiento en caché.doris_mcp_server/utils/sql_executor_tools.py
(funciónexecute_sql_query
) : Proporciona un contenedor paradb.execute_query
que incluye comprobaciones de seguridad (opcionales, controladas por la variable de entornoENABLE_SQL_SECURITY_CHECK
), añadeLIMIT
automático a las consultas SELECT, gestiona la serialización de resultados (fechas, decimales) y formatea la salida según la estructura estándar de éxito/error de MCP. Se recomienda su uso para ejecutar SQL proporcionado o generado por el usuario.
Puede importar y combinar funcionalidades de estos módulos para crear su nueva herramienta.
2. Implementar la lógica de la herramienta
Implemente la lógica principal de su nueva herramienta como una función async
dentro de doris_mcp_server/tools/mcp_doris_tools.py
. Esto mantiene centralizadas las implementaciones principales de la herramienta. Asegúrese de que su función devuelva datos en un formato que se pueda integrar fácilmente en la estructura de respuesta estándar de MCP (consulte _format_response
en el mismo archivo como referencia).
Ejemplo: Creemos una herramienta simple get_server_time
.
3. Registrar la herramienta (registro dual)
Debido al manejo separado de los modos SSE/Streamable y Stdio, debe registrar la herramienta en dos lugares:
A. Registro SSE/Transmitible ( tool_initializer.py
)
- Importe su nueva función de herramienta desde
mcp_doris_tools.py
. - Dentro de la función
register_mcp_tools
, agregue una nueva función contenedora decorada con@mcp.tool()
. - La función envolvente debe llamar a la función de su herramienta principal.
- Define el nombre de la herramienta y proporciona una descripción detallada (incluyendo los parámetros, si los hay) en el decorador. Recuerda incluir la descripción obligatoria del parámetro
random_string
para compatibilidad con el cliente, incluso si tu wrapper no la usa explícitamente.
Ejemplo ( tool_initializer.py
):
B. Registro de Stdio ( mcp_core.py
)
- De manera similar a SSE, agregue una nueva función contenedora decorada con
@stdio_mcp.tool()
. - Importante: Importe la función de su herramienta principal (
mcp_doris_get_server_time
) dentro de la función contenedora (patrón de importación retrasada utilizado en este archivo). - El contenedor llama a la función principal de la herramienta. El contenedor podría necesitar una
async def
según cómoFastMCP
gestione las herramientas en modo Stdio, incluso si la función subyacente es simple (como se observa en la estructura del archivo actual). Asegúrese de que la llamada coincida (por ejemplo, useawait
si se llama a una función asíncrona).
Ejemplo ( mcp_core.py
):
4. Reiniciar y probar
Después de implementar y registrar la herramienta en ambos archivos, reinicie el servidor MCP (ambos modos SSE a través de ./start_server.sh
y asegúrese de que el comando Stdio utilizado por Cursor se actualice si es necesario) y pruebe la nueva herramienta usando su cliente MCP (como Cursor) en ambos modos de conexión.
Contribuyendo
Las contribuciones son bienvenidas a través de problemas o solicitudes de extracción.
Licencia
Este proyecto está licenciado bajo la licencia Apache 2.0. Consulte el archivo de licencia (si existe) para obtener más información.
You must be authenticated.
Tools
Servicio de backend que implementa el protocolo Model Control Panel que se conecta a las bases de datos Apache Doris, lo que permite a los usuarios ejecutar consultas SQL, administrar metadatos y potencialmente aprovechar LLM para tareas como la conversión de lenguaje natural a SQL.
- Características principales
- Requisitos del sistema
- Inicio rápido
- Uso
- Conectando con el cursor
- Estructura del directorio
- Desarrollo de nuevas herramientas
- Contribuyendo
- Licencia
Related Resources
Related MCP Servers
- -securityAlicense-qualityA Model Context Protocol server that provides access to BigQuery. This server enables LLMs to inspect database schemas and execute queries.Last updated -63PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables LLMs to interact with Salesforce data through SOQL queries, SOSL searches, and various API operations including record management.Last updated -1053PythonMIT License
- -securityFlicense-qualityA Model Context Protocol server providing both read and write access to PostgreSQL databases, enabling LLMs to query data, modify records, and manage database schemas.Last updated -4JavaScript
ZenML MCP Serverofficial
-securityFlicense-qualityA server implementing Model Context Protocol that enables LLMs to interact with the ZenML platform, providing access to pipeline data, stack information, and the ability to trigger new pipeline runs.Last updated -13Python