GatewayMCP
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GatewayMCPwhat does corporate memory say about the Q3 server migration?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GatewayMCP
One MCP boundary between AI coding and operational assistants and the systems they must reach. Agents connect to GatewayMCP, authenticate once, and call a small, stable set of public MCP tools. Backend credentials, access rules, audit events, and memory stay inside the gateway runtime and its Postgres database. Agents never receive upstream service tokens.
Status: early public release of a system that runs in production. The packaging (docs, examples, i18n) is still being polished. Admin UI strings are currently Russian; extraction is on the roadmap. Читать по-русски.
Why one gateway:
Single entry point. Agents speak MCP to the gateway; the gateway speaks to backends: wiki, issue tracker, code hosting, CRM, messengers, mail, calendar, cloud drives, analytics.
One login. People authenticate through OAuth (Yandex as the login provider out of the box); MCP-capable clients use the standard MCP OAuth flow (protected-resource metadata, dynamic client registration, PKCE).
Scopes and resource grants. Coarse capabilities (
tools:call,gitlab:read, ...) plus per-resource grants (a GitLab project, a tracker queue, a wiki document, a Telegram chat). Denies win over allows.Secret isolation. Per-user credentials are encrypted at rest; server-level tokens are disabled by default.
Audit by default. Every tool call, decision, and error is recorded.
Sanitized surfaces. A privacy gateway masks personal and secret-bearing data before it enters model context; process intelligence returns normalized, link-backed results instead of raw records.
Architecture at a glance:
flowchart LR
Agent["Agent plugin / MCP client"] --> MCP["GatewayMCP /mcp"]
Browser["User browser"] --> Web["OAuth and credentials pages"]
Web --> Auth["Auth service"]
MCP --> Tools["Public MCP tools"]
Tools --> Auth
Tools --> Access["Scope and resource access"]
Tools --> Memory["Corporate memory"]
Tools --> Company["Company context"]
Tools --> Process["Process intelligence"]
Tools --> Router["Backend router"]
Process --> Router
Router --> Backends["Backend adapters"]
Backends --> Systems["Wiki, tracker, code hosting, CRM, messengers, mail, calendar, drives, analytics"]
Auth --> Postgres["Postgres"]
Access --> Postgres
Memory --> PostgresSkills for assistants are packaged by the companion repository comindspace/ai-native: a portable skill contract, a plugin pack builder for Claude Code, Codex, Cursor, OpenCode, OpenClaw, and Hermes, plus the skill telemetry contract this gateway ingests.
Quickstart:
cp deploy.env.example .env # fill in Postgres password, OAuth app, one backend
docker compose up -d
curl http://localhost:8000/healthzThe MCP endpoint is served at /mcp. Host it behind HTTPS and set GATEWAY_PUBLIC_URL for a working OAuth flow. Security policy: SECURITY.md. Contributing: CONTRIBUTING.md. License: Apache-2.0 (LICENSE, NOTICE).
User Flow
Claude Code uses MCP OAuth directly:
/plugin install gateway-mcp@company-agent-skills
/mcpWhen Claude prompts for authentication, sign in with Yandex. The plugin points Claude to https://gateway.example.com/mcp; do not paste a Gateway bearer token into the Claude plugin config.
If Claude was already connected with an old token or the wrong account, open /mcp, clear authentication for the Gateway server, then reconnect and sign in again.
Quick checks after login:
/mcp list
gateway_search_tools
gateway_company_get_source_of_truthAgents without MCP OAuth support may still use the same MCP endpoint plus a Gateway bearer token as a fallback.
Related MCP server: Daemoon
Project Structure
gateway.py- compatibility entrypoint for thegateway-mcpconsole script and legacy imports.gateway_mcp/server.py- FastMCP app assembly and registration of routes/tools.gateway_mcp/routes/- HTTP routes: health, metrics, OAuth callback, and user credentials UI.gateway_mcp/tools/- public MCP tools grouped by domain: company context, memory, markdown knowledge spaces, access admin, route discovery, and routed backend calls.gateway_mcp/backends/- private backend adapters by system, with one router that dispatches bytransportfromgateway-tools.json.gateway_mcp/config.py,gateway_mcp/web.py,gateway_mcp/audit.py- shared Gateway helpers.gateway_backends.py- compatibility wrapper for old imports ofcall_backend.gateway_mcp/services/- domain services for auth, access control, storage, migrations, observability, memory, markdown knowledge spaces, company context, and policy.gateway_access.py,gateway_auth.py,gateway_storage.py,gateway_memory.py,gateway_company.py- compatibility wrappers for old imports.
Validate locally:
python -m json.tool gateway-tools.json >/dev/null
python -m json.tool gateway-policy.json >/dev/null
python -m json.tool gateway-company-indexes.json >/dev/null
python -m compileall -q gateway_mcp gateway.py gateway_access.py gateway_auth.py gateway_backends.py gateway_company.py gateway_memory.py gateway_migrations.py gateway_observability.py gateway_policy.py gateway_storage.py
python -m unittest discover -s testsSmoke-check a deployed Gateway:
python -m gateway_mcp.smoke --base-url https://gateway.example.comWith a Gateway token, the smoke check also initializes MCP, lists tools, and verifies that the route registry includes Yonote routes:
python -m gateway_mcp.smoke --base-url https://gateway.example.com --token "$GATEWAY_MCP_TOKEN"Public Tools
gateway_search_tools(query)- list known internal tool routes. Scope:tools:read.gateway_call_tool(tool_name, arguments_json)- checkstools:call, route scope, and DB-backed resource ACL before proxying to private MCP servers.gateway_company_get_source_of_truth()- return the company source-of-truth map. Scope:company:read.gateway_company_bootstrap_context(query, limit)- return source-of-truth map, Yonote company index, company memory, and relevant company sources. Scope:company:read.gateway_company_search(query, kind, limit, include_sources)- search the Yonote company index and source systems. Scope:company:read.gateway_company_get(kind, item_id)- get a company person/team/project/process/client/system/etc. Scope:company:read.gateway_memory_write(...)- store short-term session/task memory or medium-term project/team memory in Postgres. Scope:memory:write.gateway_memory_search(...)- search short/medium memory and optionally source-backed long-term knowledge. Scope:memory:read.gateway_memory_sources_search(query, limit, include_yonote)- search long-term source-backed knowledge from Yonote/templates/ADR/docs. Scope:memory:read.gateway_memory_summarize_session(session_id, notes, ...)- store a compact short-term session/task summary with TTL. Scope:memory:write.gateway_memory_forget(entry_id)- delete a memory entry created by the current user; admins may delete any entry. Scope:memory:write.gateway_knowledge_spaces(include_personal)- list personal and group markdown knowledge spaces visible to the current user. Scope:memory:read.gateway_knowledge_space_get(space)- show metadata, members, and document count for one knowledge space. Scope:memory:read.gateway_knowledge_space_create(slug, title, description, members_json)- create a group knowledge space; the creator becomes admin. Scope:memory:write.gateway_knowledge_member_add(space, subject, role)/gateway_knowledge_member_remove(space, subject)- manage group-space members. Scope:memory:writeplus space admin role.gateway_knowledge_document_put(title, content, space, ...)- create or update a markdown document in a personal or group space. Scope:memory:writeplus space writer role.gateway_knowledge_document_get(document, space)- read a markdown document from an accessible space. Scope:memory:read.gateway_knowledge_search(query, space, limit, ...)- search accessible markdown knowledge spaces and return citations. Scope:memory:read.gateway_knowledge_document_delete(document, space)- soft-delete a markdown document into the space-local trash. Scope:memory:writeplus space writer role.gateway_knowledge_document_versions(document, space, limit)- list retained document versions. Scope:memory:read.gateway_knowledge_document_restore(document, version_id, space)- restore a retained version after archiving the current document. Scope:memory:writeplus space writer role.gateway_knowledge_trash_list(space, limit)/gateway_knowledge_trash_restore(trash_id, space)- inspect and restore soft-deleted documents. Scope:memory:readormemory:writeplus the matching space role.gateway_knowledge_ingest_file(source_path, space, ...)- import a UTF-8 text/markdown file from an allowlisted server directory into a knowledge space. Scope:memory:writeplus space writer role.gateway_knowledge_reindex(space)- rebuild markdown indexes for accessible spaces. Scope:memory:write.gateway_knowledge_access_audit(space)- show the current user's effective knowledge-space access. Scope:memory:read.gateway_process_events_search(query, period_days, systems_json, project_ids_json, limit)- return sanitized normalized process events from Yonote, Bitrix24, Tracker, and GitLab. Scope:process:read.gateway_process_candidates_discover(events_json, ...)- discover repeated process candidates from normalized events. Scope:process:read.gateway_process_compare_with_yonote(candidates_json, ...)- compare discovered process candidates with Yonote process/source-of-truth pages. Scope:process:read.gateway_process_rebuild_backlog(candidates_json, comparisons_json, ...)- build a staff-reviewed Process Rebuild Backlog. Scope:process:read.gateway_project_scope_resolve(project_id, signal_summary, scope_id, limit)- return source-backed project/scope candidates for agent classification. Scope:factory:read.gateway_work_intake(...)- create a portable local or factory Work Contract. Scope:factory:writeplus project resource access.gateway_work_search(...)/gateway_work_get(work_id)- inspect authorized work metadata and evidence. Scope:factory:readplus project resource access.gateway_work_claim(work_id, project_id, lease_seconds)- atomically claim queued factory work. Scope:factory:claimplus project write access.gateway_work_artifact_record(...)- append one metadata-only planning, implementation, verification, review, delivery, or production-feedback record to the server-validated SHA-256 artifact chain. Scope:factory:writeplus project resource access.gateway_work_event(...)/gateway_work_complete(...)/gateway_work_accept(...)- record phase changes, verified result, and independent review decision. Scope:factory:writeplus project resource access.gateway_work_metrics(project_id, days)- compare local and factory flow on signal-to-result, acceptance, blocking, correction, evidence, and administration. The response includesblocked_rateand the canonicalp50_correction_rounds;avg_correction_roundsremains available for compatibility. Scope:factory:readplus project resource access.gateway_telemetry_skill_started(...)- record that a local Claude/Codex/Cursor/Hermes skill started. Scope:telemetry:write.gateway_telemetry_skill_completed(...)- record successful skill completion, duration, MCP routes, and missing scopes. Scope:telemetry:write.gateway_telemetry_skill_failed(...)- record failed skill completion with error class, not stack traces. Scope:telemetry:write.gateway_telemetry_session_finished(...)- close skill runs left open when an agent session ends. Scope:telemetry:write.gateway_telemetry_skill_stats(...)- return aggregated assistant skill usage stats. Scope:telemetry:read.gateway_telemetry_usage_report(...)- record actual or estimated model token/cost usage. Scope:telemetry:write.gateway_telemetry_usage_summary(...)- aggregate model usage by agent, skill, project, provider, model, and source quality. Scope:telemetry:read.gateway_admin_list_access(...)- list DB-backed scope/resource grants. Scope:access:read.gateway_admin_explain_access(...)- explain allow/deny for one user/resource/action. Scope:access:read.gateway_admin_grant_scope(...)/gateway_admin_revoke_scope(...)- manage DB-backed scope grants. Scope:access:admin;dry_run=trueby default.gateway_admin_grant_resource(...)/gateway_admin_revoke_resource(...)- manage DB-backed resource ACL grants. Scope:access:admin;dry_run=trueby default.gateway_admin_audit_search(...)- search redacted audit metadata, including bygateway_request_id. Scope:telemetry:read.gateway_admin_audit_summary(...)- aggregate audit events by event, tool, system, decision, and status. Scope:telemetry:read.gateway_admin_access_package_catalog()- list versioned company roles such as project manager, AI-Native engineer, factory worker, sales manager, knowledge curator, and independent reviewer. Scope:access:read.gateway_admin_grant_access_package(...)/gateway_admin_revoke_access_package(...)- atomically assign or revoke all scopes and resource grants belonging to one role without touching separately issued grants. Scope:access:admin;dry_run=trueby default.gateway_admin_list_access_packages(...)- inspect active and revoked package assignments. Scope:access:read.gateway_access_profile()- show the current employee identity, effective scopes, assigned access packages, and recent requests. Scope:access:request.gateway_access_package_catalog()- list versioned business access packages available for employee requests. Scope:access:request.gateway_access_request_create(...)/gateway_access_request_list(...)/gateway_access_request_cancel(...)- create, inspect, or cancel the current employee's access request. Scope:access:request. Requests never grant access automatically.gateway_admin_access_request_list(...)/gateway_admin_access_request_decide(...)- review pending requests and approve or reject them. Scopes:access:readandaccess:admin; decisions default todry_run=true.gateway_approval_create(...)- create a time-limited, artifact-bound approval request; four-eyes mode is enabled by default. Scope:approvals:write.gateway_approval_get(...)/gateway_approval_list(...)- inspect visible or assigned approvals and their immutable event history. Scope:approvals:read.gateway_approval_decide(...)/gateway_approval_comment(...)- approve, reject, request information, or add clarification. Decisions are atomic and expired approvals cannot be accepted. Scope:approvals:write.gateway_file_upload_create(...)/gateway_file_upload_status(upload_id)- create and inspect a short-lived binary upload session. Scope:files:writeorfiles:read.gateway_file_download_create(upload_id)/gateway_file_download_status(download_id)- create and inspect a one-time binary download session. Scope:files:read.gateway_privacy_classify(text, policy)- return sensitivity types, actions, and positions without echoing detected values. Scope:privacy:use.gateway_privacy_sanitize_text(text, policy)- pseudonymize personal data and irreversibly redact credentials before a downstream handoff. Scope:privacy:use.gateway_call_tool_sanitized(tool_name, arguments_json, policy)- call an authorized read-only backend route and sanitize its result before it enters agent context. Scopes:tools:call,privacy:use, and the route's read scope.
Backend Routes
gateway_call_tool now routes implemented tools to private backends from inside GatewayMCP. Agents see only GatewayMCP; backend tokens stay in the Gateway runtime.
Agent responses contain business data, the upstream status, write idempotency state when relevant, and a short gateway_request_id. Backend paths, transport details, route metadata, RBAC subjects, matched grants, and constraints stay in the server audit. Use gateway_request_id to correlate a compact agent-visible error with full operational diagnostics.
Administrators can search the redacted journal at /admin/audit by period, user, system, event, tool, decision, status, or gateway_request_id. Journal payloads are not rendered in the browser.
Implemented routes:
Yonote read:
yonote.documents.search,yonote.documents.get,yonote.documents.list,yonote.documents.export.Yonote write:
yonote.documents.create,yonote.documents.update.Tracker read:
tracker.issues.search,tracker.issues.count,tracker.issues.get,tracker.transitions.list,tracker.queues.list,tracker.queues.fields,tracker.worklogs.list,tracker.worklogs.search.Tracker write:
tracker.issues.create,tracker.issues.update,tracker.comments.add,tracker.transitions.execute,tracker.worklogs.create,tracker.worklogs.update,tracker.worklogs.delete.GitLab read:
gitlab.projects.search,gitlab.project.get,gitlab.files.get,gitlab.merge_requests.list,gitlab.merge_requests.get,gitlab.merge_requests.changes,gitlab.merge_requests.diffs.list,gitlab.merge_request_notes.list,gitlab.merge_request_approvals.get,gitlab.pipelines.list,gitlab.pipeline_jobs.list,gitlab.pipeline_jobs.get,gitlab.pipeline_jobs.trace.GitLab write:
gitlab.branches.create,gitlab.commits.create,gitlab.merge_requests.create,gitlab.merge_request_notes.create,gitlab.merge_request_approvals.approve,gitlab.merge_requests.merge.GitLab deploy:
gitlab.pipeline_jobs.playrequires the separategitlab:deployscope. A call must include the id of an approvedproduction_deployrequest asapproval_refand a uniqueidempotency_key; in strict resource-policy mode, grant thedeployaction only for approved project ids. Ordinarygitlab:writedoes not permit manual CI jobs.
Protected operations consume a real Gateway approval, not an arbitrary reference string. Create the approval with a payload bound to the tool and immutable invocation fields:
{
"approval_type": "production_deploy",
"subject": "Deploy project 123 job 100",
"required_role": "release-reviewers",
"payload_json": "{\"tool_name\":\"gitlab.pipeline_jobs.play\",\"arguments\":{\"project_id\":123,\"job_id\":100}}",
"four_eyes": true
}After an independent reviewer approves it, the creator or the explicit metadata.executor_subject may execute the matching operation. GatewayMCP verifies status, expiry, approval type, executor, tool, and argument subset, then atomically consumes the approval before contacting the backend. A successful idempotent replay returns the cached result before consumption is checked. Any uncertain or failed first execution requires a new approval rather than silently reusing the old one.
Infra read:
infra.servers.search,infra.servers.get.Infra SSH diagnostics:
infra.ssh.execruns only allowlisted read-only SSH commands through a server-side credential handle. It never returns private keys to agents.Yandex Disk read:
yandex_disk.resources.get,yandex_disk.resources.files,yandex_disk.resources.download_link.Yandex Disk write:
yandex_disk.resources.upload_link,yandex_disk.resources.mkdir,yandex_disk.resources.copy,yandex_disk.resources.move,yandex_disk.resources.delete.Bitrix24 read:
bitrix24.crm.search,bitrix24.leads.list,bitrix24.deals.list,bitrix24.deals.get,bitrix24.deals.fields,bitrix24.contacts.list,bitrix24.companies.list,bitrix24.companies.get,bitrix24.companies.fields,bitrix24.current_user.get,bitrix24.users.list,bitrix24.users.get,bitrix24.statuses.list,bitrix24.sales_funnel.health,bitrix24.timeline.comments.list,bitrix24.activities.list,bitrix24.tasks.list.Bitrix24 write:
bitrix24.leads.create,bitrix24.deals.create,bitrix24.deals.update,bitrix24.companies.create,bitrix24.companies.update,bitrix24.companies.upsert,bitrix24.timeline.comment.add,bitrix24.timeline.comment.add_with_files,bitrix24.deals.attach_file,bitrix24.disk.folder.uploadfile,bitrix24.disk.storage.uploadfile,bitrix24.activities.add,bitrix24.activities.update,bitrix24.tasks.add,bitrix24.tasks.update.OpenRouter audio:
openrouter.audio.models,openrouter.audio.transcribe.Telegram read:
telegram.chats.list,telegram.messages.get,telegram.messages.search,telegram.files.download.Telegram write:
telegram.messages.send.Notifications write:
notifications.skill_update.sendposts post-merge skill update notifications to the configured team chat through the Gateway service identity.Mail read:
mail.messages.search.Mail send:
mail.messages.send.Calendar read:
calendar.calendars.list,calendar.events.search.
Unknown or future MCP backends should be added only after their upstream contract is known.
Example:
{
"tool_name": "tracker.issues.search",
"arguments_json": "{\"query\":\"Queue: OPS\",\"per_page\": 10}"
}For routes with complex payloads, use body:
{
"tool_name": "tracker.issues.create",
"arguments_json": "{\"body\":{\"queue\":\"OPS\",\"summary\":\"Check Gateway route\",\"description\":\"Created through GatewayMCP\"}}"
}Bitrix24 accepts either flat arguments or params:
{
"tool_name": "bitrix24.leads.list",
"arguments_json": "{\"params\":{\"filter\":{\"STATUS_ID\":\"NEW\"},\"select\":[\"ID\",\"TITLE\"],\"start\":0}}"
}Timeline comments can attach files directly through Bitrix24 FILES. For agent calls, upload the binary outside the MCP context and pass only its upload_id:
1. Call gateway_file_upload_create(filename, content_type, size_bytes, sha256).
2. PUT the file bytes to upload_url with the returned X-Gateway-Upload-Token header.
3. Call bitrix24.timeline.comment.add_with_files or bitrix24.deals.attach_file with {"upload_id":"..."}.{
"tool_name": "bitrix24.timeline.comment.add_with_files",
"arguments_json": "{\"params\":{\"entity_type\":\"deal\",\"entity_id\":1709,\"comment\":\"Quote attached\",\"files\":[{\"upload_id\":\"4d2f22bd-f4af-41e5-a23e-d95c4e99e0f5\"}]}}"
}For deal-focused file attachments, agents can use the shorter helper:
{
"tool_name": "bitrix24.deals.attach_file",
"arguments_json": "{\"params\":{\"deal_id\":1753,\"comment\":\"Quote attached\",\"files\":[{\"upload_id\":\"4d2f22bd-f4af-41e5-a23e-d95c4e99e0f5\"}]}}"
}Legacy content_base64 input remains accepted for compatibility, but should not be used for new agent flows because it spends model context on binary data.
To attach a file received in a Telegram chat, download it into the Gateway transfer store and pass its upload_id to Bitrix24. The raw bytes should move between HTTP endpoints without being copied through an LLM response.
{"tool_name": "telegram.files.download", "arguments_json": "{\"chat_id\":-1001234567890,\"message_id\":42}"}Message listings from telegram.messages.get and telegram.messages.search include a media object when a message carries a file attachment, so agents can discover which messages have downloadable files.
Company cards can be created or updated and linked to a deal in one call:
{
"tool_name": "bitrix24.companies.upsert",
"arguments_json": "{\"params\":{\"title\":\"Acme Development\",\"website\":\"https://example.com\",\"deal_id\":1753}}"
}If a file needs to live in Bitrix24 Drive first, use bitrix24.disk.folder.uploadfile or bitrix24.disk.storage.uploadfile with fileContent:["file.pdf","base64"]. The Bitrix24 webhook must have the matching CRM and Disk/Drive permissions.
OpenRouter audio transcription accepts a Gateway upload_id. The legacy file_path argument remains available for server-side files and is restricted by OPENROUTER_ALLOWED_AUDIO_DIRS.
Telegram uses the Gateway host session. Prefer TELEGRAM_SESSION_STRING for containerized deployments; otherwise pre-login the configured TELEGRAM_SESSION_NAME session file before running GatewayMCP.
Post-merge skill update notifications should use notifications.skill_update.send, not direct telegram.messages.send. Set GATEWAY_SKILL_UPDATE_CHAT_ID (legacy GATEWAY_COMIND_CHAT_ID and GATEWAY_COMIND_MR_REVIEW_CHAT_ID are still honored) to the chat that receives skill update notices. The route accepts skill metadata, formats the message server-side, and sends through the configured Gateway Telegram session, preferably a dedicated service identity.
Employee notifications
GatewayMCP provides a durable employee inbox independently of Telegram, Slack, or Hermes. Notification events, recipients, read receipts, browser subscriptions, and delivery attempts are stored in Postgres. The notification-worker Compose service polls the Postgres outbox and delivers Web Push; Redis is not required.
Employees open /notifications, sign in through the normal Gateway OAuth flow, and can:
read personal, group, role, and team notifications;
mark one or all notifications as read;
enable or disable operating-system browser notifications per device.
Agents use the dedicated MCP tools:
gateway_notification_publishwithnotifications:write;gateway_notifications_list,gateway_notification_get,gateway_notification_ack, andgateway_notification_topic_updatewithnotifications:read.
recipients_json is an array of { "type": "user|group|role|team|project", "key": "..." }. An empty array sends the event back to the current actor. Use a stable idempotency_key for retryable events such as Work Contract completion. Prefer user, group, role, or team recipients. A project identifier is an internal access boundary and event context; employees do not enter project codes or manage project subscriptions in the inbox. The legacy project-topic API remains available for compatible clients. Web Push lock-screen text is intentionally generic; the event body and action link remain inside the authenticated inbox.
Generate one VAPID key pair for each Gateway installation and store the values only in the server environment:
uv run python -c "import base64; from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat; from py_vapid import Vapid; v=Vapid(); v.generate_keys(); enc=lambda b:base64.urlsafe_b64encode(b).rstrip(b'=').decode(); print('GATEWAY_WEB_PUSH_VAPID_PRIVATE_KEY='+enc(v.private_key.private_numbers().private_value.to_bytes(32,'big'))); print('GATEWAY_WEB_PUSH_VAPID_PUBLIC_KEY='+enc(v.public_key.public_bytes(Encoding.X962,PublicFormat.UncompressedPoint)))"Set GATEWAY_WEB_PUSH_VAPID_SUBJECT to a monitored mailto: address. The public key is exposed to authenticated browsers; the private key is used only by notification-worker.
Yandex Tracker, Yandex Disk, and Yandex Mail use the Yandex OAuth token of the employee who logged in through GatewayMCP. Do not put personal Tracker, Disk, or Mail credentials into the shared server environment.
If Tracker routes return an upstream 403 that says tracker:read OAuth scope is required, add the Tracker scopes to the Yandex OAuth application and have the employee re-authenticate through GatewayMCP. The existing Gateway token may be valid while the stored upstream Yandex token is missing that scope.
If Mail routes return IMAP AUTHENTICATIONFAILED, check both sides: the Yandex OAuth application must request Mail IMAP/SMTP scopes, and IMAP must be enabled for the user's Yandex mailbox.
Calendar is different: Yandex CalDAV is documented through per-user app passwords. Do not put a personal CalDAV password into the shared server environment. GatewayMCP should store a per-user encrypted Calendar app password under the yandex-caldav credential provider before enabling Calendar routes for that user. If no app password is stored, Calendar routes return credential_missing and point the user to /credentials.
Legacy MCP migration status:
Routed through GatewayMCP: Yonote, Yandex Tracker, GitLab, Yandex Disk, Yandex Mail, Bitrix24, Telegram, Calendar/CalDAV, OpenRouter audio.
Gateway-native, not proxied as legacy MCP: company context, corporate memory, access administration.
Local agent utilities stay local by design: filesystem, sequential thinking, browser/puppeteer-style automation.
Google Sheets is intentionally not part of the Gateway route set.
Local Dev
Default mode is stdio with auth disabled:
uv run gateway-mcpHTTP Gateway With Auth
Run the protected remote MCP endpoint directly:
$env:GATEWAY_TRANSPORT = "streamable-http"
$env:GATEWAY_AUTH_ENABLED = "true"
$env:GATEWAY_HOST = "0.0.0.0"
$env:GATEWAY_PORT = "8000"
$env:GATEWAY_PUBLIC_URL = "https://mcp.example.com"
$env:GATEWAY_ISSUER_URL = "https://mcp.example.com"
$env:GATEWAY_RESOURCE_URL = "https://mcp.example.com/mcp"
$env:GATEWAY_JWT_SECRET = "<secret-from-secret-manager>"
$env:GATEWAY_DATABASE_URL = "postgresql://gateway_mcp:<password>@localhost:5432/gateway_mcp"
$env:YANDEX_OAUTH_CLIENT_ID = "<yandex-oauth-client-id>"
$env:YANDEX_OAUTH_CLIENT_SECRET = "<yandex-oauth-client-secret>"
uv run gateway-mcp --transport streamable-httpRun database migrations before starting the service:
uv run gateway-mcp migrate upOr run the full Gateway + Postgres stack:
$env:GATEWAY_JWT_SECRET = "<32+ byte secret>"
$env:YANDEX_OAUTH_CLIENT_ID = "<yandex-oauth-client-id>"
$env:YANDEX_OAUTH_CLIENT_SECRET = "<yandex-oauth-client-secret>"
docker compose up --buildGitLab CI/CD Deployment
This repository includes a GitLab CI/CD pipeline for the production Gateway host.
Pipeline stages:
validate- validates JSON registries and compiles Python modules.build_gateway_image- builds the Gateway Docker image and pushes it to the GitLab Container Registry.deploy_gateway- manual production deployment through the shell runner taggedgateway-prod.
The production runner host keeps secrets in /opt/gateway-mcp/.env. The repository only contains deploy.env.example; never commit the real .env.
Initial server setup:
sudo mkdir -p /opt/gateway-mcp
sudo chown -R gitlab-runner:gitlab-runner /opt/gateway-mcp
sudo install -m 0600 deploy.env.example /opt/gateway-mcp/.env
sudo editor /opt/gateway-mcp/.envRequired production values:
POSTGRES_PASSWORDGATEWAY_JWT_SECRETGATEWAY_USER_TOKEN_ENCRYPTION_KEYGATEWAY_PUBLIC_URLGATEWAY_ISSUER_URLGATEWAY_RESOURCE_URLYANDEX_OAUTH_CLIENT_IDYANDEX_OAUTH_CLIENT_SECRETYANDEX_OAUTH_SCOPESYANDEX_DISK_OAUTH_CLIENT_IDYANDEX_DISK_OAUTH_CLIENT_SECRETYANDEX_DISK_OAUTH_SCOPESGOOGLE_OAUTH_CLIENT_IDGOOGLE_OAUTH_CLIENT_SECRETGOOGLE_OAUTH_SCOPES
Backend integrations are enabled by setting service credentials in the server .env only for shared systems such as Yonote, GitLab, Bitrix24, OpenRouter, and Telegram. Yandex Tracker, Yandex Disk, and Yandex Mail should normally use the logged-in employee's Yandex OAuth token stored by GatewayMCP after login.
Manual deploy flow:
merge to main -> build image -> run manual deploy_gateway jobThe deploy job copies docker-compose.deploy.yml to /opt/gateway-mcp/docker-compose.yml, writes the exact image tag into /opt/gateway-mcp/.image.env, runs docker compose pull, starts the stack, and checks http://127.0.0.1:8000/healthz.
Register the Yandex OAuth callback URL:
https://mcp.example.com/auth/yandex/callbackEmployee login for fallback bearer-token agents:
https://mcp.example.com/auth/yandex/loginThe callback returns an internal Gateway bearer token. Configure only non-OAuth agent runtimes with:
Authorization: Bearer <gateway-token>Claude Code should use the MCP OAuth flow and should not store the bearer token in plugin configuration.
GatewayMCP also stores the user's Yandex OAuth token encrypted in Postgres and uses it only server-side when routing Yandex Tracker, Yandex Disk, and Yandex Mail calls. GitLab uses a per-user personal access token saved from /credentials. Agents receive only the internal Gateway bearer token, not raw Yandex or GitLab tokens.
Yandex may limit how many permissions can be attached to a single OAuth application. GatewayMCP therefore supports separate Yandex OAuth apps: the main YANDEX_OAUTH_* app for login, Tracker, and Mail, and the YANDEX_DISK_OAUTH_* app for Disk (cloud_api:disk.read, cloud_api:disk.write, cloud_api:disk.info). Google Drive, Google Docs, and Google Sheets use a separate GOOGLE_OAUTH_* app with callback https://mcp.example.com/auth/google/callback. If a scope is missing, GatewayMCP authentication can succeed while the routed backend call still fails upstream.
Yandex Disk API applications may use the fixed https://oauth.yandex.ru/verification_code redirect. In that case users open /credentials, click Получить код Yandex Disk, approve Disk access in Yandex, copy the confirmation code, and paste it back into the GatewayMCP form. Platform admins use the same code-based flow in the Сервисные аккаунты table to bind Disk access for service actors such as Hermes profiles.
After login, users can open /credentials to manage per-user credentials that cannot be obtained through OAuth. Calendar app passwords and GitLab personal access tokens are saved there encrypted and can be deleted by the same user.
Platform administrators manage global service connections at /admin/integrations. Bitrix24, Yonote, OpenRouter, the privacy-preserving external LLM proxy, Tracker organization settings, GitLab endpoint settings, and the notification Telegram bot can be saved there without exposing secrets to an agent. Values are encrypted in Postgres, versioned on every update, can expire or be disabled, and retain the result of the latest connection check. Existing environment variables remain a deployment fallback until an admin-managed record is created. A disabled or expired managed record intentionally blocks that fallback.
Configuration
GATEWAY_TOOLS_FILE- path to gateway route registry, defaultgateway-tools.json.GATEWAY_POLICY_FILE- policy registry, defaultgateway-policy.json.GATEWAY_DATABASE_URL- Postgres DSN for OAuth state and audit events.GATEWAY_MIGRATIONS_DIR- SQL migrations directory, defaultmigrations.GATEWAY_AUDIT_LOG- JSONL fallback audit log path when Postgres is not configured, defaultgateway-audit.jsonl.GATEWAY_USER_TOKEN_ENCRYPTION_KEY- Fernet key for encrypting stored employee OAuth tokens. If omitted, Gateway derives a key fromGATEWAY_JWT_SECRET; a dedicated key is preferred for production.GATEWAY_ALLOWED_EMAIL_DOMAINS- comma-separated domain allowlist. Overrides policy domains when set.GATEWAY_REQUIRED_SCOPES- legacy route-level setting. GatewayMCP now advertisesGATEWAY_SUPPORTED_SCOPESto MCP clients and enforces real authorization at public-tool and routed-tool level.GATEWAY_SUPPORTED_SCOPES- optional override for scopes advertised through OAuth authorization-server and protected-resource metadata. Defaults to the full Gateway scope catalog.GATEWAY_RESOURCE_POLICY_MODE- resource ACL mode:permissiveallows calls with no matching resource policy,strictrequires an allow grant. Defaultpermissive.GATEWAY_ALLOW_SERVER_YANDEX_TOKENS- optional break-glass fallback for server-level Yandex tokens. Defaultfalse.GATEWAY_ALLOW_SERVER_GITLAB_TOKEN- optional break-glass fallback for server-level GitLab token. Defaultfalse.YANDEX_OAUTH_ACCESS_TOKEN- optional break-glass server-level Yandex OAuth token used only whenGATEWAY_ALLOW_SERVER_YANDEX_TOKENS=true.YANDEX_MAIL_IMAP_HOST,YANDEX_MAIL_IMAP_PORT- Yandex Mail IMAP XOAUTH2 endpoint, defaultsimap.yandex.com:993.YANDEX_MAIL_SMTP_HOST,YANDEX_MAIL_SMTP_PORT- Yandex Mail SMTP XOAUTH2 endpoint, defaultssmtp.yandex.com:465.GATEWAY_TOKEN_TTL_SECONDS- internal JWT TTL, default31536000(1 year).GATEWAY_REFRESH_TOKEN_TTL_SECONDS- MCP OAuth refresh-token TTL, default31536000(1 year). Refresh tokens are rotated on every use and can be revoked.GATEWAY_WEB_PUSH_VAPID_PUBLIC_KEY- URL-safe Base64 public P-256 VAPID key returned to authenticated browsers on/notifications.GATEWAY_WEB_PUSH_VAPID_PRIVATE_KEY- matching private VAPID key used only by the notification delivery worker.GATEWAY_WEB_PUSH_VAPID_SUBJECT- monitored VAPID contact, defaultmailto:admin@example.com.GATEWAY_NOTIFICATION_POLL_SECONDS- Postgres outbox polling interval fornotification-worker, default2.GATEWAY_NOTIFICATION_BATCH_SIZE- maximum Web Push deliveries claimed per worker iteration, default25.GATEWAY_NOTIFICATION_MAX_ATTEMPTS- maximum delivery attempts before an outbox item becomes failed, default8.GATEWAY_WEB_PUSH_TIMEOUT_SECONDS- outbound Web Push request timeout, default10seconds and capped at60.GATEWAY_SERVER_VERSION- GatewayMCP version advertised by MCPserver/discover, default0.1.0.GATEWAY_STATELESS_LEGACY_HTTP- makes pre-2026 Streamable HTTP calls stateless under MCP SDK v2. Modern2026-07-28calls are always stateless. Defaulttrue.GATEWAY_MAX_REQUEST_BODY_BYTES- maximum Streamable HTTP request body accepted by MCP SDK v2, default4194304.GATEWAY_MCP_CATALOG_TTL_MS- private cache hint for MCP discovery and catalog results, default300000.GATEWAY_CIMD_ENABLED- advertises and accepts OAuth Client ID Metadata Documents whentrue. Defaultfalse, so MCP clients use the declared dynamic registration endpoint. Enable only when client metadata URLs are reliably reachable from the Gateway.GATEWAY_CIMD_ALLOWED_HOSTS- optional comma-separated allowlist for OAuth Client ID Metadata Document hosts when CIMD is enabled. Private and local addresses are always rejected.GATEWAY_IDEMPOTENCY_TTL_SECONDS- retention period for write-call idempotency records, default86400.GATEWAY_MANAGED_CONNECTION_CACHE_SECONDS- runtime cache for decrypted managed service connections, default5seconds.GATEWAY_FILE_TRANSFER_DIR- private server directory for short-lived binary transfers, default/data/gateway/files. Docker Compose mounts the persistentgateway-filesvolume there.GATEWAY_FILE_TRANSFER_MAX_BYTES- maximum upload size, default104857600bytes.GATEWAY_FILE_UPLOAD_TTL_SECONDS- upload availability period, default3600seconds and capped at one day.GATEWAY_FILE_DOWNLOAD_TTL_SECONDS- one-time download link lifetime, default300seconds and capped at one hour.GATEWAY_PRIVACY_POLICY- default privacy policy:standardmasks credentials and personal identifiers;strictalso generalizes dates of birth and financial values.GATEWAY_PRIVACY_HMAC_SECRET- dedicated secret for stable, actor-bound pseudonyms. If omitted, the Gateway JWT secret is used; a separate random production value is preferred.GATEWAY_PRIVACY_TERMS_FILE- optional JSON file containing company-specific terms to pseudonymize, for example employee, client, project, or contract names.GATEWAY_LLM_UPSTREAM_URL,GATEWAY_LLM_UPSTREAM_API_KEY- OpenAI-compatible provider used only behind the privacy proxy. These values can be stored at/admin/integrationsinstead of the environment.GATEWAY_LLM_DEFAULT_MODEL,GATEWAY_LLM_ALLOWED_MODELS- optional default model and comma-separated model allowlist for the privacy proxy.GATEWAY_LLM_PROXY_MAX_BODY_BYTES,GATEWAY_LLM_PROXY_TIMEOUT_SECONDS- proxy request size and upstream timeout limits, default4194304bytes and180seconds.GATEWAY_LLM_ALLOW_INSECURE_UPSTREAM- permits an HTTP upstream for an explicitly trusted internal model endpoint. Defaultfalse; external providers must use HTTPS.GATEWAY_MEMORY_SHORT_TTL_DAYS- default TTL for short-term session/task memory, default7.GATEWAY_MEMORY_MEDIUM_TTL_DAYS- default TTL for medium-term project/team memory, default90.GATEWAY_MEMORY_MAX_TTL_DAYS- maximum TTL accepted by memory writes, default365.GATEWAY_MEMORY_SOURCE_DIRS- semicolon-separated directories for source-backed long-term memory search, defaultdocs;templates;adr;ADRs.GATEWAY_KNOWLEDGE_VAULT_PATH- writable markdown vault for personal and group assistant knowledge spaces, defaultcompany-knowledge-vault.GATEWAY_KNOWLEDGE_INGEST_DIRS- semicolon-separated allowlist of server directories from whichgateway_knowledge_ingest_filemay import UTF-8 text/markdown files.GATEWAY_KNOWLEDGE_INGEST_MAX_BYTES- maximum file size forgateway_knowledge_ingest_file, default1048576.GATEWAY_KNOWLEDGE_HISTORY_LIMIT- maximum retained versions per markdown document, default50and capped at500.GATEWAY_OBSIDIAN_ENABLED- enables Obsidian/Git-vault search as a long-term source-backed memory provider. If unset, it is enabled automatically when a vault path is configured.GATEWAY_OBSIDIAN_VAULT_PATH- path to one Obsidian vault mounted into the Gateway container, for example/data/obsidian-vault.GATEWAY_OBSIDIAN_VAULT_DIRS- semicolon-separated list of additional Obsidian vault directories.GATEWAY_OBSIDIAN_VAULT_NAME- vault name used in returnedobsidian://links, defaultcompany-knowledge-vault.GATEWAY_OBSIDIAN_BASE_URL- optional GitLab/web base URL for returned note links. If unset, Gateway returnsobsidian://openlinks.GATEWAY_COMPANY_INDEXES_FILE- JSON registry of live Yonote source-of-truth indexes, defaultgateway-company-indexes.json.GATEWAY_FACTORY_PROJECTS_FILE- JSON registry that maps Trackerproject.primaryvalues to stable factory project ids, defaultgateway-factory-projects.json.GATEWAY_COMPANY_YONOTE_INDEX_ID- optional Yonote document id/share id for the canonical company context index page.GATEWAY_COMPANY_YONOTE_INDEX_QUERY- Yonote search query used to find the canonical company context index when id is not configured, defaultCompany Context Index.GATEWAY_COMPANY_PEOPLE_INDEX_ID- optional Yonote index document id for employees, roles, teams, and HR links.GATEWAY_COMPANY_PROJECTS_INDEX_ID- optional Yonote index document id for projects, clients, Tracker, and Bitrix24 links.GATEWAY_COMPANY_PROCESSES_INDEX_ID- optional Yonote index document id for process/playbook links.GATEWAY_COMPANY_DOCUMENTS_INDEX_ID- optional Yonote index document id for documents, templates, and Yandex Disk links.GATEWAY_COMPANY_DECISIONS_INDEX_ID- optional Yonote index document id for ADR and decision links.GATEWAY_COMPANY_OPERATIONS_INDEX_ID- optional Yonote index document id for operational activity links.YONOTE_API_KEY- service token for Yonote backend routes.YONOTE_BASE_URL- Yonote host, defaulthttps://wiki.example.com.TRACKER_IAM_TOKEN- optional service fallback for Yandex Tracker whenGATEWAY_ALLOW_SERVER_YANDEX_TOKENS=true; normal production calls use the logged-in user's Yandex OAuth token.TRACKER_ORG_IDorTRACKER_CLOUD_ORG_ID- Tracker organization header.TRACKER_API_BASE_URL- Tracker API host, defaulthttps://api.tracker.yandex.net.GITLAB_TOKEN- optional service fallback for GitLab whenGATEWAY_ALLOW_SERVER_GITLAB_TOKEN=true; normal production calls use the user's encrypted GitLab personal access token from/credentials.GITLAB_API_BASE_URL- GitLab API v4 base URL, defaulthttps://gitlab.example.com/api/v4.Infra routes keep server metadata and SSH credential handles in Postgres. Private keys stay on the GatewayMCP host or in a vault; never put key values in env.
GATEWAY_INFRA_SSH_SECRETS_HOST- host directory mounted read-only into the GatewayMCP container at/gateway-secrets/ssh.Yandex Disk routes use the logged-in user's Yandex OAuth token.
YANDEX_DISK_API_BASE_URL- Yandex Disk REST API base URL, defaulthttps://cloud-api.yandex.net/v1/disk.BITRIX24_WEBHOOK_URL- Bitrix24 inbound webhook base URL.OPENROUTER_API_KEY- OpenRouter API key for audio routes.OPENROUTER_TRANSCRIBE_MODEL- default model foropenrouter.audio.transcribe.OPENROUTER_ALLOWED_AUDIO_DIRS- semicolon-separated absolute path allowlist for local audio reads.OPENROUTER_MAX_AUDIO_SIZE_MB- max audio file size Gateway may read, default10.OPENROUTER_TIMEOUT_SECONDS- OpenRouter HTTP timeout, default120.TELEGRAM_API_ID,TELEGRAM_API_HASH- Telegram API credentials.TELEGRAM_SESSION_STRING- preferred Telegram authorized session string for servers/containers.TELEGRAM_SESSION_NAME- fallback local Telegram session file name, defaultgateway-mcp-telegram.GATEWAY_SKILL_UPDATE_CHAT_ID- team Telegram chat id for skill update notifications (legacyGATEWAY_COMIND_CHAT_IDandGATEWAY_COMIND_MR_REVIEW_CHAT_IDare still honored).CALDAV_URL- CalDAV endpoint, defaulthttps://caldav.yandex.ru. Calendar requires a per-user encrypted Yandex Calendar app password stored by GatewayMCP; regular OAuth tokens are not used for CalDAV.GATEWAY_UPSTREAM_TIMEOUT_SECONDS- upstream HTTP timeout, default60.
Factory project registry
gateway-factory-projects.json maps the numeric Tracker Project shortId from
issue.project.primary to a stable logical project_id. The resolver uses this
mapping before queue, summary, Yonote, or GitLab hints. Register each project
before autonomous execution; a missing or unknown mapping produces the
tracker_project readiness gap.
Repository binding is explicit. Set gitlab_project or
gitlab_project_path in the same registry entry, or provide project_path in
the Work Contract. Gateway does not guess a repository from a registered
Tracker Project name, and a logical project_id is never treated as a GitLab
project key.
Queue-prefix fallback is disabled unless the queue appears in the registry's
explicit queue_fallback allowlist. It exists only for legacy issues and does
not make a task without project.primary ready for factory execution.
Policy
gateway-policy.json maps Yandex identities to groups and scopes.
{
"default_groups": ["employees"],
"groups": {
"employees": {"scopes": ["skills:read", "tools:read", "company:read", "factory:read", "factory:write", "process:read", "memory:read", "memory:write", "notifications:read", "notifications:write", "telemetry:write"]},
"service-agents": {"scopes": ["factory:read", "factory:write", "factory:claim"]},
"access-readers": {"scopes": ["access:read"]},
"access-admins": {"scopes": ["access:read", "access:admin"]},
"company-readers": {"scopes": ["company:read"]},
"process-readers": {"scopes": ["process:read"]},
"memory-readers": {"scopes": ["memory:read"]},
"memory-writers": {"scopes": ["memory:read", "memory:write"]},
"memory-admins": {"scopes": ["memory:read", "memory:write", "memory:admin"]},
"telemetry-readers": {"scopes": ["telemetry:read"]},
"telemetry-writers": {"scopes": ["telemetry:write"]},
"tool-callers": {"scopes": ["tools:call"]},
"yonote-readers": {"scopes": ["yonote:read"]},
"tracker-readers": {"scopes": ["tracker:read"]},
"gitlab-readers": {"scopes": ["gitlab:read"]},
"gitlab-writers": {"scopes": ["gitlab:read", "gitlab:write"]},
"yandex-disk-readers": {"scopes": ["yandex_disk:read"]},
"yandex-disk-writers": {"scopes": ["yandex_disk:read", "yandex_disk:write"]},
"bitrix24-readers": {"scopes": ["bitrix24:read"]},
"openrouter-audio-users": {"scopes": ["openrouter:audio"]},
"notification-writers": {"scopes": ["notifications:write"]},
"notification-readers": {"scopes": ["notifications:read"]},
"telegram-readers": {"scopes": ["telegram:read"]},
"calendar-readers": {"scopes": ["calendar:read"]},
"admins": {"scopes": ["*"]}
},
"users": {
"person@example.com": {"groups": ["tool-callers", "yonote-readers", "tracker-readers"]}
}
}Use allowed_email_domains or explicit users before exposing a production Gateway.
Work-ledger authorization has two layers. Scopes allow a class of action, while
resource grants restrict system=factory, resource_type=project, and the
project id or wildcard visible to the actor. Hermes should receive
factory:claim and explicit project grants through GatewayMCP administration;
backend tokens must not be passed to the factory.
Company Source Of Truth
Company context is anchored in live Yonote index pages, not in a manually maintained local company file. gateway-company-indexes.json defines the domains and fallback search queries; production should set the matching GATEWAY_COMPANY_*_INDEX_ID variables to the exact Yonote document ids.
The default domains are:
people_roles- employees, roles, teams, HR links.projects_clients- project/client indexes, Tracker and Bitrix24 links.processes- process index, playbooks, operating rules.documents- document/template indexes and Yandex Disk folders.decisions_adr- Yonote/GitLab ADR and decision indexes.operational_activity- Tracker, Telegram, Calendar operating activity.
Agents should start company-context-heavy work with:
gateway_company_get_source_of_truth()
gateway_company_bootstrap_context(query="<task/client/project/person/process>")
gateway_company_search(query="<specific thing>", kind="<person|project|client|process|document|adr|task>")The Gateway returns the configured Yonote index references together with live search/get results. If an exact index id is missing, Gateway falls back to the query declared in gateway-company-indexes.json.
Postgres
When GATEWAY_DATABASE_URL is set, GatewayMCP uses SQL migrations to manage:
oauth_states- short-lived Yandex OAuth state values used during login.audit_events- append-only audit records for login and tool calls.memory_entries- short-term and medium-term memory entries with TTL, scope, source, sensitivity, and creator metadata.assistant_sessions- assistant session metadata without raw prompt text.assistant_skill_events- lifecycle events for local agent skills across Claude, Codex, Cursor, and Hermes.access_scope_grants- DB-backed user/group scope grants and denies.access_resource_grants- DB-backed user/group resource ACL grants and denies.schema_migrations- applied migration versions.
Runtime code does not create or alter application tables. Run gateway-mcp migrate up during deploy, before serving MCP traffic. gateway-mcp migrate status reports applied and pending migrations. The Docker Compose gateway command runs migrations before starting the server.
The Docker Compose file starts Postgres 16 and wires GATEWAY_DATABASE_URL automatically.
Access Control
GatewayMCP has two access layers:
Scopes answer "which class of action is allowed":
tools:call,yonote:read,gitlab:write,access:admin.Resource ACL answers "which concrete resource is allowed": Yonote document, Tracker issue/queue, GitLab project/file, Yandex Disk path, Telegram chat, calendar, etc.
gateway-policy.json remains the bootstrap/default policy. Runtime user/group grants live in Postgres and are managed through the gateway_admin_* tools. Deny grants take priority over allow grants. Resource patterns support * wildcards. Temporary access uses ttl_days.
GATEWAY_RESOURCE_POLICY_MODE=permissive is the rollout-safe default: a call with valid scopes and no matching resource policy is allowed, while matching deny policies are enforced. Set GATEWAY_RESOURCE_POLICY_MODE=strict after resource grants are populated to require an explicit allow for each protected resource.
Infra Server Access
Infrastructure access uses handles, not raw secrets:
server metadata lives in
infra_servers;SSH credential metadata lives in
infra_ssh_credentials;the private key path is encrypted at rest and resolved only inside GatewayMCP;
agents call
infra.ssh.execwithserver_id,credential_handle, and an allowlisted diagnostic command;GatewayMCP checks
tools:call, route scope such asinfra:ssh:exec, resource ACL forsystem=infra, and the command allowlist before opening SSH.
Example seed, run only on the GatewayMCP host:
from gateway_mcp.services.storage import upsert_infra_server, upsert_ssh_credential
upsert_infra_server(
server_id="app-prod-01",
hostname="app-prod.example.com",
address="203.0.113.10",
environment="production",
role="Gateway runtime host",
owner="platform operations",
metadata={"domain": "gateway.example.com"},
)
upsert_ssh_credential(
handle="ssh_key_app_prod_01_ops_agent",
server_id="app-prod-01",
username="ops-agent",
private_key_path="/gateway-secrets/ssh/ops-agent_app-prod-01_ed25519",
allowlist=[
"whoami",
"hostname",
"sudo -n /usr/bin/docker ps",
"sudo -n /usr/sbin/nginx -t",
],
)Grant resource access separately:
system=infra
resource_type=server
resource_pattern=app-prod-01
actions=["read", "ssh:exec"]Admin write tools default to dry_run=true; callers must explicitly set dry_run=false after reviewing the preview.
Scope grants are applied when GatewayMCP mints a new Gateway JWT after login. Resource grants are checked at each backend call.
Privacy Gateway
GatewayMCP is the privacy boundary for company data sent to an LLM. Agents must not receive raw personal, confidential, or secret-bearing backend content and then sanitize it themselves; sanitization must happen before data enters the model context.
There are two protected flows:
agent -> gateway_call_tool_sanitized
-> access check
-> raw backend fetch inside GatewayMCP
-> privacy policy and sensitive-data detection
-> sanitized payload to agent
agent runtime -> /privacy/v1/chat/completions or /privacy/v1/responses
-> Gateway OAuth and llm:proxy scope
-> pseudonymize request and remove secrets
-> external OpenAI-compatible model
-> inspect model output and restore only request pseudonyms
-> agent runtimeImplemented tools:
gateway_privacy_classifyreports entity classes and actions without returning source values.gateway_privacy_sanitize_textprepares text for a downstream system. It does not make an already visible prompt private retroactively.gateway_call_tool_sanitizedis the preferred read path for HR, client, contract, finance, CRM, mail, Telegram, and other sensitive company data.
The OpenAI-compatible base URL is https://<gateway>/privacy/v1. The client authenticates with its Gateway bearer token; the external provider key never leaves GatewayMCP. Streaming clients are supported by buffering the upstream response, applying privacy controls to the complete value, and then emitting compatible server-sent events. This deliberately trades first-token latency for deterministic masking.
Default transformations:
pseudonymizefor people, emails, phones, passport data, taxpayer and social-insurance identifiers, bank accounts, IP addresses, and configured company terms.generalizefor dates of birth and financial values under thestrictpolicy.redactfor passwords, API keys, OAuth/session tokens, private keys, and credentials. Redacted secrets have no restoration mapping.
Provider-side conversations, background requests, images, audio, and files are rejected by the text privacy proxy because they could bypass inspection. Provider storage is forced off. Binary inputs must use Gateway file sessions and a future media-aware privacy processor; they are not silently forwarded.
Privacy audit events contain only request IDs, policy names, durations, entity classes, and counts. They never contain prompts, responses, detected values, pseudonym maps, or provider credentials. Prometheus exports bounded counters for privacy actions and proxy status.
Skill And Agent Telemetry
GatewayMCP records a metadata-only lifecycle for company skills. A stable correlation_id links started with completed or failed; duplicate delivery is idempotent, and gateway_telemetry_session_finished closes invocations that a client left open. Aggregates include completion and failure counts, abandoned and running invocations, success rate, active users, and p50/p95 duration by skill, pack, version, agent, and project.
Usage events can additionally record provider/model, tokens, cache use, duration, tool count, usage class, and estimated cost. The event marks whether values are actual, agent-local estimates, general estimates, or billing imports so dashboards do not mix unlike data silently.
Telemetry never stores prompts, responses, result bodies, document text, transcripts, secrets, tokens, or stack traces. Sensitive metadata keys are replaced with [redacted]. Administrators can inspect skill lifecycle metrics at /admin/telemetry/skills.
Process Intelligence
GatewayMCP exposes a process-intelligence layer for agents such as Hermes. MCP still only provides access; the process layer turns permitted backend data into a small normalized event model:
source system event
-> sanitized process event
-> repeated chain candidate
-> comparison with Yonote source of truth
-> staff-reviewed Process Rebuild BacklogThe public process tools never return upstream tokens or raw records. They redact common personal data patterns, return source references instead of full backend payloads, and classify candidates as:
documented and observed;
documented but needing trace review;
emergent or undocumented;
broken/fragmented candidate;
instrumentation gap.
Use gateway_process_events_search for evidence, gateway_process_candidates_discover for candidate chains, gateway_process_compare_with_yonote to check the written process, and gateway_process_rebuild_backlog for management follow-up. Official process pages in Yonote are not changed automatically; staff approves the move first.
Corporate Memory
GatewayMCP now keeps corporate memory in three tiers:
Short-term: session/task memory in Postgres with TTL. Use it for active task state, compact session summaries, and temporary decisions.
Medium-term: project/team facts and summaries in Postgres with longer TTL. Use it for working conventions, recurring preferences, and recent project context.
Long-term: source-backed knowledge from Yonote, templates, ADRs, and docs. It is searched through
gateway_memory_sources_search; it is not copied into the memory table by default.Personal and group markdown knowledge spaces: user-owned or team-owned notes in a writable vault. Use
gateway_knowledge_*tools when an employee asks the assistant to remember materials, keep a private context library, or create a shared workspace for a team.Optional long-term Obsidian provider: mount a Git-backed Obsidian vault into the Gateway container and set
GATEWAY_OBSIDIAN_VAULT_PATH. Gateway indexes markdown notes, reads simple frontmatter (title,scope,sensitivity,owners,tags,source_status), returns citations, and keeps restricted/secret notes visible only tomemory:adminuntil a richer ACL mapping is configured.
Use gateway_memory_write only for short or medium memory. Long-term knowledge should stay in canonical systems and be returned with source information. gateway_memory_search can combine Postgres memory with source-backed long-term search, including accessible markdown knowledge spaces, when include_sources=true.
Use gateway_knowledge_document_put when the user explicitly asks to save durable personal or group context. Personal space is private to the user. Group spaces have reader, writer, and admin members stored in members.yaml; memory:admin can audit and recover access. The vault is plain markdown with generated index.md, indexes/spaces.json, and indexes/tags.json, so it can be backed up or versioned by Git outside the agent session. Updates archive the previous content under the hidden .gateway-history directory. Deletes move content into the hidden .gateway-trash directory, and neither directory is included in normal indexes or search results.
Example short-term write:
{
"content": "For this session, the user wants GatewayMCP memory implemented with Postgres TTL and no Redis.",
"tier": "short",
"scope": "user",
"tags_json": "[\"session\", \"architecture\"]",
"metadata_json": "{\"task\":\"gateway-memory\"}"
}Example medium-term project fact:
{
"content": "The agent platform uses GatewayMCP as the only boundary for corporate MCP access.",
"tier": "medium",
"scope": "project",
"subject": "agent-platform",
"source_type": "adr",
"source_uri": "agent-platform/corporate-memory.md",
"ttl_days": 180
}Company Context
GatewayMCP exposes company context as a separate layer from skills and memory:
people and roles: HR system/table and Yonote;
projects and clients: Tracker, Yonote, and Bitrix24;
processes: Yonote process index;
documents: Yandex Disk and Yonote;
decisions and ADRs: Yonote and GitLab;
operational activity: Tracker, Telegram, and Calendar.
The canonical company context index lives in Yonote. It should be a human-owned index page with links to HR tables, project/client indexes, process indexes, document folders, ADR pages, and operational dashboards. GatewayMCP reads that page through GATEWAY_COMPANY_YONOTE_INDEX_ID or discovers it with GATEWAY_COMPANY_YONOTE_INDEX_QUERY.
Use gateway_company_get_source_of_truth to understand where a fact should come from. Use gateway_company_bootstrap_context at the start of company work to load the source map, Yonote index, relevant company memory, and matching source-system results. Use gateway_company_search and gateway_company_get for specific people, teams, projects, clients, processes, documents, decisions, and systems.
Do not maintain a parallel company registry in Git. GatewayMCP stores memory and audit state, but company facts stay in Yonote and the operational systems listed above.
Observability
Prometheus metrics:
GET /metricsKey metrics:
gateway_mcp_tool_calls_totalgateway_mcp_tool_latency_secondsgateway_mcp_auth_failures_totalgateway_mcp_policy_denies_totalgateway_mcp_upstream_errors_totalgateway_mcp_memory_events_totalgateway_mcp_memory_search_resultsgateway_mcp_assistant_skill_events_totalgateway_mcp_assistant_skill_duration_secondsgateway_mcp_active_sessions
Do not use user emails, document ids, or raw prompt text as Prometheus labels. Per-user detail goes to the append-only Postgres audit log with hashed email/login values and the assistant telemetry tables. JSONL is only a local-dev fallback.
Health check:
GET /healthzMigration Note
Do not point production agents directly at private MCP servers once GatewayMCP owns routing. Keep private tokens in the gateway runtime environment or secret manager, not in project workspaces or plugin manifests.
Available Tools
94 toolsgateway_access_package_catalogARead-only
List business access packages that an employee may request.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description's 'List' verb aligns with that safe-read behavior. The description adds the meaningful restriction that only requestable packages are returned. It does not cover pagination or output ordering, but the presence of an output schema reduces the need for that detail.
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, focused sentence with no filler. It front-loads the action and resource, then adds the distinguishing scope.
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 no-parameter, read-only listing tool with an output schema, the description is entirely sufficient. An agent understands exactly what to expect and when to use this tool.
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?
There are zero parameters and the schema description coverage is 100%, so there are no parameters requiring documentation. The description still clarifies what the catalog contains, which is useful context beyond the empty 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 identifies the action (List) and resource (business access packages), and narrows the scope to packages an employee may request, distinguishing it from the admin-oriented gateway_admin_access_package_catalog sibling. This precision lets an agent select it correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'that an employee may request' establishes the intended context: this is for employee-requestable packages rather than admin-managed catalogs. It does not explicitly name alternatives or exclusions, but the context is clear enough for a simple list-only tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_access_profileARead-only
Show the current authenticated identity, effective scopes, access packages, and recent access requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate safety. The description adds the specific data returned (identity, scopes, access packages, recent requests), which is useful. However, it doesn't disclose any additional behavioral traits like whether 'recent access requests' includes pending/approved/denied, or whether the output is paginated. With annotations covering the read-only nature, a 3 is appropriate.
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?
One sentence, front-loaded with the verb and resource, and lists the key output categories. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema, the description is complete enough. It tells the agent what data it will get. It could mention that this is the caller's own profile (vs. admin views), but the phrase 'current authenticated identity' already implies that. The output schema likely covers return details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the schema is trivially complete (100% coverage). The description adds meaning by explaining what the tool returns, which is the only semantic content needed. Baseline 4 for 0-param tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: showing the current authenticated identity, effective scopes, access packages, and recent access requests. It uses a specific verb ('Show') and resource ('current authenticated identity...'), which distinguishes it from sibling tools like gateway_access_request_list or gateway_admin_list_access. However, it doesn't explicitly name a sibling to differentiate from, so it's clear but not maximally distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this to see your own access profile. It doesn't explicitly state when to use it versus alternatives like gateway_access_request_list or gateway_admin_explain_access. The context is clear enough for a self-profile tool, but no exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_access_request_cancelB
Cancel one pending access request owned by the current user.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (no readOnlyHint or destructiveHint), so the description must carry the behavioral burden. It only states 'cancel' without disclosing side effects, reversibility, or impact on approval workflows. The 'pending' constraint is useful but insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core purpose without verbosity.
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 mutation nature of the tool and zero annotation coverage, the description lacks essential context about preconditions, side effects, error scenarios, and the meaning of the 'reason' parameter. The output schema exists but does not compensate for the missing behavioral and semantic details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain both parameters. It implicitly references request_id but never mentions the optional 'reason' parameter, leaving its purpose and usage entirely unclear.
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 (cancel), the resource (pending access request), and a key constraint (owned by the current user). It effectively distinguishes from sibling tools like gateway_access_request_create and gateway_admin_access_request_decide, though it could be more explicit about the ownership restriction.
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 that this tool is for the user's own requests, which hints at when to use it versus admin tools, but it does not explicitly name alternatives or state when not to use it. The ownership constraint is present but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_access_request_createA
Request a versioned business access package for the current user. This never grants access automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| ttl_days | No | ||
| package_key | Yes | ||
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only a title, so the description bears the full burden. It adds one valuable behavioral disclosure — 'This never grants access automatically' — preventing the costly assumption that the request results in access. But it omits other relevant behavior, such as the request entering an approval workflow or the semantics of idempotency_key and ttl_days.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler; the core action is front-loaded and the critical caveat ('never grants access automatically') follows immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, but the description is still incomplete for a workflow-creating tool with four undocumented parameters. It does not place the tool in its lifecycle context: what happens after submission, whether later cancellation is needed, or how this request relates to the approval/decide sibling tools. An agent can select the tool but cannot invoke it with full confidence or set correct user expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only indirectly glosses package_key ('business access package'). The required parameters (package_key, reason) get no explicit explanation, and ttl_days and idempotency_key are entirely unaddressed, leaving important invocation details to inference.
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 states a specific verb ('Request'), resource ('versioned business access package'), and actor ('current user'), clearly differentiating it from siblings like gateway_admin_grant_access_package (granting) and gateway_admin_access_request_decide (deciding on requests). An agent can tell what this does at a glance.
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 scope ('for the current user') and gives a when-not signal ('never grants access automatically'), which tells the agent this tool will not deliver immediate access. However, it never names alternative tools (e.g., gateway_admin_grant_access_package) or states explicit conditions for choosing them instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_access_request_listCRead-only
List access requests created by the current user.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds no additional behavioral context—such as default limit behavior, status filtering semantics, pagination, or ordering—beyond what the annotation provides. It contributes minimal extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the core purpose. It is efficient and readable, but it is perhaps too brief, omitting necessary parameter and usage details. As a result, conciseness is good but at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two parameters with no schema descriptions, an output schema exists but its structure is unknown, and there are closely related sibling tools, the description is insufficient. It does not explain parameter usage, expected response format, or how it differs from similar tools, leaving an agent under-informed.
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 schema description coverage at 0%, the description must explain the parameters. It does not mention 'limit' or 'status' at all, leaving their meanings and defaults undocumented. This is a significant gap for a tool with two optional 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 uses a specific verb ('List') and resource ('access requests') with a clear scope ('created by the current user'), which distinguishes it from the admin-level list (gateway_admin_access_request_list). However, it does not explicitly name any sibling tool, so differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like gateway_admin_access_request_list or gateway_access_request_create. The description only states what it does, not the context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_access_package_catalogBRead-only
List versioned business access packages. Requires access:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's 'List' verb is consistent with that. The description adds the 'versioned' qualifier and the access:read requirement, providing some behavioral context beyond annotations, though it does not explain versioning semantics or output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. The core action and the permission requirement are both included efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (zero params, output schema exists, read-only annotation present), so the short description is mostly sufficient for invoking it. However, it lacks any guidance that would help an agent distinguish this catalog tool from similarly named access-package tools, leaving a meaningful context gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the schema fully handles parameter documentation. Per the calibration baseline for zero-parameter tools, the description does not need to add parameter detail.
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 states a clear verb and resource: 'List versioned business access packages.' It clearly identifies the tool's function with the 'versioned' qualifier, which hints at a distinction from siblings like gateway_admin_list_access_packages, but it does not explicitly differentiate itself.
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 only states a permission prerequisite ('Requires access:read') and gives no guidance on when to choose this tool over the many similar access-package list/catalog siblings such as gateway_admin_list_access_packages or gateway_access_package_catalog. No exclusions or alternative conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_access_request_decideA
Approve or reject one pending access request. Requires access:admin and defaults to dry-run.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| dry_run | No | ||
| decision | Yes | ||
| request_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a critical behavioral trait: 'defaults to dry-run.' This is valuable because the schema's dry_run default is true, and the description confirms that the tool will not execute the decision unless dry_run is explicitly set to false. It also states the permission requirement. It does not describe the output shape, but an output schema exists, so that burden is reduced.
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 one sentence with no filler. It front-loads the core action, then adds the permission requirement and the dry-run default. Every word earns its place.
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 single-decision tool with an output schema, the description covers the essential behavioral context: what it does, what permission is needed, and the dry-run default. It does not explain the relationship to gateway_approval_decide or what happens when dry_run is false, but the output schema and the clear action verb cover most of what an agent needs.
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 names the three required parameters implicitly: request_id (the request being decided), decision (approve or reject), and reason (why). However, it does not explain valid values for 'decision' (e.g., 'approve' vs 'reject') or whether 'reason' is free-form or constrained. The dry_run parameter is explained by the description's 'defaults to dry-run' note. This is adequate but not rich.
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 states a specific verb ('Approve or reject') and a specific resource ('one pending access request'), which clearly distinguishes it from sibling tools like gateway_admin_access_request_list (listing) and gateway_approval_decide (generic approval decisions). The phrase 'one pending access request' also signals it operates on a single item, not a batch.
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 when to use it: when deciding a pending access request. It also names a prerequisite ('Requires access:admin'), which helps an agent know whether it is permitted to call it. However, it does not explicitly contrast with gateway_approval_decide or gateway_admin_access_request_list, so an agent might need to infer the boundary between access-request decisions and general approval decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_access_request_listCRead-only
List employee access requests. Requires access:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | pending | |
| package_key | No | ||
| requester_subject | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the auth requirement 'Requires access:read,' which is useful context not present in annotations. However, it does not disclose other behavioral aspects like pagination, filtering semantics, or default status, leaving the description thin beyond what annotations provide.
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 very concise (two sentences) and front-loaded with the main purpose. However, it is so sparse that it omits crucial contextual information, making it under-specified rather than appropriately concise. It earns a middling score for being brief but at the cost of usefulness.
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 (4 filter parameters) and the existence of an output schema, the description should still explain the scope (admin vs. user-level), the filtering behavior, and the meaning of parameters. None of this is provided. The description is incomplete for an admin list tool, especially compared to sibling tools that likely have richer descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of any of the four parameters (limit, status, package_key, requester_subject). The description does not compensate for the lack of schema documentation, leaving parameter semantics entirely unexplained.
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 states a clear verb and resource: 'List employee access requests.' This is specific and unambiguous. However, it does not distinguish from the sibling tool gateway_access_request_list (non-admin), so an agent might not know which to choose without further investigation.
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?
There is no guidance on when to use this tool versus alternatives like gateway_access_request_list or other admin tools. The only hint is the 'admin' prefix in the tool name, but the description does not explicitly state the difference or mention any prerequisites beyond the auth requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_audit_searchBRead-only
Search redacted GatewayMCP audit metadata. Requires telemetry:read.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| event | No | ||
| limit | No | ||
| offset | No | ||
| status | No | ||
| system | No | ||
| decision | No | ||
| tool_name | No | ||
| actor_subject | No | ||
| gateway_request_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description correctly avoids restating that. It adds valuable context by noting the results are 'redacted' and that telemetry:read is required, which an agent needs to know before invocation. No contradiction with annotations 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 a single efficient sentence that front-loads the core action and resource, then adds the permission requirement. Every word earns its place, with no filler 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 the tool has 10 optional filter parameters, no parameter descriptions, and no usage hints, the description is not complete enough for an agent to query effectively. The output schema and readOnly annotation help, but they do not compensate for the complete absence of parameter semantics and alternative-tool routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the 10 undocumented parameters, but it does not mention any of them. While parameter names like days and limit are somewhat self-explanatory, fields such as event, status, system, decision, and tool_name have no allowed-value or formatting guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and a clear resource ('redacted GatewayMCP audit metadata'). It also distinguishes this tool from the sibling gateway_admin_audit_summary by emphasizing search over summary, and the 'redacted' qualifier adds precision.
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 about when to use this tool versus alternatives like gateway_admin_audit_summary or gateway_call_tool_sanitized. The only context provided is the telemetry:read permission requirement, which is a prerequisite, not a usage decision guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_audit_summaryARead-only
Summarize audit events by event, tool, system, decision, and status. Requires telemetry:read.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| system | No | ||
| actor_subject | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint=true, indicating a safe read operation. The description adds the required telemetry:read scope and the grouping dimensions, which are behavioral details not captured by the annotation. This goes beyond what the structured data provides, though it does not describe output format or potential limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the action, resource, grouping dimensions, and a permission requirement. There is zero wasted text, and it reads efficiently.
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 that an output schema exists (covering return values) and annotations cover the read-only nature, the description is largely complete. It states what the tool does and the required permission. It could optionally mention the default time window (days default 7) or that all parameters are optional, but these are available in the schema defaults. The description is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% – no property has a description. The description mentions 'system' as a grouping dimension, but it does not explain the meaning of 'days', 'limit', or 'actor_subject', nor how they affect the summary. Since the schema provides no semantics and the description only partially covers them, the tool fails to adequately compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Summarize') and resource ('audit events') with explicit grouping dimensions (event, tool, system, decision, status). This clearly distinguishes it from sibling tools like gateway_admin_audit_search (which likely returns detailed events) and gateway_telemetry_usage_summary (which focuses on telemetry usage). The purpose is 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 provides no explicit when-to-use guidance or comparison to alternatives. The permission note ('Requires telemetry:read') is about authorization, not usage context. Usage is implied by the name and the summary action, but the tool does not explicitly say 'use this for summaries, not raw logs' or mention any sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_explain_accessBRead-only
Explain whether a user/group subject can access one MCP resource. Requires access:read.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| system | Yes | ||
| resource | Yes | ||
| groups_json | No | [] | |
| subject_key | No | ||
| resource_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description reinforces this by saying 'Explain' rather than mutate. It adds a useful behavioral clue beyond annotations by specifying the required permission, 'Requires access:read,' which helps the agent predict authorization failures.
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?
Both sentences earn their place: the first states the core function, the second states the required permission. It is short, front-loaded, and free of repetitive filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, 0% schema coverage, and no output schema text beyond the schema itself, the description is too thin to ensure correct invocation. It doesn't explain how a subject is identified, how groups_json relates to subject_key, or what action/resource_type mean; the output schema exists, but input-side guidance is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not compensate: none of the six parameters (system, action, resource, groups_json, subject_key, resource_type) are explained. The phrase 'user/group subject' hints at subject semantics, but no parameter mapping or format guidance is given.
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 a specific verb ('Explain') and target ('whether a user/group subject can access one MCP resource'), making the tool's core purpose understandable. It distinguishes itself from the many admin/access siblings only by mentioning 'one MCP resource, but it never explicitly names an alternative, so it doesn't fully earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided: it doesn't say when to prefer this over gateway_admin_list_access, gateway_admin_grant_resource, or gateway_access_profile. The only extra info, 'Requires access:read,' is a prerequisite, not a usage decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_grant_access_packageA
Assign a complete business access package atomically. Requires access:admin.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| dry_run | No | ||
| ttl_days | No | ||
| package_key | Yes | ||
| subject_key | Yes | ||
| subject_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses two behaviorally relevant traits beyond the annotations: the operation is atomic and requires access:admin. It does not mention side effects, reversibility, or that dry_run defaults to true, which is a notable omission for an admin 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 two short sentences with no filler. The core action is front-loaded, and the admin permission requirement is provided as useful supplementary information.
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?
Despite having an output schema Alert, the tool has six parameters, four required, and zero schema descriptions. A complete description would clarify required parameter semanticsroutes, especially subject_type values, the dry_run default behavior, and how package grants compare to scope/resource grants. Current description is too sparse for reliable 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 for the six undocumented parameters. It clarifies that package_key refers to a business access packageaging package, but it does not explain subject_type, subject_key, reason, dry_run, or ttl_days. This leaves agents unable to determine valid parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Assign'), a clear resource ('complete business access package'), and a distinctive trait ('atomically'). This differentiates it from sibling tools like gateway_admin_grant_scope and gateway_admin_grant_resource, which operate on narrower access units.
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 phrase 'complete business access package' implies this is for package-level grants rather than scopes or resources, so usage context is indirectly conveyed. However, the description does not explicitly state when to use this tool versus alternatives like gateway_admin_grant_scope, gateway_admin_grant_resource, or gateway_admin_revoke_access_package.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_grant_resourceC
Grant or deny one MCP resource pattern. Requires access:admin; dry_run defaults to true.
| Name | Required | Description | Default |
|---|---|---|---|
| effect | No | allow | |
| reason | No | ||
| system | Yes | ||
| dry_run | No | ||
| priority | No | ||
| ttl_days | No | ||
| subject_key | Yes | ||
| actions_json | No | ["read"] | |
| subject_type | Yes | ||
| resource_type | No | ||
| resource_pattern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only a title, so the description must disclose behavior on its own. It adds the admin permission requirement and notes dry_run defaults to true, but it never explains that dry_run prevents actual changes, what happens when dry_run is false, or that the operation is a persistent mutation. This is minimal disclosure for an admin mutation.
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 one tight sentence with no filler; the purpose is front-loaded and the permission/default caveats are packed efficiently. Every word contributes.
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?
This is a complex 11-parameter admin mutation with no safety annotations, yet the entire description is a single sentence. It lacks parameter semantics, side-effect disclosure, and routing guidance; the output schema does not compensate for these 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% with 11 parameters, yet the description only mentions resource_pattern and dry_run. subject_type, subject_key, system, effect, actions_json, priority, ttl_days, resource_type, and reason are left completely undefined, so the agent cannot correctly construct the required arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Grant or deny one MCP resource pattern') and the resource type 'resource pattern' clearly differentiates it from sibling tools like grant_scope and grant_access_package. Even though it doesn't name a sibling, the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over alternatives such as revoke_resource, grant_scope, or grant_access_package. 'Requires access:admin' is a permission prerequisite, not a usage criterion, and no exclusions or preferred contexts are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_grant_scopeA
Grant or deny a Gateway scope through Postgres. Requires access:admin; dry_run defaults to true.
| Name | Required | Description | Default |
|---|---|---|---|
| effect | No | allow | |
| reason | No | ||
| dry_run | No | ||
| ttl_days | No | ||
| scope_name | Yes | ||
| subject_key | Yes | ||
| subject_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the critical behavioral trait that dry_run defaults to true, which is essential safety information for an agent invoking a mutation tool. It also states the required admin permission, which is behavioral context beyond what annotations provide. The annotations only include a title, so the description carries the full burden and does well by surfacing the dry-run safety default and the Postgres implementation detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that packs the verb, resource, implementation detail, permission requirement, and safety default into 14 words. Every element earns its place, and the most critical safety information (dry_run default) is front-loaded at the end of the sentence where it's still immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential safety and permission context, and an output schema exists which reduces the need to explain return values. However, with 7 parameters and 0% schema description coverage, the description doesn't fully explain the parameter semantics (especially subject_type, subject_key, ttl_days, and reason). The tool is moderately complex as an admin mutation with multiple optional parameters, so more parameter guidance would be needed for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. The description mentions 'Grant or deny' which maps to the 'effect' parameter (allow/deny), and 'scope' maps to scope_name, but it doesn't explain subject_type, subject_key, ttl_days, reason, or dry_run semantics beyond the default. With 7 parameters and zero schema descriptions, the description only partially compensates for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Grant or deny') and resource ('a Gateway scope through Postgres'), which clearly identifies the operation. It distinguishes from siblings like gateway_admin_revoke_scope by covering both grant and deny in one tool, though it doesn't explicitly name the sibling. The 'through Postgres' detail adds implementation context that helps differentiate from other admin tools.
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 by mentioning the required 'access:admin' permission and the dry_run default, which signals this is an admin-only operation with safety defaults. However, it doesn't explicitly state when to use this tool versus alternatives like gateway_admin_revoke_scope or gateway_admin_grant_resource, nor does it explain when a deny effect would be preferred over using the revoke tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_list_accessARead-only
List DB-backed GatewayMCP scope and resource grants. Requires access:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| system | No | ||
| subject_key | No | ||
| subject_type | No | ||
| include_revoked | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the description correctly does not repeat that. It adds valuable context: the tool is 'DB-backed' (indicating the data source) and requires 'access:read' permission, which is a specific behavioral constraint not covered by annotations. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('List DB-backed GatewayMCP scope and resource grants') and then states the permission requirement. There is no fluff or redundancy, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (so return format is defined elsewhere) and annotations cover read-only behavior, the description is mostly complete for a simple list operation. However, the lack of parameter explanations and the absence of any mention of filtering or pagination (e.g., how limit works) leaves a gap for effective invocation. It is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of the five parameters (limit, system, subject_key, subject_type, include_revoked). Since the schema lacks descriptions and the description does not compensate, agents are left guessing about parameter semantics. The description should have at least hinted at the filter semantics (e.g., that subject_key/type filter grants).
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 states a specific verb ('List') and a precise resource ('DB-backed GatewayMCP scope and resource grants'), which clearly distinguishes it from sibling tools like gateway_admin_list_access_packages (which lists access packages) and gateway_admin_explain_access (which explains access). It is unambiguous and immediately identifies the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context ('List grants') and mentions the permission requirement ('Requires access:read'), which implies it should be used when you need to view grants and have that permission. However, it does not explicitly state when to prefer this over alternatives (e.g., gateway_admin_list_access_packages, gateway_admin_explain_access) or mention exclusions. The usage is implied but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_list_access_packagesCRead-only
List assigned access packages. Requires access:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| subject_key | No | ||
| subject_type | No | ||
| include_revoked | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the specific authorization requirement 'Requires access:read,' which is useful operational context beyond the annotation. It does not mention default filtering behavior such as include_revoked defaulting to false, but the read-only safety profile is adequately covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with no filler; both sentences add information. It is not bloated, though the terse style contributes to missing context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four optional parameters with no schema descriptions, and the description does not explain their meaning or default behavior. An agent cannot tell what subject_key/subject_type filter, what include_revoked does, or when this listing differs from sibling access tools. The presence of an output schema helps with return values, but input-side guidance is incomplete.
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 by explaining the parameters, but it names none of them. subject_key, subject_type, include_revoked, and limit are left entirely to the schema, whose property titles give only minimal hints. This is a significant gap for an agent deciding what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('assigned access packages'), clearly identifying this as a read-only listing operation. The word 'assigned' helps separate it from package-catalog siblings, though it does not explicitly distinguish it from gateway_admin_list_access or clarify the subject scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the many sibling admin/access tools, such as gateway_admin_list_access or gateway_admin_access_package_catalog. The only added context is the permission requirement 'access:read', which is a precondition rather than a usage rule. There are no exclusions or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_revoke_access_packageB
Revoke a package and only the grants created by it. Requires access:admin.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| bundle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations beyond the title, the description carries the full behavioral burden. It discloses the required permission and the scoping of grants, which is useful. However, it does not mention the dry_run parameter or any side effects such as reversibility, leaving significant behavioral context undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and permission with no wasted words. It is concise and to the point, though it lacks a structured breakdown of parameters or effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and permission, but omits the dry_run parameter's function and any note about reversibility or side effects. Given the output schema exists, return values are covered, but the missing parameter explanation leaves the agent under-informed for correct 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%, and the description does not mention either parameter (bundle_id or dry_run). The agent is left to infer from parameter names alone. The description fails to compensate for the schema's lack of documentation, especially the dry_run default behavior, which is critical for safe usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (revoke) and the resource (a package), and specifies the scope (only grants created by it). This distinguishes it from sibling tools like revoke_scope or revoke_resource, which target different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for revoking access packages, and it mentions the required permission (access:admin). However, it does not explicitly differentiate when to use this over sibling revoke tools (e.g., revoke_scope, revoke_resource), nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_revoke_resourceB
Revoke DB-backed MCP resource grants. Requires access:admin; dry_run defaults to true.
| Name | Required | Description | Default |
|---|---|---|---|
| system | No | ||
| dry_run | No | ||
| grant_id | No | ||
| subject_key | No | ||
| subject_type | No | ||
| resource_pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include a title, so the description must carry full behavioral disclosure. It mentions the destructive action and the dry_run default, which is useful, but it does not explain side effects, reversibility, or what happens on success or failure. For a mutation tool with no annotation hints, this is a moderate disclosure 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 two sentences, front-loaded with the core action and permission, and contains no filler. It is appropriately concise for the information it provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has six parameters with zero schema descriptions and an output schema, the description is highly incomplete. It does not explain how to specify a grant (by ID or subject/pattern), the meaning of each parameter, or the nature of the output. The dry_run note is helpful but far from sufficient for correct 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% and the description provides no explanation of any parameters beyond dry_run's default. Six parameters (system, grant_id, subject_key, subject_type, resource_pattern) are entirely unexplained, making it impossible to correctly identify which parameters are required to revoke a specific grant. The description does not compensate at all.
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 'Revoke' and the resource type 'DB-backed MCP resource grants', distinguishing it from sibling tools like revoke_access_package and revoke_scope. The specificity of 'DB-backed' further clarifies the domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for resource grants and mentions the permission requirement 'Requires access:admin', but it does not explicitly state when to use this tool versus other revoke variants. It lacks an explicit 'when not to use' or alternative routing, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_admin_revoke_scopeC
Revoke DB-backed Gateway scope grants. Requires access:admin; dry_run defaults to true.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| grant_id | No | ||
| scope_name | No | ||
| subject_key | No | ||
| subject_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only a title and no readOnly/destructive hints, so the description carries the full burden of behavioral disclosure. It states 'Revoke' which implies a destructive action, but does not explain side effects, reversibility, or consequences of a non-dry-run call. The dry_run default is mentioned, but its significance and what happens when set to false are not clarified.
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 very short and front-loads the core action, but it is under-specified. It does not waste words, yet it omits critical parameter context and usage nuance. It is concise but not appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters (none required), no schema descriptions, and minimal annotations, the description is far from complete. It does not explain how to identify a grant (which combination of parameters), what the output schema contains, or the implications of dry_run. A mutation tool with this complexity requires much more context for correct 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%, and the description only mentions dry_run's default. It does not explain grant_id, scope_name, subject_key, or subject_type, leaving an agent without any semantic guidance for four of five parameters. The description adds almost no value beyond what the schema's field names (which are also sparse) imply.
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 states a specific verb and resource: 'Revoke DB-backed Gateway scope grants.' This clearly distinguishes it from sibling tools like gateway_admin_revoke_resource and gateway_admin_revoke_access_package, which target different entities. The scope is precise and the action is 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 does not provide guidance on when to use this tool versus alternatives like grant_scope or revoke_resource. It only mentions a prerequisite (access:admin) but offers no context about selection criteria, when to avoid, or relationship to other revoke tools. An agent would have to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_approval_commentC
Add a clarification or comment to an approval. Requires approvals:write.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | ||
| approval_id | Yes | ||
| decision_payload_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no behavioral annotations beyond a title, this description provides few behavioral details. It verifies the write permission and that the tool adds content, but it does not explain if the comment is append-only, whether it changes the approval state, or what side effects `decision_payload_json` may cause.
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 short, well-structured two-sentence definition. The primary action is front-loaded and the permission requirement is useful rather than padding.
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 three-parameter tool with no schema descriptions and thin annotations, this description is not complete enough. The absent guidance on `decision_payload_json` and the interaction with the approval workflow prevents an agent from fully understanding the tool's effect, even though an output schema exists.
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 needed to compensate by explaining parameters; it does not. `approval_id` and `comment` are inferable from the tool name and description, but `decision_payload_json` remains unexplained, leaving a meaningful semantic gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the verb 'add' and the resource 'approval', and clarifies the content as a clarification or comment. This is clear enough to distinguish the tool from finalization actions like gateway_approval_decide, though it does not explicitly call out that alternative.
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 only usage guidance is the authorization prerequisite 'requires approvals:write'. The description does not state when to choose this tool over gateway_approval_decide, gateway_approval_create, or other approval-related tools, nor does it give any exclusions or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_approval_createB
Create an approval request for an agent workflow. Requires approvals:write.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes | ||
| four_eyes | No | ||
| payload_json | No | {} | |
| approval_type | Yes | ||
| artifact_hash | No | ||
| metadata_json | No | {} | |
| required_role | No | ||
| required_scope | No | ||
| expires_in_days | No | ||
| artifact_version | No | ||
| source_refs_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the behavioral burden. It does disclose an authorization requirement ('Requires approvals:write') and implies a side-effecting creation, but it does not describe approval workflow implications, four-eyes behavior, or what state the request enters.
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 two sentences are front-loaded and contain no filler; purpose and permission are stated efficiently. However, at only about 16 words for an 11-parameter tool, the text is arguably too sparse to be well-sized for its complexity, though what is present is 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?
The output schema may cover return values, but the input side is under-described: approval_type has no allowed values, subject semantics are absent, and optional fields like required_role, four_eyes, and expires_in_days are unexplained. The auth hint and workflow purpose save it from being completely vacuous, but it is far from complete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning for any of the 11 parameters. Required fields like approval_type and subject are left undefined, and free-form values such as payload_json, required_role, and source_refs_json receive no explanation, so an agent cannot reliably choose values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pairing ('Create an approval request') and adds the agent-workflow context, making the tool's purpose immediately clear. It is easily distinguishable from siblings such as gateway_approval_get, gateway_approval_list, and gateway_approval_decide.
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?
There is no guidance on when to choose this tool over related approval or access-request tools, and no exclusions or workflow context such as 'use when a human decision is required'. The only usage-related hint is the approvals:write permission, which is a prerequisite rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_approval_decideC
Approve, reject, or request information. Requires approvals:write.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | ||
| decision | Yes | ||
| approval_id | Yes | ||
| decision_payload_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds an explicit permission requirement, 'Requires approvals:write,' which is meaningful because annotations provide no read-only, destructive, or other behavioral hints. However, it does not disclose the side effects of the decision, whether it is reversible, or what happens when information is requested.
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 short, dense, and front-loaded with the core actions followed by the access requirement. Every sentence contributes useful information, though the compactness leaves room for missing detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is not complete for a decision-making mutation tool: it omits the semantics of the decision payload, the effect of requesting information, possible constraints, and the meaning of the optional comment field. An output schema exists, but the decision workflow and side effects remain underspecified.
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, but it only hints at possible decision types: approve, reject, or request information. It does not explain approval_id format, the exact accepted values for decision, the purpose of comment, or how decision_payload_json should be structured.
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 approves, rejects, or requests information on an approval, providing a specific action and resource. It does not explicitly differentiate itself from sibling tools like gateway_approval_comment or gateway_admin_access_request_decide, but the name and intended action make it clear enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as gateway_approval_comment or gateway_admin_access_request_decide. It only states the required permission, which is useful but not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_approval_getARead-only
Read one visible approval and its event history. Requires approvals:read.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_id | Yes | ||
| include_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with readOnlyHint=true by using 'Read', and adds useful context beyond annotations: results are limited to 'visible' approvals, event history is included, and approvals:read permission is required. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every phrase earns its place: 'Read', 'one', 'visible', 'event history', and the permission requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-one tool with readOnlyHint and an output schema, the description covers purpose, scope, and permission. It does not explicitly distinguish from sibling approval tools, but the singular 'one' combined with the tool name makes the intended use reasonably clear.
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 indirectly explains include_events via 'event history' but does not explain approval_id or the default behavior of include_events. Since approval_id is self-evident from the schema and tool name, the gap is moderate rather than severe.
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 states a specific verb ('Read'), a clear resource ('one visible approval'), and a distinguishing scope ('and its event history'). This separates it from sibling tools like gateway_approval_list, gateway_approval_decide, and gateway_approval_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the singular read tool for a single approval and its history, and it states the required permission. It does not explicitly name alternatives or when-not-to-use conditions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_approval_listBRead-only
List visible or assigned approval requests. Requires approvals:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | pending | |
| created_by | No | ||
| approval_type | No | ||
| required_role | No | ||
| assigned_to_me | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the read-only safety profile. The description adds useful context about the required permission and the 'visible or assigned' scope, but it does not disclose pagination, ordering, or how visibility is determined. It neither contradicts the annotation nor fully characterizes behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence front-loads the core action and resource, then states the permission requirement. There is no wasted wording or repetition of the schema, title, or annotations.
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?
Despite having an output schema and a readOnly annotation, the description does not explain accepted values for status, approval_type, or required_role, nor what 'visible' means. With six optional parameters and 0% schema coverage, the definition is too sparse for an agent to use it with confidence.
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 carries the full burden for explaining six parameters. It only gestures toward 'assigned' requests, leaving limit, status, created_by, approval_type, and required_role undocumented. Parameter names alone are not sufficient.
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 opens with the verb 'List' and identifies the resource 'approval requests,' narrowed by scope ('visible or assigned'). It is clear and separates this from single-item tools like gateway_approval_get, though it does not explicitly name sibling tools.
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?
It provides one prerequisite ('Requires approvals:read') but no guidance on when to use this tool versus related sibling tools such as gateway_approval_get, gateway_approval_decide, or gateway_access_request_list. There are no exclusions or alternative routing hints, which is a significant gap given the large sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_call_toolC
Call a private backend route through GatewayMCP with auth, scope checks, and audit.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | ||
| arguments_json | No | {} | |
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain only a title (no readOnly/destructive hints), so the description carries the full behavioral burden. It adds genuine context by disclosing that calls pass through auth, scope checks, and audit logging — the defining behavioral trait of a gateway proxy. But it omits failure behavior, idempotency semantics, and any distinction from gateway_call_tool_sanitized, making it minimally transparent rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly-written sentence with zero filler; the verb and resource lead, and the governance qualifiers trail cleanly. It is slightly too sparse to carry the needed operational guidance, but that is a completeness issue rather than a conciseness defect.
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 generic pass-through tool with 0% schema coverage and no behavioral annotations, one sentence is insufficient. Missing are parameter semantics, how an agent discovers valid route/tool_name values, idempotency behavior, and the relationship with gateway_call_tool_sanitized. The output schema covers return values, but invocation decisions remain under-informed.
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, yet it explicitly explains no parameter. 'Private backend route' loosely reinforces that tool_name maps to a Route (consistent with the x-mcp-header hint), while arguments_json and idempotency_key remain undocumented in both the schema and the description.
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?
States a specific verb ('Call') and resource ('private backend route through GatewayMCP') and adds a distinctive governance qualifier (auth, scope checks, audit), which separates this generic dispatcher from the many domain-specific gateway_* siblings. However, it does not differentiate from its closest sibling, gateway_call_tool_sanitized, and the phrase 'backend route' sits slightly awkwardly against the parameter name tool_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?
No explicit guidance on when to use this tool versus the large sibling set, and no mention of the most relevant alternative, gateway_call_tool_sanitized. The word 'private' weakly implies it is for routes not exposed by dedicated sibling tools, but the selection rule is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_call_tool_sanitizedCRead-only
Call a read-only backend route and sanitize its result before agent delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | No | standard | |
| tool_name | Yes | ||
| arguments_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description's 'read-only' claim aligns with the readOnlyHint=true annotation (no contradiction) and adds the sanitization-before-delivery behavior as useful context beyond the annotation. However, it does not disclose what sanitization does, failure modes, or error behavior; annotations carry most of the safety burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words; the core action is front-loaded. The brevity is efficient, though it borders on under-specification given the parameter gaps.
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 generic routing tool with three undocumented parameters and safety implications (which routes are callable, what policy controls, what sanitization strips), the description leaves the invocation contract underspecified. The output schema covers returns, but the input contract is unclear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions none of the three parameters (tool_name, arguments_json, policy). It adds no meaning beyond names and defaults, leaving the agent to guess how arguments are encoded and what policy values do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Call a read-only backend route') plus a distinctive second behavior ('sanitize its result before agent delivery') that separates it from the sibling gateway_call_tool. It is clear, though somewhat generic about what a 'backend route' is and what sanitization entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus gateway_call_tool or any other sibling. The agent is left to infer when the sanitized variant is preferred and whether policy/arguments_json should differ, with no when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_company_bootstrap_contextBRead-only
Return a compact startup context: source-of-truth map, company memory, and relevant company search results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| max_chars | No | ||
| include_sources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which covers safety. The description clarifies the nature of the returned data (compact, aggregated from multiple sources) but does not disclose details like pagination behavior, truncation with max_chars, or that it executes multiple underlying queries. It adds some context beyond annotations but lacks behavioral nuance for a composite 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 a single sentence, front-loaded with the primary action and content components. It is appropriately concise with no filler, though it sacrifices detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and no schema descriptions, the description is inadequate. It gives a high-level overview but does not explain how parameters affect the output, how the composite result is assembled, or any practical usage details. The output schema exists, so return structure is covered, but parameter semantics and tool selection context remain underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no parameter explanations. Parameters like limit, query, max_chars, and include_sources are left entirely to be inferred from names and defaults, which is ambiguous (e.g., limit could refer to result count or length). The description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: 'Return a compact startup context' and enumerates three specific components (source-of-truth map, company memory, relevant company search results). It distinguishes itself from sibling tools like gateway_company_get_source_of_truth and gateway_company_search by aggregating multiple data sources into one call.
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 is for bootstrapping context, but does not explicitly guide when to use this tool versus calling individual tools (e.g., gateway_company_get_source_of_truth, gateway_memory_search). No when-to-use or when-not-to-use guidance is provided; the intended scenario is only inferred from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_company_getCRead-only
Resolve one company context item through Yonote or the matching source-of-truth domain.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| item_id | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already marks the operation as read-only. The description adds the 'through Yonote or the matching source-of-truth domain' detail, suggesting a fallback or selection mechanism, but it does not explain what happens on failure, error handling, or truncation behavior related to max_chars. The added context is useful but limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise and front-loaded, but it is under-specifying. It omits critical details that an agent needs, making it too terse to be fully useful. The length is acceptable, but the content is insufficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no schema descriptions, and an output schema present, the description should explain the 'kind' enum and the 'max_chars' truncation behavior. It does not, leaving the agent with guesswork about how to invoke the tool correctly. The fallback behavior is also vaguely described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation for the three parameters (kind, item_id, max_chars). An agent cannot infer what valid 'kind' values are, what 'item_id' refers to, or how 'max_chars' affects the result. The description fails to compensate for the lack of schema-level documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resolve') and resource ('one company context item'), and implies a single-item retrieval that differentiates it from search tools. It also hints at a dual-source resolution ('through Yonote or the matching source-of-truth domain'), which separates it from a pure source-of-truth getter, though it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like gateway_company_search or gateway_company_get_source_of_truth. There are no conditions, exclusions, or context cues to help an agent decide between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_company_get_source_of_truthCRead-only
Return the company source-of-truth map for people, projects, processes, documents, decisions, and operations.
| Name | Required | Description | Default |
|---|---|---|---|
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and the description aligns by saying 'Return.' It adds the content-coverage context (people/projects/etc.) but does not disclose any additional behavioral traits such as output truncation, cost/size limits, or pagination beyond the max_chars parameter.
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 16-word sentence, front-loaded with the verb and object, with no filler. All six content categories are packed efficiently without 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?
With an output schema and readOnly annotation present, the description is minimally sufficient, but it leaves max_chars semantics and the relationship to sibling company tools unexplained. For a single optional parameter and a simple read operation, this is a moderate gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention 'max_chars' at all. It adds no meaning beyond the schema's title and default, so the agent must infer truncation behavior from the parameter name alone.
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 states a specific verb ('Return') and resource ('company source-of-truth map') and enumerates the content domains (people, projects, processes, documents, decisions, operations). It is clearly distinguishable from siblings like gateway_company_search and gateway_company_get by the 'source-of-truth' scope, though it does not explicitly name 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 gives no guidance about when to use this tool versus gateway_company_get, gateway_company_search, or gateway_company_bootstrap_context. The only usage signal is implied by the name and purpose; there are no prerequisites, exclusions, or context triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_company_searchCRead-only
Search company context through the Yonote index and source systems.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| query | No | ||
| max_chars | No | ||
| include_sources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already establishes the read-only nature. The description adds the detail that the search spans 'the Yonote index and source systems,' which is useful behavioral context, but it does not disclose limits, pagination, or how parameters like max_chars affect results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. It is concise, though it leaves out details that other dimensions require.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters and no schema descriptions, the tool definition lacks enough context for an agent to invoke it correctly. The output schema may cover return values, but parameter semantics and usage guidance are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention any of the five parameters (kind, limit, query, max_chars, include_sources). It therefore fails to compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Search company context' through the Yonote index and source systems. This conveys that the tool is a read-only company search and gives some differentiation from sibling search tools, but it does not explicitly contrast it with tools like gateway_company_get or gateway_knowledge_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, no exclusions, and no prerequisites. An agent can only infer from the name and phrase 'Search company context' that it is meant for company-related lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_factory_project_get_runtime_configCRead-only
Return normalized factory runtime config; prefer work_id for queued Work Contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | No | ||
| issue_id | No | ||
| project_id | No | ||
| tracker_queue | No | ||
| allow_queue_fallback | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes that this is a safe read operation, and 'Return' aligns with that. The description adds modest context by mentioning 'normalized' output and the work_id preference, but it does not disclose fallback behavior, identifier precedence, or side effects beyond what annotations already imply.
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?
One compact sentence with the core action front-loaded and no filler. The semicolon clause is terse but purposeful, though it could be more clearly 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?
For a tool with five optional parameters and no schema-level descriptions, this is under-specified. It does not explain how to select among the identifiers, what tracker_queue or allow_queue_fallback mean, or what 'normalized' runtime config entails. The output schema covers return shape but not invocation 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 needed to clarify all five parameters. It only addresses work_id ('prefer work_id for queued Work Contracts'); issue_id, project_id, tracker_queue, and allow_queue_fallback remain effectively unexplained.
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 names a specific action and resource: 'Return normalized factory runtime config.' The added clause about preferring work_id for queued Work Contracts provides a useful scoping hint. It does not explicitly differentiate this from sibling factory/read tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives such as gateway_factory_projects_discover or gateway_factory_project_resolve_by_issue. The 'prefer work_id for queued Work Contracts' clause is a parameter-preference hint, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_factory_project_resolve_by_issueBRead-only
Resolve one Tracker issue to a factory runtime project config.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | ||
| allow_queue_fallback | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds that it maps an issue to a runtime project config, but does not disclose any additional behavior such as queue fallback, error conditions, or what 'resolve' entails. It does not contradict annotations, so a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no fluff and front-loaded action. It is well-structured, though very sparse; it could carry more useful information without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters (one required, one optional with a default) and a 0% schema coverage, the description is insufficient for an agent to invoke the tool confidently. It does not explain what issue_id should reference, what allow_queue_fallback controls, or how this tool relates to sibling factory tools. The presence of an output schema helps but does not compensate for the missing parameter and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation for issue_id or allow_queue_fallback. The parameter names offer limited self-evidence, but the tool description adds no meaning – especially the optional fallback boolean, which is left entirely unexplained.
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 states a specific verb and resource: 'Resolve one Tracker issue to a factory runtime project config.' This clearly distinguishes it from related siblings like gateway_factory_project_get_runtime_config (which likely fetches config directly by project) and gateway_project_scope_resolve. The purpose is 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?
There is no guidance on when to use this tool versus alternatives, nor any mention of the allow_queue_fallback parameter's role. The description only states what it does, leaving the agent to infer when it should be chosen over sibling factory or project tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_factory_projects_discoverCRead-only
Discover projects that can be onboarded or executed by the autonomous development factory.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true covers the read-only nature, and the description does not contradict it. However, the description adds no additional behavioral context beyond the annotation, such as what happens during discovery, whether it returns a list, or any side effects. Since annotations already cover safety, the description's minimal contribution warrants a low score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words, which is concise. However, it is so sparse that it borders on under-specification, lacking structure or elaboration that would aid an agent. It is not poorly structured, but it does not fully earn its place by adding sufficient value.
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 (two optional parameters) and the presence of an output schema, the description does not need to explain return values. Yet it fails to explain the parameters or usage context, leaving the agent with no understanding of what 'discover' entails or how to filter results. The minimal description is insufficient for effective tool selection and 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%, and the description does not mention the 'limit' or 'query' parameters at all. The agent receives no explanation of their meaning, format, or how they affect the discovery. This is a critical gap given the schema provides no descriptions either.
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 states a specific verb ('Discover') and resource ('projects') with a qualifier ('that can be onboarded or executed by the autonomous development factory'), which is clear and distinguishes it from the sibling 'gateway_process_candidates_discover' by focusing on projects rather than process candidates. However, it could be more explicit about what 'projects' means in this context.
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 gateway_process_candidates_discover or other discovery tools. It does not mention any exclusions, prerequisites, or context for selection, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_file_download_createARead-only
Create a one-time HTTP download session for a completed upload.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, but the description says 'Create a one-time HTTP download session,' which implies a state-changing operation. This is an annotation contradiction, so the score is 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It front-loads the action and object, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description covers purpose and precondition. However, the contradiction between readOnlyHint=true and the create action leaves the side-effect profile unclear, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by specifying that upload_id must reference a completed upload, but it does not explain how to obtain or format the ID. For a single self-named parameter, this is adequate but not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and a specific resource ('one-time HTTP download session') with a clear precondition ('for a completed upload'). This clearly distinguishes it from related upload/status tools.
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 phrase 'for a completed upload' provides a clear precondition and indicates the tool should be used only after an upload has finished. It does not explicitly name alternatives or exclusions, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_file_download_statusARead-only
Get a file download session owned by the current actor.
| Name | Required | Description | Default |
|---|---|---|---|
| download_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already declares the operation is read-only. The description adds the meaningful behavioral constraint that the session must be owned by the current actor, which is useful scoping beyond the annotation. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. The essential information about action, resource, and ownership scope is delivered immediately and economically.
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 one-parameter read-only tool with an output schema, the description is nearly complete. The only notable gap is not explicitly connecting download_id to gateway_file_download_create, which would complete the download lifecycle context.
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 should help explain download_id. It partially does by establishing that the ID refers to a file download session, but it does not clarify where the ID comes from or how it should be obtained. The parameter remains self-evident but under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), names the exact resource ('file download session'), and adds a scope ('owned by the current actor') that distinguishes it from related file upload/download tools. It clearly identifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking a file download session's status and imposes an ownership restriction, but it does not explicitly state when to use it versus alternatives or mention the relationship to gateway_file_download_create. The lifecycle context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_file_upload_createB
Create a short-lived one-time HTTP upload session for a binary file.
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | Yes | ||
| filename | Yes | ||
| size_bytes | Yes | ||
| content_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations beyond the title, the description carries the full burden. It discloses that the session is short-lived and one-time, which is a meaningful behavioral trait, but it does not mention side effects, expiration details, or that this is a write operation. The description gives some transparency but omits important 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 a single, tightly worded sentence that front-loads the core purpose and key attributes. Every word is essential, and it avoids 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 role in an upload flow (with siblings like upload_status and download_create) and the 0% schema coverage, the description is insufficient. It does not explain the expected workflow (e.g., after creating the session, how to use the returned URL, or that upload_status should be called afterward). It also lacks details on file size limits or the purpose of sha256, leaving a significant gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it provides no parameter details. It does not explain what sha256, size_bytes, or content_type are used for, nor how they should be formatted. The description adds zero value beyond the schema field titles, leaving the agent to guess the meaning of these required inputs.
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 a specific action ('Create') on a specific resource ('short-lived one-time HTTP upload session') with the key qualifiers (short-lived, one-time, binary file). It is distinct from the sibling upload_status and download_create tools, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for initiating an upload session but provides no explicit guidance on when to use it versus alternatives like gateway_file_upload_status or gateway_file_download_create. It does not mention any prerequisites, sequencing, or when not to use it, leaving the agent to infer from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_file_upload_statusBRead-only
Get a file upload session owned by the current actor.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only safety profile is covered. The description adds the useful 'owned by current actor' scoping constraint, but does not disclose behaviors such as not-found behavior, session lifecycle, or whether the session must be active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single focused sentence with the operation, object, and scope front-loaded. No filler or repetition of the name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and benefits from a readOnly annotation and an output schema, but the description alone leaves usage timing and upload_id provenance implicit. It is minimally adequate for a status lookup but relies on sibling-tool names and inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description does not explain upload_id beyond implying it identifies a file upload session. It does not state how to obtain it (e.g., from gateway_file_upload_create) or any format/expiry semantics, so the description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific operation (get), resource (file upload session), and access scope (owned by current actor). This differentiates it from sibling upload creation and download status tools without needing schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives such as gateway_file_upload_create or gateway_file_download_status. The ownership qualifier is a permission constraint, not a usage condition, leaving invocation timing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_access_auditBRead-only
Show current actor permissions for knowledge spaces.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, and the description's 'Show' aligns with that, so there is no contradiction. However, the description adds little beyond the annotation—it does not clarify whether the output includes inherited permissions, scope, or how permissions are presented. With annotations covering the safety profile, a 3 is appropriate because the description adds minimal 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 a single, efficient sentence with no filler. It is front-loaded with the action and target, making it immediately scannable. No words are wasted, and the structure is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, an output schema, and a readOnlyHint, the description is too sparse. It does not clarify the parameter's semantics, the scope of 'knowledge spaces' (all or specific), or what 'actor permissions' entails. While the output schema may cover return structure, the description leaves key usage details unexplained, making it incomplete for an agent to call correctly without additional investigation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 1 parameter ('space') with 0% description coverage, and the description does not explain its meaning, format, or behavior. The phrase 'for knowledge spaces' implies the parameter might be a space identifier, but it is ambiguous whether it is optional, how to specify it, or what happens when omitted. The description fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Show') and resource ('current actor permissions for knowledge spaces'), which is specific enough to distinguish from generic listing tools like gateway_knowledge_spaces or gateway_knowledge_space_list. However, it does not differentiate from the closely named sibling gateway_knowledge_audit_access, which likely serves a similar purpose, so it misses an opportunity to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There are many knowledge and admin permission-related siblings (e.g., gateway_knowledge_audit_access, gateway_admin_explain_access) but the description offers no conditions, exclusions, or recommended scenarios. The agent is left to infer the use case from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_audit_accessCRead-only
Compatibility alias for gateway_knowledge_access_audit.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers safety, and the description adds the useful behavioral fact that this tool is a synonym/delegate for another tool rather than a distinct operation. However, it does not describe what the aliased tool actually does, so behavioral transparency remains limited.
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 only six words and easy to scan, but it is under-specified rather than efficiently concise. It contains no functional content, so brevity here comes at the cost of usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and readOnlyHint cover return structure and safety, but the description still fails to explain what an access audit is, what the space parameter means, or how this alias behaves relative to the canonical sibling. An agent cannot confidently call it based solely on this definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one property, space, with 0% description coverage, and the tool description says nothing about it. The agent is left to guess whether space is an ID, slug, or something else, so the description provides no compensation for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a compatibility alias for gateway_knowledge_access_audit, which tells an agent that this tool exists to mirror the canonical sibling. It differentiates from the many unrelated sibling tools by naming its target, though it does not state the actual operation performed.
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?
There is no guidance on when to use this alias versus the canonical gateway_knowledge_access_audit. The word 'compatibility' implies legacy or alternate naming usage, but the description never states a preference, condition, or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_document_deleteA
Soft-delete a markdown document and keep it in the space trash.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | ||
| document | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (no readOnly or destructive flags), so the description carries the full burden. It explicitly discloses the soft-delete behavior and that the document is retained in trash, which is transparent about the non-destructive nature. It does not mention permissions or reversibility details, but the core behavior is clearly communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence that is front-loaded with the action and outcome. No wasted words; every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with an output schema and minimal annotations, the description covers the essential purpose and behavior. It does not explain the parameters, but the tool's complexity is low and the sibling context clarifies its role. Missing parameter details are a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, and the tool description does not explain the 'space' or 'document' parameters. While 'document' is obviously the target and 'space' is the container, the description adds no extra meaning beyond what the parameter names imply. With low schema coverage, the description should compensate but does not.
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 states the specific action (soft-delete), the resource (markdown document), and the outcome (kept in space trash). This clearly distinguishes it from siblings like gateway_knowledge_document_restore or gateway_knowledge_document_get, and no ambiguity exists about what the tool does.
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 the usage context: it is the deletion operation for documents, and the soft-delete nature implies that restoration is possible (via siblings like restore tools). However, it does not explicitly mention when not to use it or name alternatives, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_document_getBRead-only
Read a markdown document from a personal or group knowledge space.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | ||
| document | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation by characterizing the action as 'Read', and adds that documents are markdown and located in personal/group knowledge spaces. However, it does not disclose behavior like access requirements, error conditions, or return format, though the output schema may cover some of this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous words, front-loading the core action. It is 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 low schema parameter coverage and lack of parameter explanations, the description is incomplete for an agent intending to call the tool correctly. The output schema may help, but the description doesn't address the required 'document' parameter or the optional 'space' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not define the 'space' or 'document' parameters. 'personal or group knowledge space' only vaguely hints at the space param, and 'document' is not described at all, so the agent gets no additional parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('markdown document'), and clarifies the location ('personal or group knowledge space'). This clearly differentiates it from sibling tools like gateway_knowledge_document_search or gateway_knowledge_document_put.
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 search or list. It does not state prerequisites, exclusions, or scenarios favoring this tool, leaving selection entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_document_putC
Create or update a markdown document in a personal or group knowledge space.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | note | |
| path | No | ||
| space | No | ||
| title | Yes | ||
| status | No | draft | |
| content | Yes | ||
| tags_json | No | [] | |
| document_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no read-only or destructive hints, so the description carries the full burden. It only says 'Create or update,' which signals mutation, but does not disclose upsert semantics, overwrite behavior, permissions, versioning, or whether document_id controls update versus creation. This is a significant transparency gap for a write 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 concise sentence with no wasted words and the primary purpose is front-loaded. It is under-specified, but that issue is captured by other dimensions rather than by wordiness or poor structure.
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?
Despite an output schema, the tool has 8 input parameters and no annotations to clarify behavior. The description leaves an agent without critical information such as how to target a space, whether document_id is required for updates, valid values for kind/status, or how tags_json should be formatted. This is inadequate for a complex create/update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 8 parameters including space, path, kind, status, tags_json, and document_id. The description adds only the vague hints that documents are markdown and live in a personal or group space, and it does not explain any parameter's role or format. For a tool with this many parameters, the description fails to compensate for the schema's lack of descriptions.
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 ('Create or update') and the resource ('markdown document in a personal or group knowledge space'). It is specific enough to distinguish this from sibling document tools like get, search, delete, and restore, though it does not explicitly name any alternative.
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?
There is no guidance about when to use this tool versus related tools such as memory_write, knowledge_document_get, or knowledge_document_restore. The description implies usage for creating or updating documents, but it does not mention prerequisites, exclusions, or how to choose between personal and group spaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_document_restoreA
Restore a retained document version and archive the current version first.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | ||
| document | Yes | ||
| version_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the behavioral burden. It discloses a non-obvious side effect: the current version is archived before the restore. This is valuable because it warns the agent that the operation mutates state beyond simply replacing the document. It does not mention permissions or reversibility, but the archive-first behavior is the most important behavioral trait.
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?
One sentence, front-loaded with the action and the key side effect. Every word earns its place; no filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered elsewhere. The description explains the core operation and the archive side effect, but with 0% parameter coverage and no mention of the 'space' parameter, an agent may not know how to scope the restore. It is adequate for a simple two-required-parameter tool but leaves the optional parameter undocumented.
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 'retained document version' and 'current version', which clarifies the role of version_id and the document parameter, but it does not explain the optional 'space' parameter at all. With 0% coverage and 3 parameters, the description only partially compensates.
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 states a specific verb ('Restore') and resource ('retained document version'), and adds a key behavioral detail: it archives the current version first. This distinguishes it from gateway_knowledge_trash_restore (trash restore) and gateway_knowledge_document_versions (listing versions), though it doesn't explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use when you need to restore a retained document version. It does not explicitly state when not to use it or mention alternatives like gateway_knowledge_trash_restore for trashed documents. The context is clear enough for an agent to infer the primary use case, but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_document_searchDRead-only
Compatibility alias for gateway_knowledge_search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| space | No | ||
| include_groups | No | ||
| include_personal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does reveal that the tool is an alias, which is a behavioral trait beyond the readOnlyHint annotation. However, it provides no details about what gateway_knowledge_search actually does, any side effects beyond the read-only hint, or limitations. The annotation covers read-only status, so the description adds minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, making it structurally concise and front-loaded. However, the brevity is a liability because it omits nearly all functional information. The sentence does earn its place in the sense of being short, but it is under-specified rather than efficiently 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?
With 5 parameters, no schema descriptions, and a description that only references another tool, the definition is grossly incomplete. An agent cannot call this tool correctly without independently inspecting gateway_knowledge_search, and even that tool's description is not provided in this context. The output schema exists but does not compensate for the lack of behavioral and parameter guidance.
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 5 parameters with 0% description coverage, and the description provides zero explanation of query, space, limit, include_groups, or include_personal. The alias statement does not help an agent understand parameter semantics or construct a valid call. The description completely fails to compensate for the schema's lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description only states 'Compatibility alias for gateway_knowledge_search' without describing what the tool does or what resource it operates on. It avoids a pure tautology by referencing a sibling tool, but it still fails to provide a specific verb+resource. An agent cannot determine this tool's function from the description alone beyond the name's implication.
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?
There is no guidance on when to use this tool versus gateway_knowledge_search or other search tools. The description merely declares it an alias without explaining whether it is deprecated, preferred, or how it differs from the target. No alternatives, prerequisites, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_document_versionsARead-only
List retained versions of a markdown document.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| space | No | ||
| document | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the description's job is lighter. The description adds the constraint 'retained versions', indicating not all versions may be listed, and that the document is a markdown document, which clarifies the expected input. This gives useful context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the primary action and resource. No filler words, and it is easy to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a read-only list operation with an output schema, so the agent can infer the return structure. The description is brief but sufficient for a simple list operation. It could benefit from clarifying what 'retained versions' means (e.g., version numbers, timestamps) but is adequate given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not explain any parameters. The 'document' parameter is implicitly clear (the document to list versions for), but 'space' and 'limit' are unexplained. Given that there are 3 parameters and no schema descriptions, a 3 is appropriate: it provides some implicit meaning but leaves gaps.
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 states a specific verb and resource: 'List retained versions of a markdown document.' It clearly differentiates from sibling tools like gateway_knowledge_document_get (fetches current document) and gateway_knowledge_document_search (searches documents). The phrase 'retained versions' is a bit vague but acceptable.
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 context implies this tool is for listing versions of a specific document, which is distinct from getting the document or searching. However, there is no explicit when to use or when not to use, and no mention of alternatives. The agent can infer usage from the name and description but not with explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_ingest_fileB
Import a server-side UTF-8 text/markdown file from an allowed ingest directory into a knowledge space.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | source | |
| space | No | ||
| title | No | ||
| status | No | source | |
| tags_json | No | [] | |
| source_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only a title, so the description carries the full behavioral burden. It discloses useful constraints: the file must be UTF-8 text/markdown assures server-side and from an allowed ingest directoryasi. It does not disclose duplicate handling, permissions, side effects beyond import, or whether existing knowledge is updated.
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, focused sentence with no filler. It front-loads the action and preserves the most important constraints, 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?
Despite having an output schema, the tool has six parameters, no annotation guidance, and no parameter descriptions. The description leaves critical execution context unresolved, such as which directories are allowed, how kind/status/tags_json affect ingestion, and whether the file is moved, copied, or left in place.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate for the six parameters. It slightly clarifies source_path by constraining it to a UTF-8 text/markdown file in an allowed ingest directory, but kind, space, title, status, and tags_json remain unexplained beyond their names and defaults.
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 a specific verb ('Import') and resource ('a server-side UTF-8 text/markdown file from an allowed ingest directory') and indicates the destination ('into a knowledge space'). It does not explicitly reference sibling tools, but the 'server-side' and 'allowed ingest directory' constraints help distinguish it from other knowledge/file tools.
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 phrase 'from an allowed ingest directory' implies when this tool is appropriate: there is a server-side file available in a permitted location. However, it does not provide explicit when-to-use guidance, exclusions, or alternatives, leaving the agent to infer routing among related knowledge and file tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_member_addB
Add or update a member in a group knowledge space. Requires space admin access.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | reader | |
| space | Yes | ||
| subject | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no readOnly/destructive annotations, the description carries the behavioral disclosure burden. It does indicate that the operation mutates state ('Add or update') and that it requires admin privileges, which is valuable. It does not explain side effects, whether 'update' is idempotent, or what happens on conflicts, but the core mutating nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The action is stated first, followed by the essential permission constraint, making it easy to scan.
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?
Although the tool has an output schema and only three simple parameters, the description omits critical selection guidance relative to sibling tools and leaves parameter semantics vague. The admin requirement is helpful, but the lack of any differentiation from gateway_knowledge_space_add_member and absence of param explanations makes the definition incomplete for confident 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, but it does not explain any of the three parameters. 'space' and 'subject' can be inferred roughly from the tool name and sentence, yet 'role' is entirely undocumented beyond its default. This leaves real ambiguity about what values are valid or what 'subject' refers to (user, group, email).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Add or update') and a clear resource ('a member in a group knowledge space'), making the core action understandable. However, it does not differentiate from the closely named sibling gateway_knowledge_space_add_member, so an agent cannot easily tell which to choose.
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 states the permission prerequisite ('Requires space admin access'), which gives useful context for when the tool can be invoked. It does not mention when to prefer this over similar member-management tools like gateway_knowledge_space_add_member or gateway_knowledge_member_remove, leaving usage boundaries implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_member_removeC
Remove a member from a group knowledge space. Requires space admin access.
| Name | Required | Description | Default |
|---|---|---|---|
| space | Yes | ||
| subject | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (no readOnlyHint or destructiveHint), so the description carries the burden. 'Remove' implies a destructive mutation, but the description does not disclose consequences such as whether the member loses access immediately, whether removal is reversible, or what happens to their data. The permission note is useful but does not cover behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, but it is under-specified rather than concise. It omits essential information about parameters and usage, so the brevity is not a strength; it leaves the agent with insufficient guidance.
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?
Despite having an output schema, the description does not explain what the tool returns or any side effects. Given that this is a mutation with zero parameter documentation and no behavioral detail, the description is incomplete for an agent to call it correctly and predict outcomes.
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 zero description coverage for both parameters ('space' and 'subject'), and the tool description does not explain what these fields represent or how they should be formatted. For example, 'subject' is ambiguous—does it refer to a user ID, email, or a member identifier? This is a critical gap that the description fails to fill.
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 states a clear verb ('Remove') and resource ('member from a group knowledge space'), so the core action is understandable. However, it does not differentiate from closely related sibling tools like gateway_knowledge_space_remove_member or gateway_knowledge_member_add, leaving ambiguity about which tool to prefer.
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 mentions a permission requirement ('Requires space admin access') but gives no context about scenarios where this tool is appropriate or when other member-removal tools should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_reindexC
Rebuild markdown indexes for accessible knowledge spaces.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations beyond a title, the description carries the full disclosure burden. 'Rebuild' hints at a potentially destructive or heavy operation, but there is zero information about side effects, scope, reversibility, or resource impact, leaving behavior completely opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, but it is under-specified rather than efficiently compact. It omits essential details, so the brevity is not a virtue; it fails to earn its place by sacrificing necessary information.
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 an operation that rebuilds indexes—likely resource-intensive or destructive—the description provides almost no context: no prerequisites, no effects on existing data, no expected output, and no alignment with the output schema. The presence of an output schema does not compensate for the missing operational 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?
The single parameter 'space' has 0% schema description coverage, and the description does not explain its role, allowed values, or how it affects the reindex. The phrase 'accessible knowledge spaces' is too vague to connect to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'rebuild' with a clear resource 'markdown indexes' and context 'accessible knowledge spaces', making the core purpose understandable. It is distinct enough from sibling tools like search or document operations, though it does not explicitly contrast with 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?
No guidance is provided on when to invoke this tool versus others, nor are any preconditions, triggers, or exclusions mentioned. The description implies a maintenance task but leaves the usage context entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_searchBRead-only
Search accessible markdown knowledge spaces and return citations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| space | No | ||
| include_groups | No | ||
| include_personal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the base safety is known. The description adds context about accessibility scope, content type (markdown), and output form (citations), but does not describe defaults, scope toggles, or result handling beyond that.
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?
One compact, front-loaded sentence that states action, scope, and return value without redundant filler.
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 undocumented parameters and only a readOnlyHint annotation, the description is too thin. The output schema helps with return values, but the agent still lacks parameter semantics and usage context to tailor a search.
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% across 5 parameters, so the description must compensate, but it mentions none of query, limit, space, include_groups, or include_personal. The agent cannot learn parameter meanings from the description.
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 names a specific action and resource: searching accessible markdown knowledge spaces. It also differentiates from sibling tools like gateway_knowledge_document_search and gateway_memory_search by highlighting 'markdown knowledge spaces' and the return of 'citations'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as gateway_knowledge_document_search, gateway_memory_search, or gateway_company_search. The description implies a context but provides no exclusions or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_space_add_memberD
Compatibility alias for gateway_knowledge_member_add.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | reader | |
| space | Yes | ||
| subject | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no meaningful annotations beyond a title, so the description carries the full burden. It discloses no side effects, permissions, mutation semantics, or behavior; it merely refers to another tool by name.
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 text is short, but brevity is under-specification rather than conciseness. A single clause cannot serve the agent's selection and invocation needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotation support, no parameter documentation, and only an alias reference, the description is not complete enough for reliable invocation. Even though an output schema exists, the central behavior and parameter semantics are undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no information about space, subject, or role. The agent must rely solely on parameter names and the default value 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 only says 'Compatibility alias for gateway_knowledge_member_add.' This names a sibling and lets an agent infer the operation, but it never states directly that the tool adds a member to a knowledge space. The purpose is clear only if the agent already understands gateway_knowledge_member_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this alias versus the canonical gateway_knowledge_member_add or related tools. 'Compatibility alias' hints at legacy use, but there is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_space_createC
Create a group markdown knowledge space. The creator becomes admin.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| title | Yes | ||
| description | No | ||
| members_json | No | [] |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no readOnly/destructive hints, so the description must carry the burden. It discloses that the creator becomes admin, which is useful, but omits other behavioral traits such as idempotency, error handling, permission requirements, or side effects. 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 extremely concise with no fluff, but it is so short that it under-specifies the tool. It front-loads the main purpose but omits essential details, making it less effective than a slightly longer but more informative description.
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 create tool with four parameters, no schema descriptions, and only a title annotation, this description is wholly inadequate. It lacks parameter explanations, usage context, output expectations, and error cases. The presence of an output schema does not excuse the missing input guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the four parameters (slug, title, description, members_json). It mentions 'group markdown' but gives no hints about what slug or members_json should contain. The description completely fails to compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create a group markdown knowledge space') and clearly identifies the resource type, distinguishing it from sibling tools like list/get or member management. It could be more explicit about how it differs from other create-type operations, but the verb and resource are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives (e.g., when to create vs. update, or prerequisites like permissions). It does not mention any exclusions or context that would help an agent decide between this and related knowledge space tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_space_getBRead-only
Get metadata, members, and document count for a personal or group knowledge space.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description's 'Get' wording aligns with that. The description adds little beyond the annotation, such as how the optional 'space' parameter behaves when empty or how missing spaces are handled.
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?
One clean sentence that front-loads the verb and resource and lists the key return categories. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema and the read-only annotation reduces the need to describe return values or safety. However, the ambiguous optional 'space' parameter and lack of sibling differentiation leave an agent unsure exactly what value to pass and when this tool is preferable.
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 only parameter, 'space', has no schema description and the description does not clarify accepted formats, default behavior, or whether it expects an ID or name. The only semantic cue is the phrase 'knowledge space', which is thin given 0% 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 states a specific action ('Get') and resource ('knowledge space'), and lists concrete output facets: metadata, members, and document count. It is clear, though it does not explicitly distinguish itself from sibling tools like gateway_knowledge_space_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 the intended use case—retrieving details about a single knowledge space—but provides no explicit guidance on when to choose this tool over related siblings. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_space_listDRead-only
Compatibility alias for gateway_knowledge_spaces.
| Name | Required | Description | Default |
|---|---|---|---|
| include_personal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint: true, so the read-only nature is covered. However, the description adds no behavioral details such as return format, pagination, or result scope. It is a bare alias with no extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, which might be seen as concise, but it is under-specified. It does not earn its place because it fails to provide any informative content beyond the name.
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 that an output schema exists and the tool is an alias, the description should clarify the listing behavior and the meaning of include_personal. Without this, the agent lacks essential context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema defines include_personal with a default of true, but schema description coverage is 0% and the description does not explain this parameter. The agent has no information about what include_personal does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description only states that it is a 'Compatibility alias for gateway_knowledge_spaces.' It does not state what the tool does, such as listing knowledge spaces. The action and resource are not described, and the agent must rely on the tool name and sibling context to infer any purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the sibling gateway_knowledge_spaces or other knowledge tools. No conditions, exclusions, or alternatives are mentioned, leaving the agent without direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_space_remove_memberC
Compatibility alias for gateway_knowledge_member_remove.
| Name | Required | Description | Default |
|---|---|---|---|
| space | Yes | ||
| subject | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain only a title, so the description carries the full burden of behavioral disclosure. It does not mention that this is a destructive removal, what resources are affected, permission requirements, or any side effects. Being an 'alias' does not disclose the actual behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, making it structurally concise. However, it is under-specified rather than efficiently complete, omitting all behavioral and semantic detail. It is not tautological like 'Process', so it earns a middle score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, low parameter coverage, and only a two-parameter schema, the description is far from complete. The alias reference points toward a canonical tool that may fill gaps, but this definition does not stand alone. An agent cannot invoke this tool correctly based solely on the provided description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no explanation for 'space' or 'subject'. The parameter names are only mildly suggestive and do not clarify expected formats, value domains, or relationships. With low schema coverage, the description must compensate and completely fails to do so.
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 states the tool is a 'Compatibility alias for gateway_knowledge_member_remove', which identifies its purpose by equivalence to a canonical sibling. Combined with the self-explanatory name and title, an agent can infer it removes a member from a knowledge space. It lacks an explicit verb+resource statement in the description itself, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus gateway_knowledge_member_remove or any other alternative. Calling it a 'compatibility alias' implies the canonical tool should generally be preferred, but it never explicitly says 'use the other tool instead' or explains when this alias is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_spacesBRead-only
List personal and group markdown knowledge spaces visible to the current actor.
| Name | Required | Description | Default |
|---|---|---|---|
| include_personal | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the description adds value by specifying the scope ('personal and group'), the content type ('markdown'), and the visibility filter ('visible to the current actor'). This provides behavioral context beyond the read-only hint, such as the implicit filtering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the core action and scope. There is no redundancy or filler; every word contributes to the meaning.
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 presence of an output schema and the readOnly annotation, the description covers the essential purpose. However, it omits clarification on the include_personal parameter, which is critical for correct invocation, and does not differentiate from the sibling list tool. This leaves gaps for an agent deciding whether to use this tool or gateway_knowledge_space_list.
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 one boolean parameter 'include_personal' with default true, but schema description coverage is 0%. The description does not explain what this parameter controls or how it interacts with the listing. It only mentions 'personal and group' generically, leaving the agent to guess whether setting include_personal to false excludes personal spaces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and clearly identifies the resource as 'personal and group markdown knowledge spaces visible to the current actor'. This provides a clear purpose. However, it does not differentiate itself from the sibling tool 'gateway_knowledge_space_list', which may serve a similar listing function, so it lacks explicit sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like gateway_knowledge_space_list or gateway_knowledge_space_get. There are no conditions, prerequisites, or exclusions mentioned. The agent is left to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_space_set_permissionC
Set a member role in a group knowledge space. Requires space admin access.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | reader | |
| space | Yes | ||
| subject | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry no safety hints, so the description must disclose behavior. It indicates a mutating operation and the admin requirement, but it does not say whether the subject must already exist, whether the role is overwritten, or what role values are allowed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The purpose comes first and the access requirement is stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return-value documentation is not needed, but an agent still lacks critical invocation details: valid roles, whether membership is required, and how this differs from add/remove member tools. The description is too sparse for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not explain what 'space', 'subject', or 'role' mean beyond their names, and it adds nothing about valid role values or identifier formats beyond the schema's default.
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?
States a specific verb and resource: 'Set a member role in a group knowledge space.' This is distinct from sibling add/remove member tools, though it does not explicitly contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The admin-access requirement gives useful context for when the tool can be used, but it does not explain when to choose this tool over gateway_knowledge_space_add_member/remove_member or knowledge_member_add/remove. Usage is implied but exclusions are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_knowledge_trash_listBRead-only
List soft-deleted documents in an accessible knowledge space.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| space | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the 'soft-deleted' and 'accessible knowledge space' context, which clarifies scope. It does not disclose pagination behavior, ordering, or what 'accessible' means in terms of permissions, but the read-only annotation lowers the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It states the action and the resource immediately, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered elsewhere. The description is adequate for a simple read-only list operation, but it lacks details on parameter semantics and any filtering behavior. Given the low complexity, it is minimally complete but with clear 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%, and the description does not explain the 'limit' or 'space' parameters. The parameter names are somewhat self-explanatory, but the description adds no meaning beyond the schema. With zero coverage, the description should compensate but does not.
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 states a specific verb ('List') and resource ('soft-deleted documents in an accessible knowledge space'), which clearly distinguishes it from related tools like gateway_knowledge_document_delete and gateway_knowledge_trash_restore. It does not explicitly name a sibling alternative, but the scope is clear enough to differentiate.
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: use this when you need to see soft-deleted documents in a knowledge space. It does not explicitly state when not to use it or name alternatives like gateway_knowledge_document_search or gateway_knowledge_trash_restore, so 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.
gateway_knowledge_trash_restoreB
Restore a soft-deleted document to its original path.
| Name | Required | Description | Default |
|---|---|---|---|
| space | No | ||
| trash_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, no readOnly/destructive hints, so the description carries the burden. It discloses that the operation is a restore of a soft-deleted document, implying a mutation that reverses a prior delete. However, it does not disclose side effects, permissions needed, whether the original path must be available, or what happens if the path is occupied. It adds some context beyond the title but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and outcome. It earns its place with no filler, though it could add a brief note about parameters without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered, but the description is thin for a mutation tool with two parameters and zero schema coverage. It lacks guidance on how to obtain trash_id, whether space is required, and what success/failure looks like. Given the sibling trash_list exists, a pointer to it would complete the workflow.
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 'soft-deleted document' and 'original path' but does not explain the 'trash_id' parameter or the optional 'space' parameter. An agent cannot tell what trash_id refers to (likely the ID from trash list) or how space scopes the operation. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Restore a soft-deleted document to its original path' clearly states the verb (restore), the resource (soft-deleted document), and the outcome (original path). It distinguishes itself from the sibling gateway_knowledge_document_restore by specifying 'soft-deleted' and 'trash' context, though it doesn't explicitly name the sibling.
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: use this when a document is in the trash and needs to be restored to its original location. It does not explicitly state when not to use it or mention alternatives like gateway_knowledge_document_restore, which may handle version restoration. The context is clear enough for an agent to infer, but no explicit routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_memory_forgetA
Delete a memory entry created by the current actor. Admins may delete any memory entry.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no behavioral hints, so the description carries the full burden. It discloses the actor-based permission constraint and implies destructive action via 'Delete', but it does not explicitly state permanence, irreversibility, or side effects. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler. The main action and the key authorization nuance are front-loaded, and every word earns its place.
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 single-parameter delete tool with an output schema, the description covers purpose and permissions adequately. It omits an explicit note about permanence, which is a minor gap given the destructive nature, but the overall context is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It links entry_id to 'memory entry' but does not explain how to obtain the value (e.g., from a search result) or any format details. Minimal compensation exists, but an agent still has to infer the ID's origin.
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 states a specific verb ('Delete'), resource ('memory entry'), and scope ('created by the current actor' with admin override). This clearly differentiates it from memory_write and memory_search without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on who can delete which entries (own entries vs. admins deleting any), but it does not explicitly name alternatives like gateway_memory_write for creation or gateway_memory_search for finding entry IDs. The condition is clear, yet no exclusions or alternative route is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_memory_searchCRead-only
Search short/medium Postgres memory and optionally source-backed long-term knowledge.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| scope | No | ||
| subject | No | ||
| tiers_json | No | ["short", "medium"] | |
| include_yonote | No | ||
| include_sources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the verb 'Search' aligns with that. The description adds some behavioral context by clarifying what data is searched (short/medium Postgres memory, optionally sourced long-term knowledge), but it does not disclose other traits like how sources are included, ordering, or limits. With the annotation covering safety, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the core purpose efficiently. It is concise without being overly terse, though a bit more detail would not hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parametersasi and an output schema, the description is too thin. It does not explain how to construct a query, what 'source-backed long-term knowledge' means in practice, or how defaults affect results. An agent would need to inspect the schema and guess or rely on sibling names to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for explaining the 7 parameters. It hints at 'short/medium' (matching tiers_json) and 'optionally source-backed' (matching include_sources), but does not explain the meaning or acceptable values of query, scope, subject, limit, include_yonote, or the exact format of tiers_json. The parameter names are suggestive but not documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and identifies the resource ('short/medium Postgres memory' and 'optionally source-backed long-term knowledge'). It gives a clear sense of scope, though it does not explicitly differentiate this from sibling tools like gateway_memory_sources_search or gateway_knowledge_search, leaving some ambiguity about which exact store is being queried.
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 explicit guidance on when to use this tool versus the many sibling search tools. It implies it is the default memory search by mentioning 'short/medium' tiersable and optional sources, but does not state exclusions or alternative conditions, leaving the agent to infer 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.
gateway_memory_sources_searchBRead-only
Search source-backed long-term knowledge from Yonote/templates/ADR/docs without copying it into memory.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| include_yonote | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint: true, which already indicates a read-only operation. The description adds that it searches source-backed knowledge and does not copy into memory, reinforcing the read-only nature and clarifying the data source. However, it does not disclose other behavioral aspects like rate limits, authentication requirements, or result size limits. Given the minimal annotation, the description provides some value but does not significantly go beyond what readOnlyHint already implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core action and key differentiator. It contains no fluff and every word contributes to meaning. This is an example of efficient, well-structured writing.
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?
While an output schema exists (so return values are covered), the description lacks essential context: it does not explain the parameters, nor does it explicitly guide the agent on when to choose this tool over similar search tools. All parameters are optional with defaults, which reduces urgency, but the total absence of parameter semantics and usage guidance leaves the definition incomplete for a tool with three parameters and zero schema descriptions.
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%—no parameter descriptions exist in the schema. The description does not mention any parameters (query, limit, include_yonote) or explain their meanings. An agent would have to rely on parameter names and defaults, which are not self-explanatory (e.g., include_yonote). With zero coverage, the description should compensate but fails to do so, leaving the agent without guidance on how to construct a valid call.
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 'Search' and the resource 'source-backed long-term knowledge', and explicitly lists the sources (Yonote/templates/ADR/docs). It also distinguishes itself from memory search by adding 'without copying it into memory', which differentiates it from sibling tools like gateway_memory_search. This is specific 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 implies when to use this tool—when searching source-backed knowledge rather than memory—but it does not explicitly name alternatives or provide when-not conditions. It gives context but leaves the agent to infer the distinction from the phrase 'source-backed' and 'without copying it into memory'. No explicit exclusions or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_memory_summarize_sessionC
Store a compact short-term session/task summary in Postgres memory.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | ||
| scope | No | user | |
| subject | No | ||
| ttl_days | No | ||
| session_id | Yes | ||
| source_uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no behavioral annotations (no readOnlyHint, destructiveHint, etc.), the description carries the full burden of disclosure. It only states that it 'stores' a summary, but does not explain side effects, whether it overwrites existing summaries for the same session_id, how ttl_days affects retention, or any requirements. This is minimal and insufficient for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no fluff, which is structurally efficient. However, it is so short that it omits essential details, but conciseness itself is not penalized for being brief; it's penalized for being under-specified in other dimensions. This dimension scores well on structure.
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 6 parameters, 0% schema coverage, and no behavioral annotations, the description is severely incomplete. It does not explain parameter semantics, usage context, or behavioral implications. Even though an output schema exists, the lack of input guidance makes it inadequate for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description provides no parameter explanations. While parameter names like 'session_id' and 'notes' are self-explanatory, others like 'scope', 'subject', 'ttl_days', and 'source_uri' are ambiguous (e.g., what does ttl_days=0 mean? what are valid scope values?). The description fails to compensate for the missing schema descriptions.
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 states a specific verb ('Store') and resource ('compact short-term session/task summary in Postgres memory'), making the core purpose clear. However, it does not differentiate from sibling memory tools like gateway_memory_write, which also stores memory. The name 'summarize_session' hints at session-specific usage, but the description doesn't explicitly distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as gateway_memory_write or gateway_memory_search. The description does not mention any conditions or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_memory_writeC
Store short-term session/task memory or medium-term project/team facts in Postgres.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | fact | |
| tier | No | short | |
| scope | No | user | |
| content | Yes | ||
| subject | No | ||
| ttl_days | No | ||
| tags_json | No | [] | |
| confidence | No | ||
| source_uri | No | ||
| sensitivity | No | internal | |
| source_type | No | manual | |
| source_title | No | ||
| metadata_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations beyond a title, the description carries the full burden of behavioral disclosure. It reveals only that data is stored in Postgres, but omits side effects, overwrite semantics, retention behavior, permissions, or any return value. For a write operation, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant wording, which is concise. However, it lacks structure and does not front-load the most critical usage constraints. Given the tool's complexity, the brevity feels under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 13 parameters and an output schema, the description offers almost no context. It does not mention what the output contains, how to structure content, what the different tiers mean, or any caveats about data persistence. For a write operation of this complexity, the description is severely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no parameter information. None of the 13 parameters (kind, tier, scope, content, subject, ttl_days, tags_json, confidence, source_uri, sensitivity, source_type, source_title, metadata_json) are explained in the description, leaving agents without any semantic guidance beyond their names and defaults.
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 states a clear action ('Store') and a specific resource ('memory'), and even distinguishes two memory tiers (short-term session/task vs medium-term project/team facts). However, it does not explicitly differentiate this write operation from sibling memory tools like gateway_memory_search or gateway_memory_forget, though the verb implies a write. Slight ambiguity remains about what 'facts' vs 'session/task' means in practice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention that this is for writing while memory_search is for reading, nor does it state any conditions or prerequisites. An agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_notification_ackA
Mark one visible notification as seen, read, or unread. Requires notifications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | read | |
| notification_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations beyond the title, the description carries the burden of disclosure. It adds a permission requirement ('Requires notifications:read') and scoping ('one visible notification'), which is helpful, but it does not explain side effects, reversibility, failure modes, or whether this is idempotent. The mutation aspect is clear, but additional behavioral detail would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a permission note, with the core action front-loaded. Every word contributes to understanding the tool, and there is no redundancy or filler.
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 simplicity of the tool (2 params, one required, output schema present), the description covers the essential purpose, scope, and permission. It does not clarify what 'visible' means or specify error behavior, but these are minor gaps for such a straightforward operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for missing parameter details. It does so by spelling out the state values ('seen, read, or unread') and implying that notification_id refers to a 'visible notification.' This adds meaning beyond the raw schema, though it could be more explicit about parameter names and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Mark') on a specific resource ('one visible notification') with the possible outcomes ('seen, read, or unread'). This clearly distinguishes it from related notification tools like list, get, publish, or topic_update, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to change a notification's read state) but does not explicitly compare it to sibling alternatives or provide when-not-to-use guidance. The phrase 'one visible notification' hints at a single-item scope, but no exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_notification_getCRead-only
Read one visible notification. Requires notifications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| mark_seen | No | ||
| notification_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the auth scope 'notifications:read', which is not in annotations. Annotations already declare readOnlyHint=true, so the 'read' action is consistent. However, the description does not disclose the possible side effect of the mark_seen parameter (default true), which could imply mutation. That gap is significant but not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core action and includes the essential auth requirement. There is zero redundancy; every part adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two parameters and no schema descriptions, an agent lacks crucial input guidance. The output schema exists, covering return value, but the description fails to explain how to populate the inputs. The auth requirement is useful but insufficient for a complete call.
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 provides no explanation of notification_id or mark_seen. The description does not help an agent understand parameter purpose or formats, making it very difficult to call the tool correctly.
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 'Read one visible notification', which is a specific verb and resource, and the singular 'one' distinguishes it from the list sibling (gateway_notifications_list). It does not explicitly name alternatives, but the purpose is 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 provides only a permission requirement and no guidance on when to use this tool versus siblings like gateway_notifications_list or gateway_notification_ack. It does not mention when to prefer this over alternatives, nor any scenarios where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_notification_publishC
Publish a durable employee notification. Requires notifications:write.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | Yes | ||
| priority | No | normal | |
| action_url | No | ||
| event_type | Yes | ||
| project_id | No | ||
| metadata_json | No | {} | |
| expires_in_days | No | ||
| idempotency_key | No | ||
| recipients_json | Yes | ||
| artifact_refs_json | No | [] |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (only a title), so the description must disclose side effects and behavior. It mentions 'durable' which implies persistence, and the write permission, but does not explain idempotency, whether notifications are overwritten, or any other operational impact. This is insufficient 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 concise and front-loaded, stating the primary action and a key requirement in two sentences. It is not verbose, but it is too sparse for the tool's complexity, so it does not earn a 5.
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 11 parameters (3 required), no schema descriptions, and a missing output schema explanation, the description is drastically incomplete. An agent cannot reliably construct a valid call without additional context on required fields like event_type, title, and recipients_json, or on optional metadata and expiry 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?
The input schema has 0% coverage, and the description does not mention any parameters, their formats, or relationships (e.g., how recipients_json is structured, what event_type values are valid). With no compensation from the description, parameter semantics are severely under-specified.
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 'publish' and the resource 'durable employee notification,' which is specific and distinguishes it from read/list/ack tools. However, it does not explicitly name or contrast with sibling notification tools, so it lacks explicit sibling differentiation.
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 gateway_notification_get or gateway_notification_ack. It only mentions a permission requirement, which is not enough to help an agent choose the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_notifications_listARead-only
List notifications visible to the current employee. Requires notifications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| event_type | No | ||
| project_id | No | ||
| unread_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds the permission requirement ('notifications:read') and the scoping 'visible to the current employee', which are not in the annotations. This adds meaningful behavioral context beyond the read-only hint, such as auth needs and scope limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy. The purpose is front-loaded, and the permission requirement is clearly stated. Efficient and well-structured with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema, the description omits any explanation of the four filter parameters and their defaults, which are critical for effective use. It lacks guidance on pagination, ordering, or filtering behavior, leaving the agent with insufficient context for correct 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%, and the description provides no information about the parameters (limit, event_type, project_id, unread_only). An agent cannot infer their meanings or defaults from the description, which is a significant gap since the schema has no descriptions either.
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 'List' and resource 'notifications', specifies the scope 'visible to the current employee', and includes the required permission 'notifications:read'. This distinguishes it from sibling notification tools like publish, get, and ack, and is not a 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 clear context (listing notifications for the current user) but does not explicitly mention alternatives or when-not-to-use conditions. It implies usage for listing notifications but lacks explicit routing to sibling tools such as gateway_notification_get for single retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_notification_topic_updateC
Subscribe the current employee to project notifications. Requires notifications:read.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_key | Yes | ||
| subscribed | No | ||
| topic_type | No | project |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain only a title, so the description carries the full burden. It does add useful context: the affected subject ('current employee') and the auth requirement ('notifications:read'). But it omits significant behavioral traits: the tool can both subscribe and unsubscribe via the 'subscribed' parameter, and there is no mention of side effects, idempotency, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both informative, with the core action front-loaded and the permission note second. It is appropriately short, though the brevity comes at the cost of missing content rather than trimming fat.
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 mutation tool with no behavioral annotations, 0% parameter coverage, and one required parameter, the description leaves too much to inference: what topic_key values are valid, how topic_type affects behavior, and the unsubscribe path. The presence of an output schema covers return values, but invocation semantics remain under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it adds nothing about topic_key, topic_type, or subscribed. The word 'project' loosely echoes the topic_type default, but the required topic_key is entirely unexplained and the boolean subscribed parameter's semantics are not described.
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 states a clear verb and resource: 'Subscribe the current employee to project notifications.' It distinguishes the action from notification siblings like publish, list, get, and ack by naming the subscribe behavior. However, it does not explicitly name or contrast any sibling, and the tool name says 'update' while the description says 'subscribe', which is a minor mismatch.
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?
Only a permission prerequisite ('Requires notifications:read') is given. There is no guidance on when to use this tool versus alternatives like gateway_notification_publish or gateway_notifications_list, no when-not-to-use conditions, and no mention that setting subscribed=false covers unsubscribing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_privacy_classifyARead-only
Classify sensitive text without returning detected source values.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| policy | No | standard |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds a meaningful trait beyond the annotation: the tool deliberately suppresses the source values it detects, a key privacy guarantee that prevents an agent from using it to extract PII. Output shape is not described, but an output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single eight-word sentence with the verb front-loaded and every phrase earning its place. The core action, resource, and the key behavioral constraint all fit without 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?
For a two-parameter tool with an output schema and a readOnly annotation, the description covers purpose and the key privacy behavior. The unexplained 'policy' parameter and the lack of routing to sibling privacy tools leave real gaps, though the default value means an agent can still invoke it successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about either parameter. 'text' is inferable from the tool's stated purpose, but 'policy' (default 'standard') is completely unexplained — no valid values, no meaning for 'standard', no hint of alternatives. The description fails to compensate for the uncovered 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 names a specific verb ('classify') and resource ('sensitive text'), and adds a precise behavioral qualifier: it does not return detected source values. This distinguishes it from the sibling privacy tool gateway_privacy_sanitize_text without requiring the agent to open either schema. The statement is informative, not tautological.
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 phrase 'without returning detected source values' implies the tool is appropriate when an agent needs a sensitivity label but must not receive raw PII strings. However, no alternative is named and there is no explicit when-to-use/when-not-to-use guidance or routing to the related gateway_privacy_sanitize_text. The usage context is inferable but left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_privacy_sanitize_textB
Pseudonymize personal data and irreversibly redact secrets in text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| policy | No | standard |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the irreversible nature of redaction ('irreversibly redact secrets'), which is a critical behavioral trait. However, annotations provide no safety hints (no readOnlyHint or destructiveHint), so the description carries the full burden but does not mention authorization requirements, rate limits, or the return format. It partially informs the agent but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no filler. It front-loads the primary action ('Pseudonymize personal data') and includes the key qualifier 'irreversibly' upfront. Every word contributes to the meaning, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a privacy-critical tool with no schema descriptions and no annotation guidance, the description is insufficient. It does not explain the 'policy' parameter, the expected output, or any prerequisites (e.g., whether the input text is modified or returned sanitized). The tool's behavior is only partially covered, leaving significant gaps for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate by explaining the parameters. It does not mention 'text' or 'policy' at all, nor does it explain what policy values mean or whether they are optional (though schema shows a default). The agent is left without any semantic context for the 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 function: 'Pseudonymize personal data and irreversibly redact secrets in text.' It uses specific verbs (pseudonymize, redact) and identifies the resource (personal data, secrets) with a clear scope (text). This distinguishes it from the sibling gateway_privacy_classify, which focuses on classification rather than transformation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention conditions, exclusions, or when the sibling classify tool would be preferable. There is no explicit context for when an agent should call this vs. other privacy-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_process_candidates_discoverCRead-only
Discover repeated process candidates from sanitized process events.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| events_json | No | ||
| period_days | No | ||
| systems_json | No | ||
| project_ids_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a read-only operation, so the description does not need to repeat that. It adds the source condition, 'sanitized process events', but provides no additional behavioral context such as result ordering, pagination, or the meaning of 'repeated' process candidates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It earns its place but is under-specified, so it is efficient rather than exemplary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, 0% schema descriptions, and no usage context, a single-sentence description is inadequate. Even though an output schema exists and readOnlyHint is declared, the agent is left without guidance on how to construct valid inputs, what filters are expected, or what 'repeated process candidates' means operationally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage across 6 parameters, and the description does nothing to compensate. It does not explain what events_json, systems_json, query, period_days, limit, or project_ids_json mean semantically; the phrase 'sanitized process events' only vaguely maps to events_json.
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 states a specific action ('Discover') and a specific resource ('repeated process candidates') scoped to 'sanitized process events.' This is not a tautology and helps differentiate from siblings like gateway_process_events_search, though 'process candidates' remains vague and no explicit sibling comparison is made.
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?
There is no guidance about when to use this tool versus alternatives, no prerequisites, and no exclusions. It implies the input must be sanitized process events, but it never tells the agent when this discovery is appropriate or how it relates to sibling process tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_process_compare_with_yonoteBRead-only
Compare discovered process candidates with Yonote process/source-of-truth pages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| period_days | No | ||
| systems_json | No | ||
| candidates_json | No | ||
| project_ids_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the read-only safety profile. The description adds no extra behavioral detail (e.g., what the comparison produces, whether it returns discrepancies, or any side effects). It does not contradict annotations, but adds minimal context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff or redundancy. It clearly states the core action and object in minimal words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, all undocumented in the schema, and no description of their semantics. An output schema exists but is not described. The description is far too sparse for an agent to correctly construct a call, especially given the complexity of JSON parameters like systems_json and candidates_json.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the six parameters (limit, query, period_days, systems_json, candidates_json, project_ids_json). The agent has no guidance on what these inputs mean or how to format them, leaving the tool effectively unusable without external knowledge.
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 states a clear action (compare) with a specific resource (discovered process candidates vs Yonote pages). It is distinct from sibling tools like gateway_process_candidates_discover (which finds candidates) and gateway_company_get_source_of_truth (which likely retrieves pages), so an agent can tell it apart.
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 phrase 'discovered process candidates' implies it should be used after discovery, but it does not explicitly state when to use this tool versus alternatives, nor when not to use it. No exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_process_events_searchBRead-only
Return sanitized process events from Yonote, Bitrix24, Tracker, and GitLab.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| period_days | No | ||
| systems_json | No | ||
| project_ids_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description adds the 'sanitized' qualifier, a meaningful behavioral guarantee about output privacy beyond what annotations state. It does not cover rate limits or pagination, but for a read-only search the core safety and data-processing behavior is adequately disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundant phrasing. Every word earns its place.
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?
Although an output schema exists and annotations cover read-only status, the description omits parameter semantics and any usage context. With five optional filter parameters, the agent lacks essential information to construct a correct 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% and the description does not explain any of the five parameters. Terms like 'systems_json' and 'project_ids_json' are ambiguous without format examples, and even 'query' and 'period_days' are only loosely inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Return' with the resource 'sanitized process events' and explicitly enumerates the sources (Yonote, Bitrix24, Tracker, GitLab). This makes the purpose unmistakable and clearly distinguishes it from sibling search tools like gateway_work_search or gateway_knowledge_search.
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 over related siblings, such as gateway_process_candidates_discover or gateway_work_search. It only states what it does, leaving the agent to infer all use-case boundaries and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_process_rebuild_backlogBRead-only
Build a staff-reviewed Process Rebuild Backlog from process candidates and Yonote comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| period_days | No | ||
| systems_json | No | ||
| candidates_json | No | ||
| comparisons_json | No | ||
| project_ids_json | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint: true annotation already covers the read-only safety profile. The description adds that the resulting backlog is 'staff-reviewed', which suggests it is meant for human evaluation, but it does not explain whether the backlog is persisted, how results are limited, or what side effects, if any, occur. The word 'Build' could even suggest mutation, though the annotation resolves that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the primary action and object, then specifies the data sources. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, 0% schema coverage, and an output schema, the one-sentence description is too thin to support correct invocation. An agent would not know what values to put in systems_json, candidates_json, comparisons_json, or project_ids_json, nor how period_days and limit affect the backlog. The presence of an output schema helps with return values, but the input contract remains largely unexplained.
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 names two conceptual inputs, 'process candidates' and 'Yonote comparison', which map to candidates_json and comparisons_json, but it does not clarify the other five parameters: limit, query, period_days, systems_json, and project_ids_json. The names of some parameters are self-explanatory, but the JSON-string formats and expected contents remain undefined.
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 states a specific verb ('Build'), a specific resource ('staff-reviewed Process Rebuild Backlog'), and its inputs ('process candidates and Yonote comparison'). This differentiates it from siblings like gateway_process_candidates_discover and gateway_process_compare_with_yonote, which produce those inputs rather than combining them. However, 'Build' is somewhat ambiguous about whether this is a read-only computation or a persistent write, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The wording implies this tool consumes outputs from earlier process-discovery and comparison steps, since candidates_json and comparisons_json are inputs. But it never explicitly says 'run after gateway_process_candidates_discover and gateway_process_compare_with_yonote' or gives conditions for when not to use it. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_project_scope_resolveDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope_id | No | ||
| project_id | Yes | ||
| signal_summary | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_search_toolsCRead-only
Search known internal MCP route declarations.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals that this is a safe read operation, and the description adds scope by noting the search covers 'known internal' route declarations. It does not disclose what gets returned, whether an empty query lists everything, or how results are ordered, but the safety profile is handled by the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler, and every word contributes to the purpose. It is appropriately terse for a simple search operation, though it sacrifices useful detail for brevity.
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?
Although an output schema exists so return format need not be explained, the description lacks usage context, query semantics, and differentiation from sibling searches. This leaves it too sparse for an agent to confidently select it over similar search tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single 'query' parameterainer, and the tool description only says 'Search ...' without explaining what the query matches (route names, paths, descriptions) or how the default empty string behaves. The property name 'query' gives basic meaning, but the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and resource ('known internal MCP route declarations'), which clearly distinguishes it from data-search siblings like gateway_knowledge_search or gateway_company_search. It could be more explicit about what an 'MCP route declaration' is, but the core purpose is readable and specific.
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?
There is no guidance about when to use this tool versus the many sibling search tools, nor any exclusions or alternatives. The implied use case is discovering internal gateway routes, but an agent is left to infer that rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_session_finishedA
Close every open skill invocation for this actor and agent session.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| outcome | No | completed | |
| session_id | Yes | ||
| error_class | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the core behavior: closing every open skill invocation. However, annotations provide only a title É no safety or mutation hints. It does not mention idempotency, what happens when there are no open invocations, or any side effects beyond closing.
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, focused sentence with no redundant wording. It states the action and scope immediately, making it easy to consume.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is simple and an output schema exists, so return-value documentation is not needed here. However, the complete lack of parameter documentation and minimal usage context leaves gaps for an agent trying to invoke the tool correctly, especially for the optional outcome and error_class fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage-loss, and the tool description does not explain the parameters. 'agent' and 'session_id' are loosely implied by 'this actor and agent session,' but 'outcome' and 'error_class' are entirely unexplained, forcing an agent to guess at their meaning and default behavior.
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?
Description uses a specific verb and resource: 'Close every open skill invocation' for a given actor and agent session. It clearly differentiates this session-level terminal tool from sibling telemetry tools like gateway_telemetry_skill_completed and gateway_telemetry_skill_failed, which operate on individual skill invocations.
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 at the end of an agent session, but it does not explicitly state when to use this tool versus alternatives like gateway_telemetry_skill_completed or gateway_telemetry_skill_failed. An agent can infer the context, but there is no direct guidance or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_skill_completedA
Record that a local agent skill completed successfully.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| client | No | ||
| project | No | ||
| skill_id | Yes | ||
| session_id | No | ||
| skill_pack | No | ||
| duration_ms | No | ||
| metadata_json | No | {} | |
| skill_version | No | ||
| correlation_id | No | ||
| mcp_routes_json | No | [] | |
| missing_scopes_json | No | [] |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Record' makes clear this is a telemetry write operation, which is useful since no readOnly/destructive annotations are present. However, it does not disclose details around authentication, idempotency, or what telemetry side effects may be visible elsewhere.
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 clear sentence with no filler or repetition. The key action and success condition are front-loaded and 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?
For a 12-parameter tool with zero schema description coverage, a one-sentence description is insufficient. It does not explain which optional telemetry fields to populate, how it relates to skill_failed, or what a correct invocation should include beyond the two required parameters.
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% with 12 parameters, and the description provides no parameter-level meaning. It does not explain required fields like agent and skill_id or optional fields like duration_ms, session_id, or metadata_json, so the agent gains no semantic help from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Record') with a precise resource ('a local agent skill completed successfully'). This clearly distinguishes the tool from its telemetry siblings such as gateway_telemetry_skill_started and gateway_telemetry_skill_failed.
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 embeds the trigger condition: record when a local agent skill completed successfully. This gives the agent a clear context for selecting this tool, though it does not explicitly name alternatives or say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_skill_failedA
Record that a local agent skill failed. Send error class, not stack traces or secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| client | No | ||
| project | No | ||
| skill_id | Yes | ||
| session_id | No | ||
| skill_pack | No | ||
| duration_ms | No | ||
| error_class | No | ||
| metadata_json | No | {} | |
| skill_version | No | ||
| correlation_id | No | ||
| mcp_routes_json | No | [] | |
| missing_scopes_json | No | [] |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only a title, so the description must carry the burden of behavioral disclosure. It adds a crucial guideline: 'Send error class, not stack traces or secrets', which tells the agent what to include and avoid. It does not describe side effects, return values, or whether the call is synchronous, but the security note is valuable beyond any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no fluff. The purpose is front-loaded, followed by a security guideline. Every word earns its place, and the structure is ideal for quick scanning.
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?
Despite an output schema existing, the description does not explain required parameters (agent, skill_id), the meaning of optional fields, or any return/side-effect behavior. The only additional context is the security note about error class. For a tool with 13 parameters and no schema descriptions, this is inadequate for an agent to correctly populate all fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 13 parameters, yet the description only hints at error_class ('Send error class') and omits explanations for agent, skill_id, duration_ms, session_id, and other fields. With no parameter descriptions in the schema, the description fails to compensate, leaving the agent to guess meanings.
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 'Record' and the specific resource 'a local agent skill failed', which distinguishes it from sibling telemetry tools like started and completed. It also specifies the payload focus (error class) and an explicit security constraint, leaving no ambiguity about the tool's core action.
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 phrase 'Record that a local agent skill failed' implies the use case (on skill failure) and the sibling naming pattern makes the contrast with started/completed obvious. However, it doesn't explicitly state when NOT to use it or name alternatives, though the context is sufficient for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_skill_startedC
Record that a local agent skill started. Do not send raw prompt text or sensitive data.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| client | No | ||
| project | No | ||
| skill_id | Yes | ||
| session_id | No | ||
| skill_pack | No | ||
| metadata_json | No | {} | |
| skill_version | No | ||
| correlation_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain only a title, so the description carries the full burden of behavioral disclosure. It adds the critical constraint 'Do not send raw prompt text or sensitive data', which is valuable. However, it does not indicate whether this is a write operation, whether it has side effects, or any other behavioral traits. The minimal disclosure leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences with no redundant information. The main purpose is front-loaded, and the sensitive-data warning is a relevant addendum. It is appropriately sized for the tool's scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and minimal annotations, the description is incomplete. It does not explain parameter semantics, usage scenarios, or how it relates to sibling telemetry tools. The presence of an output schema reduces the need to describe return values, but the description still lacks essential context for correct 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%, and the description provides no parameter explanations. While some parameter names like 'agent' and 'skill_id' are self-explanatory, fields such as 'metadata_json', 'correlation_id', and 'skill_pack' are not elaborated. The description fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Record') and resource ('local agent skill started'), clearly indicating the telemetry event it captures. It does not explicitly distinguish from sibling telemetry tools like skill_completed or skill_failed, but the word 'started' makes the intent 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 provides no guidance on when to use this tool versus alternatives. It does not mention the sibling telemetry tools or specify conditions for invocation. The only extra instruction is a data-handling constraint, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_skill_statsCRead-only
Return aggregated assistant skill usage stats. Requires telemetry:read.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| agent | No | ||
| limit | No | ||
| project | No | ||
| skill_id | No | ||
| skill_pack | No | ||
| actor_subject | No | ||
| skill_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description adds the telemetry:read permission requirement. However, it does not disclose aggregation behavior, filtering semantics, or whether results are paginated, though the output schema mitigates some of this 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 focused sentence with no filler. The action and the key prerequisite are front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description leaves eight filter parameters entirely undocumented and provides no guidance on how this tool relates to the other telemetry tools. For a tool with this many optional filters and ambiguous sibling overlap, the description is too sparse to fully support correct 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%, and the description names none of the eight parameters. The parameters are only given titles and defaults, so an agent has no idea what 'days', 'agent', 'skill_pack', 'actor_subject', or 'skill_version' mean or how they affect the result.
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 states a specific action ('Return aggregated assistant skill usage stats') with a clear resource. It is distinguishable from most siblings, though it does not explicitly differentiate itself from gateway_telemetry_usage_summary or gateway_telemetry_usage_report, which may also return aggregated telemetry data.
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 only usage guidance is 'Requires telemetry:read,' which states a permission prerequisite but gives no indication of when to choose this tool over the other telemetry siblings. There is no mention of alternatives, exclusions, or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_usage_reportC
Record actual or estimated agent token/cost usage. Requires telemetry:write.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| agent | Yes | ||
| model | No | ||
| client | No | ||
| source | No | mcp | |
| project | No | ||
| provider | No | ||
| skill_id | No | ||
| event_name | No | usage_report | |
| session_id | No | ||
| skill_pack | No | ||
| duration_ms | No | ||
| usage_class | No | ||
| input_tokens | No | ||
| total_tokens | No | ||
| metadata_json | No | {} | |
| output_tokens | No | ||
| correlation_id | No | ||
| raw_event_json | No | {} | |
| source_quality | No | estimated | |
| tool_use_count | No | ||
| reasoning_tokens | No | ||
| estimated_cost_usd | No | ||
| cache_read_input_tokens | No | ||
| cache_creation_input_tokens | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain only a title, offering no behavioral hints (e.g., readOnly, destructive). The description states that the tool 'Record[s]' usage and requires telemetry:write, implying a mutating operation. However, it does not disclose other behavioral aspects such as idempotency, side effects on existing telemetry data, or whether any confirmation is returned. For a reporting tool with minimal annotation coverage, this description insufficiently conveys its behavioral implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two short sentences, and front-loads the primary action. It avoids unnecessary detail or verbosity. However, it is so brief that it sacrifices essential explanatory content, though for the information it does convey, the structure is 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 complexity (25 parameters, many with defaults, an output schema), a one-line description is clearly inadequate. It does not explain how to interpret token fields, how to set source_quality to 'actual' vs 'estimated', what correlation_id is for, or what the output schema represents. The description omits critical context that an agent would need to construct a proper usage report, making it incomplete for effective 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 explain parameters. It only mentions 'actual or estimated' and 'token/cost usage', but does not map these to specific fields or elaborate on the distinction between actual and estimated, nor explain fields like source_quality, raw_event_json, or metadata_json. With 25 parameters and zero schema documentation, the description fails to compensate for the coverage gap, leaving parameter meaning unclear.
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 states a clear verb 'Record' and a specific subject 'agent token/cost usage', which conveys the tool's core function. It distinguishes the tool as a telemetry reporting action, though it doesn't explicitly contrast it with sibling tools like gateway_telemetry_usage_summary. The purpose is precise enough for an agent to understand the action without ambiguity.
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 only guidance provided is 'Requires telemetry:write', which is a permission requirement, not usage direction. The description does not specify when to use this tool versus other telemetry tools (e.g., usage_summary, skill_started), nor does it indicate scenarios for actual vs estimated usage. This leaves the agent without clear decision criteria for selecting this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_telemetry_usage_summaryCRead-only
Return approximate or actual agent usage summary. Requires telemetry:read.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| agent | No | ||
| limit | No | ||
| project | No | ||
| skill_id | No | ||
| source_quality | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's permission note ('Requires telemetry:read') adds a small behavioral detail. The phrase 'approximate or actual' hints that results may not be exact, which is useful. However, it does not describe return format, pagination, or limitations. Given the annotation coverage, the added value is modest, justifying a mid-range score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence and is front-loaded with the main purpose. However, for a tool with 6 parameters and no schema documentation, this extreme brevity is insufficient. It is concise but sacrifices necessary detail, making it a borderline case. The structure is simple but not helpful for usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, zero schema coverage, and no parameter explanations, the description is drastically incomplete. It does not specify how filters work, what the output summary contains, or how to interpret the result. Even though an output schema exists, the lack of parameter semantics and usage context makes the tool almost unusable without external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema provides no explanations for parameters like days, agent, limit, project, skill_id, and source_quality. The description does not mention any of these parameters or their purpose, leaving the agent completely in the dark. This is a critical failure for a tool with 6 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 returns an agent usage summary, using a specific verb ('Return') and resource ('agent usage summary'). It is distinguishable from siblings like gateway_telemetry_skill_stats and gateway_telemetry_usage_report, though it does not explicitly differentiate itself. The phrase 'approximate or actual' adds a slight nuance but the core purpose is clear.
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 other telemetry tools. It only mentions a permission requirement ('Requires telemetry:read'), which is a constraint, not a usage condition. There is no mention of scenarios, exclusions, or alternatives, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_acceptC
Record the independent review decision after execution evidence exists.
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | ||
| accepted | Yes | ||
| decision_ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain no hints (only title), so the description carries the full burden. 'Record' implies a write operation, but the description discloses nothing about idempotency, permission requirements, reversibility, or consequences of repeated calls. It adds no behavioral context beyond the verb itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no fluff, which is good for conciseness. However, it is so brief that it sacrifices critical information. It is appropriately front-loaded but under-specified for a tool with no other explanatory content.
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 three parameters with no schema descriptions, no behavioral annotations, and an output schema that is not explained, the description is grossly incomplete. An agent cannot determine what values to pass for 'accepted' or 'decision_ref' or what the tool returns. It fails the completeness bar even for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the three parameters. It doesn't clarify what 'accepted' means semantically, what decision_ref is for, or how work_id should be used. With zero coverage, the description must compensate, and it fails entirely.
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 records an independent review decision and specifies the condition (after execution evidence exists). This is a specific verb+resource with a temporal condition, though it doesn't explicitly distinguish from sibling tools like gateway_work_complete or gateway_work_claim. It's clear but not as sharply differentiated as the best examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a single usage condition ('after execution evidence exists') but provides no guidance on when not to use it, prerequisites, or alternatives among the many work-related siblings. This is minimal guidance and leaves the agent to infer appropriate timing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_artifact_recordB
Append one hash-linked, metadata-only artifact phase to a Work Contract.
| Name | Required | Description | Default |
|---|---|---|---|
| phase | Yes | ||
| work_id | Yes | ||
| producer | Yes | ||
| refs_json | Yes | ||
| checks_json | No | [] | |
| previous_digest | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (only a title), so description carries burden. It discloses that it's a metadata-only append and hash-linked, implying immutability and immutability, but does not detail side effects, permission requirements, or the nature of the hash-linking. This is useful but only partial.
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?
One succinct sentence is front-loaded with the core action and key attributes. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema (probably rich) and 6 parameters at 0% documentation, more context is needed. The description fails to explain the format of refs_json and checks_json, the meaning of previous_digest, or any side effects (e.g., does it change the contract's state?). The complexity is moderate but the lack of param or usage guidance makes it incomplete.
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 any parameter explanation would help. The description only mentions 'metadata-only artifact phase' and 'hash-linked' but does not explain what each of the 6 parameters means (e.g., refs_json, checks_json, previous_digest). An agent has little to infer the format or semantics of those fields.
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?
Clearly states the action 'Append' and the resource 'hash-linked, metadata-only artifact phase to a Work Contract', distinguishing it as a write operation on a contract's artifact trail. It doesn't mention siblings, but the resource and action are specific enough to separate it from generic work tools like gateway_work_intake or gateway_work_complete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus others. The description implies it's for recording artifact phases, but does not state when it should be preferred over gateway_work_event or other work lifecycle tools, and lacks exclusions or alternative mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_claimD
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | No | ||
| project_id | No | ||
| lease_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_completeA
Finish execution and record evidence.
result_refs_json must be a JSON array of objects with type, uri,
and optional title, for example an MR, commit, branch, or document.
Call this before gateway_work_accept. Acceptance is rejected until
successful completion has recorded verification evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| success | Yes | ||
| work_id | Yes | ||
| metrics_json | No | {} | |
| admin_actions | No | ||
| evidence_state | Yes | ||
| result_refs_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations contain only a title, so the description must carry the behavioral disclosure burden. It does disclose the core behavioral contract: this tool records verification evidence and gates downstream acceptance. It could go further by explaining what happens when success=false or what side effects the evidence recording produces, but the main consequence is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: first the purpose, then the one non-obvious parameter format, then the sequencing constraint. Every sentence contributes actionable guidance and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's role in the workflow and provides critical parameter guidance for result_refs_json. With no annotations and several required parameters still unexplained, however, an agent may not know valid values for evidence_state or how metrics_json/admin_actions affect behavior. The output schema helps with outputs, but input semantics remain partially under-specified.
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 usefully explains result_refs_json's expected JSON-array shape with type/uri/title and examples, but it leaves the other required parameters — evidence_state, work_id, success — and optional metrics_json/admin_actions semantically unexplained. This is only partial compensation for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — 'Finish execution and record evidence' — on an identifiable resource (work), and explicitly differentiates itself from the acceptance sibling by saying it must be called before gateway_work_accept. An agent can tell this completion/evidence-recording step apart from claim, accept, and other work tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit sequencing guidance: 'Call this before gateway_work_accept' and explains the consequence of not doing so — 'Acceptance is rejected until successful completion has recorded verification evidence.' This tells the agent exactly when to use this tool versus the acceptance tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_eventD
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | ||
| event_type | Yes | ||
| payload_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_getDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | ||
| include_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_intakeD
| Name | Required | Description | Default |
|---|---|---|---|
| priority | No | ||
| scope_id | No | ||
| sdd_level | Yes | ||
| work_kind | No | code_change | |
| project_id | Yes | ||
| risk_level | No | normal | |
| source_ref | No | ||
| source_type | Yes | ||
| project_path | No | ||
| execution_mode | Yes | ||
| intent_summary | Yes | ||
| scope_decision | Yes | ||
| idempotency_key | No | ||
| source_refs_json | No | [] | |
| quality_gates_json | No | [] | |
| contract_metadata_json | No | {} | |
| acceptance_criteria_json | No | [] | |
| tracker_completion_policy_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_metricsDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_searchDRead-only
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| project_id | No | ||
| actor_subject | No | ||
| execution_mode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gateway_work_tracker_policy_setC
Set the Tracker lifecycle policy without transitioning the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| work_id | Yes | ||
| policy_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no safety annotations beyond a title, so the description carries the full burden of disclosing side effects. It does reveal one important behavioral trait—no issue transition—but it omits whether the policy is persisted, overwritten, validated, or requires specific permissions, and it does not clarify the consequences of setting a lifecycle policy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the most important qualifier is placed at the end. It is concise, but the undefined 'Tracker lifecycle policy' terminology makes it less self-contained than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 0% parameter coverage and no explanation of policy_json's structure or the operation's effects, an agent cannot reliably invoke this tool. The output schema exists, so return-value details are not required, but the missing parameter semantics and behavioral context leave a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain either parameter. 'Tracker lifecycle policy' hints that policy_json contains the policy and work_id likely identifies the issue, but no format, allowed values, or semantics are provided, which is insufficient for constructing a valid call.
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 names a specific verb and resource ('Set the Tracker lifecycle policy') and adds a meaningful qualifier ('without transitioning the issue') that separates it from state-transitioning work tools. It is slightly weakened by the capitalized 'Tracker' jargon and the mismatch between the title's 'Completion Policy' and the description's 'lifecycle policy,' but the core operation is identifiable.
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 phrase 'without transitioning the issue' implies a use case where the agent wants to update policy but keep the issue state unchanged. However, the description never names alternatives or explicitly states when not to use this tool, leaving the agent to infer routing among many work_* siblings.
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.
94 tool updates
v0.1.0- First observed
gateway_access_package_catalog - First observed
gateway_access_profile - First observed
gateway_access_request_cancel - First observed
gateway_access_request_create - First observed
gateway_access_request_list - First observed
gateway_admin_access_package_catalog - First observed
gateway_admin_access_request_decide - First observed
gateway_admin_access_request_list - First observed
gateway_admin_audit_search - First observed
gateway_admin_audit_summary - First observed
gateway_admin_explain_access - First observed
gateway_admin_grant_access_package - First observed
gateway_admin_grant_resource - First observed
gateway_admin_grant_scope - First observed
gateway_admin_list_access - First observed
gateway_admin_list_access_packages - First observed
gateway_admin_revoke_access_package - First observed
gateway_admin_revoke_resource - First observed
gateway_admin_revoke_scope - First observed
gateway_approval_comment - First observed
gateway_approval_create - First observed
gateway_approval_decide - First observed
gateway_approval_get - First observed
gateway_approval_list - First observed
gateway_call_tool - First observed
gateway_call_tool_sanitized - First observed
gateway_company_bootstrap_context - First observed
gateway_company_get - First observed
gateway_company_get_source_of_truth - First observed
gateway_company_search - First observed
gateway_factory_project_get_runtime_config - First observed
gateway_factory_project_resolve_by_issue - First observed
gateway_factory_projects_discover - First observed
gateway_file_download_create - First observed
gateway_file_download_status - First observed
gateway_file_upload_create - First observed
gateway_file_upload_status - First observed
gateway_knowledge_access_audit - First observed
gateway_knowledge_audit_access - First observed
gateway_knowledge_document_delete - First observed
gateway_knowledge_document_get - First observed
gateway_knowledge_document_put - First observed
gateway_knowledge_document_restore - First observed
gateway_knowledge_document_search - First observed
gateway_knowledge_document_versions - First observed
gateway_knowledge_ingest_file - First observed
gateway_knowledge_member_add - First observed
gateway_knowledge_member_remove - First observed
gateway_knowledge_reindex - First observed
gateway_knowledge_search - First observed
gateway_knowledge_space_add_member - First observed
gateway_knowledge_space_create - First observed
gateway_knowledge_space_get - First observed
gateway_knowledge_space_list - First observed
gateway_knowledge_space_remove_member - First observed
gateway_knowledge_space_set_permission - First observed
gateway_knowledge_spaces - First observed
gateway_knowledge_trash_list - First observed
gateway_knowledge_trash_restore - First observed
gateway_memory_forget - First observed
gateway_memory_search - First observed
gateway_memory_sources_search - First observed
gateway_memory_summarize_session - First observed
gateway_memory_write - First observed
gateway_notification_ack - First observed
gateway_notification_get - First observed
gateway_notification_publish - First observed
gateway_notification_topic_update - First observed
gateway_notifications_list - First observed
gateway_privacy_classify - First observed
gateway_privacy_sanitize_text - First observed
gateway_process_candidates_discover - First observed
gateway_process_compare_with_yonote - First observed
gateway_process_events_search - First observed
gateway_process_rebuild_backlog - First observed
gateway_project_scope_resolve - First observed
gateway_search_tools - First observed
gateway_telemetry_session_finished - First observed
gateway_telemetry_skill_completed - First observed
gateway_telemetry_skill_failed - First observed
gateway_telemetry_skill_started - First observed
gateway_telemetry_skill_stats - First observed
gateway_telemetry_usage_report - First observed
gateway_telemetry_usage_summary - First observed
gateway_work_accept - First observed
gateway_work_artifact_record - First observed
gateway_work_claim - First observed
gateway_work_complete - First observed
gateway_work_event - First observed
gateway_work_get - First observed
gateway_work_intake - First observed
gateway_work_metrics - First observed
gateway_work_search - First observed
gateway_work_tracker_policy_set
TDQS
Scored across 94 tools
Many tools have overlapping or alias-like purposes (e.g., gateway_knowledge_spaces vs gateway_knowledge_space_list, gateway_knowledge_document_search vs gateway_knowledge_search, gateway_knowledge_space_add_member vs gateway_knowledge_member_add). The work_* tools have empty descriptions, making them hard to distinguish from each other and from process/factory tools.
Most tools follow a gateway_<domain>_<action> pattern, which is consistent. However, there are deviations like gateway_notifications_list (plural domain) vs gateway_notification_get (singular), and several compatibility aliases that break the pattern. The empty descriptions for some work_* tools also make naming less predictable.
94 tools is far beyond the typical well-scoped MCP server. The server covers many domains (memory, knowledge, notifications, telemetry, admin, access, approvals, work, factory, privacy, files), which makes it feel like a monolithic gateway rather than a focused tool set. This extreme count overwhelms agents and reduces coherence.
The server covers a broad range of domains with CRUD-like operations for knowledge, notifications, access, and approvals. However, the work_* tools have empty descriptions and appear to lack obvious lifecycle operations (e.g., no clear update/cancel for work items), and the factory/process tools are exploratory rather than actionable. The surface is wide but uneven.
Maintenance
Related MCP Connectors
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Give AI agents identity, permissions, and reusable proof through one MCP.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to securely connect with SAP ABAP and BTP services, allowing execution of function modules, BAPIs, table reads, and various BTP operations through MCP.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceGives AI coding agents (Claude Code, Cursor, etc.) unified, secure access to dev infrastructure (Vercel, GitHub, Supabase, Cloudflare, GCP) via a single MCP token.MIT
- FlicenseNot gradedqualityCmaintenanceA single MCP server that exposes safe, permission-checked tools for AI assistants to reach file systems, databases, APIs, Git, cloud services, and business applications.-
- AlicenseNot gradedqualityBmaintenanceProvides a secure MCP gateway for AI agents to access APIs without exposing raw credentials, with scoped access, audit logging, and OAuth support.MIT