2026-04-29 08:30:43 +00:00
< ? php
namespace App\Mcp\Tools ;
use App\Mcp\Concerns\BuildsResponse ;
use App\Mcp\Concerns\ResolvesTeam ;
use Illuminate\Contracts\JsonSchema\JsonSchema ;
use Laravel\Mcp\Request ;
use Laravel\Mcp\Response ;
use Laravel\Mcp\Server\Tool ;
class GetDatabase extends Tool
{
2026-06-04 09:03:06 +00:00
protected string $name = 'get_database' ;
protected string $description = 'Get full details for a standalone database by UUID. Detects type across postgresql, mysql, mariadb, mongodb, redis, keydb, dragonfly, clickhouse.' ;
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
}
$uuid = $request -> get ( 'uuid' );
if ( ! is_string ( $uuid ) || $uuid === '' ) {
2026-06-04 09:03:06 +00:00
return $this -> mcpError ( $request , 'uuid argument is required.' );
2026-04-29 08:30:43 +00:00
}
$database = queryDatabaseByUuidWithinTeam ( $uuid , ( string ) $teamId );
if ( ! $database ) {
2026-06-04 09:03:06 +00:00
return $this -> mcpError ( $request , " Database [ { $uuid } ] not found. " , [ 'resource_uuid' => $uuid ]);
2026-04-29 08:30:43 +00:00
}
// Drop relations so deep server/destination data doesn't leak.
$database -> setRelations ([]);
$database -> makeHidden ([ 'destination' , 'source' , 'environment' , 'environment_variables' , 'environment_variables_preview' ]);
2026-06-04 09:03:06 +00:00
return $this -> mcpSuccess ( $request , $this -> respond (
2026-04-29 08:30:43 +00:00
$this -> scrubSensitive ( $database -> toArray ()),
$this -> actionsForDatabase ( $uuid , $database -> status ? ? null ),
2026-06-04 09:03:06 +00:00
), [ 'resource_uuid' => $uuid ]);
2026-04-29 08:30:43 +00:00
}
public function schema ( JsonSchema $schema ) : array
{
return [
'uuid' => $schema -> string () -> description ( 'Database UUID.' ) -> required (),
];
}
}