2026-04-29 08:30:43 +00:00
< ? php
namespace App\Mcp\Tools ;
use App\Mcp\Concerns\BuildsResponse ;
use App\Mcp\Concerns\ResolvesTeam ;
use App\Models\Project ;
use App\Models\Server ;
use Illuminate\Contracts\JsonSchema\JsonSchema ;
use Laravel\Mcp\Request ;
use Laravel\Mcp\Response ;
use Laravel\Mcp\Server\Tool ;
class GetInfrastructureOverview extends Tool
{
2026-06-04 09:03:06 +00:00
protected string $name = 'get_infrastructure_overview' ;
protected string $description = 'High-level overview of the authenticated team: Coolify version, all servers, projects with resource counts, and aggregate counts. Start here to understand the setup.' ;
2026-04-29 08:30:43 +00:00
use BuildsResponse ;
use ResolvesTeam ;
public function handle ( Request $request ) : Response
{
2026-06-04 09:03:06 +00:00
if ( $error = $this -> ensureAbility ( $request , 'read' , $this -> name )) {
2026-04-29 08:30:43 +00:00
return $error ;
}
$teamId = $this -> resolveTeamId ( $request );
if ( is_null ( $teamId )) {
2026-06-04 09:03:06 +00:00
return $this -> mcpError ( $request , 'Invalid token.' );
2026-04-29 08:30:43 +00:00
}
$servers = Server :: whereTeamId ( $teamId )
-> select ( 'id' , 'name' , 'uuid' , 'ip' , 'description' )
-> with ( 'settings:id,server_id,is_reachable,is_usable' )
-> get ()
-> map ( fn ( $s ) => [
'uuid' => $s -> uuid ,
'name' => $s -> name ,
'ip' => $s -> ip ,
'is_reachable' => $s -> settings ? -> is_reachable ,
'is_usable' => $s -> settings ? -> is_usable ,
])
-> values ()
-> all ();
$projects = Project :: where ( 'team_id' , $teamId ) -> get ();
$appCount = 0 ;
$serviceCount = 0 ;
$databaseCount = 0 ;
$projectSummaries = [];
foreach ( $projects as $project ) {
$apps = $project -> applications () -> count ();
$services = $project -> services () -> count ();
$databases = $project -> databases () -> count ();
$appCount += $apps ;
$serviceCount += $services ;
$databaseCount += $databases ;
$projectSummaries [] = [
'uuid' => $project -> uuid ,
'name' => $project -> name ,
'counts' => [
'applications' => $apps ,
'services' => $services ,
'databases' => $databases ,
],
];
}
2026-06-04 09:03:06 +00:00
return $this -> mcpSuccess ( $request , $this -> respond ([
2026-04-29 08:30:43 +00:00
'coolify_version' => config ( 'constants.coolify.version' ),
'servers' => $servers ,
'projects' => $projectSummaries ,
'counts' => [
'servers' => count ( $servers ),
'projects' => count ( $projectSummaries ),
'applications' => $appCount ,
'services' => $serviceCount ,
'databases' => $databaseCount ,
],
2026-06-04 09:03:06 +00:00
]));
2026-04-29 08:30:43 +00:00
}
public function schema ( JsonSchema $schema ) : array
{
return [];
}
}