-
Notifications
You must be signed in to change notification settings - Fork 33
Description
The challenge of tons of tools
AI is funny in that it works like magic sometimes and other times will completely fall apart counterintuitively. One example of this is tools — whether direct calls functions on a model level or tools from an MCP level — wherein the model's ability to select the right tool for the job is finicky. Ironically, the more tools the AI has to work with the less likely it is to know which tool to use. Less is more in this case.
We're introducing the Abilities API in 6.9, which will be the foundation for how folks surface functionality to AI, which will be utilities by the MCP Adapter, at least. It's defensively best to assume that people will register a lot of abilities. I could imagine sites with dozens of plugins totaling hundreds (or thousands) of abilities. If these abilities are simply surfaced 1-to-1 as tools within the MCP server, it will not go over well.
Tentative solution: Layered Tool Pattern
One example of an approach to this is the Square MCP Server, which has three tools:
get_service_info— which is used for discovering the services availableget_type_info— which provides parameter requirements for a given service's methodmake_api_request— which executes a service's method
This is described as a Layered Tool Pattern. Basically, the surface area of the API for the AI starts very small and expands via discovery. This makes the underlying tools more like a choose-your-own-adventure than a massive diner menu.
Ability Layers
Given the sheer number of abilities, we likely first need a taxonomy for breaking them down further, likely a category. The category would have a name and description. This list would be provided as part of the system prompt, and would hopefully be at most dozens of terms.
The AI would then be given three tools:
get_abilities_by_category— which receives a category, and returns a name/description list of abilitiesget_ability_info— which receives a category and ability, and returns the parameters for the abilityuse_ability— which takes a category, ability, parameters objects, and returns the output of the ability
Metadata
Metadata
Assignees
Labels
Type
Projects
Status