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
15 changes: 12 additions & 3 deletions .github/prompts/update-mcp-coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ Do not downgrade or change that version.
## Audit and implement

1. Read `$RUNNER_TEMP/sdk-diff.patch`, `../sdk/api.md`, and the parameter types in
`../sdk/src/resources`. Enumerate SDK methods and their parameters, including
`../sdk/src/resources`. The diff covers every release since the SDK version on
origin/main, so earlier runs may already have covered part of it on this branch.
Enumerate SDK methods and their parameters, including
nested options, new enum values, pagination, streaming, and changed signatures.
2. Read `src/lib/mcp/register.ts`, `src/lib/mcp/tools/`, and shared MCP schemas.
Map SDK methods/parameters to registered MCP tools, actions, and input fields.
Expand All @@ -31,10 +33,15 @@ Do not downgrade or change that version.

The Kernel API spec as of this SDK release is at
`$RUNNER_TEMP/kernel-api/packages/api/openapi.yaml`, and `$RUNNER_TEMP/openapi-diff.patch`
shows spec changes between the previous SDK release and this one. The SDK is generated
shows spec changes between origin/main's SDK release and this one. The SDK is generated
from this spec, so its endpoint, parameter, and schema descriptions are the source of
truth for what the API does.

The spec is taken from the API's main branch at release time and can be ahead of the
released SDK. The SDK defines what exists: never add tools, actions, or inputs for
operations or fields `../sdk` does not have. Use the spec only for the meaning of
things the SDK has.

1. For every changed `summary` or `description` in the spec diff that belongs to an
endpoint, parameter, or field the MCP server exposes, update the matching tool
description, action description, or input `.describe()` text. Use the spec text
Expand Down Expand Up @@ -68,7 +75,9 @@ unrelated code, workflows, generated App bundles, or authentication configuratio
Read the complete diff against origin/main before finishing. Remove unnecessary
comments, type casts, defensive wrappers, and unrelated changes.

Write `$RUNNER_TEMP/mcp-coverage-report.md` with concise sections describing:
Write `$RUNNER_TEMP/mcp-coverage-report.md`. It replaces the PR description, so it
must describe every change in the diff against origin/main, including changes earlier
runs left on this branch, not only this run's. Use concise sections describing:

- Added or updated MCP tools, actions, and fields, with their SDK counterparts.
- Descriptions updated to match spec changes, with the spec operation or field each
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/update-mcp-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,15 @@ jobs:
exit 0
fi

# The report replaces the PR description, so audit every release since
# main's SDK version, not only the ones since the last run.
old_version=$(git show origin/main:package.json | jq -er '.dependencies["@onkernel/sdk"]')
if git -C ../sdk rev-parse --verify "refs/tags/v$old_version" >/dev/null 2>&1; then
git -C ../sdk diff "refs/tags/v$old_version" "$SDK_SHA" -- api.md src/resources > "$RUNNER_TEMP/sdk-diff.patch"
git -C ../sdk diff "refs/tags/v$old_version" "$SDK_SHA" \
-- api.md src/client.ts src/lib src/resources > "$RUNNER_TEMP/sdk-diff.patch"
echo "old_date=$(TZ=UTC git -C ../sdk log -1 --date=format-local:%Y-%m-%dT%H:%M:%SZ --format=%cd "refs/tags/v$old_version")" >> "$GITHUB_OUTPUT"
else
printf 'Baseline %s unavailable; audit all of api.md and src/resources.\n' "$old_version" > "$RUNNER_TEMP/sdk-diff.patch"
printf 'Baseline %s unavailable; audit all of api.md, src/client.ts, src/lib, and src/resources.\n' "$old_version" > "$RUNNER_TEMP/sdk-diff.patch"
fi
echo "new_date=$(TZ=UTC git -C ../sdk log -1 --date=format-local:%Y-%m-%dT%H:%M:%SZ --format=%cd "$SDK_SHA")" >> "$GITHUB_OUTPUT"
echo "update=true" >> "$GITHUB_OUTPUT"
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.139.0"
".": "0.140.0"
}
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## [0.140.0](https://github.com/kernel/kernel-node-sdk/compare/v0.139.0...v0.140.0) (2026-11-04)


### Features

* Add single-use Kernel cards to vaults ([05a01e6](https://github.com/kernel/kernel-node-sdk/commit/05a01e6dd33052d7fd8efa188111ad0b3ee9c5a8))
* Drop Kernel's origin gate from 1Password fill ([7d574cd](https://github.com/kernel/kernel-node-sdk/commit/7d574cd28c308cb6e13d16f3a86a88930feb6bf7))
* Pass through tool_page_unloaded and disable SDK retries for WebMCP invoke failures ([15c227b](https://github.com/kernel/kernel-node-sdk/commit/15c227b28055c40c82087e23cddba3bdcad836f0))

## [0.139.0](https://github.com/kernel/kernel-node-sdk/compare/v0.138.0...v0.139.0) (2026-10-30)


Expand Down
2 changes: 2 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,7 @@ Types:
- <code><a href="./src/resources/vaults/items.ts">KernelCredentialVaultItemSpecInput</a></code>
- <code><a href="./src/resources/vaults/items.ts">KernelCredentialVaultItemState</a></code>
- <code><a href="./src/resources/vaults/items.ts">KernelPaymentRequestVaultItemSpec</a></code>
- <code><a href="./src/resources/vaults/items.ts">KernelSingleUseCard</a></code>
- <code><a href="./src/resources/vaults/items.ts">KernelWalletState</a></code>
- <code><a href="./src/resources/vaults/items.ts">KernelWalletVaultItemSpec</a></code>
- <code><a href="./src/resources/vaults/items.ts">LinkShippingAddress</a></code>
Expand Down Expand Up @@ -582,6 +583,7 @@ Types:
- <code><a href="./src/resources/vaults/items.ts">ShopPayCardVaultItemSpec</a></code>
- <code><a href="./src/resources/vaults/items.ts">ShopPayWalletState</a></code>
- <code><a href="./src/resources/vaults/items.ts">ShopPayWalletVaultItemSpec</a></code>
- <code><a href="./src/resources/vaults/items.ts">SingleUseCardBillingAddress</a></code>
- <code><a href="./src/resources/vaults/items.ts">VaultCardAliases</a></code>
- <code><a href="./src/resources/vaults/items.ts">VaultCardFillField</a></code>
- <code><a href="./src/resources/vaults/items.ts">VaultCheckoutContext</a></code>
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onkernel/sdk",
"version": "0.139.0",
"version": "0.140.0",
"description": "The official TypeScript library for the Kernel API",
"author": "Kernel <>",
"types": "dist/index.d.ts",
Expand Down
16 changes: 10 additions & 6 deletions src/resources/browsers/webmcp/webmcp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ export class Webmcp extends APIResource {
* across navigation. Inspect a populated form, obtain any required confirmation,
* then submit through Playwright or computer interaction without invoking the tool
* again. If the tab or embedded frame disappears, or the request times out after
* invocation begins, the response reports outcome_unknown and the tool is not
* retried. CDP-backed custom tool outputs above 240 KiB return an error rather
* than a truncated result.
* invocation begins, the response reports outcome_unknown. If the tool's page is
* reloaded or replaced by a navigation the tool did not start, and the tool never
* responds, the response reports tool_page_unloaded once the replacement page
* loads, or right away if the tool's tab crashes. Neither failure is retried, and
* both set X-Should-Retry to false because the tool may have had side effects.
* CDP-backed custom tool outputs above 240 KiB return an error rather than a
* truncated result.
*
* @example
* ```ts
Expand Down Expand Up @@ -84,7 +88,7 @@ export interface CustomToolSource {
}

export interface InvocationFailure {
code: 'outcome_unknown';
code: 'outcome_unknown' | 'tool_page_unloaded';

message: string;

Expand Down Expand Up @@ -113,7 +117,7 @@ export interface InvocationResult {

export interface InvokeRequest {
/**
* Tool input, limited to 1 MiB after JSON serialization.
* Tool input, limited to 4 MiB after JSON serialization.
*/
input: { [key: string]: unknown };

Expand Down Expand Up @@ -249,7 +253,7 @@ export interface ToolsResponse {

export interface WebmcpInvokeToolParams {
/**
* Tool input, limited to 1 MiB after JSON serialization.
* Tool input, limited to 4 MiB after JSON serialization.
*/
input: { [key: string]: unknown };

Expand Down
2 changes: 2 additions & 0 deletions src/resources/vaults/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export {
type KernelCredentialVaultItemSpecInput,
type KernelCredentialVaultItemState,
type KernelPaymentRequestVaultItemSpec,
type KernelSingleUseCard,
type KernelWalletState,
type KernelWalletVaultItemSpec,
type LinkShippingAddress,
Expand Down Expand Up @@ -69,6 +70,7 @@ export {
type ShopPayCardVaultItemSpec,
type ShopPayWalletState,
type ShopPayWalletVaultItemSpec,
type SingleUseCardBillingAddress,
type VaultCardAliases,
type VaultCardFillField,
type VaultCheckoutContext,
Expand Down
119 changes: 101 additions & 18 deletions src/resources/vaults/items.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1471,17 +1471,26 @@ export interface FillVaultItemOperationResult {
}

/**
* A ready Kernel card supports authorize, fill, then submit checkout. Card details
* are delivered for a few minutes after fill; submit promptly. Repeated fill is
* safe and never submits checkout. Visa purchases require a spend_approval action
* before details are issued; Mastercard purchases need no hosted approval.
* masks.last4 is the enrolled card's last four digits; masks.token_last4, when
* present, is the token's last four digits shown to the merchant. Kernel does not
* observe whether the merchant charged the card.
* A ready Kernel card funded by a payment method supports authorize, fill, then
* submit checkout. A single-use card (source single_use_card) is ready on
* creation, supports only fill, and is expired from expires_at; Kernel deletes its
* stored details shortly after expires_at. It has no payment_method_id or
* funding_status. Card details are delivered for a few minutes after fill; submit
* promptly. Repeated fill is safe and never submits checkout. Visa purchases
* require a spend_approval action before details are issued; Mastercard purchases
* need no hosted approval. masks.last4 is the enrolled card's last four digits;
* masks.token_last4, when present, is the token's last four digits shown to the
* merchant. Kernel does not observe whether the merchant charged the card.
*/
export interface KernelCardState {
provider: 'kernel';

/**
* payment_method for a purchase funded by a wallet payment method; single_use_card
* for a card whose details were supplied with single_use_card.
*/
source: 'payment_method' | 'single_use_card';

/**
* pending_authorization waits for cardholder approval on Visa purchases or fresh
* security-code collection on alias-mode purchases through the spend_approval
Expand Down Expand Up @@ -1511,7 +1520,9 @@ export interface KernelCardState {
| 'recovery_required';

/**
* Informational registrable domain. Fill is locked to merchant_url's exact origin.
* Informational registrable domain. Fill is locked to merchant_url's exact origin,
* except that a single-use card fills on any https page of this registrable
* domain.
*/
domains?: Array<string>;

Expand Down Expand Up @@ -1568,7 +1579,18 @@ export namespace KernelCardState {
* after collection. An expired card requires a new purchase. Fill types those
* details on merchant_url's origin. The amount, merchant_url and merchant_country
* are recorded but do not restrict payment requests sent by the browser. Card
* updates are not supported; delete and create a new item instead.
* updates are not supported; delete and create a new item instead. With
* single_use_card the item is instead a single-use card whose details the caller
* supplies, such as a virtual card from its issuer. It is not funded by a payment
* method, is ready on creation, and supports only fill: Kernel stores the details
* encrypted, never returns them, and fills them on any https page whose
* registrable domain (state.domains) is merchant_url's, including its subdomains.
* Fill does not consume it. From expires_at it is expired and can no longer be
* filled; Kernel deletes its stored details shortly after expires_at. Deleting the
* card, its wallet or its vault deletes them immediately. amount, currency and the
* merchant fields are recorded but not enforced. Repeating the identical request
* returns the existing card; any other request with the same key returns 409, as
* does repeating it once the expired card's details have been deleted.
*/
export interface KernelCardVaultItemSpec {
/**
Expand Down Expand Up @@ -1597,6 +1619,16 @@ export interface KernelCardVaultItemSpec {
*/
wallet: string;

/**
* Single-use cards only. From this time the card is expired and can no longer be
* filled; Kernel deletes its stored details shortly after. Deleting the card, its
* wallet or its vault deletes them immediately. Defaults to 2 hours after
* creation, capped at the end of the card's expiry month; a requested time must be
* in the future, at most 24 hours after creation, and not after the end of the
* card's expiry month. Returned in UTC.
*/
expires_at?: string;

/**
* Actual merchant category when known. Omit rather than invent a category.
*/
Expand All @@ -1619,9 +1651,20 @@ export interface KernelCardVaultItemSpec {
* Omission selects the wallet's default card, ID card, for compatibility with
* existing requests; it never falls back to another method, and a wallet without a
* default card requires the ID. The purchase is bound to the method's enrolled
* card and network token, so later operations cannot switch funding.
* card and network token, so later operations cannot switch funding. Not allowed
* with single_use_card.
*/
payment_method_id?: string;

/**
* Details of a card the caller supplies, such as a single-use virtual card from
* its issuer. Mutually exclusive with payment_method_id. The card details are
* stored encrypted for fill and never returned; reads return only reference.
* Kernel deletes them shortly after the card's expires_at; deleting the card, its
* wallet or its vault deletes them immediately. A card whose expiry month has
* ended is rejected.
*/
single_use_card?: KernelSingleUseCard;
}

export interface KernelCredentialVaultItemSpec {
Expand Down Expand Up @@ -1738,6 +1781,22 @@ export interface KernelPaymentRequestVaultItemSpec {
merchant_country?: string;
}

/**
* Details of a card the caller supplies, such as a single-use virtual card from
* its issuer. Mutually exclusive with payment_method_id. The card details are
* stored encrypted for fill and never returned; reads return only reference.
* Kernel deletes them shortly after the card's expires_at; deleting the card, its
* wallet or its vault deletes them immediately. A card whose expiry month has
* ended is rejected.
*/
export interface KernelSingleUseCard {
/**
* The caller's identifier for the card, such as the issuer's card ID. Returned
* unchanged on reads.
*/
reference?: string;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Single-use card type omits details

High Severity

KernelSingleUseCard only accepts optional reference, so callers cannot supply the card details the create path is documented to take. SingleUseCardBillingAddress is generated and exported but never attached to that type, so number, expiry, CVC, name, and billing address cannot be typed on single_use_card. The new vault card flow cannot be used through the public SDK types.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a8a321d. Configure here.


export interface KernelWalletState {
provider: 'kernel';

Expand Down Expand Up @@ -2427,10 +2486,12 @@ export namespace OnePasswordCredentialVaultItemState {

/**
* Fill and submit an approved 1Password login in the selected browser page. The
* page must share the selected entry's login origin. Supply entry_id when more
* than one approved entry matches the page origin, and target_id when more than
* one open page has page_url. The extension selects fields; callers cannot supply
* selectors or secret values. Submission does not confirm website authentication.
* 1Password extension decides whether the approved login matches the page and
* refuses pages that don't. Supply entry_id when several entries are approved and
* the page origin does not identify exactly one of them, and target_id when more
* than one open page has page_url. The extension selects fields; callers cannot
* supply selectors or secret values. Submission does not confirm website
* authentication.
*/
export interface OnePasswordFillVaultItemOperationRequest {
/**
Expand All @@ -2447,8 +2508,8 @@ export interface OnePasswordFillVaultItemOperationRequest {
type: '1pw_fill';

/**
* ID of an approved request entry. Required when several approved entries have the
* page's origin.
* ID of an approved request entry. Required when several entries are approved and
* the page's origin does not match exactly one of them.
*/
entry_id?: string;

Expand Down Expand Up @@ -3073,6 +3134,26 @@ export namespace ShopPayWalletVaultItemSpec {
}
}

/**
* Billing address filled with the billing\_\* fill fields. Never returned.
*/
export interface SingleUseCardBillingAddress {
city?: string;

/**
* ISO 3166-1 alpha-2 code.
*/
country?: string;

line1?: string;

line2?: string;

postal_code?: string;

state?: string;
}

export interface VaultCardAliases {
cvc: string;

Expand Down Expand Up @@ -4507,8 +4588,8 @@ export declare namespace ItemPerformOperationParams {
type: '1pw_fill';

/**
* Body param: ID of an approved request entry. Required when several approved
* entries have the page's origin.
* Body param: ID of an approved request entry. Required when several entries are
* approved and the page's origin does not match exactly one of them.
*/
entry_id?: string;

Expand Down Expand Up @@ -4951,6 +5032,7 @@ export declare namespace Items {
type KernelCredentialVaultItemSpecInput as KernelCredentialVaultItemSpecInput,
type KernelCredentialVaultItemState as KernelCredentialVaultItemState,
type KernelPaymentRequestVaultItemSpec as KernelPaymentRequestVaultItemSpec,
type KernelSingleUseCard as KernelSingleUseCard,
type KernelWalletState as KernelWalletState,
type KernelWalletVaultItemSpec as KernelWalletVaultItemSpec,
type LinkShippingAddress as LinkShippingAddress,
Expand Down Expand Up @@ -4982,6 +5064,7 @@ export declare namespace Items {
type ShopPayCardVaultItemSpec as ShopPayCardVaultItemSpec,
type ShopPayWalletState as ShopPayWalletState,
type ShopPayWalletVaultItemSpec as ShopPayWalletVaultItemSpec,
type SingleUseCardBillingAddress as SingleUseCardBillingAddress,
type VaultCardAliases as VaultCardAliases,
type VaultCardFillField as VaultCardFillField,
type VaultCheckoutContext as VaultCheckoutContext,
Expand Down
Loading
Loading