botbrowser-mcp 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,7 @@ export declare const accountTools: {
18
18
  };
19
19
  };
20
20
  required: string[];
21
+ additionalProperties: boolean;
21
22
  };
22
23
  handler: (args: any) => Promise<{
23
24
  content: {
@@ -36,6 +37,7 @@ export declare const accountTools: {
36
37
  description: string;
37
38
  };
38
39
  };
40
+ additionalProperties: boolean;
39
41
  };
40
42
  handler: (args: any) => Promise<{
41
43
  content: {
@@ -59,6 +61,7 @@ export declare const accountTools: {
59
61
  };
60
62
  };
61
63
  required: string[];
64
+ additionalProperties: boolean;
62
65
  };
63
66
  handler: (args: any) => Promise<{
64
67
  content: {
@@ -86,6 +89,7 @@ export declare const accountTools: {
86
89
  };
87
90
  };
88
91
  required: string[];
92
+ additionalProperties: boolean;
89
93
  };
90
94
  handler: (args: any) => Promise<{
91
95
  content: {
@@ -105,6 +109,7 @@ export declare const accountTools: {
105
109
  };
106
110
  };
107
111
  required: string[];
112
+ additionalProperties: boolean;
108
113
  };
109
114
  handler: (args: any) => Promise<{
110
115
  content: {
@@ -1,109 +1,139 @@
1
1
  /**
2
- * 账号管理工具
2
+ * Account management tools
3
3
  */
4
4
  import { AccountRepository } from '../db/repositories/account.js';
5
5
  const accountRepo = new AccountRepository();
6
6
  export const accountTools = {
7
7
  add_account: {
8
- description: '添加账号到浏览器配置',
8
+ description: 'Add an account to a browser profile with flexible metadata storage',
9
9
  inputSchema: {
10
10
  type: 'object',
11
11
  properties: {
12
- profile_alias: { type: 'string', description: '浏览器配置别名' },
13
- username: { type: 'string', description: '账号用户名' },
14
- metadata: { type: 'string', description: '账号元数据(密码、邮箱等信息,格式自由)' },
12
+ profile_alias: { type: 'string', description: 'Browser profile alias' },
13
+ username: { type: 'string', description: 'Account username or identifier' },
14
+ metadata: { type: 'string', description: 'Account metadata (password, email, 2FA, etc.) in any format - key-value, JSON, or natural language' },
15
15
  },
16
16
  required: ['profile_alias', 'username'],
17
+ additionalProperties: false,
17
18
  },
18
19
  handler: async (args) => {
19
- const id = accountRepo.create(args);
20
- return {
21
- content: [{
22
- type: 'text',
23
- text: `账号 "${args.username}" 添加成功,ID: ${id}`,
24
- }],
25
- };
20
+ try {
21
+ const id = accountRepo.create(args);
22
+ return {
23
+ content: [{
24
+ type: 'text',
25
+ text: `Account "${args.username}" added successfully with ID: ${id}`,
26
+ }],
27
+ };
28
+ }
29
+ catch (error) {
30
+ throw new Error(`Failed to add account: ${error instanceof Error ? error.message : String(error)}`);
31
+ }
26
32
  },
27
33
  },
28
34
  list_accounts: {
29
- description: '列出所有账号或指定配置的账号',
35
+ description: 'List all accounts or accounts for a specific profile',
30
36
  inputSchema: {
31
37
  type: 'object',
32
38
  properties: {
33
- profile_alias: { type: 'string', description: '浏览器配置别名(可选)' },
39
+ profile_alias: { type: 'string', description: 'Filter by browser profile alias (optional)' },
34
40
  },
41
+ additionalProperties: false,
35
42
  },
36
43
  handler: async (args) => {
37
- const accounts = args.profile_alias
38
- ? accountRepo.getByProfile(args.profile_alias)
39
- : accountRepo.getAll();
40
- return {
41
- content: [{
42
- type: 'text',
43
- text: JSON.stringify(accounts, null, 2),
44
- }],
45
- };
44
+ try {
45
+ const accounts = args.profile_alias
46
+ ? accountRepo.getByProfile(args.profile_alias)
47
+ : accountRepo.getAll();
48
+ return {
49
+ content: [{
50
+ type: 'text',
51
+ text: JSON.stringify(accounts, null, 2),
52
+ }],
53
+ };
54
+ }
55
+ catch (error) {
56
+ throw new Error(`Failed to list accounts: ${error instanceof Error ? error.message : String(error)}`);
57
+ }
46
58
  },
47
59
  },
48
60
  find_account: {
49
- description: '查找指定配置下的账号',
61
+ description: 'Find a specific account by username within a profile',
50
62
  inputSchema: {
51
63
  type: 'object',
52
64
  properties: {
53
- profile_alias: { type: 'string', description: '浏览器配置别名' },
54
- username: { type: 'string', description: '账号用户名' },
65
+ profile_alias: { type: 'string', description: 'Browser profile alias' },
66
+ username: { type: 'string', description: 'Account username to search for' },
55
67
  },
56
68
  required: ['profile_alias', 'username'],
69
+ additionalProperties: false,
57
70
  },
58
71
  handler: async (args) => {
59
- const account = accountRepo.findByUsername(args.profile_alias, args.username);
60
- return {
61
- content: [{
62
- type: 'text',
63
- text: account ? JSON.stringify(account, null, 2) : '未找到账号',
64
- }],
65
- };
72
+ try {
73
+ const account = accountRepo.findByUsername(args.profile_alias, args.username);
74
+ return {
75
+ content: [{
76
+ type: 'text',
77
+ text: account ? JSON.stringify(account, null, 2) : 'Account not found',
78
+ }],
79
+ };
80
+ }
81
+ catch (error) {
82
+ throw new Error(`Failed to find account: ${error instanceof Error ? error.message : String(error)}`);
83
+ }
66
84
  },
67
85
  },
68
86
  update_account: {
69
- description: '更新账号信息',
87
+ description: 'Update account information',
70
88
  inputSchema: {
71
89
  type: 'object',
72
90
  properties: {
73
- id: { type: 'number', description: '账号ID' },
74
- username: { type: 'string', description: '新用户名' },
75
- metadata: { type: 'string', description: '新元数据' },
91
+ id: { type: 'number', description: 'Account ID' },
92
+ username: { type: 'string', description: 'New username' },
93
+ metadata: { type: 'string', description: 'New metadata' },
76
94
  },
77
95
  required: ['id'],
96
+ additionalProperties: false,
78
97
  },
79
98
  handler: async (args) => {
80
- const { id, ...updates } = args;
81
- accountRepo.update(id, updates);
82
- return {
83
- content: [{
84
- type: 'text',
85
- text: `账号 ${id} 更新成功`,
86
- }],
87
- };
99
+ try {
100
+ const { id, ...updates } = args;
101
+ accountRepo.update(id, updates);
102
+ return {
103
+ content: [{
104
+ type: 'text',
105
+ text: `Account ${id} updated successfully`,
106
+ }],
107
+ };
108
+ }
109
+ catch (error) {
110
+ throw new Error(`Failed to update account: ${error instanceof Error ? error.message : String(error)}`);
111
+ }
88
112
  },
89
113
  },
90
114
  delete_account: {
91
- description: '删除账号',
115
+ description: 'Delete an account',
92
116
  inputSchema: {
93
117
  type: 'object',
94
118
  properties: {
95
- id: { type: 'number', description: '账号ID' },
119
+ id: { type: 'number', description: 'Account ID to delete' },
96
120
  },
97
121
  required: ['id'],
122
+ additionalProperties: false,
98
123
  },
99
124
  handler: async (args) => {
100
- accountRepo.delete(args.id);
101
- return {
102
- content: [{
103
- type: 'text',
104
- text: `账号 ${args.id} 删除成功`,
105
- }],
106
- };
125
+ try {
126
+ accountRepo.delete(args.id);
127
+ return {
128
+ content: [{
129
+ type: 'text',
130
+ text: `Account ${args.id} deleted successfully`,
131
+ }],
132
+ };
133
+ }
134
+ catch (error) {
135
+ throw new Error(`Failed to delete account: ${error instanceof Error ? error.message : String(error)}`);
136
+ }
107
137
  },
108
138
  },
109
139
  };
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE;QACX,WAAW,EAAE,oEAAoE;QACjF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBACvE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBAC3E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oGAAoG,EAAE;aAChJ;YACD,QAAQ,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC;YACvC,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,YAAY,IAAI,CAAC,QAAQ,iCAAiC,EAAE,EAAE;yBACrE,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;KACF;IAED,aAAa,EAAE;QACb,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE;aAC7F;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;oBACjC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC9C,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAEzB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;yBACxC,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;KACF;IAED,YAAY,EAAE;QACZ,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBACvE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;aAC5E;YACD,QAAQ,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC;YACvC,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9E,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;yBACvE,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;KACF;IAED,cAAc,EAAE;QACd,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;gBACjD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;aAC1D;YACD,QAAQ,EAAE,CAAC,IAAI,CAAC;YAChB,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;gBAChC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBAChC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,WAAW,EAAE,uBAAuB;yBAC3C,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;KACF;IAED,cAAc,EAAE;QACd,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;aAC5D;YACD,QAAQ,EAAE,CAAC,IAAI,CAAC;YAChB,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,WAAW,IAAI,CAAC,EAAE,uBAAuB;yBAChD,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;KACF;CACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 浏览器实例管理工具
2
+ * Browser instance management tools
3
3
  */
4
4
  import { PlaywrightManager } from '../playwright/manager.js';
5
5
  export declare function setManager(m: PlaywrightManager): void;
@@ -24,6 +24,7 @@ export declare const instanceTools: {
24
24
  };
25
25
  };
26
26
  required: string[];
27
+ additionalProperties: boolean;
27
28
  };
28
29
  handler: (args: any) => Promise<{
29
30
  content: {
@@ -37,6 +38,7 @@ export declare const instanceTools: {
37
38
  inputSchema: {
38
39
  type: string;
39
40
  properties: {};
41
+ additionalProperties: boolean;
40
42
  };
41
43
  handler: () => Promise<{
42
44
  content: {
@@ -56,6 +58,7 @@ export declare const instanceTools: {
56
58
  };
57
59
  };
58
60
  required: string[];
61
+ additionalProperties: boolean;
59
62
  };
60
63
  handler: (args: any) => Promise<{
61
64
  content: {
@@ -75,6 +78,7 @@ export declare const instanceTools: {
75
78
  };
76
79
  };
77
80
  required: string[];
81
+ additionalProperties: boolean;
78
82
  };
79
83
  handler: (args: any) => Promise<{
80
84
  content: {
@@ -88,6 +92,7 @@ export declare const instanceTools: {
88
92
  inputSchema: {
89
93
  type: string;
90
94
  properties: {};
95
+ additionalProperties: boolean;
91
96
  };
92
97
  handler: () => Promise<{
93
98
  content: {
@@ -4,104 +4,134 @@ export function setManager(m) {
4
4
  }
5
5
  export const instanceTools = {
6
6
  launch_browser: {
7
- description: '启动浏览器实例',
7
+ description: 'Launch a new browser instance based on a profile configuration',
8
8
  inputSchema: {
9
9
  type: 'object',
10
10
  properties: {
11
- profile_alias: { type: 'string', description: '浏览器配置别名' },
12
- account_id: { type: 'number', description: '使用的账号ID(可选)' },
11
+ profile_alias: { type: 'string', description: 'Browser profile alias to use' },
12
+ account_id: { type: 'number', description: 'Optional account ID to associate with this instance' },
13
13
  launch_options: {
14
14
  type: 'object',
15
- description: 'Playwright LaunchOptions(可选,如 {"headless": false, "channel": "chrome", "viewport": {"width": 1920, "height": 1080}})',
15
+ description: 'Optional Playwright launch options (e.g., {"headless": false, "channel": "chrome"})',
16
16
  additionalProperties: true,
17
17
  },
18
18
  },
19
19
  required: ['profile_alias'],
20
+ additionalProperties: false,
20
21
  },
21
22
  handler: async (args) => {
22
- const id = await manager.launchInstance(args.profile_alias, args.account_id, args.launch_options);
23
- return {
24
- content: [{
25
- type: 'text',
26
- text: `浏览器实例 ${id} 启动成功`,
27
- }],
28
- };
23
+ try {
24
+ const id = await manager.launchInstance(args.profile_alias, args.account_id, args.launch_options);
25
+ return {
26
+ content: [{
27
+ type: 'text',
28
+ text: `Browser instance ${id} launched successfully`,
29
+ }],
30
+ };
31
+ }
32
+ catch (error) {
33
+ throw new Error(`Failed to launch browser: ${error instanceof Error ? error.message : String(error)}`);
34
+ }
29
35
  },
30
36
  },
31
37
  list_browser_instances: {
32
- description: '列出所有运行中的浏览器实例',
38
+ description: 'List all running browser instances with their status',
33
39
  inputSchema: {
34
40
  type: 'object',
35
41
  properties: {},
42
+ additionalProperties: false,
36
43
  },
37
44
  handler: async () => {
38
- const instances = manager.listInstances();
39
- return {
40
- content: [{
41
- type: 'text',
42
- text: JSON.stringify(instances, null, 2),
43
- }],
44
- };
45
+ try {
46
+ const instances = manager.listInstances();
47
+ return {
48
+ content: [{
49
+ type: 'text',
50
+ text: JSON.stringify(instances, null, 2),
51
+ }],
52
+ };
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Failed to list instances: ${error instanceof Error ? error.message : String(error)}`);
56
+ }
45
57
  },
46
58
  },
47
59
  switch_browser_instance: {
48
- description: '切换活跃的浏览器实例(后续浏览器操作将在此实例执行)',
60
+ description: 'Switch the active browser instance. All subsequent browser operations will run on the switched instance',
49
61
  inputSchema: {
50
62
  type: 'object',
51
63
  properties: {
52
- instance_id: { type: 'number', description: '实例ID' },
64
+ instance_id: { type: 'number', description: 'Instance ID to switch to' },
53
65
  },
54
66
  required: ['instance_id'],
67
+ additionalProperties: false,
55
68
  },
56
69
  handler: async (args) => {
57
- await manager.switchActive(args.instance_id);
58
- // CRITICAL: Reset Playwright MCP's context cache
59
- // This forces it to fetch the new active context on the next tool call
60
- const { playwrightMCPProxy } = await import('../index.js');
61
- if (playwrightMCPProxy) {
62
- await playwrightMCPProxy.resetContext();
70
+ try {
71
+ await manager.switchActive(args.instance_id);
72
+ // CRITICAL: Reset Playwright MCP's context cache
73
+ // This forces it to fetch the new active context on the next tool call
74
+ const { playwrightMCPProxy } = await import('../index.js');
75
+ if (playwrightMCPProxy) {
76
+ await playwrightMCPProxy.resetContext();
77
+ }
78
+ return {
79
+ content: [{
80
+ type: 'text',
81
+ text: `Switched to instance ${args.instance_id}`,
82
+ }],
83
+ };
84
+ }
85
+ catch (error) {
86
+ throw new Error(`Failed to switch instance: ${error instanceof Error ? error.message : String(error)}`);
63
87
  }
64
- return {
65
- content: [{
66
- type: 'text',
67
- text: `已切换到实例 ${args.instance_id}`,
68
- }],
69
- };
70
88
  },
71
89
  },
72
90
  stop_browser_instance: {
73
- description: '停止浏览器实例',
91
+ description: 'Stop a running browser instance and save its state',
74
92
  inputSchema: {
75
93
  type: 'object',
76
94
  properties: {
77
- instance_id: { type: 'number', description: '实例ID' },
95
+ instance_id: { type: 'number', description: 'Instance ID to stop' },
78
96
  },
79
97
  required: ['instance_id'],
98
+ additionalProperties: false,
80
99
  },
81
100
  handler: async (args) => {
82
- await manager.stopInstance(args.instance_id);
83
- return {
84
- content: [{
85
- type: 'text',
86
- text: `实例 ${args.instance_id} 已停止`,
87
- }],
88
- };
101
+ try {
102
+ await manager.stopInstance(args.instance_id);
103
+ return {
104
+ content: [{
105
+ type: 'text',
106
+ text: `Instance ${args.instance_id} stopped successfully`,
107
+ }],
108
+ };
109
+ }
110
+ catch (error) {
111
+ throw new Error(`Failed to stop instance: ${error instanceof Error ? error.message : String(error)}`);
112
+ }
89
113
  },
90
114
  },
91
115
  cleanup_orphaned_instances: {
92
- description: '清理孤立的实例记录(数据库有记录但实例已不存在)',
116
+ description: 'Clean up orphaned instance records (database entries for instances that are no longer running)',
93
117
  inputSchema: {
94
118
  type: 'object',
95
119
  properties: {},
120
+ additionalProperties: false,
96
121
  },
97
122
  handler: async () => {
98
- const count = await manager.cleanupOrphaned();
99
- return {
100
- content: [{
101
- type: 'text',
102
- text: `清理了 ${count} 个孤立实例记录`,
103
- }],
104
- };
123
+ try {
124
+ const count = await manager.cleanupOrphaned();
125
+ return {
126
+ content: [{
127
+ type: 'text',
128
+ text: `Cleaned up ${count} orphaned instance record(s)`,
129
+ }],
130
+ };
131
+ }
132
+ catch (error) {
133
+ throw new Error(`Failed to cleanup orphaned instances: ${error instanceof Error ? error.message : String(error)}`);
134
+ }
105
135
  },
106
136
  },
107
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/tools/instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/tools/instance.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export declare const profileTools: {
4
4
  inputSchema: {
5
5
  type: string;
6
6
  properties: {};
7
+ additionalProperties: boolean;
7
8
  };
8
9
  handler: () => Promise<{
9
10
  content: {
@@ -55,6 +56,7 @@ export declare const profileTools: {
55
56
  };
56
57
  };
57
58
  required: string[];
59
+ additionalProperties: boolean;
58
60
  };
59
61
  handler: (args: any) => Promise<{
60
62
  content: {
@@ -74,30 +76,39 @@ export declare const profileTools: {
74
76
  };
75
77
  executable_path: {
76
78
  type: string;
79
+ description: string;
77
80
  };
78
81
  fingerprint_path: {
79
82
  type: string;
83
+ description: string;
80
84
  };
81
85
  storage_state_path: {
82
86
  type: string;
87
+ description: string;
83
88
  };
84
89
  description: {
85
90
  type: string;
91
+ description: string;
86
92
  };
87
93
  proxy_server: {
88
94
  type: string;
95
+ description: string;
89
96
  };
90
97
  proxy_username: {
91
98
  type: string;
99
+ description: string;
92
100
  };
93
101
  proxy_password: {
94
102
  type: string;
103
+ description: string;
95
104
  };
96
105
  proxy_bypass: {
97
106
  type: string;
107
+ description: string;
98
108
  };
99
109
  };
100
110
  required: string[];
111
+ additionalProperties: boolean;
101
112
  };
102
113
  handler: (args: any) => Promise<{
103
114
  content: {
@@ -117,6 +128,7 @@ export declare const profileTools: {
117
128
  };
118
129
  };
119
130
  required: string[];
131
+ additionalProperties: boolean;
120
132
  };
121
133
  handler: (args: any) => Promise<{
122
134
  content: {
@@ -5,93 +5,117 @@ import { ProfileRepository } from '../db/repositories/profile.js';
5
5
  const profileRepo = new ProfileRepository();
6
6
  export const profileTools = {
7
7
  list_browser_profiles: {
8
- description: '列出所有浏览器配置',
8
+ description: 'List all browser profiles with their configurations',
9
9
  inputSchema: {
10
10
  type: 'object',
11
11
  properties: {},
12
+ additionalProperties: false,
12
13
  },
13
14
  handler: async () => {
14
- const profiles = profileRepo.getAll();
15
- return {
16
- content: [{
17
- type: 'text',
18
- text: JSON.stringify(profiles, null, 2),
19
- }],
20
- };
15
+ try {
16
+ const profiles = profileRepo.getAll();
17
+ return {
18
+ content: [{
19
+ type: 'text',
20
+ text: JSON.stringify(profiles, null, 2),
21
+ }],
22
+ };
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Failed to list profiles: ${error instanceof Error ? error.message : String(error)}`);
26
+ }
21
27
  },
22
28
  },
23
29
  create_browser_profile: {
24
- description: '创建新的浏览器配置',
30
+ description: 'Create a new browser profile with executable path and optional proxy settings',
25
31
  inputSchema: {
26
32
  type: 'object',
27
33
  properties: {
28
- alias: { type: 'string', description: '配置别名(唯一标识)' },
29
- executable_path: { type: 'string', description: 'Chrome 可执行文件路径' },
30
- fingerprint_path: { type: 'string', description: '防指纹配置文件路径(可选)' },
31
- storage_state_path: { type: 'string', description: 'Cookie/LocalStorage 存储路径(可选,不指定则不保存状态)' },
32
- description: { type: 'string', description: '配置描述' },
33
- proxy_server: { type: 'string', description: '代理服务器地址' },
34
- proxy_username: { type: 'string', description: '代理用户名' },
35
- proxy_password: { type: 'string', description: '代理密码' },
36
- proxy_bypass: { type: 'string', description: '代理绕过列表' },
34
+ alias: { type: 'string', description: 'Unique profile identifier' },
35
+ executable_path: { type: 'string', description: 'Path to Chrome/Chromium executable' },
36
+ fingerprint_path: { type: 'string', description: 'Path to fingerprint configuration file (optional)' },
37
+ storage_state_path: { type: 'string', description: 'Path to save cookies/localStorage (optional)' },
38
+ description: { type: 'string', description: 'Profile description' },
39
+ proxy_server: { type: 'string', description: 'Proxy server URL (e.g., http://127.0.0.1:7890)' },
40
+ proxy_username: { type: 'string', description: 'Proxy authentication username' },
41
+ proxy_password: { type: 'string', description: 'Proxy authentication password' },
42
+ proxy_bypass: { type: 'string', description: 'Comma-separated domains to bypass proxy' },
37
43
  },
38
44
  required: ['alias', 'executable_path'],
45
+ additionalProperties: false,
39
46
  },
40
47
  handler: async (args) => {
41
- profileRepo.create(args);
42
- return {
43
- content: [{
44
- type: 'text',
45
- text: `浏览器配置 "${args.alias}" 创建成功`,
46
- }],
47
- };
48
+ try {
49
+ profileRepo.create(args);
50
+ return {
51
+ content: [{
52
+ type: 'text',
53
+ text: `Profile "${args.alias}" created successfully`,
54
+ }],
55
+ };
56
+ }
57
+ catch (error) {
58
+ throw new Error(`Failed to create profile: ${error instanceof Error ? error.message : String(error)}`);
59
+ }
48
60
  },
49
61
  },
50
62
  update_browser_profile: {
51
- description: '更新浏览器配置',
63
+ description: 'Update an existing browser profile configuration',
52
64
  inputSchema: {
53
65
  type: 'object',
54
66
  properties: {
55
- alias: { type: 'string', description: '配置别名' },
56
- executable_path: { type: 'string' },
57
- fingerprint_path: { type: 'string' },
58
- storage_state_path: { type: 'string' },
59
- description: { type: 'string' },
60
- proxy_server: { type: 'string' },
61
- proxy_username: { type: 'string' },
62
- proxy_password: { type: 'string' },
63
- proxy_bypass: { type: 'string' },
67
+ alias: { type: 'string', description: 'Profile alias to update' },
68
+ executable_path: { type: 'string', description: 'New executable path' },
69
+ fingerprint_path: { type: 'string', description: 'New fingerprint path' },
70
+ storage_state_path: { type: 'string', description: 'New storage state path' },
71
+ description: { type: 'string', description: 'New description' },
72
+ proxy_server: { type: 'string', description: 'New proxy server URL' },
73
+ proxy_username: { type: 'string', description: 'New proxy username' },
74
+ proxy_password: { type: 'string', description: 'New proxy password' },
75
+ proxy_bypass: { type: 'string', description: 'New proxy bypass list' },
64
76
  },
65
77
  required: ['alias'],
78
+ additionalProperties: false,
66
79
  },
67
80
  handler: async (args) => {
68
- const { alias, ...updates } = args;
69
- profileRepo.update(alias, updates);
70
- return {
71
- content: [{
72
- type: 'text',
73
- text: `浏览器配置 "${alias}" 更新成功`,
74
- }],
75
- };
81
+ try {
82
+ const { alias, ...updates } = args;
83
+ profileRepo.update(alias, updates);
84
+ return {
85
+ content: [{
86
+ type: 'text',
87
+ text: `Profile "${alias}" updated successfully`,
88
+ }],
89
+ };
90
+ }
91
+ catch (error) {
92
+ throw new Error(`Failed to update profile: ${error instanceof Error ? error.message : String(error)}`);
93
+ }
76
94
  },
77
95
  },
78
96
  delete_browser_profile: {
79
- description: '删除浏览器配置',
97
+ description: 'Delete a browser profile and all associated accounts',
80
98
  inputSchema: {
81
99
  type: 'object',
82
100
  properties: {
83
- alias: { type: 'string', description: '配置别名' },
101
+ alias: { type: 'string', description: 'Profile alias to delete' },
84
102
  },
85
103
  required: ['alias'],
104
+ additionalProperties: false,
86
105
  },
87
106
  handler: async (args) => {
88
- profileRepo.delete(args.alias);
89
- return {
90
- content: [{
91
- type: 'text',
92
- text: `浏览器配置 "${args.alias}" 删除成功`,
93
- }],
94
- };
107
+ try {
108
+ profileRepo.delete(args.alias);
109
+ return {
110
+ content: [{
111
+ type: 'text',
112
+ text: `Profile "${args.alias}" deleted successfully`,
113
+ }],
114
+ };
115
+ }
116
+ catch (error) {
117
+ throw new Error(`Failed to delete profile: ${error instanceof Error ? error.message : String(error)}`);
118
+ }
95
119
  },
96
120
  },
97
121
  };
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "botbrowser-mcp",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Multi-instance browser automation MCP server with profile and account management",
5
5
  "author": "tonwe",
6
6
  "license": "Apache-2.0",