44
55namespace Laravel \Boost \Mcp \Resources ;
66
7- use Illuminate \Support \Facades \File ;
7+ use Laravel \Boost \Mcp \ToolExecutor ;
8+ use Laravel \Boost \Mcp \Tools \ApplicationInfo as ApplicationInfoTool ;
89use Laravel \Mcp \Server \Resource ;
910
1011class ApplicationInfo extends Resource
1112{
12- public function name (): string
13- {
14- return 'Application Info ' ;
15- }
13+ public function __construct (protected ToolExecutor $ toolExecutor ) {}
1614
1715 public function description (): string
1816 {
19- return 'Learn about the technical details of the application. ' ;
17+ return 'Comprehensive application information including PHP version, Laravel version, database engine, all installed packages with their versions, and all Eloquent models in the application. ' ;
2018 }
2119
2220 public function uri (): string
@@ -31,78 +29,18 @@ public function mimeType(): string
3129
3230 public function read (): string
3331 {
34- $ laravelVersion = app ()->version ();
35- $ phpVersion = PHP_VERSION ;
36-
37- $ frontendFramework = $ this ->guessFrontendFramework ();
38- $ cssFramework = $ this ->guessCssFramework ();
39- $ testingFramework = $ this ->guessTestingFramework ();
40-
41- return <<<EOT
42- Laravel Version: {$ laravelVersion }
43- PHP Version: {$ phpVersion }
44-
45- Frontend Framework: {$ frontendFramework }
46- CSS Framework: {$ cssFramework }
47-
48- Testing Framework: {$ testingFramework }
49-
50- EOT ;
51- }
52-
53- private function guessFrontendFramework (): string
54- {
55- $ composerJson = File::json (base_path ('composer.json ' ));
56- $ packageJson = File::json (base_path ('package.json ' ));
57-
58- if (isset ($ composerJson ['require ' ]['livewire/livewire ' ])) {
59- $ version = $ composerJson ['require ' ]['livewire/livewire ' ];
60-
61- return "Livewire ( {$ version }) " ;
62- }
63-
64- $ version = $ packageJson ['dependencies ' ]['vue ' ] ?? $ packageJson ['devDependencies ' ]['vue ' ] ?? null ;
65-
66- if ($ version ) {
67- return "Vue ( {$ version }) " ;
68- }
69-
70- $ version = $ packageJson ['dependencies ' ]['react ' ] ?? $ packageJson ['devDependencies ' ]['react ' ] ?? null ;
71-
72- if ($ version ) {
73- return "React ( {$ version }) " ;
74- }
75-
76- return 'Blade ' ;
77- }
78-
79- private function guessCssFramework (): string
80- {
81- $ packageJson = File::json (base_path ('package.json ' ));
32+ $ result = $ this ->toolExecutor ->execute (ApplicationInfoTool::class);
8233
83- $ version = $ packageJson ['dependencies ' ]['tailwindcss ' ] ?? $ packageJson ['devDependencies ' ]['tailwindcss ' ] ?? null ;
84-
85- if ($ version ) {
86- return "Tailwind ( {$ version }) " ;
87- }
88-
89- $ version = $ packageJson ['dependencies ' ]['bootstrap ' ] ?? $ packageJson ['devDependencies ' ]['bootstrap ' ] ?? null ;
90-
91- if ($ version ) {
92- return "Bootstrap ( {$ version }) " ;
34+ if ($ result ->isError ) {
35+ return 'Error fetching application information: ' .$ result ->toArray ()['content ' ][0 ]['text ' ];
9336 }
9437
95- return 'None ' ;
96- }
97-
98- private function guessTestingFramework (): string
99- {
100- $ composerJson = File::json (base_path ('composer.json ' ));
38+ $ data = json_decode ($ result ->toArray ()['content ' ][0 ]['text ' ], true );
10139
102- if (isset ( $ composerJson [ ' require-dev ' ][ ' pestphp/pest ' ]) ) {
103- return 'Pest ' ;
40+ if (! $ data ) {
41+ return 'Error parsing application information ' ;
10442 }
10543
106- return ' PHPUnit ' ;
44+ return json_encode ( $ data , JSON_PRETTY_PRINT ) ;
10745 }
10846}
0 commit comments