mcp-sqlalchemy
ODBC del servidor MCP a través de SQLAlchemy
Un servidor MCP (Protocolo de Contexto de Modelo) ligero para ODBC, desarrollado con FastAPI , pyodbc y SQLAlchemy . Este servidor es compatible con Virtuoso DBMS y otros backends de DBMS que implementan un proveedor SQLAlchemy.

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 : en el caso de Virtuoso, ejecutar procedimientos almacenados y recuperar resultados.
Ejecutar consultas :
Formato de resultado JSONL: optimizado para respuestas estructuradas.
Formato de tabla Markdown: ideal para informes y visualización.
Related MCP server: MCP SQL Server
Prerrequisitos
Instalar uv :
pip install uvO usa Homebrew:
brew install uvComprobaciones del entorno de ejecución de unixODBC :
Verifique la configuración de la instalación (es decir, la ubicación de los archivos INI clave) ejecutando:
odbcinst -jEnumere los nombres de fuentes de datos disponibles ejecutando:
odbcinst -q -sConfiguración de DSN ODBC : Configure el nombre de la fuente de datos ODBC (
~/.odbc.ini) para la base de datos de destino. Ejemplo para Virtuoso DBMS:[VOS] Description = OpenLink Virtuoso Driver = /path/to/virtodbcu_r.so Database = Demo Address = localhost:1111 WideAsUTF16 = YesEnlace de URL de SQLAlchemy : utilice el formato:
virtuoso+pyodbc://user:password@VOS
Instalación
Clonar este repositorio:
git clone https://github.com/OpenLinkSoftware/mcp-sqlalchemy-server.git
cd mcp-sqlalchemy-serverVariables de entorno
Actualice su .env anulando los valores predeterminados para que coincidan con sus preferencias
ODBC_DSN=VOS
ODBC_USER=dba
ODBC_PASSWORD=dba
API_KEY=xxxConfiguración
Para usuarios de Claude Desktop : agregue lo siguiente a claude_desktop_config.json :
{
"mcpServers": {
"my_database": {
"command": "uv",
"args": ["--directory", "/path/to/mcp-sqlalchemy-server", "run", "mcp-sqlalchemy-server"],
"env": {
"ODBC_DSN": "dsn_name",
"ODBC_USER": "username",
"ODBC_PASSWORD": "password",
"API_KEY": "sk-xxx"
}
}
}
}Uso
URL de conexión del sistema de gestión de bases de datos (DBMS)
Aquí se encuentran los ejemplos de URL de pyodbc para conectarse a sistemas DBMS que se han probado utilizando este servidor mcp.
Base de datos | Formato de URL |
Sistema de gestión de bases de datos Virtuoso |
|
PostgreSQL |
|
MySQL |
|
SQLite |
|
Una vez conectado, podrás interactuar con tus contactos de WhatsApp a través de Claude, aprovechando las capacidades de inteligencia artificial de Claude en tus conversaciones de WhatsApp. |
Herramientas proporcionadas
Descripción general
nombre | descripción |
podbc_get_schemas | Enumere los esquemas de bases de datos accesibles al sistema de administración de bases de datos (DBMS) conectado. |
podbc_obtener_tablas | Enumere las tablas asociadas con un esquema de base de datos seleccionado. |
tabla de descripción de podbc | 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. |
nombres de tabla de filtros podbc | Enumere tablas basadas en un patrón de subcadena del campo de entrada |
base de datos de consultas podbc | Ejecuta una consulta SQL y devuelve resultados en formato JSONL. |
podbc_ejecutar_consulta | Ejecuta una consulta SQL y devuelve resultados en formato JSONL. |
podbc_ejecutar_consulta_md | Ejecuta una consulta SQL y devuelve los resultados en formato de tabla Markdown. |
consulta podbc_spasql | Ejecutar una consulta SPASQL y devolver resultados. |
consulta podbc_sparql | Ejecutar una consulta SPARQL y devolver resultados. |
podbc_virtuoso_support_ai | Interactúe con el asistente/agente de soporte de Virtuoso: una función específica de Virtuoso para interactuar con los LLM |
Descripción detallada
podbc_get_schemas
Recupere 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve una matriz de cadenas JSON de nombres de esquemas.
podbc_obtener_tablas
Recupera 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve una cadena JSON que contiene información de la tabla (por ejemplo, TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE).
nombres de tabla de filtros podbc
Filtra 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve una cadena JSON que contiene información para las tablas coincidentes.
tabla de descripción de podbc
Recupere 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve una cadena JSON que describe las columnas de la tabla (por ejemplo, COLUMN_NAME, TYPE_NAME, COLUMN_SIZE, IS_NULLABLE).
base de datos de consultas podbc
Ejecuta 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve los resultados de la consulta como una cadena JSON.
base de datos de consulta podbc_md
Ejecute 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve los resultados de la consulta como una cadena de tabla Markdown.
podbc_query_base_de_datos_jsonl
Ejecuta 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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve los resultados de la consulta como una cadena JSONL.
consulta podbc_spasql
Ejecutar una consulta SPASQL (SQL/SPARQL híbrido) y devolver resultados. Esta función es específica de Virtuoso.
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 es 20.timeout(número, opcional): Tiempo de espera de la consulta en milisegundos. El valor predeterminado es 30000.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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve el resultado de la llamada al procedimiento almacenado subyacente (por ejemplo,
Demo.demo.execute_spasql_query).
consulta podbc_sparql
Ejecutar una consulta SPARQL y devolver resultados. Esta es una función específica de Virtuoso.
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 es 30000.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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve el resultado de la llamada de función subyacente (por ejemplo,
"UB".dba."sparqlQuery").
podbc_virtuoso_support_ai
Utiliza una función del Asistente de IA específica de Virtuoso, que envía un mensaje y una clave API opcional. Esta función es específica de Virtuoso.
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. Su valor predeterminado es "ninguna".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".dsn(cadena, opcional): nombre de la fuente de datos ODBC. El valor predeterminado es "Virtuoso local".
Devuelve el resultado de la llamada a la función AI Support Assistant (por ejemplo,
DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI).
Solución de problemas
Para facilitar la resolución de problemas:
Instalar el Inspector MCP:
npm install -g @modelcontextprotocol/inspectorIniciar el inspector:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-sqlalchemy-server run mcp-sqlalchemy-server
Acceda a la URL proporcionada para solucionar problemas de interacciones con el servidor.
Available Tools
11 toolspodbc_describe_tableC
Retrieve and return a dictionary containing the definition of a table, including column names, data types, nullable, autoincrement, primary key, and foreign keys.
| Name | Required | Description | Default |
|---|---|---|---|
| Schema | Yes | ||
| table | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the output format ('dictionary containing the definition') but lacks critical behavioral details: whether this is a read-only operation, potential performance impacts, error conditions, or authentication needs. For a database tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the purpose. It avoids unnecessary words and directly states the action and output. However, it could be slightly more structured by separating usage context from output details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It adequately explains the purpose but misses parameter explanations, behavioral transparency, and usage guidelines. Given the complexity and lack of structured data, it should provide more context to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so parameters are undocumented in the schema. The description mentions 'table' implicitly but doesn't explain any of the three parameters (Schema, table, url) or their semantics. It adds no value beyond what the parameter names suggest, failing to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('retrieve and return') and resource ('definition of a table'), specifying what information is included (column names, data types, etc.). It distinguishes from siblings like podbc_get_tables (which likely lists tables) by focusing on table structure details. However, it doesn't explicitly name alternatives or contrast with all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like podbc_get_tables or podbc_filter_table_names. It doesn't mention prerequisites, context for use, or exclusions. Usage is implied by the purpose but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_execute_queryC
Execute a SQL query and return results in JSONL format.
| Name | Required | Description | Default |
|---|---|---|---|
| max_rows | No | ||
| params | No | ||
| query | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the output format (JSONL) but doesn't address critical aspects like whether this is a read-only or write operation, authentication requirements, rate limits, error handling, or what happens when max_rows is exceeded. For a SQL execution tool, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that efficiently communicates the core functionality. There's no wasted verbiage, and the information is front-loaded with the essential action and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a SQL execution tool with 4 parameters, 0% schema coverage, no annotations, and no output schema, the description is inadequate. It doesn't explain parameter usage, behavioral constraints, or what the tool returns beyond format. The agent would struggle to use this tool correctly without significant trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 4 parameters (query, max_rows, params, url), the description provides no information about any parameters. It doesn't explain what 'params' should contain, what 'url' refers to, or how 'max_rows' affects execution. The description fails to compensate for the complete lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute a SQL query') and outcome ('return results in JSONL format'), which is specific and unambiguous. However, it doesn't differentiate itself from sibling tools like 'podbc_query_database' or 'podbc_execute_query_md', which likely have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple sibling tools involving queries (podbc_query_database, podbc_execute_query_md, podbc_sparql_query, etc.), there's no indication of what makes this tool distinct or when it should be preferred over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_execute_query_mdB
Execute a SQL query and return results in Markdown table format.
| Name | Required | Description | Default |
|---|---|---|---|
| max_rows | No | ||
| params | No | ||
| query | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions execution and output format, but lacks critical behavioral details: it doesn't specify if this is read-only or mutating, potential risks (e.g., data modification), authentication needs, rate limits, or error handling. For a tool with 4 parameters and no annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality ('Execute a SQL query') and adds value with the output detail ('in Markdown table format'). There is no wasted wording, making it appropriately sized for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 0% schema coverage, no annotations, no output schema, and sibling tools with similar names, the description is incomplete. It doesn't explain parameters, behavioral traits, or differentiate from alternatives, making it inadequate for a tool of this complexity. The output format is mentioned, but other critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning none of the 4 parameters have descriptions in the schema. The tool description adds no information about parameters like 'query', 'max_rows', 'params', or 'url', failing to compensate for the coverage gap. This leaves parameters largely unexplained beyond their titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute a SQL query') and the output format ('return results in Markdown table format'), which distinguishes it from siblings like 'podbc_execute_query' that likely return different formats. However, it doesn't explicitly mention what resource it acts on (e.g., a database), making it slightly less specific than a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for SQL queries needing Markdown output, but provides no explicit guidance on when to use this vs. alternatives like 'podbc_execute_query' or other query tools. There's no mention of prerequisites, limitations, or specific scenarios favoring this tool, leaving usage context inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_filter_table_namesC
Retrieve and return a list containing information about tables whose names contain the substring 'q' in the format [{'schema': 'schema_name', 'table': 'table_name'}, {'schema': 'schema_name', 'table': 'table_name'}].
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves and returns a list, implying a read-only operation, but doesn't mention any behavioral traits like performance characteristics, error handling, authentication requirements, or rate limits. The description is minimal and doesn't provide context beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys the core functionality and output format. It's front-loaded with the main purpose and includes specific details about the return format. There's no wasted verbiage, though it could be slightly more concise by omitting the explicit output example if not critical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is minimally adequate. It covers the purpose and output format but lacks details on parameters, behavioral context, and usage guidelines. The absence of an output schema means the description should ideally explain return values more thoroughly, though it does specify the format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions the 'q' parameter implicitly ('tables whose names contain the substring 'q''), adding semantic meaning that the schema lacks (0% coverage). However, it doesn't explain the 'url' parameter at all, leaving half of the parameters undocumented. The baseline is 3 because the description compensates partially but not fully for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve and return a list containing information about tables whose names contain the substring 'q''. It specifies the verb ('retrieve and return'), resource ('tables'), and filtering criteria ('names contain the substring'). However, it doesn't explicitly differentiate from sibling tools like podbc_get_tables or podbc_get_schemas, which likely have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like podbc_get_tables (which might list all tables without filtering) or podbc_get_schemas (which might list schemas). There's no context about prerequisites, constraints, or typical use cases for substring filtering versus other filtering methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_get_schemasC
Retrieve and return a list of all schema names from the connected database.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but lacks details on permissions, rate limits, error handling, or what 'connected database' entails. This is a significant gap for a tool that interacts with a database, making it inadequate for safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any fluff. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of database operations, no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It fails to address critical aspects like return format, error cases, or connection requirements, which are essential for an AI agent to use this tool reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no information about the single parameter 'url', and schema description coverage is 0%, leaving the parameter undocumented. However, with only one parameter and a baseline of 3 for minimal coverage, the score reflects that the description doesn't compensate but doesn't worsen the gap significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve and return') and resource ('list of all schema names from the connected database'), making the purpose specific and understandable. It doesn't explicitly differentiate from sibling tools like 'podbc_get_tables' or 'podbc_filter_table_names', which might retrieve different database objects, so it misses the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites like needing a database connection, nor does it compare to siblings such as 'podbc_get_tables' for table-level retrieval, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_get_tablesC
Retrieve and return a list containing information about tables in specified schema, if empty uses connection default
| Name | Required | Description | Default |
|---|---|---|---|
| Schema | No | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the action 'retrieve and return' but doesn't disclose behavioral traits such as read-only vs. destructive nature, authentication requirements, rate limits, error handling, or output format. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes essential conditional behavior. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, database interaction), lack of annotations, and no output schema, the description is incomplete. It doesn't cover return values, error cases, or behavioral details needed for safe and effective use. The description should do more to compensate for missing structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It implies the 'Schema' parameter's purpose ('specified schema') and default behavior ('if empty uses connection default'), but doesn't explain the 'url' parameter at all. With 2 parameters and incomplete coverage, the description adds only marginal value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve and return' and the resource 'list containing information about tables in specified schema'. It distinguishes the scope by mentioning 'if empty uses connection default', which helps differentiate it from siblings like podbc_filter_table_names or podbc_get_schemas. However, it doesn't explicitly contrast with all siblings, keeping it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like podbc_get_schemas for schema listing or podbc_filter_table_names for filtered table names, nor does it specify prerequisites or exclusions. This leaves the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_query_databaseC
Execute a SQL query and return results in JSONL format.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the action ('Execute a SQL query') and output format ('JSONL format'), but fails to cover critical aspects like whether this is a read-only or write operation, potential side effects (e.g., data modification), error handling, or performance considerations (e.g., query timeouts). For a database query tool, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality ('Execute a SQL query') and specifies the output format. There is no wasted language, making it highly concise and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a database query tool with no annotations, 2 parameters (one undocumented), and no output schema, the description is incomplete. It omits essential details like the tool's scope (e.g., supported SQL dialects), return value structure beyond 'JSONL format', and error conditions. This leaves the agent with inadequate context for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, meaning parameters 'query' and 'url' are undocumented in the schema. The description adds minimal value by implying 'query' is a SQL statement, but it doesn't explain the purpose of the 'url' parameter (e.g., database connection string) or provide any syntax examples. This insufficiently compensates for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Execute') and resource ('SQL query') with the specific outcome ('return results in JSONL format'). It distinguishes itself from siblings like 'podbc_describe_table' or 'podbc_get_tables' by focusing on query execution rather than metadata retrieval, though it doesn't explicitly differentiate from 'podbc_execute_query' which has a similar name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'podbc_execute_query' or 'podbc_execute_query_md'. It lacks context about prerequisites, such as whether a database connection is required or how the 'url' parameter relates to usage. This leaves the agent without clear direction for tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_sparql_funcD
Call ???.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | ||
| prompt | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but provides none. 'Call ???.' gives no indication of whether this is a read/write operation, what permissions might be required, what side effects exist, or how results are returned. This is completely inadequate for a tool with 3 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While technically concise with just two words, this represents under-specification rather than effective brevity. The description is too minimal to be useful, and the placeholder '???' suggests it's incomplete rather than intentionally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no annotations, no output schema, and 0% schema description coverage, the description is completely inadequate. It provides no information about purpose, behavior, parameters, or usage context, making it impossible for an agent to understand how to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning none of the 3 parameters (api_key, prompt, url) have descriptions in the schema. The tool description provides absolutely no information about parameter meanings, formats, or usage, failing completely to compensate for the schema's deficiencies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Call ???.' is tautological (restates the name 'podbc_sparql_func' without adding meaningful content) and provides no information about what the tool actually does. It doesn't specify what resource or operation is involved, making it completely unhelpful for understanding the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus the 9 sibling tools on the server. The description offers no context about appropriate use cases, prerequisites, or alternatives, leaving the agent with no basis for selection among similar database/query tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_sparql_queryC
Execute a SPARQL query and return results.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| query | Yes | ||
| timeout | No | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action and outcome, lacking critical details like error handling, rate limits, authentication needs, or what 'return results' entails (e.g., format, structure). This is inadequate for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single sentence that front-loads the core purpose. There's no wasted text, making it efficient and easy to parse, though this brevity contributes to gaps in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, 0% schema coverage, no output schema, no annotations), the description is severely incomplete. It doesn't explain parameter semantics, behavioral traits, or output details, making it inadequate for effective tool use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning parameters are undocumented in the schema. The description adds no information about parameters like 'query', 'format', 'timeout', or 'url', failing to compensate for the coverage gap. This leaves the agent guessing about parameter meanings and usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute a SPARQL query') and outcome ('return results'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'podbc_sparql_func' or 'podbc_spasql_query', which likely have similar purposes, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as sibling tools like 'podbc_execute_query' or 'podbc_sparql_func'. There's no mention of context, prerequisites, or exclusions, leaving the agent with minimal usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_spasql_queryC
Execute a SPASQL query and return results.
| Name | Required | Description | Default |
|---|---|---|---|
| max_rows | No | ||
| query | Yes | ||
| timeout | No | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool executes a query and returns results, but lacks critical behavioral details such as whether it's read-only or destructive, authentication requirements, rate limits, error handling, or what format results are returned in. This is inadequate for a tool with potential data access implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's appropriately sized for a basic tool description and front-loads the core functionality without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 0% schema coverage, no annotations, no output schema, and multiple sibling tools, the description is incomplete. It doesn't provide enough context about behavior, parameters, or usage differentiation to adequately guide an agent in selecting and invoking this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but adds no parameter information. It doesn't explain what 'query' should contain, what 'max_rows' limits, what 'timeout' controls, or what 'url' specifies. With 4 parameters (1 required) and no schema descriptions, this leaves significant gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Execute' and the resource 'SPASQL query', specifying the action and target. It distinguishes from siblings like 'podbc_sparql_query' by specifying SPASQL rather than SPARQL, but doesn't fully differentiate from other query execution tools like 'podbc_execute_query' or 'podbc_query_database' beyond the query language type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With multiple sibling tools for querying and execution (e.g., podbc_execute_query, podbc_sparql_query, podbc_query_database), the description lacks context about specific use cases, prerequisites, or comparisons to help an agent choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
podbc_virtuoso_support_aiD
Tool to use the Virtuoso AI support function
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | ||
| prompt | Yes | ||
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but offers almost none. It doesn't indicate whether this is a read or write operation, what kind of AI support is provided, what the typical response format is, or any limitations. The description is too vague to help an agent understand what behavior to expect when invoking this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While technically concise (one sentence), this is under-specification rather than effective conciseness. The single sentence 'Tool to use the Virtuoso AI support function' doesn't provide enough information to be useful. Good conciseness balances brevity with completeness - this leans too far toward brevity at the expense of utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with 0% schema coverage, no annotations, no output schema, and a complex-sounding 'AI support function', the description is completely inadequate. It doesn't explain what the tool does, how to use it, what inputs it expects, or what outputs to anticipate. For a tool that appears to involve AI interaction with a database system, this level of documentation is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 3 parameters (api_key, prompt, url), the description provides no information about any parameters. It doesn't explain what the 'prompt' parameter should contain, what the 'api_key' is for, or what 'url' refers to. The description fails to compensate for the complete lack of parameter documentation in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Tool to use the Virtuoso AI support function' is tautological - it essentially restates the tool name 'podbc_virtuoso_support_ai' with minimal elaboration. While it mentions 'AI support function', it doesn't specify what this function actually does (e.g., answer questions, generate code, troubleshoot). It doesn't distinguish itself from sibling tools like podbc_execute_query or podbc_sparql_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. Given the sibling tools include various database query and schema exploration tools, there's no indication whether this AI support function is for natural language queries, debugging assistance, or something else. No context about appropriate use cases or prerequisites is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v1.0.0- First observed
podbc_describe_table - First observed
podbc_execute_query - First observed
podbc_execute_query_md - First observed
podbc_filter_table_names - First observed
podbc_get_schemas - First observed
podbc_get_tables - First observed
podbc_query_database - First observed
podbc_sparql_func - First observed
podbc_sparql_query - First observed
podbc_spasql_query - First observed
podbc_virtuoso_support_ai
TDQS
Multiple tools have overlapping or unclear purposes, causing confusion. For example, podbc_execute_query and podbc_query_database both execute SQL queries and return results in JSONL format, making them nearly indistinguishable. Additionally, podbc_sparql_func and podbc_virtuoso_support_ai have vague descriptions that don't clearly differentiate their functions from other query tools.
The naming follows a consistent prefix pattern (podbc_) and uses snake_case throughout, which is predictable. However, there are minor deviations like podbc_spasql_query (likely a typo for SPARQL) and inconsistent verb usage (e.g., get_schemas vs. filter_table_names), but overall the structure is readable and mostly uniform.
With 11 tools, the count is reasonable for a database interaction server, covering schema exploration, table queries, and specialized functions. It's slightly on the higher side but still manageable, as each tool appears to serve a distinct technical purpose, though some redundancy exists.
The toolset covers core database operations like querying, schema retrieval, and table description, but there are notable gaps. For instance, there are no tools for data manipulation (e.g., insert, update, delete) or transaction management, which are essential for a complete SQLAlchemy-like interface. The inclusion of SPARQL and specialized functions adds niche coverage but doesn't fill these basic CRUD gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
PostgreSQL, MySQL, OpenAPI/Swagger, and shared Agent Memory with scoped access.
- dataOAuthco.thinair
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Ask questions in plain language, get answers from your business database. No SQL required.
1Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceProvides generic Open Database Connectivity (ODBC) to any Database Management System (DBMS) that's accessible via an ODBC Connector (Driver).12MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Microsoft SQL Server databases using both SQL Server and Windows Authentication. It supports flexible connection configurations, including read-only modes and encrypted communication for secure data management.3,338MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to query ODBC-accessible databases via DSN, supporting SQL, SPARQL, and schema exploration.MIT
- AlicenseNot gradedqualityDmaintenanceEnables SQL agents to connect to any SQLAlchemy-supported database via MCP, providing read-only SQL querying, automatic table summarization, and column content search.4Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/OpenLinkSoftware/mcp-sqlalchemy-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server