更新时间:2026-09-24 GMT+08:00
分享

列出网关工具

在请求体中指定tools/list作为请求方法,获取网关提供的所有可用工具列表。返回结果包含工具名称、描述和参数定义等信息,可用于后续工具调用。

请求体示例:

{
  "jsonrpc": "2.0",
  "id": "list-tools-request",
  "method": "tools/list",
  "params": {
    "cursor": "<CURSOR>"
  }
}

其中cursor为可选参数,用于分页请求,首次请求无需携带。

响应体示例:

{
  "jsonrpc": "2.0",
  "id": "list-tools-request",
  "result": {
    "tools": [
      {
        "name": "tool_name",
        "description": "工具描述",
        "inputSchema": {}
      }
    ],
    "nextCursor": "<NEXT_CURSOR>"
  }
}

网关支持分页返回工具列表。当Target响应tools/list请求返回nextCursor字段且非空时,表示该Target有更多工具未返回,需要将nextCursor的值作为下一次请求的cursor参数继续请求,重复此过程直至nextCursor为空,即可获取完整的工具列表,详情请参见MCP协议分页介绍。

网关会根据不同的Target进行分页,每个Target的工具列表独立分页返回。即每次返回的工具属于同一Target,获取下一个Target的工具需要继续分页请求。每个Target最多返回1000个工具。

  • API Key认证的tools/list调用示例
    import requests
    import json
    import re
    
    
    def list_tools(gateway_url, access_token):
        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json, text/event-stream",
            "mcp-session-id": "<MCP_SESSION_ID>",  # MCP会话ID,相同的sessionid会使用同一网关资源,调用时请配置此参数,例如:4ada96ff-1e16-4e5b-8fb4-b3f0f207a4f3
            "Mcp-Protocol-Version": "<MCP_PROTOCOL_VERSION>",   # MCP协议版本          
            "Authorization": f"Bearer {access_token}"      
        }
        payload = {"jsonrpc": "2.0","id": "list-tools-request","method": "tools/list"}
        response = requests.post(gateway_url, headers=headers, json=payload) # 若需要忽略ssl校验,可补充参数verify=False
        raw = response.content.decode('utf-8', errors='replace')
        ct = response.headers.get('content-type', '')
        if 'text/event-stream' in ct:
            for line in raw.strip().split('\n'):
                if line.startswith('data:'):
                    try:
                        return json.loads(line[5:].strip())
                    except json.JSONDecodeError:
                        continue
            m = re.search(r'\{.*\}', raw, re.DOTALL)
            if m:
                return json.loads(m.group())
        try:
            return json.loads(raw)
        except json.JSONDecodeError:
            print(f"[Fail]: {raw[:200]}")
            return None
    
    gateway_url = "<GATEWAY_URL>"   # 网关接口地址(业务API调用入口)
    access_token = "<API_KEY>"      # 认证凭证:APIKey认证直接填写密钥;无认证则留空/删除
    result = list_tools(gateway_url, access_token)
    if result:
        print(json.dumps(result, indent=2, ensure_ascii=False))
  • IAM认证的tools/list调用示例
    API签名详情请参见API签名指南:
    import requests
    import json
    import re
    
    
    def list_tools(gateway_url, access_token):
        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json, text/event-stream",
            "mcp-session-id": "<MCP_SESSION_ID>",     # MCP会话ID,相同的sessionid会使用同一网关资源,调用时请配置此参数,例如:4ada96ff-1e16-4e5b-8fb4-b3f0f207a4f3
            "Mcp-Protocol-Version": "<MCP_PROTOCOL_VERSION>",   # MCP协议版本 
            "X-Sdk-Date": "<X_SDK_DATE>",             # 网关鉴权时间戳
            "X-Sdk-Content-Sha256": "UNSIGNED-PAYLOAD",
            "Authorization": access_token                       
        }
        payload = {"jsonrpc": "2.0", "id": "list-tools-request", "method": "tools/list"}
        response = requests.post(gateway_url, headers=headers, json=payload) # 若需要忽略ssl校验,可补充参数verify=False
        raw = response.content.decode('utf-8', errors='replace')
        ct = response.headers.get('content-type', '')
        if 'text/event-stream' in ct:
            for line in raw.strip().split('\n'):
                if line.startswith('data:'):
                    try:
                        return json.loads(line[5:].strip())
                    except json.JSONDecodeError:
                        continue
            m = re.search(r'\{.*\}', raw, re.DOTALL)
            if m:
                return json.loads(m.group())
        try:
            return json.loads(raw)
        except json.JSONDecodeError:
            print(f"[Fail]: {raw[:200]}")
            return None
    
    gateway_url = "<GATEWAY_URL>"       # 网关接口地址(业务API调用入口)
    access_token = "<AUTHORIZATION>"    # 鉴权Authorization
    result = list_tools(gateway_url, access_token)
    if result:
        print(json.dumps(result, indent=2, ensure_ascii=False))

相关文档