Files
Leantime/app/Domain/Bom/Tools/ListMastersTool.php

66 lines
2.0 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Leantime\Domain\Bom\Tools;
use Illuminate\Support\Str;
use Laravel\Mcp\Server\Tool;
use Laravel\Mcp\Server\Tools\Annotations\IsReadOnly;
use Laravel\Mcp\Server\Tools\ToolInputSchema;
use Laravel\Mcp\Server\Tools\ToolResult;
use Leantime\Domain\Bom\Services\Bom;
/**
* 列出全局主数据BOM / 工艺文件 / 工具清单)。
*/
#[IsReadOnly]
class ListMastersTool extends Tool
{
public function __construct(
private Bom $bomService,
) {}
public function name(): string
{
return 'listMasters';
}
public function description(): string
{
return '列出全局主数据BOM / 工艺文件 / 工具清单。主数据是跨项目共享的全局资源type 取值bom=物料清单、process=工艺文件、tooling=工具清单。';
}
public function schema(ToolInputSchema $schema): ToolInputSchema
{
return $schema
->string('type')->description('主数据类型bom | process | tooling默认 bom。');
}
public function handle(array $arguments): ToolResult
{
$type = (string) ($arguments['type'] ?? 'bom');
if (! in_array($type, ['bom', 'process', 'tooling'], true)) {
$type = 'bom';
}
$masters = $this->bomService->getMasters($type, 0);
if (empty($masters)) {
return ToolResult::text("{$type} 主数据。");
}
$rows = [];
foreach ($masters as $m) {
$rows[] = [
'id' => (int) $m['id'],
'type' => (string) ($m['type'] ?? 'bom'),
'bomNo' => (string) ($m['bomNo'] ?? ''),
'productName' => Str::sanitizeForLLM((string) ($m['productName'] ?? '')),
'version' => (string) ($m['version'] ?? ''),
'specification' => Str::sanitizeForLLM((string) ($m['specification'] ?? '')),
];
}
return ToolResult::json(['type' => $type, 'count' => count($rows), 'items' => $rows]);
}
}