mssql-mcp
mssql-mcp
MCP-сервер для Microsoft SQL Server с правами только на чтение, использующий данные для подключения из AWS Secrets Manager во время вызова инструмента — с диска или из переменных окружения не считывается ничего, кроме самой ссылки на секрет.
Кроссплатформенность: это MCP-сервер на чистом JavaScript (без нативных зависимостей или ODBC), поэтому он работает одинаково в macOS, Linux и Windows через npx.
Настройка в .claude.json
{
"mcpServers": {
"my-db": {
"command": "npx",
"args": ["-y", "@dhipskind253/mssql-mcp"],
"env": {
"AWS_ACCOUNT_ID": "123456789012",
"SECRET_NAME": "my-aws-secret",
"AWS_REGION": "us-east-1",
"TRUST_SERVER_CERTIFICATE": "false"
}
}
}
}Переменная окружения | Обязательно | По умолчанию | Описание |
| да | — | Аккаунт AWS, в котором находится секрет. Объединяется с именем и регионом в полный ARN. |
| да | — | Имя секрета в Secrets Manager (суффикс ARN не требуется). |
| да | — | Регион AWS, в котором находится секрет (например, |
| нет |
| Пропуск проверки TLS-сертификата SQL Server. Принимает |
Стандартные переменные окружения AWS SDK (AWS_PROFILE, AWS_ACCESS_KEY_ID и т. д.) учитываются через стандартную цепочку провайдеров учетных данных. Большинству пользователей достаточно выполнить aws sso login.
Related MCP server: MSSQL MCP Python Server
Требуемый JSON секрета
Значение секрета должно быть JSON-документом как минимум со следующими полями:
{
"host": "myserver.database.windows.net",
"port": 1433,
"database": "mydb",
"username": "ro_user",
"password": "..."
}database также может быть указано как dbname — это имя поля, которое AWS использует в своем встроенном шаблоне секретов для учетных данных RDS. Если присутствуют оба, приоритет у database.
Необязательные поля (указаны значения по умолчанию):
Поле | По умолчанию | Примечания |
|
| |
|
| TLS к серверу. |
Доверие к TLS-сертификату не считывается из секрета — вместо этого установите
TRUST_SERVER_CERTIFICATEв блокеenvMCP-сервера. Любое полеtrustServerCertificateв JSON секрета игнорируется.
Разработано с правами только на чтение
Этот сервер не может вставлять, обновлять или удалять данные. Это обеспечивается двумя уровнями защиты:
Инструмент
run_selectлексически отклоняет все, что не является одиночным операторомSELECTилиWITH(CTE) — включаяINSERT,UPDATE,DELETE,EXEC,MERGE,DROP,ALTER,SELECT INTOи т. д.Ни один другой инструмент не выполняет SQL-запросы на запись.
get_procedure_definitionвозвращает исходный код процедуры — он не выполняет процедуры.
Примечание: рассматривайте лексическую проверку как UX, а не как границу безопасности. В качестве любезности к самому себе в будущем, настройте учетные данные, которые вы помещаете в Secrets Manager, как логин базы данных только для чтения — только с правами
SELECTиVIEW DEFINITION. Таким образом, случайная запись (или будущая ошибка здесь) будет отклонена самим SQL Server.
Обновление учетных данных AWS без перезапуска
Поскольку сервер использует стандартную цепочку учетных данных AWS, истекший сеанс SSO можно восстановить без перезапуска Claude или MCP-сервера:
Выполните
aws sso loginв любом терминале.Попросите Claude вызвать инструмент
refresh_secret.Продолжайте работу.
Если вызов инструмента завершится ошибкой из-за аутентификации AWS, сообщение об ошибке точно укажет на это и предложит выполнить те же действия. Ошибки помечены стабильными префиксами:
Префикс | Значение |
| Сеанс SSO истек или учетные данные недоступны. |
| У субъекта нет прав |
| Несоответствие имени секрета / аккаунта / региона. |
| JSON секрета содержит ошибки или пропущены поля. |
| Не удалось связаться с экземпляром SQL Server. |
| SQL Server вернул ошибку при выполнении запроса. |
| Отправленный запрос нарушил правила «только чтение». |
Инструменты
Инструмент | Назначение |
| Пользовательские схемы в базе данных. |
| Таблицы, опционально отфильтрованные по схеме. |
| Столбцы, типы, возможность NULL, identity, PK, значения по умолчанию. |
| Индексы таблицы (одна строка на индекс/столбец). |
| Исходящие внешние ключи таблицы. |
| Представления, опционально отфильтрованные по схеме. |
| SQL-код представления. |
| Хранимые процедуры, опционально отфильтрованные по схеме. |
| SQL-код процедуры (не выполняет ее). |
|
|
| Одиночный SELECT/CTE, ограниченный |
| Повторное получение секрета и переподключение. |
Локальная разработка
npm install
npm run build
# point your .claude.json command at the local build:
# "command": "node",
# "args": ["/absolute/path/to/mssql-mcp/dist/index.js"]Available Tools
12 toolsdescribe_tableA
Return columns, data types, nullability, identity, primary key, and defaults for a table.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | Schema name (e.g. "dbo"). | |
| table | Yes | Table name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description bears full burden. It explicitly lists the returned information (columns, data types, nullability, identity, primary key, defaults), which is good. However, it does not disclose potential error cases, permission requirements, or if the result is a single object or list.
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 captures the tool's purpose without waste. It is front-loaded with the key action and output.
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 lack of output schema, the description adequately covers what the tool returns. It lists all key aspects of a table schema. Minor omission: it doesn't specify the output format (e.g., array of objects) or order.
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?
Both parameters have clear descriptions in the schema (schema name with example, table name). The description adds no extra meaning beyond these, so baseline of 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 the tool returns columns, data types, nullability, identity, primary key, and defaults for a table. It distinguishes from siblings like list_tables (listing tables) and sample_rows (sampling data), making the purpose unambiguous.
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. There is no mention of prerequisites, exclusions, or other tools like list_foreign_keys for more detailed schema info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_procedure_definitionA
Return the SQL definition of a stored procedure. (Definitions are read-only — this server cannot EXEC procedures.)
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | ||
| procedure | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and proactively states the tool is read-only and that the server cannot execute procedures. This discloses behavioral traits beyond the schema, though it could mention error handling or permissions.
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 two sentences, no filler, and front-loads the core action. Every sentence adds value, earning a top score.
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 description lacks details about the return format (e.g., a string with the SQL definition) and does not address error cases or behavior when the procedure does not exist. Given no output schema, more completeness is warranted.
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?
Despite 0% schema description coverage, the description adds no parameter-level detail beyond the parameter names. It does not explain expected formats, constraints, or examples for 'schema' and 'procedure', leaving the agent with minimal guidance.
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 uses a specific verb ('Return the SQL definition') and resource ('stored procedure'), and it clearly distinguishes from sibling tools like 'get_view_definition' by specifying 'stored procedure' and noting the server's limitation.
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 explicitly states that definitions are read-only and that the server cannot execute procedures, providing clear context for when to use this tool. However, it does not offer an alternative for when execution is needed, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_view_definitionC
Return the SQL definition of a view.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | ||
| view | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It identifies the operation as read-only but omits permissions, error handling, or side effects.
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 unnecessary words, achieving high efficiency.
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?
With no annotations, no output schema, and zero param descriptions, the tool is severely underdocumented. The description covers only the bare minimum and fails to provide enough information for correct 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?
Schema coverage is 0%, and the description does not explain or add meaning to the 'schema' and 'view' parameters beyond their 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 tool returns the SQL definition of a view, using a specific verb and resource. It distinguishes itself from siblings like describe_table and list_views.
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 like describe_table or get_procedure_definition. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foreign_keysC
List foreign keys originating from a table.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | ||
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether it returns only referencing foreign keys, permission requirements, or output format. The description is too minimal for a tool without annotations.
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 sentence, which is concise, but it could include more detail without becoming verbose. It is adequately structured but lacks substance.
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 no output schema and no annotations, the description should explain return values and any limitations. It does not, making it incomplete for an agent to fully understand tool behavior.
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 does not explain the two required parameters (schema and table) beyond what the schema provides. With 0% schema description coverage, the description should compensate, but it adds no additional meaning.
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 'List foreign keys originating from a table', which is a specific verb (list) and resource (foreign keys from a table). It distinguishes from siblings like describe_table or list_indexes which have different purposes.
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 like list_indexes or describe_table. No exclusions or usage context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indexesB
List indexes on a table, one row per (index, column).
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | ||
| table | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses the output format (rows per index-column pair) but does not explicitly state it's read-only, error handling, or performance implications. Adequate but not detailed.
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 that front-loads the purpose. It is efficient but could include slight expansions without being verbose.
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 tool with two parameters and no output schema, the description covers the basic purpose and output format. However, it lacks usage context, error conditions, and full specification of return columns, making it minimally sufficient.
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%, and the description does not explain the parameters 'schema' and 'table'. It relies on parameter names being self-explanatory, providing no additional meaning beyond their 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 tool lists indexes on a table and specifies the output format ('one row per (index, column)'). The verb 'list' and resource 'indexes on a table' are explicit, and it distinguishes from sibling tools like describe_table or list_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?
No guidance is provided on when to use this tool versus alternatives, no prerequisites, and no exclusions. The description only states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_proceduresB
List stored procedures, optionally filtered by schema.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behaviors. It only states basic functionality and omits details like read-only nature, potential cost, pagination, or response format.
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?
Very short and front-loaded, but perhaps too brief. It efficiently conveys the core functionality without extra 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 tool with one optional parameter, the description is adequate but lacks details on output format, sorting, or limits. The absence of an output schema heightens the need for more description.
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, the description adds minimal meaning by mentioning 'optionally filtered by schema', but doesn't explain the parameter's format or accepted values beyond what the type implies.
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 lists stored procedures with optional schema filtering. It distinguishes itself from sibling list tools by specifying the resource type (procedures).
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 vs alternative tools like get_procedure_definition or other list tools. The description fails to provide context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schemasA
List user-defined schemas in the configured database.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 only states 'list,' implying a read-only operation, but does not disclose any permissions requirements, error conditions, or other behavioral traits. For a simple listing, this is adequate but not rich.
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 sentence that is perfectly concise and front-loaded. Every word is necessary and contributes to clarity.
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 parameterless list tool, the description covers its purpose and scope. It does not specify the return format, but with no output schema, it is mostly sufficient. Could mention if it returns schema names or full objects.
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 input schema has no parameters (0 params, 100% coverage). Per guidelines, baseline is 4. The description adds no parameter semantics since none exist.
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 (list), the resource (user-defined schemas), and the scope (configured database). It distinguishes from sibling tools like list_tables and list_views by specifying schemas.
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 explicit when-to-use or when-not-to-use guidance is given. The usage is implied by the tool's name and description, but alternatives are not mentioned. However, the context of listing schemas is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesB
List tables, optionally filtered by schema.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Optional schema name. If omitted, returns tables from all schemas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only states the basic operation without disclosing whether the tool is read-only, any side effects, or behavior beyond listing. No behavioral traits beyond the action are mentioned.
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, front-loaded sentence that efficiently conveys the core purpose. It is appropriately sized for the tool's simplicity, though it could include more detail without being verbose.
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 has one optional parameter and no output schema, the description is minimal but sufficient for basic understanding. However, it does not hint at the output format (e.g., list of table names), which would improve completeness. It lacks mention of permissions or other contextual details.
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% (the only parameter is described). The description adds no new meaning beyond the schema's description of the 'schema' parameter. It restates the optional filter, so it is adequate but not additive.
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 ('List tables') and resource, and the optional filtering by schema distinguishes it from siblings like 'list_schemas' and 'describe_table'.
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 implicitly tells when to use this tool (to list tables, optionally filtered by schema) but does not provide explicit guidance on when not to use it or alternatives. It lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_viewsC
List views, optionally filtered by schema.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully convey behavioral traits. It merely states 'List views' without clarifying return format, safety (read-only implied but not explicit), auth requirements, or error handling.
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 (one sentence) and easy to parse. However, it could be slightly more structured by front-loading the resource and then the filter option.
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 simplicity (one optional param, no output schema), the description is incomplete: it does not specify what information is returned (e.g., view names, definitions) or how the schema filter works.
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 input schema has 0% description coverage for the 'schema' parameter, and the description only says 'optionally filtered by schema' without explaining the expected format (e.g., exact name, pattern, or whether it's required).
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 lists views with an optional schema filter. However, it does not differentiate from sibling listing tools like list_tables or list_schemas, which follow similar patterns.
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 such as describe_table or get_view_definition. The description lacks context about prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_secretA
Re-fetch the database credentials from AWS Secrets Manager and reconnect. Call this after running aws sso login to recover from an expired session, or after the secret has been rotated.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the core action (re-fetch and reconnect) but does not detail specific side effects like connection interruptions or state changes. However, the simplicity of the tool makes this 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?
Two concise sentences with no extraneous information. Key points are front-loaded.
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 zero-parameter tool with no output schema, the description sufficiently explains the purpose, triggers, and expected behavior.
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 tool has zero parameters, so baseline is 4. The description adds no parameter-specific info but is not needed.
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 specifies the verb 'Re-fetch' and the resource 'database credentials from AWS Secrets Manager and reconnect'. It distinguishes itself from sibling tools which are read-only or schema-focused, as this is the only tool that manages credentials.
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 explicit when-to-use scenarios: after running `aws sso login` (to recover from expired session) or after secret rotation. This guides the agent away from unnecessary calls during normal operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_selectA
Run a single SELECT or WITH (CTE) statement. DML/DDL/EXEC are rejected before reaching the server. Results are capped at max_rows (default 100, hard max 1000).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A single SELECT or WITH statement. | |
| max_rows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: result capping (default 100, hard max 1000) and rejection of non-SELECT/WITH statements. It does not mention auth or rate limits, but these are not critical for a read-only query.
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 two sentences, front-loaded with the main purpose, then constraints. 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?
The description covers key aspects for a query tool but does not mention the output format (e.g., row set, metadata). Given siblings are metadata tools, this is minor.
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 value beyond the schema by clarifying max_rows default and limit. The query parameter is sufficiently explained in the schema, and the description reinforces it.
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 that the tool runs a SELECT or WITH statement, distinguishing it from sibling tools that query metadata (e.g., list_tables, describe_table).
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 explicitly states that DML/DDL/EXEC are rejected, guiding the agent away from invalid uses. However, it does not mention alternative tools for other query types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_rowsA
Return up to N rows from a table (SELECT TOP N *). Default 10, max 100.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | ||
| table | Yes | ||
| n | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only states it returns rows with a limit. It does not disclose ordering (or lack thereof), whether it's read-only (though implied), or any performance 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 concise sentence with a parenthetical clarification. Every word adds value, no redundancy.
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 no output schema and no annotations, the description provides the core purpose and parameter constraints but omits details like whether the sample is random or the output columns.
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 has 0% description coverage, so the description compensates by detailing the 'n' parameter's default and max. However, 'schema' and 'table' get no additional meaning beyond 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 clearly states the tool returns rows from a table, using 'SELECT TOP N *', with exact default and max limits. This distinguishes it from sibling tools like describe_table or run_select.
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 sampling rows for quick preview, but does not explicitly compare to alternatives like run_select or mention when not to use it.
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.
12 tool updates
v0.1.0- First observed
describe_table - First observed
get_procedure_definition - First observed
get_view_definition - First observed
list_foreign_keys - First observed
list_indexes - First observed
list_procedures - First observed
list_schemas - First observed
list_tables - First observed
list_views - First observed
refresh_secret - First observed
run_select - First observed
sample_rows
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose: listing metadata (tables, views, schemas, procedures, indexes, foreign keys), retrieving definitions, running SELECT queries, sampling rows, and refreshing credentials. No two tools can be confused.
All tool names follow a consistent verb_noun pattern in snake_case, e.g., 'describe_table', 'list_procedures', 'run_select'. There are no deviations or mixed conventions.
12 tools is appropriate for a database exploration and querying server. The set covers all common operations without being excessive or sparse.
The tool surface is nearly complete for read-only database interaction: metadata listing, definition retrieval, SELECT querying, and sampling. Minor gaps include absence of database-level listing or system views, but the core use case is well-covered.
Maintenance
Related MCP Connectors
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Hosted SQL Server MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceRead-only SQL Server MCP server enabling safe database queries, table listing, and schema inspection with built-in security protections.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for safely exposing SQL Server database capabilities to LLM clients, with read-only mode, security features, and observability.29MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Microsoft SQL Server enabling safe read-only queries, schema discovery, and natural-language query via LangChain.MIT
- AlicenseAqualityCmaintenanceSecurity-first, read-only MCP server for Microsoft SQL Server, enabling safe natural-language querying of databases.54 npmMIT