From d8948efb81bdbe5f6bc76221f421ad9b25e3fcc0 Mon Sep 17 00:00:00 2001
From: morluto <76467478+morluto@users.noreply.github.com>
Date: Thu, 22 Oct 2026 08:40:36 +0800
Subject: [PATCH] refactor(mcp): bind Electron provider failures at
registration
---
src/server/registerElectronTools.ts | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/src/server/registerElectronTools.ts b/src/server/registerElectronTools.ts
index f5e6778054..2fd5a6d036 100644
--- a/src/server/registerElectronTools.ts
+++ b/src/server/registerElectronTools.ts
@@ -78,6 +78,7 @@ export const registerElectronTools = (
runElectronTool(
registration,
listContract,
+ options.observationLoadFailure,
{ input, context },
(parsed, { signal }) =>
listElectronTargets(options.electron, parsed, {
@@ -92,6 +93,7 @@ export const registerElectronTools = (
runElectronTool(
registration,
inspectContract,
+ options.observationLoadFailure,
{ input, context },
(parsed, { signal, progress }) =>
inspectElectronPage(options.electron, parsed, {
@@ -107,6 +109,7 @@ export const registerElectronTools = (
runElectronTool(
registration,
analyzeContract,
+ undefined,
{ input, context },
async ({ detail, ...request }, { signal, progress }) => {
const analyzed = await analyzeJavaScriptApplicationValidated(
@@ -127,6 +130,7 @@ export const registerElectronTools = (
runElectronTool(
registration,
reconcileContract,
+ undefined,
{ input, context },
(parsed) =>
Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed)),
@@ -139,6 +143,7 @@ export const registerElectronTools = (
runElectronTool(
registration,
activeContract,
+ options.activeLoadFailure,
{ input, context },
(parsed, { signal, progress }) =>
captureElectronScenario(options.electronActive, parsed, {
@@ -174,6 +179,7 @@ const runElectronTool = async (
readonly server: EvidenceMcpServer;
},
contract: ToolContract,
+ loadFailure: OptionalProviderLoadFailure | undefined,
request: {
readonly input: Input;
readonly context: ServerContext;
@@ -184,16 +190,9 @@ const runElectronTool = async (
) => Promise>,
) => {
const { input, context } = request;
- const failure =
- contract.name === "capture_electron_scenario"
- ? options.activeLoadFailure
- : contract.name === "list_electron_targets" ||
- contract.name === "inspect_electron_page"
- ? options.observationLoadFailure
- : undefined;
- if (failure !== undefined)
+ if (loadFailure !== undefined)
return options.delivery.toCallToolResult(
- err(optionalProviderUnavailable(failure, contract.name)),
+ err(optionalProviderUnavailable(loadFailure, contract.name)),
contract,
);
return runAdmittedToolOperation(