Bind MCP apps to trusted ownership metadata (#10747)

This commit is contained in:
Jasper
2026-08-05 08:43:06 -06:00
committed by GitHub
parent 4bc96d7bbd
commit 1ecd746bde
5 changed files with 114 additions and 35 deletions
@@ -0,0 +1,60 @@
import { describe, expect, it } from 'vitest';
import { resolveMcpAppMetadata } from './ToolCallWithResponse';
describe('MCP app metadata binding', () => {
it('preserves authoritative ownership when a tool name contains the delimiter', () => {
const metadata = resolveMcpAppMetadata({
ui: { resourceUri: 'ui://victim/render' },
extensionName: 'victim',
toolName: 'victim__render',
toolNameIsActual: true,
});
expect(metadata).toEqual({
resourceUri: 'ui://victim/render',
extensionName: 'victim',
toolName: 'victim__render',
});
});
it('normalizes the exact owner prefix from trusted legacy replay metadata', () => {
const metadata = resolveMcpAppMetadata({
ui: { resourceUri: 'ui://victim/render' },
extensionName: 'victim',
toolName: 'victim__render__secret',
});
expect(metadata).toEqual({
resourceUri: 'ui://victim/render',
extensionName: 'victim',
toolName: 'render__secret',
});
});
it('does not infer ownership from incomplete metadata', () => {
const metadata = resolveMcpAppMetadata({
ui: { resourceUri: 'ui://victim/render' },
});
expect(metadata).toBeNull();
});
it('rejects untrusted request metadata when authenticated response metadata is absent', () => {
expect(resolveMcpAppMetadata(undefined)).toBeNull();
});
it('uses complete authenticated response metadata', () => {
const metadata = resolveMcpAppMetadata({
ui: { resourceUri: 'ui://victim/render' },
extensionName: 'victim',
toolName: 'render__secret',
toolNameIsActual: true,
});
expect(metadata).toEqual({
resourceUri: 'ui://victim/render',
extensionName: 'victim',
toolName: 'render__secret',
});
});
});