Skip to main content

Tool Execution APIs

The Tool Execution APIs provide comprehensive functionality for registering, managing, and executing tools in the Clear AI system. These APIs support both individual tool execution and complex multi-tool workflows.

Base URL

http://localhost:3001/api/tools

Endpoints

GET /api/tools

Get all registered tools.

Response:

{
"success": true,
"data": [
{
"name": "calculator",
"description": "Perform basic arithmetic operations",
"parameters": {
"operation": "string",
"a": "number",
"b": "number"
}
},
{
"name": "api_call",
"description": "Make HTTP API calls to external services",
"parameters": {
"url": "string",
"method": "string",
"headers": "object",
"body": "any"
}
}
],
"message": "Tools retrieved successfully"
}

GET /api/tools/:toolName

Get a specific tool by name.

Parameters:

  • toolName (string): Name of the tool

Response:

{
"success": true,
"data": {
"name": "calculator",
"description": "Perform basic arithmetic operations",
"parameters": {
"operation": "string",
"a": "number",
"b": "number"
}
},
"message": "Tool retrieved successfully"
}

Error Response:

{
"success": false,
"message": "Tool not found",
"error": "Tool 'nonexistent' not found"
}

POST /api/tools/register

Register a new tool.

Request Body:

{
"name": "weather",
"description": "Get weather information for a city",
"parameters": {
"city": "string",
"country": "string",
"units": "string"
},
"execute": "function"
}

Response:

{
"success": true,
"data": {
"name": "weather",
"description": "Get weather information for a city",
"parameters": {
"city": "string",
"country": "string",
"units": "string"
}
},
"message": "Tool registered successfully"
}

DELETE /api/tools/:toolName

Remove a tool by name.

Parameters:

  • toolName (string): Name of the tool to remove

Response:

{
"success": true,
"data": {
"name": "weather"
},
"message": "Tool removed successfully"
}

POST /api/tools/clear

Clear all registered tools.

Response:

{
"success": true,
"data": {
"cleared": 5
},
"message": "All tools cleared successfully"
}

Tool Execution Endpoints

POST /api/tools/execute

Execute a single tool.

Request Body:

{
"toolName": "calculator",
"args": {
"operation": "add",
"a": 5,
"b": 3
}
}

Response:

{
"success": true,
"data": {
"result": 8,
"executionTime": 45,
"toolName": "calculator"
},
"message": "Tool executed successfully"
}

Error Response:

{
"success": false,
"message": "Tool execution failed",
"error": "Invalid operation: 'divide'",
"details": {
"toolName": "calculator",
"args": {
"operation": "divide",
"a": 5,
"b": 0
}
}
}

POST /api/tools/execute-multiple

Execute multiple tools in parallel.

Request Body:

{
"tools": [
{
"toolName": "calculator",
"args": {
"operation": "add",
"a": 5,
"b": 3
}
},
{
"toolName": "calculator",
"args": {
"operation": "multiply",
"a": 4,
"b": 2
}
}
]
}

Response:

{
"success": true,
"data": {
"results": [
{
"toolName": "calculator",
"success": true,
"data": {
"result": 8,
"executionTime": 45
}
},
{
"toolName": "calculator",
"success": true,
"data": {
"result": 8,
"executionTime": 42
}
}
],
"totalExecutionTime": 45,
"errors": []
},
"message": "Tools executed successfully"
}

POST /api/tools/execute-sequential

Execute multiple tools sequentially.

Request Body:

{
"tools": [
{
"toolName": "api_call",
"args": {
"url": "https://api.example.com/users/1",
"method": "GET"
}
},
{
"toolName": "json_reader",
"args": {
"jsonString": "{{previous_result}}",
"path": "$.name"
}
}
]
}

Response:

{
"success": true,
"data": {
"results": [
{
"toolName": "api_call",
"success": true,
"data": {
"status": 200,
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
}
},
{
"toolName": "json_reader",
"success": true,
"data": {
"result": "John Doe",
"path": "$.name"
}
}
],
"totalExecutionTime": 1234,
"errors": []
},
"message": "Tools executed sequentially successfully"
}

POST /api/tools/execute-with-llm

Execute tool using LLM for parameter extraction.

Request Body:

{
"query": "Add 5 and 3",
"toolName": "calculator",
"options": {
"model": "gpt-3.5-turbo",
"temperature": 0.1
}
}

Response:

{
"success": true,
"data": {
"result": 8,
"executionTime": 1234,
"toolName": "calculator",
"extractedArgs": {
"operation": "add",
"a": 5,
"b": 3
},
"llmUsage": {
"promptTokens": 50,
"completionTokens": 20,
"totalTokens": 70
}
},
"message": "Tool executed with LLM successfully"
}

POST /api/tools/mcp

MCP-style execution based on natural language query.

Request Body:

{
"query": "Make an API call to https://jsonplaceholder.typicode.com/users/1"
}

Response:

{
"success": true,
"data": {
"success": true,
"finalResult": {
"id": 1,
"name": "Leanne Graham",
"email": "Sincere@april.biz"
},
"allResults": {
"api_call": {
"status": 200,
"data": {
"id": 1,
"name": "Leanne Graham",
"email": "Sincere@april.biz"
}
}
},
"executionOrder": ["api_call"],
"errors": [],
"executionTime": 1234,
"traceId": "trace-123"
},
"message": "MCP execution completed successfully"
}

Utility Endpoints

GET /api/tools/stats

Get execution statistics.

Response:

{
"success": true,
"data": {
"totalExecutions": 150,
"successfulExecutions": 142,
"failedExecutions": 8,
"averageExecutionTime": 1234,
"totalTools": 5,
"mostUsedTool": "calculator",
"lastExecution": "2023-01-01T00:00:00.000Z"
},
"message": "Statistics retrieved successfully"
}

GET /api/tools/definitions

Get tool definitions for LLM function calling.

Response:

{
"success": true,
"data": [
{
"name": "calculator",
"description": "Perform basic arithmetic operations",
"parameters": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"enum": ["add", "subtract", "multiply", "divide"],
"description": "The arithmetic operation to perform"
},
"a": {
"type": "number",
"description": "First number"
},
"b": {
"type": "number",
"description": "Second number"
}
},
"required": ["operation", "a", "b"]
}
}
],
"message": "Tool definitions retrieved successfully"
}

Error Handling

Common Error Types

Tool Not Found

{
"success": false,
"message": "Tool not found",
"error": "Tool 'nonexistent' not found"
}

Validation Error

{
"success": false,
"message": "Validation error",
"error": "Invalid input data",
"details": {
"field": "operation",
"message": "Operation must be one of: add, subtract, multiply, divide"
}
}

Execution Error

{
"success": false,
"message": "Tool execution failed",
"error": "Division by zero",
"details": {
"toolName": "calculator",
"args": {
"operation": "divide",
"a": 5,
"b": 0
}
}
}

Timeout Error

{
"success": false,
"message": "Tool execution timeout",
"error": "Tool execution exceeded maximum timeout of 30000ms",
"details": {
"toolName": "api_call",
"timeout": 30000
}
}

Rate Limiting

Rate limiting is not currently implemented but will be added in future versions.

Examples

Basic Tool Execution

# Execute calculator tool
curl -X POST http://localhost:3001/api/tools/execute \
-H "Content-Type: application/json" \
-d '{
"toolName": "calculator",
"args": {
"operation": "add",
"a": 5,
"b": 3
}
}'

Parallel Tool Execution

# Execute multiple tools in parallel
curl -X POST http://localhost:3001/api/tools/execute-multiple \
-H "Content-Type: application/json" \
-d '{
"tools": [
{
"toolName": "calculator",
"args": {
"operation": "add",
"a": 5,
"b": 3
}
},
{
"toolName": "calculator",
"args": {
"operation": "multiply",
"a": 4,
"b": 2
}
}
]
}'

LLM-Powered Tool Execution

# Execute tool with LLM parameter extraction
curl -X POST http://localhost:3001/api/tools/execute-with-llm \
-H "Content-Type: application/json" \
-d '{
"query": "What is 15 multiplied by 7?",
"toolName": "calculator",
"options": {
"model": "gpt-3.5-turbo",
"temperature": 0.1
}
}'

MCP-Style Execution

# Execute using natural language
curl -X POST http://localhost:3001/api/tools/mcp \
-H "Content-Type: application/json" \
-d '{
"query": "Get the weather for London and then extract the temperature"
}'

SDK Usage

JavaScript/TypeScript

import { ToolExecutionService } from '@clear-ai/shared';

const toolService = new ToolExecutionService();

// Execute a single tool
const result = await toolService.executeTool('calculator', {
operation: 'add',
a: 5,
b: 3
});

// Execute multiple tools in parallel
const results = await toolService.executeToolsParallel([
{
toolName: 'calculator',
args: { operation: 'add', a: 5, b: 3 }
},
{
toolName: 'calculator',
args: { operation: 'multiply', a: 4, b: 2 }
}
]);

// Execute with LLM
const llmResult = await toolService.executeToolWithLLM(
'What is 15 multiplied by 7?',
'calculator',
{ model: 'gpt-3.5-turbo' }
);

Python

from clear_ai import ToolExecutionService

tool_service = ToolExecutionService()

# Execute a single tool
result = tool_service.execute_tool('calculator', {
'operation': 'add',
'a': 5,
'b': 3
})

# Execute multiple tools in parallel
results = tool_service.execute_tools_parallel([
{
'toolName': 'calculator',
'args': {'operation': 'add', 'a': 5, 'b': 3}
},
{
'toolName': 'calculator',
'args': {'operation': 'multiply', 'a': 4, 'b': 2}
}
])

# Execute with LLM
llm_result = tool_service.execute_tool_with_llm(
'What is 15 multiplied by 7?',
'calculator',
{'model': 'gpt-3.5-turbo'}
)

Best Practices

Tool Design

  1. Clear Naming: Use descriptive, action-oriented names
  2. Comprehensive Descriptions: Provide detailed descriptions for LLM understanding
  3. Input Validation: Validate all inputs using Zod schemas
  4. Error Handling: Provide meaningful error messages
  5. Performance: Optimize for speed and efficiency

Error Handling

  1. Graceful Degradation: Handle errors without crashing
  2. Detailed Logging: Log errors with context
  3. User-Friendly Messages: Provide clear error messages
  4. Retry Logic: Implement retry for transient failures

Security

  1. Input Sanitization: Sanitize all inputs
  2. Rate Limiting: Implement rate limiting (future)
  3. Authentication: Add authentication (future)
  4. Authorization: Implement access control (future)

Troubleshooting

Common Issues

Tool Not Found

  • Check tool name spelling
  • Verify tool is registered
  • Check tool registry

Validation Errors

  • Verify input schema
  • Check required fields
  • Validate data types

Execution Failures

  • Check tool implementation
  • Verify external dependencies
  • Review error logs

Performance Issues

  • Monitor execution times
  • Optimize tool code
  • Consider caching

Next Steps

  1. Explore Tool Creation: Learn how to build custom tools
  2. Understand Workflows: Check out LangGraph workflows
  3. Learn MCP Integration: Dive into MCP tools
  4. Build Applications: Use the Client APIs