

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 工具发现
<a name="mcp-tool-strategy-discovery"></a>

在 MCP 服务器中发现和注册代理中的工具有三种方法：静态定义、动态发现和搜索功能。

## 静态定义
<a name="mcp-tool-strategy-discovery-static"></a>

首先，您可以直接在代理代码中静态定义可用工具。在这种方法中，您可以为 MCP 服务器提供的、由 MCP 客户端访问的每个工具定义一个远程工具（像 Strands Agent SDK 这样的框架中的客户端参考对象）。以下示例使用可流式传输的 HTTP 传输：

```
from mcp.client.streamable_http import streamablehttp_client
from strands import Agent
from strands.tools.mcp import MCPClient

streamable_http_mcp_client = MCPClient(
    lambda: streamablehttp_client("https://mcp1:8000/mcp")
)

reverse_text = RemoteTool(
    name="reverseText",
    client=streamable_http_mcp_client
)

agent = Agent(tools=[reverse_text])
```

单独的工具注册可以帮助你对提供给法学硕士的工具非常有选择性，从而最大限度地减少了上下文窗口的使用量。权衡之处在于，它需要知道可用工具的名称，如果可用工具在 MCP 服务器中发生变化，则可能会很脆弱。

## 动态发现
<a name="mcp-tool-strategy-discovery-dynamic"></a>

下一个方法是使用动态发现并将所有可用工具注册到代理。随着更多工具添加到 MCP 服务器，这种方法会线性地消耗上下文。以下是这种方法的示例：

```
from mcp.client.streamable_http import streamablehttp_client
from strands import Agent
from strands.tools.mcp import MCPClient

streamable_http_mcp_client = MCPClient(
    lambda: streamablehttp_client("https://mcp1:8000/mcp")
)

with streamable_http_mcp_client:
    tools = streamable_http_mcp_client.list_tools_sync()
    agent = Agent(tools=tools)
```

假设一个典型的工具定义消耗大约 250-500 个标记（包括名称、描述和架构）的场景。注册 20 个工具将消耗上下文窗口的 5,000—10,000 个令牌。当您有少量 MCP 服务器并且可以控制工具数量时，此选项最容易实现。但是，如果预计工具列表会增加，则可能会在代理中造成静默的上下文管理问题。这种方法的另一种变体是在调`list_tools`用时使用工具筛选参数（例如 [Strands Agents SDK 提供的](https://strandsagents.com/docs/user-guide/concepts/tools/mcp-tools/#client-configuration)参数）来减少向代理注册的工具数量。

## 搜索功能
<a name="mcp-tool-strategy-discovery-search"></a>

第三种选择是在运行时使用搜索功能查找相关工具。您可以列出 MCP 服务器上的所有可用工具，然后根据用户提示对这些工具进行语义搜索。然后，将生成的工具注册到您的代理中。[Amazon Bedrock AgentCore Gateway](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway.html) 提供了[原生语义搜索功能](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-using-mcp-semantic-search.html)，可以使此类解决方案更易于实施。

## 发现 MCP 工具的最佳实践
<a name="mcp-tool-strategy-discovery-best-practices"></a>
+ **上下文窗口保存**-选择一种工具发现和注册方法，以尽可能多地保留上下文窗口。
+ **使用工具筛选或语义搜索功能** — 动态地为 LLM 提供一组范围缩小的工具供您选择，从而提高其选择正确工具的准确性和有效性。工具筛选可以对工具名称（精确匹配或模式）、工具描述（语义匹配）或域或类别标签进行操作。语义搜索对于将用户意图与工具描述相匹配特别有效。这两种方法都减少了上下文窗口的使用。