@@ -108,6 +108,7 @@ class SettingsProvider extends ChangeNotifier {
108108 bool _localServerTakeoverEnabled = true ;
109109 bool _localServerJsonrpcEnabled = true ;
110110 bool _localServerApiEnabled = false ;
111+ bool _localServerMcpEnabled = false ;
111112
112113 // UA 设置
113114 String _globalUserAgent = '' ; // 空字符串 = 使用内置 Chrome UA
@@ -292,6 +293,7 @@ class SettingsProvider extends ChangeNotifier {
292293 bool get localServerTakeoverEnabled => _localServerTakeoverEnabled;
293294 bool get localServerJsonrpcEnabled => _localServerJsonrpcEnabled;
294295 bool get localServerApiEnabled => _localServerApiEnabled;
296+ bool get localServerMcpEnabled => _localServerMcpEnabled;
295297
296298 // UA 设置 Getter
297299 String get globalUserAgent => _globalUserAgent;
@@ -816,16 +818,24 @@ class SettingsProvider extends ChangeNotifier {
816818 _saveToRust ('local_server_token' , value);
817819 }
818820
819- /// 清空访问令牌。若管理 API 正依赖此令牌(已启用),则一并关闭管理 API ,
821+ /// 清空访问令牌。若管理 API / MCP 正依赖此令牌(已启用),则一并关闭它们 ,
820822 /// 避免出现「已启用但无 token」的非法状态。
821823 void clearLocalServerToken () {
822- if (_localServerToken.isEmpty && ! _localServerApiEnabled) return ;
824+ if (_localServerToken.isEmpty &&
825+ ! _localServerApiEnabled &&
826+ ! _localServerMcpEnabled) {
827+ return ;
828+ }
823829 _localServerToken = '' ;
824830 _saveToRust ('local_server_token' , '' );
825831 if (_localServerApiEnabled) {
826832 _localServerApiEnabled = false ;
827833 _saveToRust ('local_server_api_enabled' , 'false' );
828834 }
835+ if (_localServerMcpEnabled) {
836+ _localServerMcpEnabled = false ;
837+ _saveToRust ('local_server_mcp_enabled' , 'false' );
838+ }
829839 notifyListeners ();
830840 }
831841
@@ -855,6 +865,18 @@ class SettingsProvider extends ChangeNotifier {
855865 _saveToRust ('local_server_api_enabled' , value.toString ());
856866 }
857867
868+ /// MCP 端点强制鉴权(与管理 API 共用 token):从关到开且当前 token 为空时,自动生成并保存
869+ void setLocalServerMcpEnabled (bool value) {
870+ if (_localServerMcpEnabled == value) return ;
871+ _localServerMcpEnabled = value;
872+ if (value && _localServerToken.isEmpty) {
873+ _localServerToken = _generateHexToken ();
874+ _saveToRust ('local_server_token' , _localServerToken);
875+ }
876+ notifyListeners ();
877+ _saveToRust ('local_server_mcp_enabled' , value.toString ());
878+ }
879+
858880 /// 生成 32 位随机 hex token(管理 API 自动鉴权 / UI 手动重新生成共用)
859881 static String _generateHexToken () {
860882 final r = Random .secure ();
@@ -1150,6 +1172,8 @@ class SettingsProvider extends ChangeNotifier {
11501172 _localServerJsonrpcEnabled = entry.value == 'true' ;
11511173 case 'local_server_api_enabled' :
11521174 _localServerApiEnabled = entry.value == 'true' ;
1175+ case 'local_server_mcp_enabled' :
1176+ _localServerMcpEnabled = entry.value == 'true' ;
11531177 case 'global_user_agent' :
11541178 _globalUserAgent = entry.value;
11551179 case 'default_queue_id' :
0 commit comments