executeTool
codebolt.mcp.executeTool(toolbox: string, toolName: string, params: ToolParameters): Promise<ExecuteToolResponse>
Executes a specific tool with provided parameters.
Parameters
toolbox(string): The name of the toolbox/server containing the tool.toolName(string): The name of the tool to execute.params(ToolParameters): Parameters to pass to the tool (key-value pairs).
Returns
Promise<ExecuteToolResponse>: A promise that resolves with the tool execution result.
Example 1: Basic Tool Execution
// Execute a simple tool
const result = await codebolt.mcp.executeTool(
'filesystem',
'readFile',
{ path: '/path/to/file.txt' }
);
console.log('Tool execution result:', result);
// Response structure:
// {
// success: true,
// result: { /* tool-specific data */ },
// error?: string
// }
Example 2: File Operations
// Execute file system tools
async function fileOperations(filePath, content) {
// Write file
const writeResult = await codebolt.mcp.executeTool(
'filesystem',
'writeFile',
{ path: filePath, content: content }
);
console.log('Write result:', writeResult);
// Read file back
const readResult = await codebolt.mcp.executeTool(
'filesystem',
'readFile',
{ path: filePath }
);
console.log('Read result:', readResult);
return { writeResult, readResult };
}
// Usage
const results = await fileOperations('/tmp/test.txt', 'Hello, World!');
Example 3: Database Operations
// Execute database tools
async function databaseQuery(query, params) {
const result = await codebolt.mcp.executeTool(
'database',
'executeQuery',
{
query: query,
parameters: params
}
);
if (result.success) {
console.log('Query results:', result.result);
return result.result;
} else {
console.error('Query failed:', result.error);
throw new Error(result.error);
}
}
// Usage
const data = await databaseQuery(
'SELECT * FROM users WHERE id = ?',
[123]
);
Example 4: API Request Tools
// Execute HTTP request tools
async function makeRequest(url, method, body) {
const result = await codebolt.mcp.executeTool(
'http-client',
'request',
{
url: url,
method: method,
headers: {
'Content-Type': 'application/json'
},
body: body ? JSON.stringify(body) : undefined
}
);
console.log('Request completed:', result.success);
console.log('Response status:', result.result?.status);
console.log('Response data:', result.result?.data);
return result;
}
// Usage
const response = await makeRequest(
'https://api.example.com/users',
'POST',
{ name: 'John', email: 'john@example.com' }
);
Example 5: Tool Execution with Error Handling
// Execute tool with comprehensive error handling
async function safeExecuteTool(toolbox, toolName, params, retries = 3) {
for (let attempt = 1; attempt <= retries; attempt++) {
try {
console.log(`Execution attempt ${attempt}: ${toolbox}.${toolName}`);
const result = await codebolt.mcp.executeTool(
toolbox,
toolName,
params
);
if (result.success) {
console.log('Tool executed successfully');
return {
success: true,
data: result.result,
attempts: attempt
};
} else {
console.error(`Tool execution failed: ${result.error}`);
if (attempt === retries) {
return {
success: false,
error: result.error,
attempts: attempt
};
}
}
} catch (error) {
console.error(`Attempt ${attempt} error:`, error.message);
if (attempt === retries) {
return {
success: false,
error: error.message,
attempts: attempt
};
}
}
// Wait before retry
await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
}
}
// Usage
const result = await safeExecuteTool(
'filesystem',
'readFile',
{ path: '/tmp/file.txt' }
);
if (result.success) {
console.log('File content:', result.data);
} else {
console.error('Failed to read file:', result.error);
}
Example 6: Batch Tool Execution
// Execute multiple tools in sequence
async function executeToolWorkflow(workflowSteps) {
const results = [];
for (let i = 0; i < workflowSteps.length; i++) {
const step = workflowSteps[i];
console.log(`Executing step ${i + 1}/${workflowSteps.length}`);
try {
const result = await codebolt.mcp.executeTool(
step.toolbox,
step.toolName,
step.params
);
results.push({
step: i + 1,
tool: step.toolName,
success: result.success,
result: result.result,
error: result.error
});
// Stop if step failed
if (!result.success && step.stopOnFailure) {
console.error(`Workflow stopped at step ${i + 1}`);
break;
}
} catch (error) {
results.push({
step: i + 1,
tool: step.toolName,
success: false,
error: error.message
});
}
}
return results;
}
// Usage
const workflowResults = await executeToolWorkflow([
{
toolbox: 'filesystem',
toolName: 'writeFile',
params: { path: '/tmp/data.json', content: '{"test": true}' },
stopOnFailure: true
},
{
toolbox: 'filesystem',
toolName: 'readFile',
params: { path: '/tmp/data.json' },
stopOnFailure: true
},
{
toolbox: 'json-parser',
toolName: 'parse',
params: { data: '{{previous_result}}' }, // Would need substitution
stopOnFailure: false
}
]);
console.log('Workflow results:', workflowResults);
Explanation
The codebolt.mcp.executeTool(toolbox, toolName, params) function executes a specific tool from an MCP server with provided parameters. This is the primary function for interacting with MCP tools.
Key Points:
- Three Parameters: toolbox name, tool name, and parameters
- Typed Parameters: Parameters must match tool's expected schema
- Promise Return: Returns execution result asynchronously
- Error Handling: Check success property for errors
Parameters:
- toolbox (string): The MCP server/toolbox name
- toolName (string): The specific tool to execute
- params (ToolParameters): Key-value pairs of parameters
Return Value Structure:
{
success: boolean, // Whether execution succeeded
result: any, // Tool-specific result data
error?: string, // Error message if failed
metadata?: { // Optional execution metadata
executionTime: number,
toolbox: string,
toolName: string
}
}
Common Use Cases:
- File system operations
- Database queries
- API requests
- Data processing
- System operations
- Custom business logic
Best Practices:
- Validate parameters before execution
- Check success property before using results
- Implement error handling and retry logic
- Use type-safe parameter objects
- Log execution results for debugging
- Handle tool-specific error messages
Typical Workflow:
// 1. Prepare parameters
const params = { path: '/file.txt', encoding: 'utf-8' };
// 2. Execute tool
const result = await codebolt.mcp.executeTool('filesystem', 'readFile', params);
// 3. Check success
if (result.success) {
// 4. Use result
console.log('File content:', result.result);
} else {
// 5. Handle error
console.error('Execution failed:', result.error);
}
Tool Categories:
- File System: readFile, writeFile, deleteFile, listDirectory
- Database: executeQuery, transaction, bulkInsert
- HTTP: request, get, post, put, delete
- Data Processing: parse, transform, validate
- Utilities: hash, encrypt, compress
Error Scenarios:
- Tool not found
- Invalid parameters
- Server not available
- Permission denied
- Timeout
- Network errors
Advanced Patterns:
- Batch execution workflows
- Transaction management
- Result chaining
- Parallel execution
- Fallback strategies
Related Functions:
getTools(): Get tool information and schemagetMcpTools(): List available toolsconfigureMcpTool(): Configure tool settingsgetEnabledMCPServers(): Check server availability
Notes:
- Tool availability depends on enabled servers
- Parameter validation is tool-specific
- Some tools may have side effects
- Execution time varies by tool
- Check tool documentation for parameter format
- Consider timeout for long-running operations
- Some tools may require special permissions