Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"@clerk/themes": "^2.4.19",
"@mcp-ui/server": "^5.10.0",
"@modelcontextprotocol/sdk": "1.26.0",
"@onkernel/sdk": "^0.60.0",
"@onkernel/sdk": "^0.72.0",
"@types/jsonwebtoken": "^9.0.10",
"@types/redis": "^4.0.11",
"builtin-modules": "^5.0.0",
Expand Down
17 changes: 7 additions & 10 deletions src/lib/mcp/tools/browser-pools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ type BrowserPoolAcquireResponse = Awaited<
ReturnType<KernelClient["browserPools"]["acquire"]>
>;

type PoolConfigParams = BrowserCreateConfigParams & {
type PoolConfigParams = Omit<
BrowserCreateConfigParams,
"save_profile_changes"
> & {
size?: number;
name?: string;
headless?: boolean;
Expand Down Expand Up @@ -159,14 +162,14 @@ export function registerBrowserPoolCapabilities(server: McpServer) {
}

const client = createKernelClient(extra.authInfo.token);
const pools = await client.browserPools.list();
const pools = (await client.browserPools.list())?.items ?? [];
return {
contents: [
{
uri: uri.toString(),
mimeType: "application/json",
text:
pools && pools.length > 0
pools.length > 0
? JSON.stringify(pools.map(summarizeBrowserPool), null, 2)
: "No browser pools found",
},
Expand Down Expand Up @@ -245,12 +248,6 @@ export function registerBrowserPoolCapabilities(server: McpServer) {
"(create, update) Profile ID to load into pool browsers. Cannot use with profile_name.",
)
.optional(),
save_profile_changes: z
.boolean()
.describe(
"(create, update) Save browser changes back to the selected profile when sessions end.",
)
.optional(),
proxy_id: z
.string()
.describe("(create, update) Proxy for pool browsers.")
Expand Down Expand Up @@ -391,7 +388,7 @@ export function registerBrowserPoolCapabilities(server: McpServer) {
});
}
case "list": {
const pools = (await client.browserPools.list()) ?? [];
const pools = (await client.browserPools.list())?.items ?? [];
return pools.length > 0
? jsonResponse({
items: pools.map(summarizeBrowserPool),
Expand Down
2 changes: 1 addition & 1 deletion src/lib/mcp/tools/credentials.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export function registerCredentialTools(server: McpServer) {
)
.optional(),
values: z
.record(z.string())
.record(z.string(), z.string())
.describe(
"(create, update) Field name to value mapping (e.g. username, password). On update, merged with existing values.",
)
Expand Down
13 changes: 9 additions & 4 deletions src/lib/mcp/tools/extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
textResponse,
toolErrorResponse,
} from "@/lib/mcp/responses";
import { paginationParams } from "@/lib/mcp/schemas";

export function registerExtensionTools(server: McpServer) {
// manage_extensions -- List and delete browser extensions
Expand All @@ -19,6 +20,7 @@ export function registerExtensionTools(server: McpServer) {
.string()
.describe("(delete) Extension ID or name to delete.")
.optional(),
...paginationParams,
},
{
title: "Manage Kernel browser extensions",
Expand All @@ -34,10 +36,13 @@ export function registerExtensionTools(server: McpServer) {
try {
switch (params.action) {
case "list": {
const extensions = await client.extensions.list();
return itemsJsonResponse(extensions ?? [], {
has_more: false,
next_offset: null,
const page = await client.extensions.list({
...(params.limit !== undefined && { limit: params.limit }),
...(params.offset !== undefined && { offset: params.offset }),
});
return itemsJsonResponse(page?.items ?? [], {
has_more: page?.has_more ?? false,
next_offset: page?.next_offset ?? null,
Comment thread
cursor[bot] marked this conversation as resolved.
emptyText: "No extensions found",
});
}
Expand Down
13 changes: 9 additions & 4 deletions src/lib/mcp/tools/proxies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
textResponse,
toolErrorResponse,
} from "@/lib/mcp/responses";
import { paginationParams } from "@/lib/mcp/schemas";

const httpUrlSchema = z
.string()
Expand Down Expand Up @@ -77,6 +78,7 @@ export function registerProxyTools(server: McpServer) {
.string()
.describe("(create, custom type) Auth password.")
.optional(),
...paginationParams,
},
{
title: "Manage Kernel proxy configurations",
Expand Down Expand Up @@ -134,10 +136,13 @@ export function registerProxyTools(server: McpServer) {
return jsonResponse(proxy);
}
case "list": {
const proxies = await client.proxies.list();
return itemsJsonResponse(proxies ?? [], {
has_more: false,
next_offset: null,
const page = await client.proxies.list({
...(params.limit !== undefined && { limit: params.limit }),
...(params.offset !== undefined && { offset: params.offset }),
});
return itemsJsonResponse(page?.items ?? [], {
has_more: page?.has_more ?? false,
next_offset: page?.next_offset ?? null,
emptyText: "No proxies found",
});
}
Expand Down
Loading