* Copyright (C) 2026 Nick Fragoulis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/ai/class/mcptool.class.php * \ingroup ai * \brief File of class to manage MCP Tools. */ /** * Abstract base class for all MCP (Model Context Protocol) tools. * * All AI tools must extend this class. It provides a standard interface for defining * tool capabilities and executing them, along with common utility methods for interacting * with Dolibarr. */ abstract class McpTool { /** @var DoliDB Database handler */ protected $db; /** @var User User object */ protected $user; /** @var Conf Configuration object */ protected $conf; /** * Constructor. * * @param DoliDB $db Database handler object * @param User $user User object * @param Conf $conf Configuration object */ public function __construct($db, $user, $conf) { $this->db = $db; $this->user = $user; $this->conf = $conf; } /** * Return the list of tools provided by this class. * * This method must be implemented by child classes to define their capabilities. * It should return an array of tool definitions, typically in a JSON schema format. * * @return list> Array of tool definitions. */ abstract public function getDefinitions(): array; /** * Execute a specific tool. * * This method must be implemented by child classes to contain the logic for * executing the tools defined in `getDefinitions`. * * @param string $toolName The name of the tool to execute. * @param array $args Associative array of arguments for the tool. * * @return mixed The result of the tool execution. */ abstract public function execute(string $toolName, array $args); /** * Return categories this tool belongs to. * Used by the intent parser to filter available tools. * * @return array List of categories (e.g., ['billing', 'commercial']) */ public function getCategories(): array { return ['global']; // Default } /** * Return true if this is a system/infrastructure tool that must always * remain visible and executable regardless of the admin allow-list. * * The default is false. Override and return true in any tool class that * provides core assistant communication functions (clarification, * confirmation, responses, etc.). * * McpHandler calls this method at runtime — no tool names are hardcoded * anywhere. Adding a new system tool class in the future requires only * overriding this method in that class; no changes to McpHandler are needed. * * @return bool */ public function isSystem() { return false; } }