mssql-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mssql-mcplist tables in the sales schema"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mssql-mcp
Servidor MCP de solo lectura para explorar y analizar objetos de SQL Server (tablas, vistas, triggers, stored procedures) desde Claude Code.
Tools expuestas
Tool | Qué hace |
| Lista tablas (filtro opcional por esquema / patrón de nombre) |
| Columnas, tipos, PK, FK e índices de una tabla |
| Lista vistas |
| Lista triggers, tabla dueña y eventos que disparan |
| Lista SPs |
| Código T-SQL completo de un SP/vista/trigger + parámetros |
| Objetos referenciados por un SP/vista/trigger (impacto de cambios) |
| Ejecuta un |
Related MCP server: mcp-sqlserver-readonly
1. Crear un usuario SQL de solo lectura
No uses tu usuario de aplicación ni sa. Crea un login dedicado con permisos mínimos:
CREATE LOGIN mcp_readonly WITH PASSWORD = 'una_password_fuerte';
USE NombreBaseDatos;
CREATE USER mcp_readonly FOR LOGIN mcp_readonly;
ALTER ROLE db_datareader ADD MEMBER mcp_readonly;
GRANT VIEW DEFINITION TO mcp_readonly; -- necesario para leer el texto de SPs/vistas/triggersEsto le permite leer datos y definiciones, pero no puede insertar, modificar,
borrar ni ejecutar procedimientos. La capa de validación en db.ts es una
segunda barrera, no la principal — la principal es este usuario.
2. Instalar y compilar
cd mssql-mcp
npm install
cp .env.example .env
# edita .env con tus datos de conexión (server, database, user, password)
npm run build3. Probar en local (opcional)
npm startDeberías ver mssql-mcp: servidor MCP corriendo por stdio en stderr. Ctrl+C para salir.
4. Registrar el servidor en Claude Code
Desde la raíz de tu proyecto (o global con -g):
claude mcp add mssql-mcp -- node /ruta/absoluta/mssql-mcp/dist/index.jsVerifica que quedó registrado:
claude mcp listLas variables de entorno del .env las carga el propio proceso (via dotenv),
así que no necesitas pasarlas en el comando claude mcp add. Si prefieres no
usar .env, puedes pasarlas inline:
claude mcp add mssql-mcp \
-e DB_SERVER=127.0.0.1 -e DB_DATABASE=NombreBD \
-e DB_USER=mcp_readonly -e DB_PASSWORD=xxx \
-- node /ruta/absoluta/mssql-mcp/dist/index.js5. Flujo típico para analizar un SP
En Claude Code, dentro de tu proyecto:
Usa mssql-mcp para traer la definición del SP dbo.sp_ActualizarSaldo,
revisa sus dependencias y dime qué ajustes de performance o buenas
prácticas recomendarías (índices, SARGability, manejo de transacciones,
try/catch, etc.)Claude Code llamará get_object_definition, opcionalmente
get_object_dependencies y get_table_definition de las tablas involucradas,
y con eso arma el análisis. Como tiene también run_select_query, puede
validar hipótesis (ej. cardinalidad de una tabla, existencia de un índice)
contra la base real.
Seguridad
El usuario SQL debe ser de solo lectura (paso 1) — es la protección real.
run_select_queryrechaza cualquier cosa que no empiece conSELECT/WITHy bloquea palabras clave de escritura/DDL como segunda barrera.No apuntes este MCP a una base de producción con datos sensibles sin revisar antes qué columnas expone
db_datareader(considera vistas o máscaras si hay PII)..envestá en.gitignore— nunca subas credenciales al repo.
Available Tools
8 toolsget_object_definitionB
Devuelve el código T-SQL completo de un stored procedure, vista o trigger, y sus parámetros si es un SP. Úsala para analizar un SP y proponer ajustes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Nombre del objeto (SP, vista o trigger) | |
| schema | No | dbo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It states the tool returns code and parameters, which adds some transparency about output content. However, it doesn't disclose any behavioral traits such as permission requirements, failure modes for non-existent objects, or how it behaves for objects that aren't SPs/views/triggers.
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?
Two clear sentences, efficient and front-loaded with the purpose. No wasted words. Slightly under-specified but appropriately 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 read-only retrieval tool with 2 params and no output schema, the description conveys the core purpose and one usage context. However, it lacks detail on what aspects of the code are returned for views vs triggers, error behavior, and the significance of the schema parameter. It's adequate but not thorough for a tool used to inspect code before making modifications.
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 50% (the 'name' parameter has a description, 'schema' does not). The description adds the context that 'name' refers to a SP, vista, o trigger, slightly extending the schema's 'Nombre del objeto'. However, it doesn't explain the schema parameter's default behavior or whether it's needed for non-dbo schemas.
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 it returns full T-SQL code for a SP, view, or trigger, with parameters if it's a SP. This specifies the verb+resource well. However, it doesn't explicitly distinguish itself from siblings like get_table_definition, though the object types named (SP, vista, trigger) differentiate it adequately since sibling get_table_definition presumably handles tables.
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 second sentence gives an explicit when-to-use: 'Úsala para analizar un SP y proponer ajustes' (use it to analyze a SP and propose adjustments). However, there are no exclusions or alternatives mentioned, and it doesn't clarify when to choose list_stored_procedures or get_table_definition instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_object_dependenciesA
Lista los objetos (tablas, vistas, otros SPs) referenciados por un SP, vista o trigger — útil para entender el impacto antes de modificarlo.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| schema | No | dbo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden of behavioral disclosure. The description is honest about what the tool returns (a list of referenced objects) and frames it as a read/analysis operation. However, it doesn't detail the output format, whether dependencies are recursive (i.e., references within referenced SPs), or how it handles objects that don't exist. The description gives the essential behavioral intent but leaves some ambiguity about recursion depth and error behavior.
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-crafted sentence that efficiently states the tool's purpose, the input types, and the use case. There is no wasted text, and the key information is front-loaded. It earns its place in every phrase.
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?
The tool has 2 parameters, no output schema, no annotations, and 0% schema description coverage, placing the burden on the description. The description covers the purpose and use case well but omits details like the return format of dependencies, whether it recursively resolves nested SP dependencies, and error handling for nonexistent objects. It's acceptable for a straightforward dependency-listing tool but leaves room for the agent to wonder about edge cases.
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% for the 2 parameters (name, schema). The description mentions the input is an SP, vista o trigger, which maps to the 'name' parameter, but doesn't clarify what the 'schema' parameter does beyond what its name implies. The description provides minimal added meaning for the parameters; the schema's `default: dbo` for schema conveys its own intent. With 0% coverage, the description should compensate more but only partially does.
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 what the tool does: lists objects (tables, views, other SPs) referenced by an SP, view, or trigger. It uses a specific verb (lista) and resource (objetos dependientes), and distinguishes it from siblings like get_object_definition (which retrieves definitions) and list_tables (which lists all tables). The 'impact' purpose adds clarity.
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 includes 'útil para entender el impacto antes de modificarlo', which implies when to use it (before modifying an object), giving some contextual guidance. However, it doesn't explicitly state when NOT to use it or name alternative tools for related purposes, such as get_object_definition for reading a single definition or run_select_query for querying data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_definitionB
Devuelve columnas, tipos, nulabilidad, primary key, foreign keys e índices de una tabla.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| schema | No | dbo |
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. The description clearly indicates this is a read operation (returns metadata) and enumerates exactly what is retrieved. It does not mention any caveats like authorization requirements, performance implications on large databases, or whether the schema parameter defaults affect which objects are covered, but as a metadata-read tool the transparency is acceptable.
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?
A single, efficient sentence in Spanish that enumerates the returned metadata in a natural list. No filler or redundancy. Slightly terse but appropriately sized for a schema-inspection tool.
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 metadata-inspection tool with 2 simple params and no output schema, the description covers the return contents well but leaves out parameter semantics (what format 'table' expects, what 'schema' means). No annotations exist to cover safety or behavior. The tool is straightforward enough that this is adequate but not complete.
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 for undocumented parameters. The description mentions 'de una tabla' which maps to the 'table' parameter, but neither the 'table' nor 'schema' parameters are described at all. It's unclear if 'schema' is a database schema qualifier (e.g., dbo) which the default suggests, and whether the table param expects a bare name or fully qualified name. The description adds minimal value over the schema's raw parameter names.
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 ('Devuelve' - returns) and resource (table definition) plus enumerates the specific elements returned: columns, types, nullability, primary key, foreign keys, and indexes. This clearly distinguishes it from siblings like list_tables (which lists tables) and get_object_definition (which is broader/generic). The only minor gap is not explicitly contrasting with get_object_definition or other 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 implies usage for retrieving table schema metadata but provides no explicit when-to-use vs alternatives guidance. Given the sibling tools include get_object_definition (which might overlap or differ in scope) and run_select_query, some guidance on when this vs get_object_definition is appropriate would strengthen it. However, the enumerated return content makes the use case reasonably clear by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stored_proceduresC
Lista los stored procedures de la base de datos.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | ||
| namePattern | 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 doesn't mention whether this is a read-only operation (though 'lista' implies so), whether it requires special permissions, what happens with an empty database, or the output format. For a read-only listing tool, the description adds minimal behavioral context beyond the verb.
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?
A single, short sentence with no wasted words. Efficiently communicates the core action, though it errs toward under-specification rather than elegant conciseness.
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 2 undocumented parameters (0% schema coverage), no annotations, and no output schema, this short description is inadequate. It cannot help the agent understand the parameters' semantics, the output structure, or edge cases. Sibling tools exist for related listing/definition operations, so more differentiation context would help.
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 neither the schema properties nor the description explain the two parameters (schema, namePattern). The description doesn't mention the parameters at all, so the agent has no idea that schema filters by database schema or that namePattern supports pattern-based name filtering. With 0% coverage and no compensating description, this is a significant 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 'Lista los stored procedures de la base de datos' (Lists the stored procedures of the database) identifies the verb (list) and resource (stored procedures), making the purpose fairly clear. However, it's generic and doesn't provide scope detail like how it differs from siblings such as list_tables, list_views, or list_triggers, all of which share the same 'list' pattern.
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 gives no guidance about when to use this tool vs. alternatives, which matters here since siblings like get_object_definition and list_triggers overlap conceptually in database introspection. No context on filtering by schema/name patterns or how this differs from other listing tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesB
Lista las tablas de la base de datos, con su esquema y cantidad aproximada de filas. Permite filtrar por patrón de nombre.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Filtrar por esquema, ej: 'dbo' | |
| namePattern | No | Patrón LIKE para el nombre de la tabla, ej: '%cliente%' |
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 states this is read-only in nature (listing tables), but doesn't disclose whether it returns arrays, pagination behavior, performance implications on large catalogs, or whether the 'approximate row count' uses metadata (fast) or a count query (slow). For a discovery-style tool, the lack of behavioral disclosure about result format and performance is a 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 covers purpose, result content, and filtering capability. It's front-loaded with the primary purpose. Minor omission: it doesn't mention the 2 optional parameters by name in the description, but the schema handles that. No wasted words.
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 simple list tool with 2 optional params and no output schema, the description is nearly adequate. However, with no annotations and no output schema, it leaves unanswered what the returned structure contains besides 'esquema y cantidad aproximada de filas.' The sibling set (list_views, list_triggers, etc.) places this in a clear family context. Overall decent but slightly thin for full completeness.
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 100%, so both parameters (schema and namePattern) are documented in the schema with examples ('dbo' and '%cliente%'). The description adds the notion of name-pattern filtering, which aligns with the namePattern param, but adds no meaning beyond what the schema already provides. Baseline 3 is appropriate.
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 it lists database tables with schema and approximate row counts, plus name-pattern filtering. It specifies the verb (lista) and resource (tablas de la base de datos) with result details. It's differentiated from siblings by being table-specific, though it doesn't explicitly name sibling alternatives for contrast.
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 browsing tables/filtering by name pattern, and the sibling list shows alternatives like list_views and list_stored_procedures that target other object types. However, it doesn't explicitly state when to use this over get_table_definition or run_select_query, or when NOT to use it. The context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_triggersB
Lista los triggers, indicando la tabla a la que pertenecen y los eventos que disparan.
| Name | Required | Description | Default |
|---|---|---|---|
| table | No | ||
| schema | 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. The description states the tool 'lists' triggers, implying a read operation, but doesn't disclose how the optional parameters affect results, whether an empty result set behaves a certain way, what happens with invalid table/schema names, or any other behavioral traits.
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 concise sentence with no wasted words. It efficiently conveys the core purpose. Missing some useful details, but that's a completeness issue rather than a conciseness issue—the structure itself is appropriately tight.
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 listing tool with no output schema and no annotations, the description gives the essential purpose but omits parameter semantics entirely (0% coverage). A listing tool is relatively simple, so the description partially suffices, but the complete absence of param documentation is a notable gap for a tool with 2 undocumented params.
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 (table, schema) are completely undocumented. The description does not mention these parameters at all—it doesn't clarify that 'table' filters by trigger's table or that 'schema' scopes the search. With zero coverage and no param guidance in the description, the agent must guess what these parameters do.
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 what the tool does: list triggers, indicating the table they belong to and the events that fire them. It has a specific verb (list) and resource (triggers), and adds detail about what output includes (table and firing events). It doesn't explicitly differentiate from siblings, but siblings are mostly different object types (tables, views, stored procedures), so context partly distinguishes them.
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 listing triggers but provides no explicit when-to-use guidance or exclusions. With sibling tools like run_select_query and get_object_definition, the description doesn't clarify when to use list_triggers vs alternatives. No mention of what the optional table/schema parameters do for filtering, which is relevant usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_viewsC
Lista las vistas de la base de datos.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | ||
| namePattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided at all, the description carries the full burden of behavioral disclosure. It provides no information about whether this is a read-only operation, whether schema filtering is supported despite the schema parameter existing, what the returned view definitions contain, or if it follows the same behavior as sibling listing tools.
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 single-sentence description is concise and front-loaded in Spanish. There is no wasted text, but it errs on the side of under-specification rather than appropriate conciseness.
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 2 undocumented parameters, no annotations, no output schema, and multiple closely-related sibling tools, this description is inadequate. It does not explain return format, filtering behavior, parameter semantics, or relationship to sibling tools like list_tables.
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 for the two undocumented parameters (schema, namePattern). It fails to do so — neither parameter is mentioned in the description. The agent is left guessing what these parameters mean and how they filter results.
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 'Lista las vistas de la base de datos' (Lists the views of the database) states the verb and resource with reasonable clarity. However, it does not distinguish itself from sibling tools like list_tables or list_triggers which follow the same 'list X' pattern, and there's no mention of scope or filtering capabilities.
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 on when to use this tool versus alternatives. The siblings list includes list_tables, list_triggers, and list_stored_procedures which are directly comparable 'listing' tools; the description gives no exclusions or context on which scenario calls for views specifically. No mention of optional filtering via schema or namePattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_select_queryB
Ejecuta una consulta SELECT de solo lectura (máximo 500 filas). No se permite INSERT/UPDATE/DELETE/DDL/EXEC.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
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 does disclose the read-only nature and the row cap, which is valuable behavioral context. However, it doesn't describe the return format, pagination behavior, error handling, or what happens when query returns more than 500 rows (truncation? error?). For a query execution tool with zero annotation coverage, more disclosure would help.
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 compact — two concise sentences that convey purpose and constraints efficiently. Front-loaded with the verb+resource ('Ejecuta una consulta SELECT') followed by operational limits and exclusions. No wasted words, though it could add a sentence on return behavior without becoming bloated.
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 (query execution), no output schema, and zero annotation coverage, the description provides essential purpose and constraint info but omits behavioral details like return shape, truncation behavior, and any performance or connection considerations. It's adequate for basic use but incomplete for an agent needing to interpret results 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?
Schema description coverage is 0%, meaning the description must compensate for the undocumented 'query' parameter. The description states it's a SELECT SQL query with 500-row cap, which gives some guidance. However, it doesn't specify SQL dialect, whether it supports parameters/bind variables, multi-statement queries, or the expected structure (e.g., must it end with semicolon?). With a single param at 0% coverage, the description should be more explicit about the query parameter's constraints.
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 it executes SELECT queries (read-only) with a 500-row cap. It distinguishes from siblings by indicating it fires actual queries, which none of the sibling metadata-listing tools do. However, it lacks a specific resource/verb clarity that would differentiate it from other query tools, though within this sibling set it's distinct.
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 clearly states when it applies (SELECT read-only queries) and explicitly excludes what it may not be used for (INSERT/UPDATE/DELETE/DDL/EXEC), establishing clear constraints. It also specifies the 500-row limit which is operational guidance. The sibling context is implicitly clear since all siblings are metadata-listing tools, not query executors, so no exclusion reference is needed.
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.
8 tool updates
v1.0.0- First observed
get_object_definition - First observed
get_object_dependencies - First observed
get_table_definition - First observed
list_stored_procedures - First observed
list_tables - First observed
list_triggers - First observed
list_views - First observed
run_select_query
TDQS
Each tool targets a distinct resource type (tables, views, triggers, SPs) or action (list, get definition, get dependencies, run query). get_table_definition and get_object_definition are separated clearly for tables vs. code objects. No overlapping purposes.
All tool names follow a consistent verb_noun snake_case pattern: list_* for enumerating objects, get_* for retrieving definitions/dependencies, and run_select_query for queries. The naming is predictable and uniform.
With 8 tools, the server is well-scoped for its purpose: browsing database metadata and running read-only queries. Each tool earns its place and the count is neither too thin nor overwhelming.
The tool set covers the full read-only lifecycle: listing all object types, retrieving table schemas and code definitions, analyzing dependencies, and executing SELECT queries. There are no obvious gaps for the stated domain of database exploration.
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
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Related MCP Servers
- AlicenseAqualityDmaintenanceA read-only MCP server for SQL Server database introspection that enables Claude to explore and query databases via tools like listing objects and executing SELECT queries.201MIT
- AlicenseNot gradedqualityDmaintenanceRead-only SQL Server MCP server enabling safe database queries, table listing, and schema inspection with built-in security protections.MIT
- FlicenseAqualityDmaintenanceMCP server for connecting to SQL Server in readonly mode. Allows any MCP client to explore the schema and run SELECT queries against a SQL Server database.6-
- FlicenseAqualityCmaintenanceA read-only MCP server for browsing and querying SQL Server databases, providing tools to list schemas, tables, describe columns, and execute safe SELECT queries with validated parameters.15-
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/is-jvelez/mssql-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server