Skip to main content
Discover all available tools from plugins, builtins, and connectors.

Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}

Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "my_plugin_greet",
        "description": "Greet a person by name",
        "inputSchema": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Person's name"
            }
          },
          "required": ["name"]
        }
      },
      {
        "name": "my_plugin_add",
        "description": "Add two numbers",
        "inputSchema": {
          "type": "object",
          "properties": {
            "a": {"type": "number"},
            "b": {"type": "number"}
          },
          "required": ["a", "b"]
        }
      },
      {
        "name": "web_search_query",
        "description": "Search the web",
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {"type": "string"},
            "limit": {
              "type": "integer",
              "default": 10
            }
          },
          "required": ["query"]
        }
      }
    ]
  }
}

Response Fields

FieldTypeDescription
toolsarrayList of available tools
tools[].namestringTool identifier (unique in gateway)
tools[].descriptionstringHuman-readable tool description
tools[].inputSchemaobjectJSON Schema defining parameters

Tool Naming

Tools follow naming conventions:
  • Plugin tools: {plugin_name}_{tool_name} (underscores)
  • Built-in tools: {builtin_name}_{operation} (underscores)
  • Connector tools: {connector_name}_{operation} (underscores)
Examples:
  • my_plugin_greet - from “my-plugin” plugin
  • web_search_query - from Web Search builtin
  • airtable_read_records - from Airtable connector

JSON Schema Format

Each tool defines parameters using JSON Schema:
{
  "inputSchema": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "City name"
      },
      "units": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "default": "celsius"
      },
      "limit": {
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      }
    },
    "required": ["city"]
  }
}
Supported types:
  • string - Text
  • number - Float
  • integer - Whole number
  • boolean - True/false
  • array - List
  • object - Structured data
  • null - Null value

Example Usage

Python

import requests

response = requests.post(
    "https://mcp-{gateway-id}.noorle.com/",
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    },
    json={
        "jsonrpc": "2.0",
        "id": 1,
        "method": "tools/list",
        "params": {}
    }
)

tools = response.json()["result"]["tools"]

for tool in tools:
    print(f"{tool['name']}: {tool['description']}")
    print(f"  Input: {tool['inputSchema']}")

JavaScript

const response = await fetch(
  "https://mcp-{gateway-id}.noorle.com/",
  {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${token}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: 1,
      method: "tools/list",
      params: {}
    })
  }
);

const { result } = await response.json();
const tools = result.tools;

tools.forEach(tool => {
  console.log(`${tool.name}: ${tool.description}`);
});

Filtering Tools

While tools/list returns all tools, filter client-side:
# Find tools from specific plugin
plugin_tools = [t for t in tools if t["name"].startswith("my_plugin_")]

# Find search-related tools
search_tools = [t for t in tools if "search" in t["name"].lower()]

Error Cases

No Authorization

{
  "error": {
    "code": -32603,
    "message": "Unauthorized: Invalid or missing token"
  }
}

Gateway Not Found

HTTP 404 Not Found

Internal Error

{
  "error": {
    "code": -32603,
    "message": "Failed to list tools"
  }
}