Rufen Sie ein Tool in einem AgentCore Gateway auf
Um ein bestimmtes Tool aufzurufen, stellen Sie eine POST-Anfrage an den MCP-Endpunkt des Gateways und geben Sie tools/call als Methode im Anforderungstext den Namen des Tools und die Argumente an:
POST /mcp HTTP/1.1
Host: ${GatewayEndpoint}
Content-Type: application/json
Authorization: ${Authorization header}
${RequestBody}
Ersetzen Sie die folgenden Werte:
-
${GatewayEndpoint}— Die URL des Gateways, wie sie in der Antwort der CreateGatewayAPI angegeben ist.
-
${Authorization header}— Die Autorisierungsdaten des Identitätsanbieters, wenn Sie die eingehende Autorisierung einrichten.
-
${RequestBody}— Die JSON-Payload des Anfragetexts, wie unter Tools aufrufen im Model Context Protocol (MCP) angegeben. tools/callInclude as the method und include the name des Tools und seiner. arguments
Die Antwort gibt den vom Tool zurückgegebenen Inhalt und die zugehörigen Metadaten zurück.
Codebeispiele für den Aufruf von Tools
Wählen Sie eine der folgenden Methoden aus, um Beispiele für die Auflistung verfügbarer Tools im Gateway zu sehen:
Beispiel
- curl
-
-
Die folgende Curl-Anfrage zeigt eine Beispielanforderung zum Aufrufen eines Tools, das searchProducts über ein Gateway mit der ID mygateway-abcdefghij aufgerufen wurde.
curl -X POST \
https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d '{
"jsonrpc": "2.0",
"id": "invoke-tool-request",
"method": "tools/call",
"params": {
"name": "searchProducts",
"arguments": {
"query": "wireless headphones",
"category": "Electronics",
"maxResults": 2,
"priceRange": {
"min": 50.00,
"max": 200.00
}
}
}
}'
- Python requests package
-
-
import requests
import json
def call_tool(gateway_url, access_token, tool_name, arguments):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {access_token}"
}
payload = {
"jsonrpc": "2.0",
"id": "call-tool-request",
"method": "tools/call",
"params": {
"name": tool_name,
"arguments": arguments
}
}
response = requests.post(gateway_url, headers=headers, json=payload)
return response.json()
# Example usage
gateway_url = "https://${GatewayEndpoint}/mcp" # Replace with your actual gateway endpoint
access_token = "${AccessToken}" # Replace with your actual access token
result = call_tool(
gateway_url,
access_token,
"openapi-target-1___get_orders_byId", # Replace with <{TargetId}__{ToolName}>
{"orderId": "ORD-12345-67890", "customerId": "CUST-98765"}
)
print(json.dumps(result, indent=2))
- MCP Client
-
-
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
import asyncio
async def execute_mcp(
url,
token,
tool_params,
headers=None
):
default_headers = {
"Authorization": f"Bearer {token}"
}
headers = {**default_headers, **(headers or {})}
async with streamablehttp_client(
url=url,
headers=headers,
) as (
read_stream,
write_stream,
callA,
):
async with ClientSession(read_stream, write_stream) as session:
# 1. Perform initialization handshake
print("Initializing MCP...")
_init_response = await session.initialize()
print(f"MCP Server Initialize successful! - {_init_response}")
# 2. Call specific tool
print(f"Calling tool: {tool_params['name']}")
tool_response = await session.call_tool(
name=tool_params['name'],
arguments=tool_params['arguments']
)
print(f"Tool response: {tool_response}")
return tool_response
async def main():
url = "https://${GatewayEndpoint}/mcp"
token = "your_bearer_token_here"
tool_params = {
"name": "LambdaTarget___get_order_tool",
"arguments": {
"orderId": "order123"
}
}
await execute_mcp(
url=url,
token=token,
tool_params=tool_params
)
if __name__ == "__main__":
asyncio.run(main())
- Strands MCP Client
-
-
HINWEIS: Dies dient zum Aufrufen des Agenten
from strands.tools.mcp.mcp_client import MCPClient
from mcp.client.streamable_http import streamablehttp_client
def create_streamable_http_transport(mcp_url: str, access_token: str):
return streamablehttp_client(mcp_url, headers={"Authorization": f"Bearer {access_token}"})
def run_agent(mcp_url: str, access_token: str):
mcp_client = MCPClient(lambda: create_streamable_http_transport(mcp_url, access_token))
with mcp_client:
result = mcp_client.call_tool_sync(
tool_use_id="tool-123", # A unique ID for the tool call
name="openapi-target-1___get_orders", # The name of the tool to invoke
arguments={} # A dictionary of arguments for the tool
)
print(result)
url = {gatewayUrl}
token = {AccessToken}
run_agent(url, token)
- LangGraph MCP Client
-
-
HINWEIS: Dies dient zum Aufrufen des Agenten
import asyncio
from langgraph.prebuilt import create_react_agent
def execute_agent(
user_prompt,
model_id,
region,
tools
):
model = ChatBedrock(model_id=model_id, region_name=region)
agent = create_react_agent(model, tools)
_response = asyncio.run(agent.ainvoke({
"messages": user_prompt
}))
_response = _response.get('messages', {})[1].content
print(
f"Invoke Langchain Agents Response"
f"Response - \n{_response}\n"
)
return _response
Fehler
Der tools/call Vorgang kann die folgenden Fehlertypen zurückgeben:
-
Fehler, die als Teil des HTTP-Statuscodes zurückgegeben wurden:
-
AuthenticationError
-
Die Anfrage ist aufgrund ungültiger Anmeldeinformationen fehlgeschlagen.
HTTP-Statuscode: 401
-
AuthorizationError
-
Der Aufrufer ist nicht berechtigt, das Tool aufzurufen.
HTTP-Statuscode: 403
-
ResourceNotFoundError
-
Das angegebene Tool ist nicht vorhanden.
HTTP-Statuscode: 404
-
ValidationError
-
Die angegebenen Argumente entsprechen nicht dem Eingabeschema des Tools.
HTTP-Statuscode: 400
-
ToolExecutionError
-
Bei der Ausführung des Tools ist ein Fehler aufgetreten.
HTTP-Statuscode: 500
-
InternalServerError
-
Es ist ein interner Serverfehler aufgetreten.
HTTP-Statuscode: 500
-
MCP-Fehler. Weitere Informationen zu diesen Fehlertypen finden Sie unter Fehlerbehandlung in der Dokumentation zum Model Context Protocol (MCP).