44
55import 'dart:async' ;
66
7+ import 'package:args/args.dart' ;
8+ import 'package:dart_mcp_server/arg_parser.dart' as dart_mcp_server;
9+ import 'package:dartdev/src/utils.dart' ;
10+
711import '../core.dart' ;
812import '../sdk.dart' ;
913import '../vm_interop_handler.dart' ;
@@ -14,44 +18,43 @@ class DartMCPServerCommand extends DartdevCommand {
1418 static const String cmdDescription = '''
1519A stdio based Model Context Protocol (MCP) server to aid in Dart and Flutter development.''' ;
1620
17- static const _forceRootsFallbackFlag = 'force-roots-fallback' ;
1821 static const _experimentFlag = 'experimental-mcp-server' ;
1922
23+ @override
24+ ArgParser createArgParser () => dart_mcp_server.createArgParser (
25+ usageLineLength: dartdevUsageLineLength, includeHelp: false );
26+
2027 DartMCPServerCommand ({bool verbose = false })
2128 : super (cmdName, cmdDescription, verbose, hidden: true ) {
22- argParser
23- .. addFlag (
24- _forceRootsFallbackFlag,
25- negatable : true ,
29+ argParser. addFlag (_experimentFlag,
30+ // This flag is no longer required but we are leaving it in for
31+ // backwards compatibility.
32+ hide : true ,
2633 defaultsTo: false ,
27- help:
28- 'Forces a behavior for project roots which uses MCP tools instead '
29- 'of the native MCP roots. This can be helpful for clients like '
30- 'Cursor which claim to have roots support but do not actually '
31- 'support it.' ,
32- )
33- ..addFlag (_experimentFlag,
34- // This flag is no longer required but we are leaving it in for
35- // backwards compatibility.
36- hide: true ,
37- defaultsTo: false ,
38- help: 'A required flag in order to use this command. Passing this '
39- 'flag is an acknowledgement that you understand it is an '
40- 'experimental feature with no stability guarantees.' );
34+ help: 'A required flag in order to use this command. Passing this '
35+ 'flag is an acknowledgement that you understand it is an '
36+ 'experimental feature with no stability guarantees.' );
4137 }
4238
4339 @override
4440 CommandCategory get commandCategory => CommandCategory .tools;
4541
4642 @override
4743 Future <int > run () async {
48- final args = argResults! ;
44+ final parsedArgs = argResults! ;
45+
46+ // Strip out the experiment flag before forwarding on the args, this flag
47+ // isn't supported by the actual binary.
48+ final forwardedArgs = argResults! .arguments.toList ();
49+ if (parsedArgs.wasParsed (_experimentFlag)) {
50+ forwardedArgs.removeWhere ((arg) => arg.endsWith (_experimentFlag));
51+ }
4952 try {
5053 VmInteropHandler .run (
5154 sdk.dartAotRuntime,
5255 [
5356 sdk.dartMCPServerAotSnapshot,
54- if (args. flag (_forceRootsFallbackFlag)) '--$ _forceRootsFallbackFlag '
57+ ...forwardedArgs,
5558 ],
5659 useExecProcess: true ,
5760 );
0 commit comments