You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -264,13 +264,13 @@ Self-hosted deployments can hide sensitive tool families by setting `KERNEL_MCP_
264
264
### manage\_\* tools
265
265
266
266
-`manage_browsers` - Create, list, get, and delete browser sessions. Supports headless/stealth modes, profiles, proxies, viewports, extensions, and SSH tunneling.
267
-
-`manage_profiles` - Setup (with guided live browser session), list, and delete browser profiles for persisting cookies and logins.
267
+
-`manage_profiles` - Setup (with guided live browser session), search/list with pagination, get, and delete browser profiles for persisting cookies and logins.
268
+
-`manage_projects` - Create, list, get, update, and delete organization projects. Inspect and update per-project resource limits.
269
+
-`manage_api_keys` - Create, list, get, update, and delete org-wide or project-scoped API keys. Create returns the plaintext key once.
268
270
-`manage_browser_pools` - Create, list, get, delete, and flush pools of pre-warmed browsers. Acquire and release browsers from pools.
-`manage_extensions` - List and delete uploaded browser extensions.
271
-
-`manage_apps` - List apps, invoke actions, get/list deployments, and get invocation results.
272
-
-`manage_projects` - Create, list, get, update, and delete organization projects.
273
-
-`manage_api_keys` - Create, list, get, update, and delete Kernel API keys. Create returns the plaintext key once.
273
+
-`manage_apps` - List/search apps, invoke actions, get/list/delete deployments, and get invocation results.
274
274
-`manage_auth_connections` - Create, list, get, delete managed auth connections; start login flows (returns a hosted URL and live view); submit MFA codes or SSO selections.
275
275
-`manage_credentials` - Create, list, get, update, and delete stored credentials; fetch a current TOTP code for credentials with a configured totp_secret.
276
276
-`manage_credential_providers` - Create, list, get, update, and delete external credential providers (e.g. 1Password); list available items and test the provider connection.
'Manage Kernel apps when an agent needs to discover deployed app actions, invoke an app, or inspect deployment/invocation state. Use "list_apps" before invoking an unknown app, "invoke" to run an action, and get/list actions to inspect results.',
49
+
'Manage Kernel apps when an agent needs to discover deployed app actions, invoke an app, or inspect deployment/invocation state. Use "list_apps" before invoking an unknown app, "invoke" to run an action, get/list actions to inspect results, and "delete_deployment" to remove a deployment.',
49
50
{
50
51
action: z
51
52
.enum([
52
53
"list_apps",
53
54
"invoke",
54
55
"get_deployment",
55
56
"list_deployments",
57
+
"delete_deployment",
56
58
"get_invocation",
57
59
])
58
60
.describe("Operation to perform."),
@@ -65,9 +67,10 @@ export function registerAppCapabilities(server: McpServer) {
65
67
version: z
66
68
.string()
67
69
.describe(
68
-
"(list_apps, invoke) App version filter. Defaults to 'latest' for invoke.",
70
+
"(list_apps, invoke, list_deployments) App version filter. Defaults to 'latest' for invoke. Deployment version filtering requires app_name.",
69
71
)
70
72
.optional(),
73
+
query: z.string().describe("(list_apps) Search apps by name.").optional(),
71
74
action_name: z
72
75
.string()
73
76
.describe("(invoke) Action to execute within the app.")
@@ -78,7 +81,7 @@ export function registerAppCapabilities(server: McpServer) {
78
81
.optional(),
79
82
deployment_id: z
80
83
.string()
81
-
.describe("(get_deployment) Deployment ID to retrieve.")
// manage_extensions -- List and delete browser extensions
7
13
server.tool(
8
14
"manage_extensions",
9
-
'Manage browser extensions uploaded to your organization. Use "list" to see all extensions or "delete" to remove one.',
15
+
'Manage browser extensions uploaded to Kernel. Use "list" to see all extensions available to the current project or "delete" to remove one by ID or name.',
10
16
{
11
17
action: z.enum(["list","delete"]).describe("Operation to perform."),
12
18
id_or_name: z
@@ -29,45 +35,22 @@ export function registerExtensionTools(server: McpServer) {
29
35
switch(params.action){
30
36
case"list": {
31
37
constextensions=awaitclient.extensions.list();
32
-
return{
33
-
content: [
34
-
{
35
-
type: "text",
36
-
text:
37
-
extensions?.length>0
38
-
? JSON.stringify(extensions,null,2)
39
-
: "No extensions found",
40
-
},
41
-
],
42
-
};
38
+
returnitemsJsonResponse(extensions??[],{
39
+
has_more: false,
40
+
next_offset: null,
41
+
emptyText: "No extensions found",
42
+
});
43
43
}
44
44
case"delete": {
45
-
if(!params.id_or_name)
46
-
return{
47
-
content: [
48
-
{
49
-
type: "text",
50
-
text: "Error: id_or_name is required for delete.",
51
-
},
52
-
],
53
-
};
45
+
if(!params.id_or_name){
46
+
returnerrorResponse("Error: id_or_name is required for delete.");
"No profiles found. Use manage_profiles with action 'setup' to create one.",
32
+
// A search that matches nothing shouldn't claim the inventory is empty or
33
+
// suggest setup — other profiles may exist that just don't match the query.
34
+
emptyText: query
35
+
? `No profiles match "${query}".`
36
+
: "No profiles found. Use manage_profiles with action 'setup' to create one.",
33
37
});
34
38
}
35
39
@@ -65,20 +69,18 @@ export function registerProfileCapabilities(server: McpServer) {
65
69
66
70
server.tool(
67
71
"manage_profiles",
68
-
'Manage browser profiles when an agent needs persistent cookies, login state, or reusable browser state. Use "setup" for a guided login session, "list" to find a profile, and "delete" only when a profile should be removed.',
72
+
'Manage browser profiles when an agent needs persistent cookies, login state, or reusable browser state. Use "setup" for a guided login session, "list" to find a profile, "get" to retrieve one, and "delete" only when a profile should be removed.',
69
73
{
70
74
action: z
71
-
.enum(["setup","list","delete"])
75
+
.enum(["setup","list","get","delete"])
72
76
.describe("Operation to perform."),
73
77
profile_name: z
74
78
.string()
75
-
.describe(
76
-
"(setup, delete) Profile name. For setup: 1-255 chars. For delete: name of profile to remove.",
77
-
)
79
+
.describe("(setup, get, delete) Profile name. For setup: 1-255 chars.")
78
80
.optional(),
79
81
profile_id: z
80
82
.string()
81
-
.describe("(delete) Profile ID to delete. Alternative to profile_name.")
83
+
.describe("(get, delete) Profile ID. Alternative to profile_name.")
82
84
.optional(),
83
85
update_existing: z
84
86
.boolean()
@@ -108,6 +110,9 @@ export function registerProfileCapabilities(server: McpServer) {
108
110
returnerrorResponse(
109
111
"Error: profile_name is required for setup.",
110
112
);
113
+
// Scan all profiles for an exact name match: the list `query` is a
114
+
// search and may not reliably return an exact-named profile, which
115
+
// would let setup create a duplicate.
111
116
constexistingProfiles=awaitlistProfiles(client);
112
117
constexistingProfile=existingProfiles?.find(
113
118
(p)=>p.name===params.profile_name,
@@ -153,15 +158,43 @@ export function registerProfileCapabilities(server: McpServer) {
0 commit comments