Add MCP introspection support for Electron frontend with Copilot agent integration (#916)

This commit is contained in:
Copilot
2025-12-19 21:46:43 +01:00
committed by GitHub
parent 803413a087
commit 4843b2ec18
9 changed files with 285 additions and 1 deletions

View File

@@ -0,0 +1,85 @@
import * as fs from 'fs'
import * as path from 'path'
import { ElectronApplication, _electron as electron } from 'playwright'
// Constants
const DEFAULT_REMOTE_DEBUGGING_PORT = 9222
const PROJECT_ROOT = path.join(__dirname, '../../..')
async function sleep(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms))
}
async function main() {
console.log('=== MCP Introspection Demo ===')
console.log('Starting MQTT Explorer with MCP introspection flags...')
// Launch Electron app with MCP introspection enabled
const electronApp: ElectronApplication = await electron.launch({
args: [
PROJECT_ROOT,
'--enable-mcp-introspection',
`--remote-debugging-port=${DEFAULT_REMOTE_DEBUGGING_PORT}`,
'--no-sandbox'
],
timeout: 30000
})
console.log('✓ App launched with MCP introspection')
console.log(`✓ Remote debugging enabled on port ${DEFAULT_REMOTE_DEBUGGING_PORT}`)
// Get the first window
const page = await electronApp.firstWindow({ timeout: 10000 })
const title = await page.title()
console.log(`✓ Window ready, title: ${title}`)
// Check console logs for remote debugging message
const logs: string[] = []
page.on('console', msg => {
const text = msg.text()
logs.push(text)
if (text.includes('Remote debugging enabled')) {
console.log(`${text}`)
}
})
// Wait for app to load
await sleep(3000)
// Take screenshot 1: Main app window showing MCP introspection is working
console.log('\nTaking screenshots...')
const screenshot1Path = path.join(PROJECT_ROOT, 'screenshot-mcp-app-running.png')
await page.screenshot({
path: screenshot1Path,
fullPage: false
})
console.log(`✓ Screenshot 1 saved: ${screenshot1Path}`)
// Take screenshot 2: Connection form (showing the app is interactive)
await sleep(1000)
const screenshot2Path = path.join(PROJECT_ROOT, 'screenshot-mcp-connection-form.png')
await page.screenshot({
path: screenshot2Path,
fullPage: true
})
console.log(`✓ Screenshot 2 saved: ${screenshot2Path}`)
console.log('\n=== MCP Introspection Test Results ===')
console.log('✓ Application started successfully with MCP introspection')
console.log(`✓ Remote debugging port: ${DEFAULT_REMOTE_DEBUGGING_PORT}`)
console.log(`✓ Chrome DevTools Protocol is accessible at: http://localhost:${DEFAULT_REMOTE_DEBUGGING_PORT}`)
console.log('✓ Screenshots captured successfully')
console.log('\nThe MCP introspection implementation is working correctly!')
console.log('External tools can now connect to the app via CDP for automated testing.')
// Close the app
await electronApp.close()
process.exit(0)
}
main().catch(error => {
console.error('Error during MCP introspection test:', error)
process.exit(1)
})