workbench-mcp
workbench-mcp
Локальный MCP-сервер на Python для интерактивного исследования данных PostgreSQL, интеграции API и автоматизации в системах Fedora/Linux.
Обзор
Версия 1 включает:
Настройку виртуального окружения Python для систем Fedora/Linux
Подключение к PostgreSQL 18, настроенное через файл
.envИнструменты MCP для:
Обнаружения таблиц, столбцов и структуры схемы
Запуска предварительного просмотра запросов только для чтения
Выполнения защищенных SQL-пакетов с поддержкой временных таблиц
Вызова хранимых функций и процедур PostgreSQL
Доступа к внешним API через полные URL-запросы
Выполнения bash-скриптов, доступных в
PATH
Обеспечение безопасности: постоянные изменения схемы и данных заблокированы
Поддержку рабочих процессов с временными таблицами в рамках сессии внутри SQL-пакетов
Related MCP server: PostgreSQL MCP Server
Настройка в Fedora / Linux
Начните с установки необходимых системных пакетов:
sudo dnf install -y python3 python3-pip nodejs npmТребуется Python 3.12 или новее. Используйте pyenv или аналогичный инструмент, если управляете несколькими версиями.
Настройка виртуального окружения
Из корневой директории проекта создайте и активируйте виртуальное окружение Python:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e .Переменные окружения
Скопируйте пример конфигурации и заполните данные для подключения к PostgreSQL:
cp .env.example .envОбязательно:
DB_HOST— имя хоста сервера PostgreSQLDB_NAME— имя базы данныхDB_USER— имя пользователя базы данныхDB_PASSWORD— пароль пользователя базы данных
Опционально (настройка):
DB_PORT— порт подключения (по умолчанию: 5432)DB_SSLMODE— режим SSL (по умолчанию: prefer)DB_APPLICATION_NAME— идентификатор приложенияDB_QUERY_TIMEOUT_SECONDS— таймаут запроса (по умолчанию: 30)DB_MAX_ROWS— максимальное количество строк в наборе результатов (по умолчанию: 100)DB_MAX_RESULT_SETS— максимальное количество наборов результатов в пакете (по умолчанию: 5)DB_OBJECT_PREVIEW_CHARS— максимальная длина предварительного просмотра определения (по умолчанию: 4000)
Пример локальной разработки:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=app_dev
DB_USER=app_user
DB_PASSWORD=your-secure-password
DB_SSLMODE=preferОпционально: Настройка HTTP-запросов
Инструмент HTTP принимает полный URL для каждого вызова и не требует настройки профиля API.
Поддерживаемые настройки окружения:
Переменная | Назначение |
| Таймаут HTTP-запроса |
| Максимальное количество байт ответа, возвращаемых HTTP-инструментами |
|
|
| JWT по умолчанию, используемый, когда вызов инструмента не передает |
| Заголовок часового пояса, передаваемый как |
Пример формы вызова:
url: https://localhost:44331/api/breakouts/filter/1871161/dd-table?ParameterSetId=231022
method: GETДля аутентифицированных вызовов установите API_BEARER_TOKEN в .env (или переменной окружения процесса). HTTP-инструменты автоматически используют его, если вызывающий не передает свой собственный jwt_token.
Обработка авторизации
HTTP-инструменты поддерживают два источника авторизации:
jwt_token, переданный в вызове инструментаAPI_BEARER_TOKENиз.envили окружения процесса
Приоритет
Если предоставлен
jwt_token, этот токен передается какAuthorization: Bearer <jwt_token>.Если
jwt_tokenопущен или пуст, сервер используетAPI_BEARER_TOKEN.Если ни одно из значений не присутствует, запрос отправляется без заголовка
Authorization.
Важное правило для агентов
Не помещайте токен bearer внутрь headers.Authorization.
MCP-сервер удаляет Authorization из headers и принимает авторизацию только через выделенное поле jwt_token.
Это предотвращает случайные конфликты заголовков и делает приоритет токенов явным.
Пример: использование токена сервера по умолчанию
{
"url": "https://localhost:5001/api/v1/sales/my-sales"
}Пример: передача собственного токена вызывающего
{
"url": "https://localhost:5001/api/v1/sales/my-sales",
"jwt_token": "eyJhbGciOi..."
}Пример: передача токена вызывающего с дополнительными заголовками
{
"url": "https://localhost:5001/api/v1/sales/my-sales",
"jwt_token": "eyJhbGciOi...",
"headers": {
"Accept": "application/json"
}
}То же поле jwt_token доступно в http_get, http_head, http_post, http_put, http_patch и http_delete.
Сессионная авторизация
Вместо передачи jwt_token для каждого вызова, агенты могут один раз получить JWT в рамках сессии, и каждый вызов HTTP-инструмента будет автоматически использовать его до конца сессии.
Как это работает
Агент вызывает
auth_start_sessionс email целевого пользователя.MCP-сервер обменивает общий секрет + email на JWT с ограниченной областью действия от бэкенд-брокера (
POST /api/v1/mcp/exchange).Токен кэшируется в памяти процесса.
Каждый последующий вызов HTTP-инструмента, в котором опущен
jwt_token, автоматически использует сессионный токен.Агент может проверить сессию с помощью
auth_status, переключить пользователей с помощьюauth_switch_userили очистить её с помощьюauth_clear_session.
Приоритет токенов (от высшего к низшему)
Приоритет | Источник |
1 |
|
2 | Сессионный токен, установленный |
3 | Переменная окружения |
Обязательные переменные окружения
Переменная | Назначение |
| Полный URL конечной точки бэкенд-брокера |
| Общий секрет, отправляемый в заголовке |
| Обновление, когда остается менее N секунд (по умолчанию: 60) |
Инструменты сессионной авторизации
Инструмент | Описание |
| Получить сессионный токен для указанного email |
| Переключить активную сессию на другого пользователя (аналогично start) |
| Проверить текущую сессию (email, срок действия, необходимость обновления) |
| Очистить кэшированный сессионный токен из памяти |
См. docs/SESSION_AUTH.md для получения полной справочной информации для агентов.
Запуск локально
После активации виртуального окружения и установки зависимостей запустите MCP-сервер одной из команд:
workbench-mcppython -m workbench_mcp.serverИнспектор MCP
Для локальной разработки и отладки MCP, Инспектор MCP предоставляет быстрый цикл ручного тестирования:
npx @modelcontextprotocol/inspector .venv/bin/python -m workbench_mcp.serverЧтобы запустить MCP-сервер под debugpy для отладки с точками останова в Инспекторе:
npx @modelcontextprotocol/inspector .venv/bin/python -m debugpy --listen 127.0.0.1:5678 -m workbench_mcp.serverПосле запуска откройте интерфейс Инспектора, подключитесь через STDIO и протестируйте инструменты, такие как health, describe_object и exec_proc_preview.
Точки останова (debugpy): Используйте порт 5678 для отладчика, а не 6274 (6274 — это только веб-интерфейс Инспектора). Пошаговый рабочий процесс и описание «что было не так раньше» находятся в docs/DEBUG_MCP.md.
Настройка VS Code
Чтобы зарегистрировать локальный MCP-сервер в VS Code, добавьте запись в файл конфигурации MCP рабочей области:
Файл рабочей области:
.vscode/mcp.json
Пример конфигурации:
{
"servers": {
"workbench-mcp": {
"type": "stdio",
"command": "/absolute/path/to/workbench-mcp/.venv/bin/python",
"args": ["-m", "workbench_mcp.server"]
}
}
}Замените путь к команде на локальный путь к репозиторию вашего виртуального окружения Python.
Секреты и значения окружения
Вы можете предоставить значения окружения в одном из двух мест:
workbench-mcp/.envenvв.vscode/mcp.json— VS Code внедряет их в процесс MCP-сервера.
Приоритет: окружение процесса (включая .vscode/mcp.json → env) переопределяет значения из .env для того же ключа.
Пример с настройкой HTTP в VS Code:
{
"servers": {
"workbench-mcp": {
"type": "stdio",
"command": "/absolute/path/to/workbench-mcp/.venv/bin/python",
"args": ["-m", "workbench_mcp.server"],
"env": {
"API_TIMEOUT_SECONDS": "30",
"API_MAX_RESPONSE_BYTES": "2097152",
"API_VERIFY_SSL": "false"
}
}
}
}Не фиксируйте реальные токены в git. Предпочитайте локальную конфигурацию рабочей области или опустите env и используйте .env (который должен оставаться вне git).
Если другие MCP-серверы уже настроены, добавьте workbench-mcp внутрь существующего объекта servers вместо замены всего файла.
После сохранения .vscode/mcp.json перезагрузите VS Code или обновите MCP-серверы, чтобы новый сервер был обнаружен. После загрузки сервера запустите инструмент health перед тестированием процедур базы данных.
Начальные инструменты
healthdescribe_objectlist_tables_and_columnspreview_queryexecute_readonly_sqlexec_proc_previewexec_function_previewinsert_rowinsert_rowshttp_gethttp_headhttp_posthttp_puthttp_patchhttp_deleteauth_start_sessionauth_switch_userauth_statusauth_clear_sessionexecute_path_bash_script(имя скрипта разрешается черезPATH)
Модель безопасности
Постоянные DDL и DML заблокированы в ad-hoc пакетах PostgreSQL
Разрешена запись только во временные таблицы, и только для временных таблиц, созданных в текущем пакете
preview_queryразрешает только операторыSELECTи чтение на основе CTEexec_proc_previewможет выполнять процедуры и функции PostgreSQL; перегруженные подпрограммы должны передаваться с сигнатурой, напримерpublic.my_func(integer, text)execute_path_bash_scriptпринимает только имена скриптов (не пути), разрешает их черезPATHи выполняет черезbash
Рекомендуемые первые проверки
После настройки .env типичный процесс проверки выглядит так:
Опишите функцию, процедуру, таблицу или представление для проверки.
Просмотрите вспомогательную конфигурацию или справочные данные, необходимые для понимания этого объекта.
Запустите
exec_proc_preview,preview_queryилиexecute_readonly_sqlс известными входными данными.Сравните возвращенную форму с функцией, исследованием или сценарием отладки, который оценивается.
Пример выполнения функции
Для позиционных вызовов функций PostgreSQL используйте exec_function_preview.
Передавайте массивы PostgreSQL как обычные списки JSON.
Пример SQL-цели:
select * from sales."Fn_GetSalesChamps"(2, 2025, array[1,2,5,6,7,8,9,10,11,12,15,16,18,19], 5);Эквивалентный ввод инструмента MCP:
{
"function_name": "sales.\"Fn_GetSalesChamps\"",
"parameters": [2, 2025, [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 18, 19], 5]
}Примеры вставки
Вставка одной строки:
{
"table_name": "sales.orders",
"row": {
"customer_id": 10,
"status": "new"
},
"returning_columns": ["order_id"]
}Пакетная вставка:
{
"table_name": "sales.orders",
"rows": [
{"customer_id": 10, "status": "new"},
{"customer_id": 11, "status": "pending"}
]
}Available Tools
19 toolsauth_clear_sessionA
Clear the active session token from memory.
After this call HTTP tools will fall back to API_BEARER_TOKEN (if
configured) or make unauthenticated requests.
Returns
dict
{"ok": True, "message": "Session cleared."}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 effectively discloses key behavioral traits: it's a destructive operation (clearing session token), it affects subsequent HTTP tool behavior (fallback authentication), and it returns a specific success response. It doesn't mention error cases or side effects, but covers the core behavior well.
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 perfectly front-loaded with the core purpose in the first sentence. Every subsequent sentence adds essential information about consequences and return values without any wasted words. The structure is logical and efficient.
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 (0 parameters, no annotations, but has output schema), the description is complete. It explains what the tool does, its effect on system state, and the return format. The output schema existence means the description doesn't need to detail return structure, which it appropriately references.
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 0 parameters with 100% schema coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's effect and return value.
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 specific action ('Clear the active session token from memory') and the resource affected ('session token'). It distinguishes this tool from its siblings (like auth_start_session or auth_status) by focusing on session termination rather than creation or status checking.
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 clear context about when to use this tool: to remove the active session token. It implies usage when authentication should revert to API_BEARER_TOKEN or unauthenticated requests. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_start_sessionA
Acquire a session-scoped JWT for email from the backend broker.
After a successful call every HTTP tool call in this session will
automatically use the returned token (unless the tool call provides
its own jwt_token).
Parameters
email: The user whose identity the MCP session will impersonate. reason: Optional free-text description of why this session is needed. Stored in the JWT claims for audit purposes.
Returns
dict
ok=True with email, display_name, user_name,
store on success; ok=False with error on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 effectively describes the tool's behavior: it acquires a JWT, establishes session-wide authentication for HTTP tools, and returns success/failure results. However, it doesn't mention potential rate limits, error conditions beyond basic failure, or what happens if called multiple times in a session. Still, it provides substantial behavioral context beyond basic purpose.
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 well-structured and appropriately sized. It begins with the core purpose, explains the behavioral impact, then provides clear parameter documentation and return value details. Every sentence earns its place, with no redundant information. The parameter and return sections are clearly labeled and informative.
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 complexity (authentication/session management), no annotations, and the presence of an output schema (implied by the Returns section), the description is remarkably complete. It covers purpose, usage context, parameters, return values, and behavioral consequences. The output schema information in the Returns section means the description doesn't need to explain return format 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?
With 0% schema description coverage, the description fully compensates by explaining both parameters. It clearly defines 'email' as 'The user whose identity the MCP session will impersonate' and 'reason' as 'Optional free-text description of why this session is needed. Stored in the JWT claims for audit purposes.' This adds crucial semantic meaning that the bare schema lacks.
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: 'Acquire a session-scoped JWT for *email* from the backend broker.' This specifies both the action (acquire) and the resource (session-scoped JWT), distinguishing it from sibling tools like auth_clear_session (which ends sessions) and auth_status (which checks session state). The description goes beyond just restating the name/title.
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 guidance on when to use this tool: 'After a successful call every HTTP tool call in this session will automatically use the returned token (unless the tool call provides its own ``jwt_token``).' This explains the tool's role in establishing authentication for subsequent operations, making it clear this should be used at session start rather than for individual HTTP calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_statusA
Return the current session status without exposing the raw token.
Returns
dict
active=False when no session is set; otherwise active=True
with email, display_name, expires_in_seconds, and
needs_refresh.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it's a read-only operation (implied by 'Return'), it protects sensitive data ('without exposing the raw token'), and it describes the return structure in detail. It doesn't mention rate limits, caching behavior, or error conditions, but provides substantial behavioral context for a status-checking 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?
The description is perfectly front-loaded with the core purpose in the first sentence, followed by a clear Returns section that documents the output structure. Every sentence earns its place - the first establishes purpose and security boundary, the second documents return values. No wasted words or 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 this is a simple status-checking tool with 0 parameters, 100% schema coverage, and an output schema (implied by the detailed Returns section), the description is complete. It explains what the tool does, what it returns, and important behavioral constraints (not exposing tokens). For this level of complexity, no additional information is needed.
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 0 parameters with 100% schema description coverage, so the baseline would be 4 even with no parameter information in the description. The description correctly doesn't waste space discussing non-existent parameters, which is appropriate for this parameterless tool.
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 with specific verb ('Return') and resource ('current session status'), and distinguishes it from siblings by emphasizing it doesn't expose the raw token. It explicitly differentiates from auth_clear_session, auth_start_session, and auth_switch_user by focusing on status checking rather than session management.
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 clear context for when to use this tool ('Return the current session status without exposing the raw token'), which implicitly suggests it's for checking authentication state rather than modifying it. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools for different authentication needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_switch_userA
Switch the active session to a different user.
Equivalent to calling auth_start_session — provided as a semantic
alias when the intent is to change the active user rather than start a
fresh session.
Parameters
email: The new user to impersonate. reason: Optional free-text description of why the switch is needed.
Returns
dict
Same shape as auth_start_session.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It states this is a session-switching operation (implying mutation/state change) and mentions it's equivalent to auth_start_session, but doesn't disclose authentication requirements, permission levels, side effects, or error conditions. It provides some context about semantic intent but lacks behavioral details needed for a mutation 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?
The description is well-structured with clear sections (purpose, equivalence statement, parameters, returns) and appropriately sized. Every sentence adds value, though the parameter section formatting with dashes is slightly verbose. The information is front-loaded with the core purpose stated first.
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 session mutation tool with no annotations but an output schema, the description provides good coverage: clear purpose, usage guidance, parameter semantics, and return value reference. It lacks details about authentication requirements and error cases, but the output schema reduces the need to describe return values explicitly.
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 compensates well by explaining both parameters: 'email' as 'The new user to impersonate' and 'reason' as 'Optional free-text description of why the switch is needed.' This adds meaningful context beyond the bare schema, though it doesn't specify email format constraints or reason length limits.
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 specific action ('Switch the active session') and resource ('to a different user'), distinguishing it from siblings like auth_start_session (which it mentions as equivalent but semantically different) and auth_clear_session/auth_status. It explicitly defines the intent as changing the active user rather than starting fresh.
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 guidance on when to use this tool vs alternatives: 'when the intent is to change the active user rather than start a fresh session' and directly references auth_start_session as an equivalent alternative with different semantics. This clearly distinguishes usage contexts between the two tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_objectB
Retrieve structural details, parameters, and definition for a database object.
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 of behavioral disclosure. It states 'Retrieve', implying a read-only operation, but does not specify permissions, rate limits, error handling, or what 'structural details' entail. This leaves significant gaps in understanding the tool's behavior and constraints.
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 key action and resource without unnecessary words. It earns its place by clearly stating the tool's purpose in a compact form.
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 complexity (a read operation with 1 parameter) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and low schema coverage, it lacks details on behavior and parameters, making it incomplete for optimal agent 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 input schema has 1 parameter with 0% description coverage, so the schema provides no semantic information. The description adds value by implying that 'object_name' refers to a 'database object', but it does not detail format, examples, or constraints. This partial compensation aligns with the baseline for 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 verb 'Retrieve' and the resource 'structural details, parameters, and definition for a database object', making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'list_tables_and_columns' or 'preview_query', which might also retrieve database information, so it falls short of 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 provides no guidance on when to use this tool versus alternatives, such as 'list_tables_and_columns' or 'preview_query'. It lacks explicit context, prerequisites, or exclusions, leaving the agent with minimal usage direction beyond the basic purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exec_function_previewA
Execute a PostgreSQL function with positional parameters and return preview rows.
Use this tool for function calls such as
sales."Fn_GetSalesChamps"(2, 2025, ARRAY[1,2,5], 5).
Pass arguments in positional order using JSON-compatible values:
scalars:
2,2025,5arrays:
[1, 2, 5]null:
null
PostgreSQL array parameters should be passed as normal lists; psycopg adapts them to PostgreSQL arrays automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| function_name | Yes | ||
| parameters | No | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses that the tool executes PostgreSQL functions and returns preview rows, but doesn't mention important behavioral aspects like error handling, transaction behavior, permission requirements, or rate limits. The description adds some value with the parameter format guidance but 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 efficiently structured with a clear purpose statement upfront, followed by usage guidance and detailed parameter format examples. Every sentence adds value - no redundant information. The formatting with bullet points enhances readability without wasting space.
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 executing database functions with 3 parameters and 0% schema coverage, the description does an excellent job explaining parameter semantics. However, with no annotations and a mutation tool (function execution), it should ideally mention more about behavioral aspects like side effects or error handling. The existence of an output schema reduces the need to describe return values.
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 fully compensates by explaining all three parameters: 'function_name' (shown in example), 'parameters' (detailed format guidance with examples for scalars, arrays, and null), and 'max_rows' (implied by 'preview rows' and 'max_rows' parameter name). It provides crucial semantic information about PostgreSQL array handling that isn't 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 clearly states the specific action ('Execute a PostgreSQL function with positional parameters and return preview rows') and distinguishes it from siblings like 'exec_proc_preview' (for procedures) and 'execute_readonly_sql' (for SQL queries). It provides a concrete example showing the exact type of operation.
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 clear context for when to use this tool ('for function calls such as...'), but doesn't explicitly state when NOT to use it or mention alternatives like 'exec_proc_preview' for stored procedures. The example helps clarify the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exec_proc_previewB
Execute PostgreSQL functions or procedures with optional parameters and result limiting.
| Name | Required | Description | Default |
|---|---|---|---|
| proc_name | Yes | ||
| parameters | No | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 'Execute' which implies a write operation, but doesn't clarify if this is read-only, destructive, requires authentication, has rate limits, or what happens on execution (e.g., side effects, transaction handling). For a database execution tool with zero annotation coverage, this leaves significant behavioral 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 a single, efficient sentence that front-loads the core purpose ('Execute PostgreSQL functions or procedures') and adds key capabilities ('with optional parameters and result limiting'). Every word earns its place with no redundancy or 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 the tool's complexity (executing database procedures with parameters), no annotations, and an output schema (which handles return values), the description is minimally adequate. It covers the basic action and parameters but lacks critical context like safety, authentication needs, or differentiation from siblings, making it incomplete for confident 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 description coverage is 0%, so the description must compensate. It mentions 'optional parameters and result limiting', which loosely maps to the 'parameters' and 'max_rows' parameters, adding some meaning beyond the bare schema. However, it doesn't explain parameter formats (e.g., how parameters map to SQL), constraints, or provide examples, leaving the schema to do most of the work.
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 PostgreSQL functions or procedures') and the resource ('PostgreSQL functions or procedures'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'exec_function_preview' or 'execute_readonly_sql', leaving some ambiguity about when to choose this tool over those alternatives.
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 'exec_function_preview' or 'execute_readonly_sql'. It mentions optional parameters and result limiting, but this is more about capabilities than usage context. There are no explicit when/when-not instructions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_readonly_sqlC
Execute read-only SQL batches with support for temporary tables within the session.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 of behavioral disclosure. It states the tool is 'read-only' and supports 'temporary tables within the session', which hints at safety and scope. However, it lacks critical details: whether it requires an active session, what happens on errors, rate limits, or output format. For a SQL execution 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 core functionality ('Execute read-only SQL batches') and adds a key feature ('with support for temporary tables within the session'). Every word earns its place, with no redundancy or fluff, 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 complexity (SQL execution with parameters), lack of annotations, and 0% schema description coverage, the description is incomplete. It covers the basic purpose and a feature (temporary tables), but misses behavioral details, parameter explanations, and usage context. The presence of an output schema helps by documenting return values, but doesn't fully compensate for other gaps.
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 schema provides no parameter descriptions. The tool description mentions 'SQL batches' and 'temporary tables', which loosely relates to the 'sql' parameter, but doesn't explain the 'max_rows' parameter at all. It fails to compensate for the lack of schema documentation, leaving both parameters poorly understood.
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: 'Execute read-only SQL batches with support for temporary tables within the session.' It specifies the verb ('Execute'), resource ('read-only SQL batches'), and a key capability ('support for temporary tables'). However, it doesn't explicitly differentiate from sibling tools like 'preview_query' or 'exec_function_preview', which prevents 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 provides minimal usage guidance. It implies this tool is for read-only SQL execution with temporary tables, but doesn't specify when to use it versus alternatives like 'preview_query' or 'exec_function_preview', nor does it mention prerequisites (e.g., session requirements) or exclusions. This leaves the agent with insufficient context for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthB
Provide system status and configuration details without exposing secrets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 adds useful context about security ('without exposing secrets'), indicating that sensitive information is filtered out. However, it doesn't describe other behavioral traits such as performance characteristics, rate limits, authentication requirements, or what specific 'system status and configuration details' are included. The description provides some value but 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 a single, efficient sentence that front-loads the core purpose ('Provide system status and configuration details') and adds a critical security qualification ('without exposing secrets'). There is zero waste, and every word earns its place by clarifying scope and constraints.
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 (0 parameters, no annotations, but with an output schema), the description is minimally adequate. The output schema existence means the description doesn't need to explain return values, but for a system health tool, more context about what 'status and configuration details' entail would be helpful. The security note is valuable, but overall completeness is basic for this complexity level.
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 0 parameters with 100% schema description coverage, so the baseline is 4. The description doesn't need to compensate for any parameter documentation gaps, and it appropriately doesn't mention parameters since none exist. This meets expectations for a parameterless tool.
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: 'Provide system status and configuration details' with the specific verb 'provide' and resource 'system status and configuration details'. It distinguishes itself from siblings by focusing on system health rather than authentication, data manipulation, or HTTP operations. However, it doesn't explicitly contrast with specific sibling tools like 'auth_status' which might provide authentication-specific status.
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 when this tool is appropriate compared to other status-related tools (like 'auth_status') or general query tools. The only contextual hint is 'without exposing secrets,' which suggests security considerations but doesn't define usage scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_deleteA
Send an HTTP DELETE request.
Use for delete operations. Some APIs allow delete payloads; if needed,
provide body as JSON object/array or UTF-8 text.
Pass jwt_token to forward the caller's JWT for this request only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | No | ||
| content_type | No | ||
| headers | No | ||
| jwt_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses that this is a destructive operation ('delete operations'), mentions JWT token forwarding, and notes API variability for delete payloads. However, it lacks details on error handling, response formats, authentication requirements beyond JWT, or rate limits.
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 appropriately sized with three sentences. It's front-loaded with the core purpose, followed by usage notes and parameter guidance. No redundant information, though it could be slightly more structured for readability.
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 5 parameters with 0% schema coverage, no annotations, and an output schema present, the description partially compensates but has gaps. It covers destructive behavior and some parameter semantics, but lacks comprehensive guidance on error cases, authentication, or when to use versus siblings, making it minimally adequate.
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 adds meaningful context for 'body' (JSON object/array or UTF-8 text) and 'jwt_token' (forward caller's JWT for this request only). However, it doesn't explain 'url', 'content_type', or 'headers' parameters, leaving 3 of 5 parameters without semantic clarification.
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: 'Send an HTTP DELETE request' and 'Use for delete operations.' It specifies the verb (send/delete) and resource (HTTP request), but doesn't distinguish it from sibling HTTP tools like http_get or http_post beyond the method 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 some usage context: 'Use for delete operations' and mentions when to use the body parameter ('Some APIs allow delete payloads; if needed...'). However, it doesn't explicitly guide when to choose this over other HTTP methods or alternatives, nor does it mention sibling HTTP tools for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_getA
Send an HTTP GET request.
Use for read-only resource retrieval. Provide a full URL.
Pass jwt_token to forward the caller's JWT for this request only.
If jwt_token is omitted, API_BEARER_TOKEN is used when configured.
headers.Authorization is ignored; use jwt_token instead.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| headers | No | ||
| jwt_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses key behavioral traits: the read-only nature, JWT token forwarding for authentication, fallback to API_BEARER_TOKEN, and the override rule for headers.Authorization. It lacks details on rate limits or error handling, but covers essential operational context.
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 front-loaded with the core purpose, followed by specific usage notes in bullet-like sentences. Each sentence adds value—no waste. It's appropriately sized for a tool with three parameters and clear behavioral rules.
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 (HTTP request with auth handling), no annotations, 0% schema coverage, but an output schema exists, the description is largely complete. It covers purpose, usage, and key parameters, though it could mention response format or error scenarios, which the output schema may address.
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 explains the purpose of 'url' ('Provide a full URL'), 'jwt_token' (for forwarding JWT, with fallback logic), and 'headers' (with the constraint on Authorization). This adds meaningful context beyond the bare schema, though not exhaustive for all parameters.
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 specific action ('Send an HTTP GET request') and resource ('read-only resource retrieval'), distinguishing it from siblings like http_post or http_delete. It explicitly mentions the HTTP method and purpose, avoiding tautology.
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 guidance: 'Use for read-only resource retrieval' defines the primary use case, and it implicitly contrasts with other HTTP methods (e.g., POST for creation) among siblings. It also specifies when to use jwt_token versus default behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_headA
Send an HTTP HEAD request.
Use for metadata/status checks without retrieving a full body.
Pass jwt_token to override the default environment token for this call.
headers.Authorization is ignored; use jwt_token instead.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| headers | No | ||
| jwt_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 discloses key behavioral traits: the tool sends an HTTP HEAD request (implying it's a read-only operation for metadata), mentions authentication handling ('Pass `jwt_token` to override the default environment token'), and notes a constraint ('`headers.Authorization` is ignored; use `jwt_token` instead'). However, it doesn't cover aspects like rate limits, error responses, or output format, leaving some 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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by specific usage and parameter guidance. Every sentence adds value without redundancy, making it efficient 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 no annotations, 0% schema coverage, 3 parameters, and an output schema present, the description is fairly complete. It covers purpose, usage, and key parameter semantics, but lacks details on error handling, rate limits, or exact output structure. The output schema mitigates some of this, but for a tool with authentication nuances, more behavioral context would be beneficial.
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 adds meaning for parameters: it explains the purpose of `jwt_token` ('to override the default environment token') and clarifies that `headers.Authorization` is ignored in favor of `jwt_token`. However, it doesn't detail the `url` parameter or other possible headers, and with 3 parameters total, this partial coverage is good but not comprehensive.
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: 'Send an HTTP HEAD request.' It specifies the verb (send) and resource (HTTP HEAD request), and distinguishes it from siblings like http_get, http_post, etc., by mentioning it's for 'metadata/status checks without retrieving a full body.' This is specific and avoids tautology.
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 guidance on when to use this tool: 'Use for metadata/status checks without retrieving a full body.' It also distinguishes it from alternatives by implying that for full body retrieval, other HTTP methods (like http_get) would be more appropriate. This is clear and contextually helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_patchA
Send an HTTP PATCH request.
Use for partial updates.
body accepts JSON object/array or UTF-8 text.
Pass jwt_token to forward the caller's JWT for this request only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | No | ||
| content_type | No | ||
| headers | No | ||
| jwt_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 discloses that the tool sends HTTP PATCH requests for partial updates and mentions JWT token forwarding, which adds useful context about authentication. However, it lacks details on error handling, rate limits, side effects, or response format, leaving behavioral gaps for an HTTP 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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by brief usage notes and parameter hints. Every sentence earns its place with no wasted words, making it efficient and easy to parse for an AI agent.
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 complexity (HTTP mutation with 5 parameters), no annotations, and an output schema (which reduces need to explain return values), the description is moderately complete. It covers purpose, partial usage, and some parameter semantics, but lacks behavioral details like error handling or side effects, making it adequate but with clear gaps for safe invocation.
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 adds meaning for 'body' (accepts JSON object/array or UTF-8 text) and 'jwt_token' (forwards caller's JWT for this request only), which clarifies two of the five parameters beyond the schema. However, it doesn't cover 'url', 'content_type', or 'headers', leaving some parameters undocumented. The value added is significant but incomplete.
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: 'Send an HTTP PATCH request' and adds 'Use for partial updates.' This specifies the verb (send PATCH request) and resource (HTTP endpoints), distinguishing it from siblings like http_post or http_put. However, it doesn't explicitly differentiate from all HTTP siblings beyond mentioning 'partial updates,' which is good but not fully comprehensive.
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 clear context: 'Use for partial updates' and mentions forwarding JWT tokens. This gives guidance on when to use this tool (for partial updates) and hints at authentication needs. However, it doesn't explicitly state when not to use it or name alternatives like http_put for full updates, leaving some ambiguity compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_postA
Send an HTTP POST request.
Use for create/actions. Provide a full URL.
body accepts JSON object/array or UTF-8 text.
content_type optionally overrides the Content-Type header.
Pass jwt_token to forward the caller's JWT for this request only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | No | ||
| content_type | No | ||
| headers | No | ||
| jwt_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 adds useful context about JWT token forwarding ('Pass jwt_token to forward the caller's JWT for this request only') and body format acceptance. However, it doesn't disclose critical behavioral traits like error handling, timeout behavior, authentication requirements beyond JWT, rate limits, or what the response format will be (though an output schema exists).
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 perfectly sized and front-loaded: the first sentence states the core purpose, followed by specific usage guidance and parameter explanations. Every sentence earns its place with no wasted words, making it easy for an AI agent to quickly understand the tool's function and key parameters.
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 an HTTP POST tool with 5 parameters, 0% schema description coverage, but with an output schema present, the description is reasonably complete. It explains most parameter semantics and provides usage context. The existence of an output schema means the description doesn't need to explain return values. However, for a mutation tool with no annotations, more behavioral context about side effects would be beneficial.
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 for 5 parameters, the description compensates well by explaining the semantics of 4 out of 5 parameters: 'body' accepts JSON object/array or UTF-8 text, 'content_type' overrides Content-Type header, 'jwt_token' forwards JWT, and 'url' requires a full URL. Only the 'headers' parameter lacks explanation in the description. This provides substantial 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 tool's purpose: 'Send an HTTP POST request' with the specific verb 'send' and resource 'HTTP POST request'. It distinguishes from siblings by mentioning 'Use for create/actions' which differentiates it from other HTTP methods like GET, DELETE, etc. However, it doesn't explicitly contrast with all sibling HTTP tools beyond the general POST use case.
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 clear context for when to use this tool: 'Use for create/actions' and 'Provide a full URL'. It doesn't explicitly state when NOT to use it or name specific alternatives among the sibling HTTP tools (like http_get for read operations), but the 'create/actions' guidance implicitly suggests alternatives for other HTTP methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_putA
Send an HTTP PUT request.
Use for full updates/replacements.
body accepts JSON object/array or UTF-8 text.
Pass jwt_token to forward the caller's JWT for this request only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | No | ||
| content_type | No | ||
| headers | No | ||
| jwt_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 that jwt_token forwards the caller's JWT 'for this request only', which adds useful context about authentication scope. However, it doesn't describe error handling, rate limits, idempotency (important for PUT), or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a moderate 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 extremely concise and well-structured: a clear purpose statement followed by three focused bullet points. Every sentence earns its place by providing essential information about usage, body format, and authentication. No wasted words or 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 this is a mutation tool with 5 parameters, 0% schema description coverage, no annotations, but with an output schema, the description is moderately complete. The output schema existence means return values don't need explanation, but the description should do more for a PUT operation - explaining idempotency, typical status codes, or error scenarios would improve 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?
With 0% schema description coverage, the description must compensate for parameter documentation. It provides meaningful context for two parameters: 'body accepts JSON object/array or UTF-8 text' and 'Pass jwt_token to forward the caller's JWT for this request only'. This adds valuable semantics beyond the bare schema, though it doesn't cover url, content_type, or headers parameters. The description does significant work to explain key parameters.
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 as 'Send an HTTP PUT request' and specifies it's 'for full updates/replacements', which provides specific verb+resource context. However, it doesn't explicitly distinguish this PUT tool from its sibling HTTP methods (GET, POST, PATCH, DELETE) beyond mentioning 'full updates/replacements', which is somewhat helpful but not fully differentiating.
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 some usage guidance with 'Use for full updates/replacements' and mentions the jwt_token parameter's purpose. However, it doesn't explicitly state when to use this versus other HTTP methods (like PATCH for partial updates or POST for creation) or when not to use it. The guidance 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.
insert_rowA
Insert a single row into a PostgreSQL table.
Use this tool when you need one explicit insert with structured values.
table_name: table target, optionally schema-qualifiedrow: object mapping column names to valuesreturning_columns: optional list of columns to return viaRETURNING
Example:
table_name:sales.ordersrow:{ "customer_id": 10, "status": "new" }returning_columns:["order_id"]
| Name | Required | Description | Default |
|---|---|---|---|
| table_name | Yes | ||
| row | Yes | ||
| returning_columns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses that this is an insert operation (implying mutation/write) and mentions the RETURNING clause behavior. However, it doesn't cover important behavioral aspects like transaction handling, error conditions, permission requirements, or whether it's idempotent. For a database mutation tool with zero annotation coverage, 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 efficiently structured with a clear purpose statement, usage guideline, parameter explanations, and a concrete example. Every sentence serves a distinct purpose with zero redundancy. The information is front-loaded with the most important details first, making it easy to parse.
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 this is a database mutation tool with no annotations but with output schema present, the description does well on purpose, parameters, and usage. However, it lacks behavioral context about transactions, errors, and permissions that would be important for safe operation. The output schema existence reduces the need to describe return values, but more behavioral disclosure would improve 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?
With 0% schema description coverage, the description fully compensates by explaining all three parameters clearly. It defines 'table_name' as 'table target, optionally schema-qualified', 'row' as 'object mapping column names to values', and 'returning_columns' as 'optional list of columns to return via RETURNING'. The example further clarifies usage. This adds substantial 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 specific action ('Insert a single row'), target resource ('PostgreSQL table'), and scope ('one explicit insert with structured values'). It distinguishes itself from sibling tools like 'insert_rows' by specifying single-row insertion. The verb+resource combination is precise and 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?
The description explicitly states when to use this tool: 'when you need one explicit insert with structured values.' It distinguishes from alternatives by specifying single-row insertion (vs. 'insert_rows' for multiple rows). The guidance is clear and includes context about the type of operation suitable for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_rowsA
Insert multiple rows into a PostgreSQL table in one batch.
Use this tool for bulk inserts where every row has the same columns.
table_name: table target, optionally schema-qualifiedrows: list of objects mapping column names to valuesreturning_columns: optional list of columns to return from inserted rows
Notes:
Every row must use the same columns in the same order.
Arrays can be passed as JSON lists and psycopg adapts them automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| table_name | Yes | ||
| rows | Yes | ||
| returning_columns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 discloses key behavioral traits: it's a write operation (implied by 'Insert'), handles batch processing, requires consistent column structure across rows, and mentions automatic JSON list adaptation for arrays. However, it lacks details on permissions, error handling, transaction behavior, or rate limits, leaving gaps for a mutation 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?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by bullet points for parameters and notes. Every sentence adds value (e.g., usage context, parameter details, constraints), with no redundant or wasted information, making it efficient 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 complexity (a mutation with 3 parameters, 0% schema coverage, no annotations, but with an output schema), the description is largely complete. It covers purpose, usage, parameters, and constraints. However, as a mutation tool without annotations, it could benefit from more behavioral details (e.g., side effects, error cases), though the output schema reduces the need to explain return values.
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 fully. It adds significant meaning beyond the schema: explains 'table_name' as 'table target, optionally schema-qualified', 'rows' as 'list of objects mapping column names to values', and 'returning_columns' as 'optional list of columns to return from inserted rows'. This clarifies the purpose and format of each parameter effectively.
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 specific action ('Insert multiple rows into a PostgreSQL table in one batch'), identifies the resource ('PostgreSQL table'), and distinguishes it from sibling tools like 'insert_row' (singular) by emphasizing 'bulk inserts' and 'multiple rows'. It explicitly defines the scope and verb.
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 guidance on when to use this tool ('for bulk inserts where every row has the same columns') and implicitly distinguishes it from alternatives like 'insert_row' (for single rows) and 'execute_readonly_sql' (for queries). It also includes usage notes ('Every row must use the same columns in the same order'), offering clear context for application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tables_and_columnsB
Discover tables and columns with optional filtering by schema or keyword search.
| Name | Required | Description | Default |
|---|---|---|---|
| schema_name | No | ||
| search_term | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 of behavioral disclosure. It mentions 'discover' and 'optional filtering,' but fails to describe critical behaviors: whether this is a read-only operation, what permissions are required, how results are structured (e.g., pagination, format), or any rate limits. For a metadata discovery tool with zero annotation coverage, this leaves significant gaps in understanding its 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, efficient sentence that front-loads the core purpose ('Discover tables and columns') and follows with key parameter context. There is no wasted language, repetition, or unnecessary elaboration, 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 tool's moderate complexity (3 parameters, metadata discovery), no annotations, and an output schema present, the description is minimally adequate. It covers the basic purpose and hints at parameters but lacks behavioral details and explicit usage guidelines. The output schema mitigates the need to describe return values, but overall completeness is limited by gaps in transparency and parameter semantics.
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. It mentions 'optional filtering by schema or keyword search,' which partially explains 'schema_name' and 'search_term,' but omits 'limit' entirely and provides no details on parameter formats, constraints, or interactions. With 3 parameters and low coverage, the description adds only marginal value 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's purpose: 'Discover tables and columns' specifies both the verb (discover) and resources (tables, columns). It distinguishes itself from siblings like 'describe_object' or 'preview_query' by focusing on metadata discovery rather than object details or query execution. However, it doesn't explicitly differentiate from potential similar tools not in the sibling list.
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 context through 'optional filtering by schema or keyword search,' suggesting when to use these parameters. However, it provides no explicit guidance on when to choose this tool over alternatives like 'describe_object' or 'preview_query,' nor does it mention prerequisites or exclusions. The guidance is limited to parameter usage rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_queryA
Execute read-only SELECT statements and CTEs with safety validation and row limits.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 adds useful context about 'safety validation and row limits,' which hints at constraints and safety features, but doesn't detail specific behaviors like error handling, performance limits, or what 'safety validation' entails. This provides some value but lacks comprehensive 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, efficient sentence that front-loads the core purpose ('Execute read-only SELECT statements and CTEs') and adds qualifying details ('with safety validation and row limits'). Every word earns its place, making it highly concise and well-structured 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 the tool's complexity (SQL execution with safety features), no annotations, and an output schema present, the description is reasonably complete. It covers the main purpose and key constraints, but could benefit from more detail on behavioral aspects like validation specifics or error scenarios, though the output schema mitigates some gaps.
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 schema provides no parameter details. The description adds minimal semantics by implying 'sql' is for SELECT/CTEs and 'max_rows' relates to row limits, but doesn't explain parameter formats, defaults, or constraints. It partially compensates for the coverage gap but leaves key aspects undocumented.
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 specific action ('Execute read-only SELECT statements and CTEs') and the resource (SQL queries), distinguishing it from siblings like 'execute_readonly_sql' by emphasizing safety validation and row limits. It uses precise technical terms that define its scope effectively.
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 guides usage by specifying 'read-only SELECT statements and CTEs,' indicating it's for querying data rather than modifications. However, it doesn't explicitly mention when not to use it (e.g., for INSERT/UPDATE) or name alternatives like 'insert_row' or 'execute_readonly_sql,' leaving some ambiguity in sibling differentiation.
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.
19 tool updates
v0.1.0- First observed
auth_clear_session - First observed
auth_start_session - First observed
auth_status - First observed
auth_switch_user - First observed
describe_object - First observed
exec_function_preview - First observed
exec_proc_preview - First observed
execute_readonly_sql - First observed
health - First observed
http_delete - First observed
http_get - First observed
http_head - First observed
http_patch - First observed
http_post - First observed
http_put - First observed
insert_row - First observed
insert_rows - First observed
list_tables_and_columns - First observed
preview_query
TDQS
Most tools have distinct purposes, but there is some overlap between exec_function_preview and exec_proc_preview, which both execute PostgreSQL functions/procedures with similar parameters. The HTTP tools (http_get, http_post, etc.) are clearly differentiated by HTTP method, and auth tools are well-separated. Overall, the descriptions help clarify boundaries, but the function/procedure execution tools could cause confusion.
Tool names follow a highly consistent snake_case pattern with clear verb_noun structures. Auth tools use auth_ prefix (e.g., auth_clear_session), HTTP tools use http_ prefix (e.g., http_get), and database tools use descriptive verbs like describe_, exec_, insert_, list_, preview_. There are no deviations in naming style across the set.
With 19 tools, the count is slightly high but reasonable for a workbench server that combines authentication, HTTP operations, and database interactions. It covers multiple domains comprehensively without being excessive. A few tools might be consolidated (e.g., the two function execution tools), but overall the scope justifies the number.
The toolset provides complete coverage for its intended domains: authentication (session management), HTTP operations (full CRUD via different methods), and PostgreSQL database interactions (querying, inserting, describing objects, executing functions). There are no obvious gaps; agents can perform end-to-end workflows involving data retrieval, manipulation, and API calls with proper auth handling.
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
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn open-source MCP server for PostgreSQL schema introspection and guarded read-only queries. It enables MCP clients to discover schemas, tables, columns, indexes, relationships, and safe queryable data from a configured PostgreSQL database.13MIT
- AlicenseAqualityCmaintenanceFull-featured MCP server that exposes 36 tools for interacting with PostgreSQL databases, covering schema introspection, query execution, data exploration, performance monitoring, security auditing, and maintenance.3619MIT
- AlicenseNot gradedqualityBmaintenanceA Python MCP server that provides PostgreSQL database connectivity for Text-to-SQL workflows, enabling AI agents to explore schemas and execute parameterized SQL queries across multiple data marts.MIT
- AlicenseNot gradedqualityCmaintenanceA Python MCP server that enables schema discovery, read-only SQL queries, table previews, and index/relationship analysis on PostgreSQL databases.1MIT
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/antonov2010/mcp-dev'
If you have feedback or need assistance with the MCP directory API, please join our Discord server