Flutter Inspector MCP Server
by Arenukvern
Verified
missing_rpc_implementations:
inspector:
# Methods that need to be implemented for the inspector group
method1: []
performance:
# Methods that need to be implemented for the performance group
refactoring_needed:
- Group related RPC methods into more specific categories
- Add comprehensive error handling for all RPC methods
- Add input validation for all parameters
- Add proper TypeScript types for all request/response objects
- Add documentation for all RPC methods
- Add tests for all RPC methods
- Add logging for all RPC method calls
- Add metrics collection for RPC method usage
priority_order:
high:
- Inspector methods for widget tree manipulation
- Core Flutter debugging methods
- Performance profiling methods
medium:
- DartIO methods for file handling
- Additional inspector methods
low:
- Nice-to-have features and optimizations
testing_plan:
setup:
- Ensure Flutter app is running in debug mode
- Get list of active ports using get_active_ports
- Verify VM service connection using get_vm_info
- Get list of available isolates
- Get list of extension RPCs using get_extension_rpcs
methods_to_verify:
# Methods that need verification for isolate requirements
inspector_methods:
- method: getLayoutExplorerNode
verify:
- Test without isolate context first
- If fails, try with isolate context
- Document actual requirement
- method: setSelectionById
verify: same_as_above
- method: getParentChain
verify: same_as_above
- method: getChildrenSummaryTree
verify: same_as_above
- method: getDetailsSubtree
verify: same_as_above
- method: getSelectedWidget
verify: same_as_above
- method: getSelectedSummaryWidget
verify: same_as_above
- method: isWidgetCreationTracked
verify: same_as_above
- method: trackRebuildDirtyWidgets
verify: same_as_above
- method: structuredErrors
verify: same_as_above
- method: show
verify: same_as_above
- method: widgetLocationIdMap
verify: same_as_above
- method: trackRepaintWidgets
verify: same_as_above
- method: disposeAllGroups
verify: same_as_above
- method: disposeGroup
verify: same_as_above
- method: isWidgetTreeReady
verify: same_as_above
- method: disposeId
verify: same_as_above
- method: setPubRootDirectories
verify: same_as_above
- method: addPubRootDirectories
verify: same_as_above
- method: removePubRootDirectories
verify: same_as_above
- method: getPubRootDirectories
verify: same_as_above
layout_methods:
- method: setFlexFit
verify: same_as_above
- method: setFlexFactor
verify: same_as_above
- method: setFlexProperties
verify: same_as_above
performance_methods:
- method: profileRenderObjectPaints
verify: same_as_above
- method: profileRenderObjectLayouts
verify: same_as_above
- method: profileUserWidgets
verify: same_as_above
- method: profilePlatformChannels
verify: same_as_above
debug_methods:
- method: debugDumpRenderTree
verify: same_as_above
- method: debugDumpLayerTree
verify: same_as_above
- method: debugDumpSemanticsTree
verify: same_as_above
- method: debugDumpSemanticsTreeInverse
verify: same_as_above
- method: debugPaintBaselinesEnabled
verify: same_as_above
- method: debugDumpFocusTree
verify: same_as_above
- method: debugDisablePhysicalShapeLayers
verify: same_as_above
- method: debugDisableOpacityLayers
verify: same_as_above
- method: debugAllowBanner
verify: same_as_above
- method: repaintRainbow
verify: same_as_above
core_methods:
- method: platformOverride
verify: same_as_above
- method: brightnessOverride
verify: same_as_above
- method: timeDilation
verify: same_as_above
- method: evict
verify: same_as_above
- method: invertOversizedImages
verify: same_as_above
- method: didSendFirstFrameEvent
verify: same_as_above
- method: didSendFirstFrameRasterizedEvent
verify: same_as_above
dart_io_methods:
- method: socketProfilingEnabled
verify: same_as_above
- method: httpEnableTimelineLogging
verify: same_as_above
- method: getVersion
verify: same_as_above
- method: getOpenFiles
verify: same_as_above
- method: getOpenFileById
verify: same_as_above
- method: getHttpProfileRequest
verify: same_as_above
test_execution_order:
1_setup:
- Run get_active_ports to find Flutter process
- Run get_vm_info to verify connection
- Run get_extension_rpcs to get available methods
- Store isolate IDs for later use
2_verification_process:
- For each method:
- Test without isolate context first
- Record response/behavior
- If error occurs:
- Test with isolate context
- Compare results
- Document whether isolate context is actually required
- Update method documentation with findings
3_error_cases:
- Test methods with invalid parameters
- Test methods with non-existent isolate IDs
- Test methods when app is not in debug mode
4_cleanup:
- Dispose any created resources
- Clear any enabled debug flags
- Reset any overridden settings
test_results_tracking:
format:
method_name:
status: working | broken | needs_investigation
isolate_required: yes | no | unknown
error_without_isolate: string | null
error_with_isolate: string | null
notes: string | null
recommended_usage: string
documentation_update_plan:
- For each method, document:
- Whether isolate context is required
- Why it's required (if it is)
- Best practices for usage
- Example of correct usage
- Common errors and solutions
automation_plan:
- Create automated test script that:
- Connects to running Flutter app
- Executes all tests in order
- Records results in structured format
- Generates test report
- Identifies broken or problematic methods
- Suggests fixes for common issues