(
toolName: string,
view: ViewConfig,
toolMeta: InternalToolMeta,
)
| 967 | } |
| 968 | |
| 969 | private registerViewResources( |
| 970 | toolName: string, |
| 971 | view: ViewConfig, |
| 972 | toolMeta: InternalToolMeta, |
| 973 | ): void { |
| 974 | // Append a content-derived version param so hosts (e.g. ChatGPT) bust |
| 975 | // their cache when the bundle changes, but keep the URI stable across |
| 976 | // `tools/list` calls when the bundle hasn't changed. |
| 977 | const versionParam = this.computeViewVersionParam(view.component); |
| 978 | |
| 979 | const viewResource: ViewResourceConfig = { |
| 980 | hostType: "mcp-app", |
| 981 | uri: `ui://views/ext-apps/${view.component}.html${versionParam}`, |
| 982 | mimeType: "text/html;profile=mcp-app", |
| 983 | buildContentMeta: ( |
| 984 | { resourceDomains, connectDomains, domain, baseUriDomains }, |
| 985 | overrides, |
| 986 | ) => { |
| 987 | const defaults: McpAppsResourceMeta = { |
| 988 | ui: { |
| 989 | csp: { |
| 990 | resourceDomains, |
| 991 | connectDomains, |
| 992 | baseUriDomains, |
| 993 | }, |
| 994 | domain, |
| 995 | }, |
| 996 | }; |
| 997 | |
| 998 | const fromView: McpAppsResourceMeta = { |
| 999 | ui: { |
| 1000 | ...(view.description && { description: view.description }), |
| 1001 | ...(view.prefersBorder !== undefined && { |
| 1002 | prefersBorder: view.prefersBorder, |
| 1003 | }), |
| 1004 | ...(view.domain && { domain: view.domain }), |
| 1005 | csp: { |
| 1006 | ...(view.csp?.resourceDomains && { |
| 1007 | resourceDomains: view.csp.resourceDomains, |
| 1008 | }), |
| 1009 | ...(view.csp?.connectDomains && { |
| 1010 | connectDomains: view.csp.connectDomains, |
| 1011 | }), |
| 1012 | ...(view.csp?.frameDomains && { |
| 1013 | frameDomains: view.csp.frameDomains, |
| 1014 | }), |
| 1015 | ...(view.csp?.baseUriDomains && { |
| 1016 | baseUriDomains: view.csp.baseUriDomains, |
| 1017 | }), |
| 1018 | }, |
| 1019 | }, |
| 1020 | }; |
| 1021 | |
| 1022 | const ui = mergeWithUnion(mergeWithUnion(defaults, fromView), { |
| 1023 | ui: overrides, |
| 1024 | }); |
| 1025 | |
| 1026 | const base: ResourceMeta = { |
no test coverage detected