Skip to content

Tool surface is large enough that near-duplicate tools are a selection hazard; consider consolidating or disambiguating #170

Description

@ElliotDrel

Description

The server exposes roughly 180 tools. Several clusters overlap enough that choosing correctly requires loading multiple schemas and comparing them, and choosing wrong fails in ways that are not always obvious.

Examples of clusters that read as near-duplicates from the tool list alone:

  • readFile, readDriveFile, downloadFile, getFileInfo
  • modifyMessage, modifyThread, batchModifyText
  • listMessages, listThreads, batchGetMessages, batchGetThreads
  • replaceDocumentWithMarkdown, replaceRangeWithMarkdown, appendMarkdown

This is not a request to delete functionality. Two lighter changes would help most of the cost:

  1. Make the one-line descriptions disambiguating rather than merely accurate. For any tool with a near-twin, the description should lead with what distinguishes it and name the sibling to use instead, e.g. "Read a Drive file's content. For metadata only, use getFileInfo. For binary/local save, use downloadFile." Several descriptions currently describe the tool in isolation, which is exactly when the wrong one gets picked.

  2. Consider merging pure variants behind a parameter where the underlying call is the same, in the way manageFilter and manageLabel already fold create/delete/get/list into one tool with an action. That pattern works well and is applied inconsistently across the rest of the surface.

Context for why this is worth weighing: in deferred-tool setups the model sees only tool names until a schema is fetched, so name-level ambiguity directly causes either a wrong call or an extra round-trip to disambiguate. The manage* naming convention makes the grouped tools easy to find. The ungrouped clusters are where the cost lands.

Environment: server 3.4.6, node v22.22.3, win32 10.0.26200, stdio transport.

Diagnostic Info
  • Server version: 3.4.6
  • Node version: v22.22.3
  • OS: win32 10.0.26200 (x64)
  • Auth status: valid
  • Scopes: documents, drive, spreadsheets, script.external_request, gmail.modify, gmail.compose, gmail.send, gmail.settings.basic, gmail.settings.sharing, calendar, forms.body, forms.body.readonly, forms.responses.readonly, presentations, tasks, service.management

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions