workbench-mcp
workbench-mcp
Fedora/Linux 시스템에서 대화형 PostgreSQL 데이터 탐색, API 통합 및 자동화를 위한 로컬 Python MCP 서버입니다.
개요
버전 1 포함 사항:
Fedora/Linux 시스템을 위한 Python 가상 환경 설정
.env파일을 통해 구성된 PostgreSQL 18 연결다음을 위한 MCP 도구:
테이블, 컬럼 및 스키마 구조 발견
읽기 전용 쿼리 미리보기 실행
임시 테이블 지원을 포함한 보호된 SQL 배치 실행
PostgreSQL 저장 함수 및 프로시저 호출
전체 URL 요청을 통한 외부 API 액세스
PATH에 있는 bash 스크립트 실행
안전성 강화: 영구적인 스키마 및 데이터 수정 차단
SQL 배치 내에서 세션 범위의 임시 테이블 워크플로우 지원
Related MCP server: PostgreSQL MCP Server
Fedora / Linux 설정
필수 시스템 패키지를 설치하여 시작하세요:
sudo dnf install -y python3 python3-pip nodejs npmPython 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— PostgreSQL 서버 호스트 이름DB_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 도구가 반환하는 최대 응답 바이트 |
|
|
| 도구 호출 시 |
|
|
호출 형태 예시:
url: https://localhost:44331/api/breakouts/filter/1871161/dd-table?ParameterSetId=231022
method: GET인증된 호출의 경우 .env(또는 프로세스 환경)에 API_BEARER_TOKEN을 설정하세요. 호출자가 자체 jwt_token을 전달하지 않는 한 HTTP 도구는 이를 자동으로 사용합니다.
인증 처리
HTTP 도구는 두 가지 인증 소스를 지원합니다:
도구 호출 시 전달되는
jwt_token.env또는 프로세스 환경의API_BEARER_TOKEN
우선순위
jwt_token이 제공되면 해당 토큰이Authorization: Bearer <jwt_token>으로 전달됩니다.jwt_token이 생략되거나 비어 있으면 서버는API_BEARER_TOKEN을 사용합니다.두 값 모두 없으면 요청은
Authorization헤더 없이 전송됩니다.
에이전트를 위한 중요 규칙
headers.Authorization 안에 베어러 토큰을 넣지 마십시오.
MCP 서버는 headers에서 Authorization을 제거하며 전용 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을 호출합니다.MCP 서버는 공유 비밀 + 이메일을 백엔드 브로커(
POST /api/v1/mcp/exchange)의 범위 지정 JWT와 교환합니다.토큰은 프로세스 메모리에 캐시됩니다.
jwt_token을 생략하는 모든 후속 HTTP 도구 호출은 세션 토큰을 자동으로 사용합니다.에이전트는
auth_status로 세션을 검사하거나,auth_switch_user로 사용자를 전환하거나,auth_clear_session으로 세션을 지울 수 있습니다.
토큰 우선순위 (높음 → 낮음)
우선순위 | 소스 |
1 | 도구 호출 시 전달된 |
2 |
|
3 |
|
필수 환경 변수
변수 | 목적 |
| 백엔드 브로커 엔드포인트의 전체 URL |
|
|
| N초 미만으로 남았을 때 새로 고침 (기본값: 60) |
세션 인증 도구
도구 | 설명 |
| 주어진 이메일에 대한 세션 토큰 획득 |
| 활성 세션을 다른 사용자로 전환 (시작과 동일) |
| 현재 세션 검사 (이메일, 만료, 새로 고침 필요 여부) |
| 메모리에서 캐시된 세션 토큰 삭제 |
전체 에이전트 참조는 **docs/SESSION_AUTH.md**를 참조하세요.
로컬 실행
가상 환경을 활성화하고 종속성을 설치한 후, 다음 명령 중 하나로 MCP 서버를 시작하세요:
workbench-mcppython -m workbench_mcp.serverMCP Inspector
로컬 MCP 개발 및 디버깅을 위해 MCP Inspector는 빠른 수동 테스트 루프를 제공합니다:
npx @modelcontextprotocol/inspector .venv/bin/python -m workbench_mcp.serverInspector에서 중단점 디버깅을 위해 debugpy 하에서 MCP 서버를 실행하려면:
npx @modelcontextprotocol/inspector .venv/bin/python -m debugpy --listen 127.0.0.1:5678 -m workbench_mcp.server실행 후 Inspector UI를 열고 STDIO를 통해 연결한 다음 health, describe_object, exec_proc_preview와 같은 도구를 테스트하세요.
중단점 (debugpy): 디버거에는 포트 5678을 사용하세요 (6274는 Inspector 웹 UI 전용입니다). 단계별 워크플로우 및 “이전 문제점”은 **docs/DEBUG_MCP.md**에 있습니다.
VS Code 설정
VS Code에 로컬 MCP 서버를 등록하려면 작업 영역 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/.env.vscode/mcp.json의env— VS Code는 이를 MCP 서버 프로세스에 주입합니다.
우선순위: 프로세스 환경( .vscode/mcp.json → env 포함)이 동일한 키에 대해 .env의 값을 재정의합니다.
VS Code에서 HTTP 튜닝을 사용하는 예시:
{
"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"
}
}
}
}실제 토큰을 커밋하지 마십시오. 로컬 전용 작업 영역 구성을 선호하거나 env를 생략하고 .env(git에서 제외되어야 함)를 사용하세요.
다른 MCP 서버가 이미 구성되어 있다면 전체 파일을 바꾸지 말고 기존 servers 객체 안에 workbench-mcp를 추가하세요.
.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를 통해 확인된 스크립트 이름)
안전 모델
임시 PostgreSQL 배치에서는 영구적인 DDL 및 DML이 차단됩니다.
현재 배치에서 생성된 임시 테이블에 대해서만 임시 테이블 쓰기가 허용됩니다.
preview_query는SELECT문과 CTE 기반 읽기만 허용합니다.exec_proc_preview는 PostgreSQL 프로시저 및 함수를 실행할 수 있습니다. 오버로드된 루틴은public.my_func(integer, text)와 같은 서명과 함께 전달되어야 합니다.execute_path_bash_script는 스크립트 이름(경로가 아님)만 허용하며PATH를 통해 확인하고bash를 통해 실행합니다.
권장되는 초기 확인 사항
.env가 구성된 후 일반적인 검증 흐름은 다음과 같습니다:
검사할 함수, 프로시저, 테이블 또는 뷰를 설명(describe)합니다.
해당 객체를 이해하는 데 필요한 지원 구성 또는 참조 데이터를 미리 봅니다.
알려진 입력값으로
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.
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
Scored across 19 tools
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.
Maintenance
Related MCP Connectors
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Draxlr's remote MCP server connects AI assistants to your SQL databases and dashboards. Explore schemas, run read-only queries, manage saved queries and dashboards, and export results, all with row-level security so each user sees only their own data.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
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.6 npmMIT
- 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.362 npmMIT
- 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