Servidor de protocolo de contexto de modelo (MCP) basado en Java para JDBC
Un servidor MCP (Protocolo de Contexto de Modelo) ligero para JDBC, desarrollado con Quakrus . Este servidor es compatible con Virtuoso DBMS y otros backends DBMS con controladores JDBC.

Características
Obtener esquemas : obtiene y enumera todos los nombres de esquemas de la base de datos conectada.
Obtener tablas : recupera información de la tabla para esquemas específicos o todos los esquemas.
Describir tabla : genere una descripción detallada de las estructuras de tabla, incluyendo:
Nombres de columnas y tipos de datos
Atributos que aceptan valores nulos
Claves primarias y externas
Tablas de búsqueda : filtre y recupere tablas según subcadenas de nombre.
Ejecutar procedimientos almacenados : ¡Una función exclusiva de Virtuoso! Ejecute procedimientos almacenados y recupere resultados.
Ejecutar consultas :
Formato de resultado JSONL: optimizado para respuestas estructuradas.
Formato de tabla Markdown: ideal para informes y visualización.
Related MCP server: Joomla MCP Server
Prerrequisitos
El servidor MCP requiere Java 21 o superior.
Instalación
Clonar este repositorio:
Variables de entorno
Actualice su .env anulando estos valores predeterminados para que coincidan con sus preferencias:
Configuración
Para usuarios de Claude Desktop : agregue lo siguiente a claude_desktop_config.json :
Para los usuarios de Claude Desktop que utilizan otros controladores JDBC o una combinación de controladores: agregue lo siguiente a claude_desktop_config.json :
Usar
Herramientas proporcionadas
Después de una instalación exitosa, las siguientes herramientas estarán disponibles para las aplicaciones cliente de MCP.
Descripción general
nombre | descripción |
| Enumere los esquemas de bases de datos accesibles al sistema de administración de bases de datos (DBMS) conectado. |
| Enumere las tablas asociadas con un esquema de base de datos seleccionado. |
| Proporcione la descripción de una tabla asociada a un esquema de base de datos designado. Esto incluye información sobre nombres de columnas, tipos de datos, gestión de valores nulos, autoincremento, clave principal y claves foráneas. |
| Enumere tablas basadas en un patrón de subcadena del campo de entrada |
| Ejecuta una consulta SQL y devuelve resultados en formato JSONL. |
| Ejecuta una consulta SQL y devuelve resultados en formato JSONL. |
| Ejecuta una consulta SQL y devuelve los resultados en formato de tabla Markdown. |
| ¡Una función específica de Virtuoso! Ejecuta una consulta SPASQL y devuelve resultados. |
| ¡Una función específica de Virtuoso! Ejecuta una consulta SPARQL y devuelve resultados. |
| ¡Una función exclusiva de Virtuoso! Interactúa con los LLM a través del Asistente/Agente de Soporte de Virtuoso. |
Descripción detallada
jdbc_get_schemasRecupere y devuelva una lista de todos los nombres de esquemas de la base de datos conectada.
Parámetros de entrada:
user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve una matriz de cadenas JSON de nombres de esquemas.
jdbc_get_tablesRecupera y devuelve una lista con información sobre las tablas de un esquema especificado. Si no se proporciona ningún esquema, se utiliza el esquema predeterminado de la conexión.
Parámetros de entrada:
schema(cadena, opcional): Esquema de base de datos para filtrar tablas. El valor predeterminado es el valor de conexión.user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve una cadena JSON que contiene información de la tabla (por ejemplo,
TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE).
jdbc_filter_table_namesFiltra y devuelve información sobre las tablas cuyos nombres contienen una subcadena específica.
Parámetros de entrada:
q(cadena, obligatoria): la subcadena que se buscará dentro de los nombres de las tablas.schema(cadena, opcional): Esquema de base de datos para filtrar tablas. El valor predeterminado es el valor de conexión.user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve una cadena JSON que contiene información para las tablas coincidentes.
jdbc_describe_tableRecupere y devuelva información detallada sobre las columnas de una tabla específica.
Parámetros de entrada:
schema(cadena, obligatorio): el nombre del esquema de la base de datos que contiene la tabla.table(cadena, obligatoria): el nombre de la tabla a describir.user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve una cadena JSON que describe las columnas de la tabla (por ejemplo,
COLUMN_NAME,TYPE_NAME,COLUMN_SIZE,IS_NULLABLE).
jdbc_query_databaseEjecuta una consulta SQL estándar y devuelve los resultados en formato JSON.
Parámetros de entrada:
query(cadena, obligatoria): la cadena de consulta SQL que se ejecutará.user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve los resultados de la consulta como una cadena JSON.
jdbc_query_database_mdEjecute una consulta SQL estándar y devuelva los resultados formateados como una tabla Markdown.
Parámetros de entrada:
query(cadena, obligatoria): la cadena de consulta SQL que se ejecutará.user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve los resultados de la consulta como una cadena de tabla Markdown.
jdbc_query_database_jsonlEjecuta una consulta SQL estándar y devuelve los resultados en formato de líneas JSON (JSONL) (un objeto JSON por línea).
Parámetros de entrada:
query(cadena, obligatoria): la cadena de consulta SQL que se ejecutará.user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve los resultados de la consulta como una cadena JSONL.
jdbc_spasql_query¡Una característica específica de Virtuoso!
Ejecute una consulta SPASQL (híbrida SQL/SPARQL) y devuelva resultados.
Parámetros de entrada:
query(cadena, obligatoria): la cadena de consulta SPASQL.max_rows(número, opcional): Número máximo de filas a devolver. El valor predeterminado es20.timeout(número, opcional): Tiempo de espera de la consulta en milisegundos. El valor predeterminado es30000(es decir, 30 segundos).user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve el resultado de la llamada al procedimiento almacenado subyacente (por ejemplo,
Demo.demo.execute_spasql_query).
jdbc_sparql_query¡Una característica específica de Virtuoso!
Ejecutar una consulta SPARQL y devolver resultados.
Parámetros de entrada:
query(cadena, obligatoria): la cadena de consulta SPARQL.format(cadena, opcional): formato del resultado deseado. El valor predeterminado es'json'.timeout(número, opcional): Tiempo de espera de la consulta en milisegundos. El valor predeterminado es30000(es decir, 30 segundos).user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve el resultado de la llamada de función subyacente (por ejemplo,
"UB".dba."sparqlQuery").
jdbc_virtuoso_support_ai¡Una característica específica de Virtuoso!
Utiliza una función de asistente de inteligencia artificial específica de Virtuoso, pasando un mensaje y una clave API opcional.
Parámetros de entrada:
prompt(cadena, obligatorio): el texto de solicitud para la función AI.api_key(cadena, opcional): Clave de API para el servicio de IA. El valor predeterminado es"none".user(cadena, opcional): nombre de usuario de la base de datos. El valor predeterminado es"demo".password(cadena, opcional): Contraseña de la base de datos. El valor predeterminado es"demo".url(cadena, opcional): cadena de conexión URL JDBC.
Devuelve el resultado de la llamada a la función AI Support Assistant (por ejemplo,
DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI).
Uso básico y solución de problemas
Conexión del inspector MCP al controlador ODBC de Virtuoso
Para el uso básico del cliente MCP y la resolución de problemas, utilice el Inspector MCP de la siguiente manera:
Instalar el Inspector MCP:
npm install -g @modelcontextprotocol/inspectorIniciar el inspector:
npx @modelcontextprotocol/inspector java -jar /path/to/mcp-jdbc-server/MCPServer-1.0.0-runner.jar
Acceda a la URL devuelta por el inspector para solucionar problemas de interacciones con el servidor MCP.
Inspector MCP Conexión a controladores adicionales
Para el uso básico del cliente MCP y la resolución de problemas, utilice el Inspector MCP de la siguiente manera:
Instale el/los controlador(es) JDBC, asegurándose de que sus archivos JAR estén registrados en la Máquina Virtual Java (JVM) del sistema operativo host mediante
$CLASSPATH. Por ejemplo:export CLASSPATH=$CLASSPATH:/path/to/driver1.jar:/path/to/driver2.jar:/path/to/driverN.jarInicie el inspector utilizando los siguientes argumentos de la línea de comandos:
npx @modelcontextprotocol/inspector java -cp MCPServer-1.0.0-runner.jar:/path/to/driver1.jar:/path/to/driver2.jar:/path/to/driverN.jar io.quarkus.runner.GeneratedMain
Utilice un ejemplo basado en los controladores Oracle e Informix
Suponiendo la siguiente información del controlador JDBC:
Plantilla de URL del controlador JDBC de Oracle
jdbc:oracle:thin:@<hostname>:[port]:<SERVICEID>Plantilla de URL del controlador JDBC de Informix
jdbc:informix-sqli://<hostname>:<port>/<database></database>:<INFORMIXSERVER>=<SERVICEID>
Instale los controladores JDBC de Oracle (
ojdbc17.jar) o Informix (jdbc-15.0.0.1.1.jar) y asegúrese de que sus archivos JAR estén registrados en la máquina virtual Java (JVM) del sistema operativo host mediante$CLASSPATH. Por ejemplo:export CLASSPATH=$CLASSPATH:/path/to/Java/Extensions/jdbc-15.0.0.1.1.jar export CLASSPATH=$CLASSPATH:/path/to/Java/Extensions/ojdbc17.jarInicie el inspector utilizando los siguientes argumentos de la línea de comandos:
npx @modelcontextprotocol/inspector java -cp MCPServer-1.0.0-runner.jar:/path/to/Java/Extensions/ojdbc17.jar:/path/to/Java/Extensions/jdbc-15.0.0.1.1.jar io.quarkus.runner.GeneratedMainAcceda a la URL devuelta por el inspector y luego utilice la operación
jdbc_execute_querypara consultar la base de datos de destino, proporcionando valores reales para las siguientes plantillas de campo de entrada:URL de JDBC
Usuario
Contraseña
Consulta