@assistant-ui/react-mcp 0.1.18 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/buildHeaders.d.ts +1 -2
- package/dist/auth/buildHeaders.d.ts.map +1 -1
- package/dist/auth/createOAuthProvider.d.ts +5 -6
- package/dist/auth/createOAuthProvider.d.ts.map +1 -1
- package/dist/auth/types.d.ts +1 -2
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/connector.d.ts +1 -2
- package/dist/connector.d.ts.map +1 -1
- package/dist/context/McpConnectorByIndexProvider.d.ts +1 -2
- package/dist/context/McpConnectorByIndexProvider.d.ts.map +1 -1
- package/dist/context/McpCustomServerByIndexProvider.d.ts +1 -2
- package/dist/context/McpCustomServerByIndexProvider.d.ts.map +1 -1
- package/dist/context/McpServerByIdProvider.d.ts +1 -2
- package/dist/context/McpServerByIdProvider.d.ts.map +1 -1
- package/dist/hooks/useMcpOAuthCallback.d.ts +5 -6
- package/dist/hooks/useMcpOAuthCallback.d.ts.map +1 -1
- package/dist/hooks/useMcpOAuthCallback.js +4 -0
- package/dist/hooks/useMcpOAuthCallback.js.map +1 -1
- package/dist/mcp-scope.d.ts +14 -15
- package/dist/mcp-scope.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormAuthFields.d.ts +4 -4
- package/dist/primitives/addForm/McpAddFormAuthFields.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormAuthFields.js +18 -71
- package/dist/primitives/addForm/McpAddFormAuthFields.js.map +1 -1
- package/dist/primitives/addForm/McpAddFormAuthSelect.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormAuthSelect.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormBearerTokenField.d.ts +10 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.js +50 -0
- package/dist/primitives/addForm/McpAddFormBearerTokenField.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormCancel.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormCancel.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormError.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormError.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormNameField.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormNameField.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormRoot.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormRoot.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormScopesField.d.ts +10 -0
- package/dist/primitives/addForm/McpAddFormScopesField.d.ts.map +1 -0
- package/dist/primitives/addForm/McpAddFormScopesField.js +38 -0
- package/dist/primitives/addForm/McpAddFormScopesField.js.map +1 -0
- package/dist/primitives/addForm/McpAddFormSubmit.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormSubmit.d.ts.map +1 -1
- package/dist/primitives/addForm/McpAddFormUrlField.d.ts +2 -3
- package/dist/primitives/addForm/McpAddFormUrlField.d.ts.map +1 -1
- package/dist/primitives/addForm/context.d.ts +7 -8
- package/dist/primitives/addForm/context.d.ts.map +1 -1
- package/dist/primitives/addForm.d.ts +4 -2
- package/dist/primitives/addForm.js +5 -1
- package/dist/primitives/addForm.js.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.d.ts +2 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.d.ts +2 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.d.ts +2 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveError.d.ts +2 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveError.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveFields.d.ts +3 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveFields.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveItems.d.ts +3 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveItems.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.d.ts +2 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.d.ts.map +1 -1
- package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.d.ts +2 -3
- package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.d.ts.map +1 -1
- package/dist/primitives/elicitation/context.d.ts +7 -8
- package/dist/primitives/elicitation/context.d.ts.map +1 -1
- package/dist/primitives/elicitation/initialElicitationDraft.d.ts +1 -2
- package/dist/primitives/elicitation/initialElicitationDraft.d.ts.map +1 -1
- package/dist/primitives/elicitation/prepareElicitationContent.d.ts +1 -2
- package/dist/primitives/elicitation/prepareElicitationContent.d.ts.map +1 -1
- package/dist/primitives/elicitation/prepareElicitationContent.js +5 -1
- package/dist/primitives/elicitation/prepareElicitationContent.js.map +1 -1
- package/dist/primitives/manager/McpManagerAddCustomTrigger.d.ts +2 -3
- package/dist/primitives/manager/McpManagerAddCustomTrigger.d.ts.map +1 -1
- package/dist/primitives/manager/McpManagerConnectors.d.ts +2 -3
- package/dist/primitives/manager/McpManagerConnectors.d.ts.map +1 -1
- package/dist/primitives/manager/McpManagerCustomServers.d.ts +2 -3
- package/dist/primitives/manager/McpManagerCustomServers.d.ts.map +1 -1
- package/dist/primitives/manager/McpManagerRoot.d.ts +2 -3
- package/dist/primitives/manager/McpManagerRoot.d.ts.map +1 -1
- package/dist/primitives/server/McpServerConnectButton.d.ts +2 -3
- package/dist/primitives/server/McpServerConnectButton.d.ts.map +1 -1
- package/dist/primitives/server/McpServerDisconnectButton.d.ts +2 -3
- package/dist/primitives/server/McpServerDisconnectButton.d.ts.map +1 -1
- package/dist/primitives/server/McpServerError.d.ts +2 -3
- package/dist/primitives/server/McpServerError.d.ts.map +1 -1
- package/dist/primitives/server/McpServerIcon.d.ts +2 -3
- package/dist/primitives/server/McpServerIcon.d.ts.map +1 -1
- package/dist/primitives/server/McpServerName.d.ts +2 -3
- package/dist/primitives/server/McpServerName.d.ts.map +1 -1
- package/dist/primitives/server/McpServerOAuthLink.d.ts +2 -3
- package/dist/primitives/server/McpServerOAuthLink.d.ts.map +1 -1
- package/dist/primitives/server/McpServerRemoveButton.d.ts +2 -3
- package/dist/primitives/server/McpServerRemoveButton.d.ts.map +1 -1
- package/dist/primitives/server/McpServerRoot.d.ts +2 -3
- package/dist/primitives/server/McpServerRoot.d.ts.map +1 -1
- package/dist/primitives/server/McpServerStatus.d.ts +2 -3
- package/dist/primitives/server/McpServerStatus.d.ts.map +1 -1
- package/dist/primitives/server/McpServerToolName.d.ts +2 -3
- package/dist/primitives/server/McpServerToolName.d.ts.map +1 -1
- package/dist/primitives/server/McpServerTools.d.ts +3 -4
- package/dist/primitives/server/McpServerTools.d.ts.map +1 -1
- package/dist/resources/McpManagerResource.d.ts +2 -3
- package/dist/resources/McpManagerResource.d.ts.map +1 -1
- package/dist/resources/McpManagerResource.js +93 -62
- package/dist/resources/McpManagerResource.js.map +1 -1
- package/dist/resources/McpServerRemovalFence.d.ts +2 -3
- package/dist/resources/McpServerRemovalFence.d.ts.map +1 -1
- package/dist/resources/McpServerResource.d.ts +3 -4
- package/dist/resources/McpServerResource.d.ts.map +1 -1
- package/dist/resources/McpServerResource.js +4 -4
- package/dist/resources/McpServerResource.js.map +1 -1
- package/dist/resources/storage/McpCustomStorage.d.ts +1 -2
- package/dist/resources/storage/McpCustomStorage.d.ts.map +1 -1
- package/dist/resources/storage/McpLocalStorage.d.ts +4 -5
- package/dist/resources/storage/McpLocalStorage.d.ts.map +1 -1
- package/dist/resources/storage/McpMemoryStorage.d.ts +1 -2
- package/dist/resources/storage/McpMemoryStorage.d.ts.map +1 -1
- package/dist/resources/storage/types.d.ts +2 -3
- package/dist/resources/storage/types.d.ts.map +1 -1
- package/dist/resources/validateElicitationContent.d.ts +1 -2
- package/dist/resources/validateElicitationContent.d.ts.map +1 -1
- package/dist/utils/createMcpId.d.ts +1 -2
- package/dist/utils/createMcpId.d.ts.map +1 -1
- package/dist/utils/invokeMcpCallback.d.ts +1 -2
- package/dist/utils/invokeMcpCallback.d.ts.map +1 -1
- package/dist/utils/serverId.d.ts +2 -3
- package/dist/utils/serverId.d.ts.map +1 -1
- package/dist/utils/serverUrl.d.ts +3 -4
- package/dist/utils/serverUrl.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/hooks/useMcpOAuthCallback.test.ts +53 -0
- package/src/hooks/useMcpOAuthCallback.tsx +12 -0
- package/src/index.ts +2 -1
- package/src/primitives/addForm/McpAddFormAccessibility.test.tsx +49 -0
- package/src/primitives/addForm/McpAddFormAuthFields.tsx +7 -15
- package/src/primitives/addForm/McpAddFormBearerTokenField.tsx +46 -0
- package/src/primitives/addForm/McpAddFormRoot.test.tsx +65 -0
- package/src/primitives/addForm/McpAddFormScopesField.tsx +34 -0
- package/src/primitives/addForm.ts +2 -0
- package/src/primitives/elicitation/prepareElicitationContent.ts +8 -6
- package/src/resources/McpManagerResource.test.ts +85 -0
- package/src/resources/McpManagerResource.ts +56 -23
- package/src/resources/McpServerResource.test.ts +9 -6
- package/src/resources/McpServerResource.ts +6 -5
|
@@ -45,8 +45,19 @@ const holdCustomServerPersistence = (persistenceQueues, scopeKey) => {
|
|
|
45
45
|
enqueueCustomServerTask(persistenceQueues, scopeKey, () => gate);
|
|
46
46
|
return release;
|
|
47
47
|
};
|
|
48
|
+
const deduplicateCustomServers = (records) => {
|
|
49
|
+
const seen = /* @__PURE__ */ new Set();
|
|
50
|
+
return records.filter((record) => {
|
|
51
|
+
if (seen.has(record.id)) {
|
|
52
|
+
console.error(`[assistant-ui/react-mcp] ignored duplicate custom server id "${record.id}" loaded from storage`);
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
seen.add(record.id);
|
|
56
|
+
return true;
|
|
57
|
+
});
|
|
58
|
+
};
|
|
48
59
|
const useMcpCustomServersResource = (t0) => {
|
|
49
|
-
const $ = c(
|
|
60
|
+
const $ = c(22);
|
|
50
61
|
const { storage, scopeKey, persistenceQueues } = t0;
|
|
51
62
|
let t1;
|
|
52
63
|
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
@@ -63,9 +74,10 @@ const useMcpCustomServersResource = (t0) => {
|
|
|
63
74
|
const customServersRef = useRef(t2);
|
|
64
75
|
const hydrationStateRef = useRef("pending");
|
|
65
76
|
const hasPendingMutationRef = useRef(false);
|
|
77
|
+
const [removedBeforeHydration] = useState(_temp);
|
|
66
78
|
const reportedBlockedPersistenceRef = useRef(false);
|
|
67
79
|
let t3;
|
|
68
|
-
if ($[2] !== persistenceQueues || $[3] !==
|
|
80
|
+
if ($[2] !== persistenceQueues || $[3] !== removedBeforeHydration || $[4] !== scopeKey || $[5] !== storage) {
|
|
69
81
|
t3 = async (signal) => {
|
|
70
82
|
while (true) {
|
|
71
83
|
const pendingPersistence = persistenceQueues.get(scopeKey);
|
|
@@ -76,7 +88,8 @@ const useMcpCustomServersResource = (t0) => {
|
|
|
76
88
|
}
|
|
77
89
|
let records;
|
|
78
90
|
try {
|
|
79
|
-
|
|
91
|
+
const loadedRecords = await storage.loadCustomServers();
|
|
92
|
+
records = deduplicateCustomServers(loadedRecords);
|
|
80
93
|
} catch (t4) {
|
|
81
94
|
const error = t4;
|
|
82
95
|
if (!signal.cancelled) {
|
|
@@ -91,11 +104,12 @@ const useMcpCustomServersResource = (t0) => {
|
|
|
91
104
|
return;
|
|
92
105
|
}
|
|
93
106
|
const hadPendingMutation = hasPendingMutationRef.current;
|
|
107
|
+
const hydratedRecords = records.filter((record) => !removedBeforeHydration.has(record.id));
|
|
94
108
|
const mergedRecords = (() => {
|
|
95
109
|
const prev = customServersRef.current;
|
|
96
|
-
if (prev.length === 0) return
|
|
97
|
-
const persistedIds = new Set(
|
|
98
|
-
return [...
|
|
110
|
+
if (prev.length === 0) return hydratedRecords;
|
|
111
|
+
const persistedIds = new Set(hydratedRecords.map(_temp2));
|
|
112
|
+
return [...hydratedRecords, ...prev.filter((r_0) => !persistedIds.has(r_0.id))];
|
|
99
113
|
})();
|
|
100
114
|
customServersRef.current = mergedRecords;
|
|
101
115
|
hydrationStateRef.current = "succeeded";
|
|
@@ -106,13 +120,14 @@ const useMcpCustomServersResource = (t0) => {
|
|
|
106
120
|
setIsHydrated(true);
|
|
107
121
|
};
|
|
108
122
|
$[2] = persistenceQueues;
|
|
109
|
-
$[3] =
|
|
110
|
-
$[4] =
|
|
111
|
-
$[5] =
|
|
112
|
-
|
|
123
|
+
$[3] = removedBeforeHydration;
|
|
124
|
+
$[4] = scopeKey;
|
|
125
|
+
$[5] = storage;
|
|
126
|
+
$[6] = t3;
|
|
127
|
+
} else t3 = $[6];
|
|
113
128
|
const hydrate = useEffectEvent(t3);
|
|
114
129
|
let t4;
|
|
115
|
-
if ($[
|
|
130
|
+
if ($[7] !== hydrate) {
|
|
116
131
|
t4 = () => {
|
|
117
132
|
const signal_0 = { cancelled: false };
|
|
118
133
|
hydrate(signal_0);
|
|
@@ -120,17 +135,17 @@ const useMcpCustomServersResource = (t0) => {
|
|
|
120
135
|
signal_0.cancelled = true;
|
|
121
136
|
};
|
|
122
137
|
};
|
|
123
|
-
$[
|
|
124
|
-
$[
|
|
125
|
-
} else t4 = $[
|
|
138
|
+
$[7] = hydrate;
|
|
139
|
+
$[8] = t4;
|
|
140
|
+
} else t4 = $[8];
|
|
126
141
|
let t5;
|
|
127
|
-
if ($[
|
|
142
|
+
if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
|
|
128
143
|
t5 = [];
|
|
129
|
-
$[
|
|
130
|
-
} else t5 = $[
|
|
144
|
+
$[9] = t5;
|
|
145
|
+
} else t5 = $[9];
|
|
131
146
|
useEffect(t4, t5);
|
|
132
147
|
let t6;
|
|
133
|
-
if ($[
|
|
148
|
+
if ($[10] !== persistenceQueues || $[11] !== scopeKey || $[12] !== storage) {
|
|
134
149
|
t6 = (updater) => {
|
|
135
150
|
const next = updater(customServersRef.current);
|
|
136
151
|
customServersRef.current = next;
|
|
@@ -145,25 +160,38 @@ const useMcpCustomServersResource = (t0) => {
|
|
|
145
160
|
reportedBlockedPersistenceRef.current = true;
|
|
146
161
|
}
|
|
147
162
|
};
|
|
148
|
-
$[
|
|
149
|
-
$[
|
|
150
|
-
$[
|
|
151
|
-
$[
|
|
152
|
-
} else t6 = $[
|
|
163
|
+
$[10] = persistenceQueues;
|
|
164
|
+
$[11] = scopeKey;
|
|
165
|
+
$[12] = storage;
|
|
166
|
+
$[13] = t6;
|
|
167
|
+
} else t6 = $[13];
|
|
153
168
|
const updateCustomServers = t6;
|
|
154
169
|
let t7;
|
|
155
|
-
if ($[
|
|
156
|
-
t7 = {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
updateCustomServers
|
|
170
|
+
if ($[14] !== removedBeforeHydration || $[15] !== updateCustomServers) {
|
|
171
|
+
t7 = (id) => {
|
|
172
|
+
if (hydrationStateRef.current === "pending") removedBeforeHydration.add(id);
|
|
173
|
+
updateCustomServers((prev_0) => prev_0.filter((record_0) => record_0.id !== id));
|
|
160
174
|
};
|
|
161
|
-
$[
|
|
162
|
-
$[14] = isHydrated;
|
|
175
|
+
$[14] = removedBeforeHydration;
|
|
163
176
|
$[15] = updateCustomServers;
|
|
164
177
|
$[16] = t7;
|
|
165
178
|
} else t7 = $[16];
|
|
166
|
-
|
|
179
|
+
const removeCustomServer = t7;
|
|
180
|
+
let t8;
|
|
181
|
+
if ($[17] !== customServers || $[18] !== isHydrated || $[19] !== removeCustomServer || $[20] !== updateCustomServers) {
|
|
182
|
+
t8 = {
|
|
183
|
+
customServers,
|
|
184
|
+
isHydrated,
|
|
185
|
+
updateCustomServers,
|
|
186
|
+
removeCustomServer
|
|
187
|
+
};
|
|
188
|
+
$[17] = customServers;
|
|
189
|
+
$[18] = isHydrated;
|
|
190
|
+
$[19] = removeCustomServer;
|
|
191
|
+
$[20] = updateCustomServers;
|
|
192
|
+
$[21] = t8;
|
|
193
|
+
} else t8 = $[21];
|
|
194
|
+
return t8;
|
|
167
195
|
};
|
|
168
196
|
const McpCustomServersResource = resource(useMcpCustomServersResource);
|
|
169
197
|
const useMcpManagerResource = (props) => {
|
|
@@ -185,7 +213,7 @@ const useMcpManagerResource = (props) => {
|
|
|
185
213
|
$[3] = t1;
|
|
186
214
|
} else t1 = $[3];
|
|
187
215
|
const storage = useResource(t1);
|
|
188
|
-
const [persistenceQueues] = useState(
|
|
216
|
+
const [persistenceQueues] = useState(_temp3);
|
|
189
217
|
const storageScopeKey = storage.scopeId === void 0 ? "unscoped" : `scoped:${storage.scopeId}`;
|
|
190
218
|
let t2;
|
|
191
219
|
if ($[4] !== persistenceQueues || $[5] !== storage || $[6] !== storageScopeKey) {
|
|
@@ -199,10 +227,10 @@ const useMcpManagerResource = (props) => {
|
|
|
199
227
|
$[6] = storageScopeKey;
|
|
200
228
|
$[7] = t2;
|
|
201
229
|
} else t2 = $[7];
|
|
202
|
-
const { customServers, isHydrated, updateCustomServers } = useResource(t2);
|
|
203
|
-
assertUniqueServerIds([...connectors.map(
|
|
230
|
+
const { customServers, isHydrated, updateCustomServers, removeCustomServer } = useResource(t2);
|
|
231
|
+
assertUniqueServerIds([...connectors.map(_temp4), ...customServers.map(_temp5)]);
|
|
204
232
|
let t3;
|
|
205
|
-
if ($[8] !== autoConnect || $[9] !== connectionTimeout || $[10] !== connectors || $[11] !== customServers || $[12] !== persistenceQueues || $[13] !== redirectUri || $[14] !==
|
|
233
|
+
if ($[8] !== autoConnect || $[9] !== connectionTimeout || $[10] !== connectors || $[11] !== customServers || $[12] !== persistenceQueues || $[13] !== redirectUri || $[14] !== removeCustomServer || $[15] !== storage || $[16] !== storageScopeKey) {
|
|
206
234
|
let t4;
|
|
207
235
|
if ($[18] !== autoConnect || $[19] !== connectionTimeout || $[20] !== redirectUri || $[21] !== storage) {
|
|
208
236
|
t4 = (c_0) => withKey(c_0.id, McpServerResource({
|
|
@@ -218,7 +246,7 @@ const useMcpManagerResource = (props) => {
|
|
|
218
246
|
connectionTimeout: c_0.connectionTimeout ?? connectionTimeout,
|
|
219
247
|
...c_0.cache !== void 0 ? { cache: c_0.cache } : {},
|
|
220
248
|
...c_0.elicitation !== void 0 ? { elicitation: c_0.elicitation } : {},
|
|
221
|
-
onRemove:
|
|
249
|
+
onRemove: _temp6
|
|
222
250
|
}));
|
|
223
251
|
$[18] = autoConnect;
|
|
224
252
|
$[19] = connectionTimeout;
|
|
@@ -228,7 +256,7 @@ const useMcpManagerResource = (props) => {
|
|
|
228
256
|
} else t4 = $[22];
|
|
229
257
|
const connectorElements = connectors.map(t4);
|
|
230
258
|
let t5;
|
|
231
|
-
if ($[23] !== autoConnect || $[24] !== connectionTimeout || $[25] !== persistenceQueues || $[26] !== redirectUri || $[27] !==
|
|
259
|
+
if ($[23] !== autoConnect || $[24] !== connectionTimeout || $[25] !== persistenceQueues || $[26] !== redirectUri || $[27] !== removeCustomServer || $[28] !== storage || $[29] !== storageScopeKey) {
|
|
232
260
|
t5 = (s_0) => withKey(s_0.id, McpServerResource(withMcpServerRemovalFence({
|
|
233
261
|
id: s_0.id,
|
|
234
262
|
kind: "custom",
|
|
@@ -242,16 +270,16 @@ const useMcpManagerResource = (props) => {
|
|
|
242
270
|
...s_0.cache !== void 0 ? { cache: s_0.cache } : {},
|
|
243
271
|
...s_0.elicitation !== void 0 ? { elicitation: s_0.elicitation } : {},
|
|
244
272
|
onRemove: async () => {
|
|
245
|
-
|
|
273
|
+
removeCustomServer(s_0.id);
|
|
246
274
|
}
|
|
247
275
|
}, () => holdCustomServerPersistence(persistenceQueues, storageScopeKey))));
|
|
248
276
|
$[23] = autoConnect;
|
|
249
277
|
$[24] = connectionTimeout;
|
|
250
278
|
$[25] = persistenceQueues;
|
|
251
279
|
$[26] = redirectUri;
|
|
252
|
-
$[27] =
|
|
253
|
-
$[28] =
|
|
254
|
-
$[29] =
|
|
280
|
+
$[27] = removeCustomServer;
|
|
281
|
+
$[28] = storage;
|
|
282
|
+
$[29] = storageScopeKey;
|
|
255
283
|
$[30] = t5;
|
|
256
284
|
} else t5 = $[30];
|
|
257
285
|
const customElements = customServers.map(t5);
|
|
@@ -262,22 +290,22 @@ const useMcpManagerResource = (props) => {
|
|
|
262
290
|
$[11] = customServers;
|
|
263
291
|
$[12] = persistenceQueues;
|
|
264
292
|
$[13] = redirectUri;
|
|
265
|
-
$[14] =
|
|
266
|
-
$[15] =
|
|
267
|
-
$[16] =
|
|
293
|
+
$[14] = removeCustomServer;
|
|
294
|
+
$[15] = storage;
|
|
295
|
+
$[16] = storageScopeKey;
|
|
268
296
|
$[17] = t3;
|
|
269
297
|
} else t3 = $[17];
|
|
270
298
|
const lookup = useClientLookup(t3);
|
|
271
299
|
const all = lookup.state;
|
|
272
300
|
let t4;
|
|
273
301
|
if ($[31] !== all) {
|
|
274
|
-
t4 = all.filter(
|
|
302
|
+
t4 = all.filter(_temp7);
|
|
275
303
|
$[31] = all;
|
|
276
304
|
$[32] = t4;
|
|
277
305
|
} else t4 = $[32];
|
|
278
306
|
let t5;
|
|
279
307
|
if ($[33] !== all) {
|
|
280
|
-
t5 = all.filter(
|
|
308
|
+
t5 = all.filter(_temp8);
|
|
281
309
|
$[33] = all;
|
|
282
310
|
$[34] = t5;
|
|
283
311
|
} else t5 = $[34];
|
|
@@ -386,7 +414,7 @@ const useMcpManagerResource = (props) => {
|
|
|
386
414
|
if ($[59] !== updateCustomServers) {
|
|
387
415
|
t14 = async (t15) => {
|
|
388
416
|
const { name, url, auth, connectionTimeout: connectionTimeout_0, cache, elicitation } = t15;
|
|
389
|
-
const
|
|
417
|
+
const record = {
|
|
390
418
|
id: createMcpId(),
|
|
391
419
|
name,
|
|
392
420
|
url,
|
|
@@ -396,14 +424,14 @@ const useMcpManagerResource = (props) => {
|
|
|
396
424
|
...elicitation !== void 0 ? { elicitation } : {},
|
|
397
425
|
createdAt: Date.now()
|
|
398
426
|
};
|
|
399
|
-
updateCustomServers((
|
|
400
|
-
return
|
|
427
|
+
updateCustomServers((prev) => [...prev, record]);
|
|
428
|
+
return record.id;
|
|
401
429
|
};
|
|
402
430
|
$[59] = updateCustomServers;
|
|
403
431
|
$[60] = t14;
|
|
404
432
|
} else t14 = $[60];
|
|
405
433
|
let t15;
|
|
406
|
-
if ($[61] !== lookup || $[62] !== persistenceQueues || $[63] !==
|
|
434
|
+
if ($[61] !== lookup || $[62] !== persistenceQueues || $[63] !== removeCustomServer || $[64] !== state || $[65] !== storage || $[66] !== storageScopeKey) {
|
|
407
435
|
t15 = async (id) => {
|
|
408
436
|
if (state.connectors.some((c_1) => c_1.id === id)) throw new Error(`Cannot remove connector "${id}" — connectors are app-defined and not removable. Use a custom server id instead.`);
|
|
409
437
|
try {
|
|
@@ -412,7 +440,7 @@ const useMcpManagerResource = (props) => {
|
|
|
412
440
|
const releasePersistence = holdCustomServerPersistence(persistenceQueues, storageScopeKey);
|
|
413
441
|
try {
|
|
414
442
|
await clearOAuthProviderAuthState(storage, id);
|
|
415
|
-
|
|
443
|
+
removeCustomServer(id);
|
|
416
444
|
} catch (t16) {
|
|
417
445
|
const error = t16;
|
|
418
446
|
releasePersistence();
|
|
@@ -423,10 +451,10 @@ const useMcpManagerResource = (props) => {
|
|
|
423
451
|
};
|
|
424
452
|
$[61] = lookup;
|
|
425
453
|
$[62] = persistenceQueues;
|
|
426
|
-
$[63] =
|
|
427
|
-
$[64] =
|
|
428
|
-
$[65] =
|
|
429
|
-
$[66] =
|
|
454
|
+
$[63] = removeCustomServer;
|
|
455
|
+
$[64] = state;
|
|
456
|
+
$[65] = storage;
|
|
457
|
+
$[66] = storageScopeKey;
|
|
430
458
|
$[67] = t15;
|
|
431
459
|
} else t15 = $[67];
|
|
432
460
|
let t16;
|
|
@@ -453,23 +481,26 @@ const McpManagerResource = resource(useMcpManagerResource);
|
|
|
453
481
|
attachTransformScopes(useMcpManagerResource, (scopes, parent) => {
|
|
454
482
|
if (!scopes.modelContext && parent.modelContext.source === null) scopes.modelContext = ModelContext();
|
|
455
483
|
});
|
|
456
|
-
function _temp(
|
|
484
|
+
function _temp() {
|
|
485
|
+
return /* @__PURE__ */ new Set();
|
|
486
|
+
}
|
|
487
|
+
function _temp2(r) {
|
|
457
488
|
return r.id;
|
|
458
489
|
}
|
|
459
|
-
function
|
|
490
|
+
function _temp3() {
|
|
460
491
|
return /* @__PURE__ */ new Map();
|
|
461
492
|
}
|
|
462
|
-
function
|
|
493
|
+
function _temp4(c) {
|
|
463
494
|
return c.id;
|
|
464
495
|
}
|
|
465
|
-
function
|
|
496
|
+
function _temp5(s) {
|
|
466
497
|
return s.id;
|
|
467
498
|
}
|
|
468
|
-
async function
|
|
469
|
-
function
|
|
499
|
+
async function _temp6() {}
|
|
500
|
+
function _temp7(s_1) {
|
|
470
501
|
return s_1.kind === "connector";
|
|
471
502
|
}
|
|
472
|
-
function
|
|
503
|
+
function _temp8(s_2) {
|
|
473
504
|
return s_2.kind === "custom";
|
|
474
505
|
}
|
|
475
506
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpManagerResource.js","names":["useState","useEffect","useMemo","useEffectEvent","useRef","useCallback","useResource","resource","withKey","useClientLookup","useAssistantClientRef","attachTransformScopes","ClientOutput","useAssistantScopeEffect","ModelContext","createMcpId","clearOAuthProviderAuthState","Tool","McpServerResource","withMcpServerRemovalFence","McpLocalStorage","MCPStorage","MCPStorageElement","assertUniqueServerIds","MCPAuthConfig","MCPConnector","MCPCustomServerRecord","MCPManagerState","McpManagerResourceProps","connectors","storage","oauthRedirectUri","autoConnect","connectionTimeout","defaultRedirectUri","window","location","origin","NO_CONNECTORS","reportCustomStorageFailure","operation","error","console","reportBlockedCustomServerPersistence","persistCustomServers","records","saveCustomServers","CustomServerPersistenceQueues","Map","Promise","enqueueCustomServerTask","persistenceQueues","scopeKey","task","previous","get","next","resolve","then","set","delete","enqueueCustomServerPersistence","holdCustomServerPersistence","release","gate","McpCustomServersResourceProps","useMcpCustomServersResource","t0","$","_c","t1","Symbol","for","customServers","setCustomServers","isHydrated","setIsHydrated","t2","customServersRef","hydrationStateRef","hasPendingMutationRef","reportedBlockedPersistenceRef","t3","signal","pendingPersistence","cancelled","loadCustomServers","t4","current","hadPendingMutation","mergedRecords","prev","length","persistedIds","Set","map","_temp","filter","r_0","has","r","id","hydrate","signal_0","t5","t6","updater","updateCustomServers","t7","McpCustomServersResource","useMcpManagerResource","props","redirectUri","storageElement","_temp2","storageScopeKey","scopeId","undefined","_temp3","_temp4","c_0","c","kind","name","url","icon","auth","cache","elicitation","onRemove","_temp5","connectorElements","s_0","s","record","customElements","serverElements","lookup","all","state","_temp6","_temp7","servers","out","server","connectionState","tool","tools","fullName","type","description","parameters","inputSchema","execute","args","key","callTool","toolkit","clientRef","client","modelContext","register","getModelContext","t8","t9","index","list","entry","Error","serverByKind","t10","t11","query","t12","t13","t14","index_0","t15","index_1","connectionTimeout_0","record_0","createdAt","Date","now","prev_0","some","c_1","remove","releasePersistence","prev_1","record_1","t16","getState","connector","customServer","addCustomServer","removeServer","McpManagerResource","scopes","parent","source","s_1","s_2"],"sources":["../../src/resources/McpManagerResource.ts"],"sourcesContent":["import {\n useState,\n useEffect,\n useMemo,\n useEffectEvent,\n useRef,\n useCallback,\n} from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport {\n useClientLookup,\n useAssistantClientRef,\n attachTransformScopes,\n type ClientOutput,\n} from \"@assistant-ui/store\";\nimport { useAssistantScopeEffect } from \"@assistant-ui/store/client\";\nimport { ModelContext } from \"@assistant-ui/core/store\";\nimport { createMcpId } from \"../utils/createMcpId\";\nimport { clearOAuthProviderAuthState } from \"../auth/createOAuthProvider\";\nimport type { Tool } from \"assistant-stream\";\nimport { McpServerResource } from \"./McpServerResource\";\nimport { withMcpServerRemovalFence } from \"./McpServerRemovalFence\";\nimport { McpLocalStorage } from \"./storage/McpLocalStorage\";\nimport type { MCPStorage, MCPStorageElement } from \"./storage/types\";\nimport { assertUniqueServerIds } from \"../utils/serverId\";\nimport type {\n MCPAuthConfig,\n MCPConnector,\n MCPCustomServerRecord,\n MCPManagerState,\n} from \"../mcp-scope\";\n\nexport type McpManagerResourceProps = {\n connectors?: MCPConnector[] | undefined;\n storage?: MCPStorageElement | undefined;\n /** OAuth redirect target. Defaults to `${origin}/mcp/callback`. */\n oauthRedirectUri?: string | undefined;\n /** Connect on mount when usable auth exists. Default true. */\n autoConnect?: boolean | undefined;\n /** Optional timeout in milliseconds for connect/listTools calls. Disabled by default. */\n connectionTimeout?: number | undefined;\n};\n\nfunction defaultRedirectUri(): string {\n if (typeof window === \"undefined\") return \"\";\n return `${window.location.origin}/mcp/callback`;\n}\n\n// Stable empty fallback so an absent `connectors` prop doesn't produce a fresh\n// array each render (which would invalidate the serverElements memo below).\nconst NO_CONNECTORS: MCPConnector[] = [];\n\nconst reportCustomStorageFailure = (\n operation: \"load\" | \"save\",\n error: unknown,\n) => {\n console.error(\n `[assistant-ui/react-mcp] failed to ${operation} custom servers:`,\n error,\n );\n};\n\nconst reportBlockedCustomServerPersistence = () => {\n console.error(\n \"[assistant-ui/react-mcp] custom server changes remain in memory because loading the persisted list failed; remount the manager to retry\",\n );\n};\n\nconst persistCustomServers = async (\n storage: MCPStorage,\n records: MCPCustomServerRecord[],\n) => {\n try {\n await storage.saveCustomServers(records);\n } catch (error) {\n reportCustomStorageFailure(\"save\", error);\n }\n};\n\ntype CustomServerPersistenceQueues = Map<string, Promise<void>>;\n\nconst enqueueCustomServerTask = (\n persistenceQueues: CustomServerPersistenceQueues,\n scopeKey: string,\n task: () => Promise<void>,\n) => {\n const previous = persistenceQueues.get(scopeKey);\n const next = (previous ?? Promise.resolve()).then(task);\n persistenceQueues.set(scopeKey, next);\n void next.then(() => {\n if (persistenceQueues.get(scopeKey) === next) {\n persistenceQueues.delete(scopeKey);\n }\n });\n};\n\nconst enqueueCustomServerPersistence = (\n persistenceQueues: CustomServerPersistenceQueues,\n scopeKey: string,\n storage: MCPStorage,\n records: MCPCustomServerRecord[],\n) =>\n enqueueCustomServerTask(persistenceQueues, scopeKey, () =>\n persistCustomServers(storage, records),\n );\n\nconst holdCustomServerPersistence = (\n persistenceQueues: CustomServerPersistenceQueues,\n scopeKey: string,\n) => {\n let release = () => {};\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n enqueueCustomServerTask(persistenceQueues, scopeKey, () => gate);\n return release;\n};\n\ntype McpCustomServersResourceProps = {\n storage: MCPStorage;\n scopeKey: string;\n persistenceQueues: CustomServerPersistenceQueues;\n};\n\nconst useMcpCustomServersResource = ({\n storage,\n scopeKey,\n persistenceQueues,\n}: McpCustomServersResourceProps) => {\n const [customServers, setCustomServers] = useState<MCPCustomServerRecord[]>(\n [],\n );\n const [isHydrated, setIsHydrated] = useState(false);\n\n const customServersRef = useRef<MCPCustomServerRecord[]>([]);\n const hydrationStateRef = useRef<\"pending\" | \"succeeded\" | \"failed\">(\n \"pending\",\n );\n const hasPendingMutationRef = useRef(false);\n const reportedBlockedPersistenceRef = useRef(false);\n\n const hydrate = useEffectEvent(async (signal: { cancelled: boolean }) => {\n // A revisited scope must not read behind writes still queued against it.\n while (true) {\n const pendingPersistence = persistenceQueues.get(scopeKey);\n if (!pendingPersistence) break;\n await pendingPersistence;\n if (signal.cancelled) return;\n if (persistenceQueues.get(scopeKey) === pendingPersistence) break;\n }\n\n let records: Awaited<ReturnType<typeof storage.loadCustomServers>>;\n try {\n records = await storage.loadCustomServers();\n } catch (error) {\n if (!signal.cancelled) {\n reportCustomStorageFailure(\"load\", error);\n hydrationStateRef.current = \"failed\";\n if (hasPendingMutationRef.current) {\n reportBlockedCustomServerPersistence();\n reportedBlockedPersistenceRef.current = true;\n }\n setIsHydrated(true);\n }\n return;\n }\n\n // Merge rather than replace so any addCustomServer calls that\n // happened before hydration resolved aren't silently overwritten.\n // Persisted order wins; pre-hydration locals append.\n const hadPendingMutation = hasPendingMutationRef.current;\n const mergedRecords = (() => {\n const prev = customServersRef.current;\n if (prev.length === 0) return records;\n const persistedIds = new Set(records.map((r) => r.id));\n return [...records, ...prev.filter((r) => !persistedIds.has(r.id))];\n })();\n customServersRef.current = mergedRecords;\n hydrationStateRef.current = \"succeeded\";\n hasPendingMutationRef.current = false;\n if (hadPendingMutation) {\n enqueueCustomServerPersistence(\n persistenceQueues,\n scopeKey,\n storage,\n mergedRecords,\n );\n }\n if (signal.cancelled) return;\n setCustomServers(mergedRecords);\n setIsHydrated(true);\n });\n\n useEffect(() => {\n const signal = { cancelled: false };\n // Hydration reads persisted records asynchronously; there is no earlier\n // point than mount at which to start it.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n void hydrate(signal);\n return () => {\n signal.cancelled = true;\n };\n }, []);\n\n const updateCustomServers = useCallback(\n (\n updater: (records: MCPCustomServerRecord[]) => MCPCustomServerRecord[],\n ) => {\n const next = updater(customServersRef.current);\n customServersRef.current = next;\n setCustomServers(next);\n\n if (hydrationStateRef.current === \"succeeded\") {\n enqueueCustomServerPersistence(\n persistenceQueues,\n scopeKey,\n storage,\n next,\n );\n return;\n }\n\n hasPendingMutationRef.current = true;\n if (\n hydrationStateRef.current === \"failed\" &&\n !reportedBlockedPersistenceRef.current\n ) {\n reportBlockedCustomServerPersistence();\n reportedBlockedPersistenceRef.current = true;\n }\n },\n [persistenceQueues, scopeKey, storage],\n );\n\n return { customServers, isHydrated, updateCustomServers };\n};\n\nconst McpCustomServersResource = resource(useMcpCustomServersResource);\n\nconst useMcpManagerResource = (\n props: McpManagerResourceProps,\n): ClientOutput<\"mcp\"> => {\n const connectors = props.connectors ?? NO_CONNECTORS;\n const autoConnect = props.autoConnect ?? true;\n const redirectUri = props.oauthRedirectUri ?? defaultRedirectUri();\n const connectionTimeout = props.connectionTimeout;\n\n const storageElement = props.storage ?? McpLocalStorage();\n const storage = useResource(storageElement);\n const [persistenceQueues] = useState<CustomServerPersistenceQueues>(\n () => new Map(),\n );\n const storageScopeKey =\n storage.scopeId === undefined ? \"unscoped\" : `scoped:${storage.scopeId}`;\n const { customServers, isHydrated, updateCustomServers } = useResource(\n withKey(\n storageScopeKey,\n McpCustomServersResource({\n storage,\n scopeKey: storageScopeKey,\n persistenceQueues,\n }),\n ),\n );\n\n const serverElements = useMemo(() => {\n assertUniqueServerIds([\n ...connectors.map((c) => c.id),\n ...customServers.map((s) => s.id),\n ]);\n\n const connectorElements = connectors.map((c) =>\n withKey(\n c.id,\n McpServerResource({\n id: c.id,\n kind: \"connector\",\n name: c.name,\n url: c.url,\n icon: c.icon,\n auth: c.auth,\n storage,\n redirectUri,\n autoConnect,\n connectionTimeout: c.connectionTimeout ?? connectionTimeout,\n ...(c.cache !== undefined ? { cache: c.cache } : {}),\n ...(c.elicitation !== undefined\n ? { elicitation: c.elicitation }\n : {}),\n onRemove: async () => {\n // connectors cannot be removed\n },\n }),\n ),\n );\n const customElements = customServers.map((s) =>\n withKey(\n s.id,\n McpServerResource(\n withMcpServerRemovalFence(\n {\n id: s.id,\n kind: \"custom\",\n name: s.name,\n url: s.url,\n auth: s.auth,\n storage,\n redirectUri,\n autoConnect,\n connectionTimeout: s.connectionTimeout ?? connectionTimeout,\n ...(s.cache !== undefined ? { cache: s.cache } : {}),\n ...(s.elicitation !== undefined\n ? { elicitation: s.elicitation }\n : {}),\n onRemove: async () => {\n updateCustomServers((prev) =>\n prev.filter((record) => record.id !== s.id),\n );\n },\n },\n () =>\n holdCustomServerPersistence(persistenceQueues, storageScopeKey),\n ),\n ),\n ),\n );\n return [...connectorElements, ...customElements];\n }, [\n connectors,\n customServers,\n storage,\n redirectUri,\n autoConnect,\n connectionTimeout,\n updateCustomServers,\n persistenceQueues,\n storageScopeKey,\n ]);\n\n const lookup = useClientLookup(serverElements);\n\n const state = useMemo<MCPManagerState>(() => {\n const all = lookup.state;\n return {\n servers: all,\n connectors: all.filter((s) => s.kind === \"connector\"),\n customServers: all.filter((s) => s.kind === \"custom\"),\n isHydrated,\n };\n }, [lookup.state, isHydrated]);\n\n // ─── Auto-register MCP tools as frontend tools in modelContext ─────\n // Build the toolkit from connected servers; re-register when the visible\n // tool surface changes. Tool names are prefixed with the server id to\n // avoid collisions across connected servers — connector ids must not\n // contain `__` (enforced by `defineConnector`); `addCustomServer`\n // generates UUIDs that satisfy the constraint by construction.\n const toolkit = useMemo<Record<string, Tool<any, any>>>(() => {\n const out: Record<string, Tool<any, any>> = {};\n for (const server of state.servers) {\n if (server.connectionState !== \"connected\") continue;\n for (const tool of server.tools) {\n const fullName = `${server.id}__${tool.name}`;\n out[fullName] = {\n type: \"frontend\",\n ...(tool.description !== undefined\n ? { description: tool.description }\n : {}),\n parameters: tool.inputSchema as never,\n execute: (args) =>\n lookup.get({ key: server.id }).callTool(tool.name, args as unknown),\n };\n }\n }\n return out;\n }, [state, lookup]);\n\n const clientRef = useAssistantClientRef();\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => {\n const client = clientRef.current;\n if (!client) return;\n return client.modelContext.register({\n getModelContext: () => ({ tools: toolkit }),\n });\n },\n [toolkit],\n );\n\n const serverByKind = (kind: \"connector\" | \"custom\", index: number) => {\n const list = kind === \"connector\" ? state.connectors : state.customServers;\n const entry = list[index];\n if (!entry) {\n throw new Error(\n `McpManagerResource: no ${kind} at index ${index} (length ${list.length})`,\n );\n }\n return lookup.get({ key: entry.id });\n };\n\n return {\n getState: () => state,\n server: (query) => {\n if (\"id\" in query) return lookup.get({ key: query.id });\n return serverByKind(query.kind, query.index);\n },\n connector: ({ index }) => serverByKind(\"connector\", index),\n customServer: ({ index }) => serverByKind(\"custom\", index),\n addCustomServer: async ({\n name,\n url,\n auth,\n connectionTimeout,\n cache,\n elicitation,\n }) => {\n const record: MCPCustomServerRecord = {\n id: createMcpId(),\n name,\n url,\n auth: auth as MCPAuthConfig,\n connectionTimeout,\n ...(cache !== undefined ? { cache } : {}),\n ...(elicitation !== undefined ? { elicitation } : {}),\n createdAt: Date.now(),\n };\n updateCustomServers((prev) => [...prev, record]);\n return record.id;\n },\n removeServer: async (id) => {\n // removeServer is custom-server only — connectors are app-defined\n // and not user-removable. Refuse rather than silently no-op.\n if (state.connectors.some((c) => c.id === id)) {\n throw new Error(\n `Cannot remove connector \"${id}\" — connectors are app-defined and not removable. Use a custom server id instead.`,\n );\n }\n // Delegate to McpServerResource.remove() which disconnects,\n // clears auth state, and unregisters from customServers in one\n // place. Fallback to manual cleanup if the lookup is empty\n // (server already gone).\n try {\n await lookup.get({ key: id }).remove();\n } catch {\n const releasePersistence = holdCustomServerPersistence(\n persistenceQueues,\n storageScopeKey,\n );\n try {\n await clearOAuthProviderAuthState(storage, id);\n updateCustomServers((prev) =>\n prev.filter((record) => record.id !== id),\n );\n } catch (error) {\n releasePersistence();\n throw error;\n }\n releasePersistence();\n }\n },\n };\n};\n\nexport const McpManagerResource = resource(useMcpManagerResource);\n\n// Ensure modelContext exists as a sibling when the manager mounts. If an\n// ancestor (e.g. a chat runtime) already provides modelContext, this is a\n// no-op; otherwise it's auto-mounted alongside `mcp`.\nattachTransformScopes(useMcpManagerResource, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"McpManagerResource.js","names":["useState","useEffect","useMemo","useEffectEvent","useRef","useCallback","useResource","resource","withKey","useClientLookup","useAssistantClientRef","attachTransformScopes","ClientOutput","useAssistantScopeEffect","ModelContext","createMcpId","clearOAuthProviderAuthState","Tool","McpServerResource","withMcpServerRemovalFence","McpLocalStorage","MCPStorage","MCPStorageElement","assertUniqueServerIds","MCPAuthConfig","MCPConnector","MCPCustomServerRecord","MCPManagerState","McpManagerResourceProps","connectors","storage","oauthRedirectUri","autoConnect","connectionTimeout","defaultRedirectUri","window","location","origin","NO_CONNECTORS","reportCustomStorageFailure","operation","error","console","reportBlockedCustomServerPersistence","persistCustomServers","records","saveCustomServers","CustomServerPersistenceQueues","Map","Promise","enqueueCustomServerTask","persistenceQueues","scopeKey","task","previous","get","next","resolve","then","set","delete","enqueueCustomServerPersistence","holdCustomServerPersistence","release","gate","deduplicateCustomServers","seen","Set","filter","record","has","id","add","McpCustomServersResourceProps","useMcpCustomServersResource","t0","$","_c","t1","Symbol","for","customServers","setCustomServers","isHydrated","setIsHydrated","t2","customServersRef","hydrationStateRef","hasPendingMutationRef","removedBeforeHydration","_temp","reportedBlockedPersistenceRef","t3","signal","pendingPersistence","cancelled","loadedRecords","loadCustomServers","t4","current","hadPendingMutation","hydratedRecords","mergedRecords","prev","length","persistedIds","map","_temp2","r_0","r","hydrate","signal_0","t5","t6","updater","updateCustomServers","t7","prev_0","record_0","removeCustomServer","t8","McpCustomServersResource","useMcpManagerResource","props","redirectUri","storageElement","_temp3","storageScopeKey","scopeId","undefined","_temp4","_temp5","c_0","c","kind","name","url","icon","auth","cache","elicitation","onRemove","_temp6","connectorElements","s_0","s","customElements","serverElements","lookup","all","state","_temp7","_temp8","servers","out","server","connectionState","tool","tools","fullName","type","description","parameters","inputSchema","execute","args","key","callTool","toolkit","clientRef","client","modelContext","register","getModelContext","t9","index","list","entry","Error","serverByKind","t10","t11","query","t12","t13","t14","index_0","t15","index_1","connectionTimeout_0","createdAt","Date","now","some","c_1","remove","releasePersistence","t16","getState","connector","customServer","addCustomServer","removeServer","McpManagerResource","scopes","parent","source","s_1","s_2"],"sources":["../../src/resources/McpManagerResource.ts"],"sourcesContent":["import {\n useState,\n useEffect,\n useMemo,\n useEffectEvent,\n useRef,\n useCallback,\n} from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport {\n useClientLookup,\n useAssistantClientRef,\n attachTransformScopes,\n type ClientOutput,\n} from \"@assistant-ui/store\";\nimport { useAssistantScopeEffect } from \"@assistant-ui/store/client\";\nimport { ModelContext } from \"@assistant-ui/core/store\";\nimport { createMcpId } from \"../utils/createMcpId\";\nimport { clearOAuthProviderAuthState } from \"../auth/createOAuthProvider\";\nimport type { Tool } from \"assistant-stream\";\nimport { McpServerResource } from \"./McpServerResource\";\nimport { withMcpServerRemovalFence } from \"./McpServerRemovalFence\";\nimport { McpLocalStorage } from \"./storage/McpLocalStorage\";\nimport type { MCPStorage, MCPStorageElement } from \"./storage/types\";\nimport { assertUniqueServerIds } from \"../utils/serverId\";\nimport type {\n MCPAuthConfig,\n MCPConnector,\n MCPCustomServerRecord,\n MCPManagerState,\n} from \"../mcp-scope\";\n\nexport type McpManagerResourceProps = {\n connectors?: MCPConnector[] | undefined;\n storage?: MCPStorageElement | undefined;\n /** OAuth redirect target. Defaults to `${origin}/mcp/callback`. */\n oauthRedirectUri?: string | undefined;\n /** Connect on mount when usable auth exists. Default true. */\n autoConnect?: boolean | undefined;\n /** Optional timeout in milliseconds for connect/listTools calls. Disabled by default. */\n connectionTimeout?: number | undefined;\n};\n\nfunction defaultRedirectUri(): string {\n if (typeof window === \"undefined\") return \"\";\n return `${window.location.origin}/mcp/callback`;\n}\n\n// Stable empty fallback so an absent `connectors` prop doesn't produce a fresh\n// array each render (which would invalidate the serverElements memo below).\nconst NO_CONNECTORS: MCPConnector[] = [];\n\nconst reportCustomStorageFailure = (\n operation: \"load\" | \"save\",\n error: unknown,\n) => {\n console.error(\n `[assistant-ui/react-mcp] failed to ${operation} custom servers:`,\n error,\n );\n};\n\nconst reportBlockedCustomServerPersistence = () => {\n console.error(\n \"[assistant-ui/react-mcp] custom server changes remain in memory because loading the persisted list failed; remount the manager to retry\",\n );\n};\n\nconst persistCustomServers = async (\n storage: MCPStorage,\n records: MCPCustomServerRecord[],\n) => {\n try {\n await storage.saveCustomServers(records);\n } catch (error) {\n reportCustomStorageFailure(\"save\", error);\n }\n};\n\ntype CustomServerPersistenceQueues = Map<string, Promise<void>>;\n\nconst enqueueCustomServerTask = (\n persistenceQueues: CustomServerPersistenceQueues,\n scopeKey: string,\n task: () => Promise<void>,\n) => {\n const previous = persistenceQueues.get(scopeKey);\n const next = (previous ?? Promise.resolve()).then(task);\n persistenceQueues.set(scopeKey, next);\n void next.then(() => {\n if (persistenceQueues.get(scopeKey) === next) {\n persistenceQueues.delete(scopeKey);\n }\n });\n};\n\nconst enqueueCustomServerPersistence = (\n persistenceQueues: CustomServerPersistenceQueues,\n scopeKey: string,\n storage: MCPStorage,\n records: MCPCustomServerRecord[],\n) =>\n enqueueCustomServerTask(persistenceQueues, scopeKey, () =>\n persistCustomServers(storage, records),\n );\n\nconst holdCustomServerPersistence = (\n persistenceQueues: CustomServerPersistenceQueues,\n scopeKey: string,\n) => {\n let release = () => {};\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n enqueueCustomServerTask(persistenceQueues, scopeKey, () => gate);\n return release;\n};\n\nconst deduplicateCustomServers = (records: MCPCustomServerRecord[]) => {\n const seen = new Set<string>();\n return records.filter((record) => {\n if (seen.has(record.id)) {\n console.error(\n `[assistant-ui/react-mcp] ignored duplicate custom server id \"${record.id}\" loaded from storage`,\n );\n return false;\n }\n seen.add(record.id);\n return true;\n });\n};\n\ntype McpCustomServersResourceProps = {\n storage: MCPStorage;\n scopeKey: string;\n persistenceQueues: CustomServerPersistenceQueues;\n};\n\nconst useMcpCustomServersResource = ({\n storage,\n scopeKey,\n persistenceQueues,\n}: McpCustomServersResourceProps) => {\n const [customServers, setCustomServers] = useState<MCPCustomServerRecord[]>(\n [],\n );\n const [isHydrated, setIsHydrated] = useState(false);\n\n const customServersRef = useRef<MCPCustomServerRecord[]>([]);\n const hydrationStateRef = useRef<\"pending\" | \"succeeded\" | \"failed\">(\n \"pending\",\n );\n const hasPendingMutationRef = useRef(false);\n const [removedBeforeHydration] = useState(() => new Set<string>());\n const reportedBlockedPersistenceRef = useRef(false);\n\n const hydrate = useEffectEvent(async (signal: { cancelled: boolean }) => {\n // A revisited scope must not read behind writes still queued against it.\n while (true) {\n const pendingPersistence = persistenceQueues.get(scopeKey);\n if (!pendingPersistence) break;\n await pendingPersistence;\n if (signal.cancelled) return;\n if (persistenceQueues.get(scopeKey) === pendingPersistence) break;\n }\n\n let records: Awaited<ReturnType<typeof storage.loadCustomServers>>;\n try {\n const loadedRecords = await storage.loadCustomServers();\n records = deduplicateCustomServers(loadedRecords);\n } catch (error) {\n if (!signal.cancelled) {\n reportCustomStorageFailure(\"load\", error);\n hydrationStateRef.current = \"failed\";\n if (hasPendingMutationRef.current) {\n reportBlockedCustomServerPersistence();\n reportedBlockedPersistenceRef.current = true;\n }\n setIsHydrated(true);\n }\n return;\n }\n // Merge rather than replace so any addCustomServer calls that\n // happened before hydration resolved aren't silently overwritten.\n // Persisted order wins; pre-hydration locals append.\n const hadPendingMutation = hasPendingMutationRef.current;\n const hydratedRecords = records.filter(\n (record) => !removedBeforeHydration.has(record.id),\n );\n const mergedRecords = (() => {\n const prev = customServersRef.current;\n if (prev.length === 0) return hydratedRecords;\n const persistedIds = new Set(hydratedRecords.map((r) => r.id));\n return [\n ...hydratedRecords,\n ...prev.filter((r) => !persistedIds.has(r.id)),\n ];\n })();\n customServersRef.current = mergedRecords;\n hydrationStateRef.current = \"succeeded\";\n hasPendingMutationRef.current = false;\n if (hadPendingMutation) {\n enqueueCustomServerPersistence(\n persistenceQueues,\n scopeKey,\n storage,\n mergedRecords,\n );\n }\n if (signal.cancelled) return;\n setCustomServers(mergedRecords);\n setIsHydrated(true);\n });\n\n useEffect(() => {\n const signal = { cancelled: false };\n // Hydration reads persisted records asynchronously; there is no earlier\n // point than mount at which to start it.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n void hydrate(signal);\n return () => {\n signal.cancelled = true;\n };\n }, []);\n\n const updateCustomServers = useCallback(\n (\n updater: (records: MCPCustomServerRecord[]) => MCPCustomServerRecord[],\n ) => {\n const next = updater(customServersRef.current);\n customServersRef.current = next;\n setCustomServers(next);\n\n if (hydrationStateRef.current === \"succeeded\") {\n enqueueCustomServerPersistence(\n persistenceQueues,\n scopeKey,\n storage,\n next,\n );\n return;\n }\n\n hasPendingMutationRef.current = true;\n if (\n hydrationStateRef.current === \"failed\" &&\n !reportedBlockedPersistenceRef.current\n ) {\n reportBlockedCustomServerPersistence();\n reportedBlockedPersistenceRef.current = true;\n }\n },\n [persistenceQueues, scopeKey, storage],\n );\n\n const removeCustomServer = useCallback(\n (id: string) => {\n if (hydrationStateRef.current === \"pending\") {\n removedBeforeHydration.add(id);\n }\n updateCustomServers((prev) => prev.filter((record) => record.id !== id));\n },\n [removedBeforeHydration, updateCustomServers],\n );\n\n return {\n customServers,\n isHydrated,\n updateCustomServers,\n removeCustomServer,\n };\n};\n\nconst McpCustomServersResource = resource(useMcpCustomServersResource);\n\nconst useMcpManagerResource = (\n props: McpManagerResourceProps,\n): ClientOutput<\"mcp\"> => {\n const connectors = props.connectors ?? NO_CONNECTORS;\n const autoConnect = props.autoConnect ?? true;\n const redirectUri = props.oauthRedirectUri ?? defaultRedirectUri();\n const connectionTimeout = props.connectionTimeout;\n\n const storageElement = props.storage ?? McpLocalStorage();\n const storage = useResource(storageElement);\n const [persistenceQueues] = useState<CustomServerPersistenceQueues>(\n () => new Map(),\n );\n const storageScopeKey =\n storage.scopeId === undefined ? \"unscoped\" : `scoped:${storage.scopeId}`;\n const { customServers, isHydrated, updateCustomServers, removeCustomServer } =\n useResource(\n withKey(\n storageScopeKey,\n McpCustomServersResource({\n storage,\n scopeKey: storageScopeKey,\n persistenceQueues,\n }),\n ),\n );\n\n const serverElements = useMemo(() => {\n assertUniqueServerIds([\n ...connectors.map((c) => c.id),\n ...customServers.map((s) => s.id),\n ]);\n\n const connectorElements = connectors.map((c) =>\n withKey(\n c.id,\n McpServerResource({\n id: c.id,\n kind: \"connector\",\n name: c.name,\n url: c.url,\n icon: c.icon,\n auth: c.auth,\n storage,\n redirectUri,\n autoConnect,\n connectionTimeout: c.connectionTimeout ?? connectionTimeout,\n ...(c.cache !== undefined ? { cache: c.cache } : {}),\n ...(c.elicitation !== undefined\n ? { elicitation: c.elicitation }\n : {}),\n onRemove: async () => {\n // connectors cannot be removed\n },\n }),\n ),\n );\n const customElements = customServers.map((s) =>\n withKey(\n s.id,\n McpServerResource(\n withMcpServerRemovalFence(\n {\n id: s.id,\n kind: \"custom\",\n name: s.name,\n url: s.url,\n auth: s.auth,\n storage,\n redirectUri,\n autoConnect,\n connectionTimeout: s.connectionTimeout ?? connectionTimeout,\n ...(s.cache !== undefined ? { cache: s.cache } : {}),\n ...(s.elicitation !== undefined\n ? { elicitation: s.elicitation }\n : {}),\n onRemove: async () => {\n removeCustomServer(s.id);\n },\n },\n () =>\n holdCustomServerPersistence(persistenceQueues, storageScopeKey),\n ),\n ),\n ),\n );\n return [...connectorElements, ...customElements];\n }, [\n connectors,\n customServers,\n storage,\n redirectUri,\n autoConnect,\n connectionTimeout,\n removeCustomServer,\n persistenceQueues,\n storageScopeKey,\n ]);\n\n const lookup = useClientLookup(serverElements);\n\n const state = useMemo<MCPManagerState>(() => {\n const all = lookup.state;\n return {\n servers: all,\n connectors: all.filter((s) => s.kind === \"connector\"),\n customServers: all.filter((s) => s.kind === \"custom\"),\n isHydrated,\n };\n }, [lookup.state, isHydrated]);\n\n // ─── Auto-register MCP tools as frontend tools in modelContext ─────\n // Build the toolkit from connected servers; re-register when the visible\n // tool surface changes. Tool names are prefixed with the server id to\n // avoid collisions across connected servers — connector ids must not\n // contain `__` (enforced by `defineConnector`); `addCustomServer`\n // generates UUIDs that satisfy the constraint by construction.\n const toolkit = useMemo<Record<string, Tool<any, any>>>(() => {\n const out: Record<string, Tool<any, any>> = {};\n for (const server of state.servers) {\n if (server.connectionState !== \"connected\") continue;\n for (const tool of server.tools) {\n const fullName = `${server.id}__${tool.name}`;\n out[fullName] = {\n type: \"frontend\",\n ...(tool.description !== undefined\n ? { description: tool.description }\n : {}),\n parameters: tool.inputSchema as never,\n execute: (args) =>\n lookup.get({ key: server.id }).callTool(tool.name, args as unknown),\n };\n }\n }\n return out;\n }, [state, lookup]);\n\n const clientRef = useAssistantClientRef();\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => {\n const client = clientRef.current;\n if (!client) return;\n return client.modelContext.register({\n getModelContext: () => ({ tools: toolkit }),\n });\n },\n [toolkit],\n );\n\n const serverByKind = (kind: \"connector\" | \"custom\", index: number) => {\n const list = kind === \"connector\" ? state.connectors : state.customServers;\n const entry = list[index];\n if (!entry) {\n throw new Error(\n `McpManagerResource: no ${kind} at index ${index} (length ${list.length})`,\n );\n }\n return lookup.get({ key: entry.id });\n };\n\n return {\n getState: () => state,\n server: (query) => {\n if (\"id\" in query) return lookup.get({ key: query.id });\n return serverByKind(query.kind, query.index);\n },\n connector: ({ index }) => serverByKind(\"connector\", index),\n customServer: ({ index }) => serverByKind(\"custom\", index),\n addCustomServer: async ({\n name,\n url,\n auth,\n connectionTimeout,\n cache,\n elicitation,\n }) => {\n const record: MCPCustomServerRecord = {\n id: createMcpId(),\n name,\n url,\n auth: auth as MCPAuthConfig,\n connectionTimeout,\n ...(cache !== undefined ? { cache } : {}),\n ...(elicitation !== undefined ? { elicitation } : {}),\n createdAt: Date.now(),\n };\n updateCustomServers((prev) => [...prev, record]);\n return record.id;\n },\n removeServer: async (id) => {\n // removeServer is custom-server only — connectors are app-defined\n // and not user-removable. Refuse rather than silently no-op.\n if (state.connectors.some((c) => c.id === id)) {\n throw new Error(\n `Cannot remove connector \"${id}\" — connectors are app-defined and not removable. Use a custom server id instead.`,\n );\n }\n // Delegate to McpServerResource.remove() which disconnects,\n // clears auth state, and unregisters from customServers in one\n // place. Fallback to manual cleanup if the lookup is empty\n // (server already gone).\n try {\n await lookup.get({ key: id }).remove();\n } catch {\n const releasePersistence = holdCustomServerPersistence(\n persistenceQueues,\n storageScopeKey,\n );\n try {\n await clearOAuthProviderAuthState(storage, id);\n removeCustomServer(id);\n } catch (error) {\n releasePersistence();\n throw error;\n }\n releasePersistence();\n }\n },\n };\n};\n\nexport const McpManagerResource = resource(useMcpManagerResource);\n\n// Ensure modelContext exists as a sibling when the manager mounts. If an\n// ancestor (e.g. a chat runtime) already provides modelContext, this is a\n// no-op; otherwise it's auto-mounted alongside `mcp`.\nattachTransformScopes(useMcpManagerResource, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { McpServerResourceProps } from "./McpServerResource.js";
|
|
2
2
|
//#region src/resources/McpServerRemovalFence.d.ts
|
|
3
|
-
declare const withMcpServerRemovalFence: (props: McpServerResourceProps, beginRemovalFence: () => () => void) => McpServerResourceProps;
|
|
4
|
-
declare const beginMcpServerRemovalFence: (props: McpServerResourceProps) => (() => void) | undefined;
|
|
3
|
+
export declare const withMcpServerRemovalFence: (props: McpServerResourceProps, beginRemovalFence: () => () => void) => McpServerResourceProps;
|
|
4
|
+
export declare const beginMcpServerRemovalFence: (props: McpServerResourceProps) => (() => void) | undefined;
|
|
5
5
|
//#endregion
|
|
6
|
-
export { beginMcpServerRemovalFence, withMcpServerRemovalFence };
|
|
7
6
|
//# sourceMappingURL=McpServerRemovalFence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpServerRemovalFence.d.ts","names":[],"sources":["../../src/resources/McpServerRemovalFence.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"McpServerRemovalFence.d.ts","names":[],"sources":["../../src/resources/McpServerRemovalFence.ts"],"mappings":";;qBAQa,4BACX,OAAO,wBACP,wCACC;qBAMU,6BACX,OAAO"}
|
|
@@ -2,7 +2,7 @@ import { MCPAuthConfig, MCPServerKind } from "../mcp-scope.js";
|
|
|
2
2
|
import { MCPStorage } from "./storage/types.js";
|
|
3
3
|
import { ClientOutput } from "@assistant-ui/store";
|
|
4
4
|
//#region src/resources/McpServerResource.d.ts
|
|
5
|
-
type McpServerResourceProps = {
|
|
5
|
+
export type McpServerResourceProps = {
|
|
6
6
|
id: string;
|
|
7
7
|
kind: MCPServerKind;
|
|
8
8
|
name: string;
|
|
@@ -19,8 +19,7 @@ type McpServerResourceProps = {
|
|
|
19
19
|
readonly elicitation?: boolean;
|
|
20
20
|
onRemove: () => Promise<void>;
|
|
21
21
|
};
|
|
22
|
-
declare const getConnectionDependencies: (props: McpServerResourceProps) => readonly unknown[];
|
|
23
|
-
declare const McpServerResource: import("@assistant-ui/tap").Resource<ClientOutput<"mcpServer">, [props: McpServerResourceProps]>;
|
|
22
|
+
export declare const getConnectionDependencies: (props: McpServerResourceProps) => readonly unknown[];
|
|
23
|
+
export declare const McpServerResource: import("@assistant-ui/tap").Resource<ClientOutput<"mcpServer">, [props: McpServerResourceProps]>;
|
|
24
24
|
//#endregion
|
|
25
|
-
export { McpServerResource, McpServerResourceProps, getConnectionDependencies };
|
|
26
25
|
//# sourceMappingURL=McpServerResource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpServerResource.d.ts","names":[],"sources":["../../src/resources/McpServerResource.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"McpServerResource.d.ts","names":[],"sources":["../../src/resources/McpServerResource.ts"],"mappings":";;;;YAsCY;EACV;EACA,MAAM;EACN;EACA;EACA;EACA,MAAM;EACN,SAAS;EACT;EACA;EACA;EACA;aAAmB;;WACV;EACT,gBAAgB;;qBAOL,4BACX,OAAO;qBAksBI,+CAAiB,SAAA,4BAAA,OAAA"}
|
|
@@ -202,7 +202,7 @@ const useMcpServerResourceInstance = (props) => {
|
|
|
202
202
|
};
|
|
203
203
|
elicitationResolversRef.current.set(id_2, {
|
|
204
204
|
resolve,
|
|
205
|
-
signal: context.signal,
|
|
205
|
+
signal: context.mcpReq.signal,
|
|
206
206
|
onAbort,
|
|
207
207
|
requestedSchema
|
|
208
208
|
});
|
|
@@ -214,8 +214,8 @@ const useMcpServerResourceInstance = (props) => {
|
|
|
214
214
|
}]);
|
|
215
215
|
const entry_0 = elicitationResolversRef.current.get(id_2);
|
|
216
216
|
if (entry_0) {
|
|
217
|
-
if (context.signal.aborted) entry_0.onAbort();
|
|
218
|
-
else context.signal.addEventListener("abort", entry_0.onAbort, { once: true });
|
|
217
|
+
if (context.mcpReq.signal.aborted) entry_0.onAbort();
|
|
218
|
+
else context.mcpReq.signal.addEventListener("abort", entry_0.onAbort, { once: true });
|
|
219
219
|
}
|
|
220
220
|
return promise_0;
|
|
221
221
|
});
|
|
@@ -453,7 +453,7 @@ const useMcpServerResourceInstance = (props) => {
|
|
|
453
453
|
answerElicitation: (id_3, response) => {
|
|
454
454
|
if (response.action === "accept") {
|
|
455
455
|
const entry_1 = elicitationResolversRef.current.get(id_3);
|
|
456
|
-
if (!entry_1) return;
|
|
456
|
+
if (!entry_1) return void 0;
|
|
457
457
|
if (typeof response.content !== "object" || response.content === null || Array.isArray(response.content)) {
|
|
458
458
|
const errors = [{
|
|
459
459
|
property: "content",
|