@assistant-ui/react-mcp 0.1.18 → 0.1.20

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.
Files changed (192) hide show
  1. package/dist/auth/buildHeaders.d.ts +3 -6
  2. package/dist/auth/buildHeaders.d.ts.map +1 -1
  3. package/dist/auth/createOAuthProvider.d.ts +24 -26
  4. package/dist/auth/createOAuthProvider.d.ts.map +1 -1
  5. package/dist/auth/types.d.ts +13 -16
  6. package/dist/auth/types.d.ts.map +1 -1
  7. package/dist/connector.d.ts +2 -5
  8. package/dist/connector.d.ts.map +1 -1
  9. package/dist/context/McpConnectorByIndexProvider.d.ts +3 -6
  10. package/dist/context/McpConnectorByIndexProvider.d.ts.map +1 -1
  11. package/dist/context/McpConnectorByIndexProvider.js +1 -1
  12. package/dist/context/McpCustomServerByIndexProvider.d.ts +3 -6
  13. package/dist/context/McpCustomServerByIndexProvider.d.ts.map +1 -1
  14. package/dist/context/McpCustomServerByIndexProvider.js +1 -1
  15. package/dist/context/McpServerByIdProvider.d.ts +3 -6
  16. package/dist/context/McpServerByIdProvider.d.ts.map +1 -1
  17. package/dist/context/McpServerByIdProvider.js +1 -1
  18. package/dist/hooks/useMcpOAuthCallback.d.ts +14 -17
  19. package/dist/hooks/useMcpOAuthCallback.d.ts.map +1 -1
  20. package/dist/hooks/useMcpOAuthCallback.js +6 -2
  21. package/dist/hooks/useMcpOAuthCallback.js.map +1 -1
  22. package/dist/index.d.ts +19 -18
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +4 -4
  25. package/dist/mcp-scope.d.ts +124 -127
  26. package/dist/mcp-scope.d.ts.map +1 -1
  27. package/dist/primitives/addForm/McpAddFormAuthFields.d.ts +14 -16
  28. package/dist/primitives/addForm/McpAddFormAuthFields.d.ts.map +1 -1
  29. package/dist/primitives/addForm/McpAddFormAuthFields.js +18 -71
  30. package/dist/primitives/addForm/McpAddFormAuthFields.js.map +1 -1
  31. package/dist/primitives/addForm/McpAddFormAuthSelect.d.ts +5 -8
  32. package/dist/primitives/addForm/McpAddFormAuthSelect.d.ts.map +1 -1
  33. package/dist/primitives/addForm/McpAddFormAuthSelect.js +1 -1
  34. package/dist/primitives/addForm/McpAddFormBearerTokenField.d.ts +8 -0
  35. package/dist/primitives/addForm/McpAddFormBearerTokenField.d.ts.map +1 -0
  36. package/dist/primitives/addForm/McpAddFormBearerTokenField.js +50 -0
  37. package/dist/primitives/addForm/McpAddFormBearerTokenField.js.map +1 -0
  38. package/dist/primitives/addForm/McpAddFormCancel.d.ts +6 -9
  39. package/dist/primitives/addForm/McpAddFormCancel.d.ts.map +1 -1
  40. package/dist/primitives/addForm/McpAddFormCancel.js +1 -1
  41. package/dist/primitives/addForm/McpAddFormError.d.ts +6 -9
  42. package/dist/primitives/addForm/McpAddFormError.d.ts.map +1 -1
  43. package/dist/primitives/addForm/McpAddFormError.js +1 -1
  44. package/dist/primitives/addForm/McpAddFormNameField.d.ts +5 -8
  45. package/dist/primitives/addForm/McpAddFormNameField.d.ts.map +1 -1
  46. package/dist/primitives/addForm/McpAddFormNameField.js +1 -1
  47. package/dist/primitives/addForm/McpAddFormRoot.d.ts +11 -14
  48. package/dist/primitives/addForm/McpAddFormRoot.d.ts.map +1 -1
  49. package/dist/primitives/addForm/McpAddFormRoot.js +2 -2
  50. package/dist/primitives/addForm/McpAddFormScopesField.d.ts +8 -0
  51. package/dist/primitives/addForm/McpAddFormScopesField.d.ts.map +1 -0
  52. package/dist/primitives/addForm/McpAddFormScopesField.js +38 -0
  53. package/dist/primitives/addForm/McpAddFormScopesField.js.map +1 -0
  54. package/dist/primitives/addForm/McpAddFormSubmit.d.ts +6 -9
  55. package/dist/primitives/addForm/McpAddFormSubmit.d.ts.map +1 -1
  56. package/dist/primitives/addForm/McpAddFormSubmit.js +1 -1
  57. package/dist/primitives/addForm/McpAddFormUrlField.d.ts +5 -8
  58. package/dist/primitives/addForm/McpAddFormUrlField.d.ts.map +1 -1
  59. package/dist/primitives/addForm/McpAddFormUrlField.js +1 -1
  60. package/dist/primitives/addForm/context.d.ts +25 -28
  61. package/dist/primitives/addForm/context.d.ts.map +1 -1
  62. package/dist/primitives/addForm.d.ts +10 -13
  63. package/dist/primitives/addForm.d.ts.map +1 -1
  64. package/dist/primitives/addForm.js +5 -1
  65. package/dist/primitives/addForm.js.map +1 -1
  66. package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.d.ts +6 -9
  67. package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.d.ts.map +1 -1
  68. package/dist/primitives/elicitation/McpElicitationPrimitiveAccept.js +2 -2
  69. package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.d.ts +6 -9
  70. package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.d.ts.map +1 -1
  71. package/dist/primitives/elicitation/McpElicitationPrimitiveCancel.js +2 -2
  72. package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.d.ts +6 -9
  73. package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.d.ts.map +1 -1
  74. package/dist/primitives/elicitation/McpElicitationPrimitiveDecline.js +2 -2
  75. package/dist/primitives/elicitation/McpElicitationPrimitiveError.d.ts +6 -9
  76. package/dist/primitives/elicitation/McpElicitationPrimitiveError.d.ts.map +1 -1
  77. package/dist/primitives/elicitation/McpElicitationPrimitiveError.js +1 -1
  78. package/dist/primitives/elicitation/McpElicitationPrimitiveFields.d.ts +8 -10
  79. package/dist/primitives/elicitation/McpElicitationPrimitiveFields.d.ts.map +1 -1
  80. package/dist/primitives/elicitation/McpElicitationPrimitiveFields.js +1 -1
  81. package/dist/primitives/elicitation/McpElicitationPrimitiveItems.d.ts +8 -11
  82. package/dist/primitives/elicitation/McpElicitationPrimitiveItems.d.ts.map +1 -1
  83. package/dist/primitives/elicitation/McpElicitationPrimitiveItems.js +2 -2
  84. package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.d.ts +6 -9
  85. package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.d.ts.map +1 -1
  86. package/dist/primitives/elicitation/McpElicitationPrimitiveMessage.js +1 -1
  87. package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.d.ts +6 -9
  88. package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.d.ts.map +1 -1
  89. package/dist/primitives/elicitation/McpElicitationPrimitiveRoot.js +1 -1
  90. package/dist/primitives/elicitation/context.d.ts +15 -18
  91. package/dist/primitives/elicitation/context.d.ts.map +1 -1
  92. package/dist/primitives/elicitation/initialElicitationDraft.d.ts +1 -4
  93. package/dist/primitives/elicitation/initialElicitationDraft.d.ts.map +1 -1
  94. package/dist/primitives/elicitation/prepareElicitationContent.d.ts +4 -7
  95. package/dist/primitives/elicitation/prepareElicitationContent.d.ts.map +1 -1
  96. package/dist/primitives/elicitation/prepareElicitationContent.js +5 -1
  97. package/dist/primitives/elicitation/prepareElicitationContent.js.map +1 -1
  98. package/dist/primitives/elicitation.d.ts +8 -14
  99. package/dist/primitives/elicitation.d.ts.map +1 -1
  100. package/dist/primitives/manager/McpManagerAddCustomTrigger.d.ts +6 -9
  101. package/dist/primitives/manager/McpManagerAddCustomTrigger.d.ts.map +1 -1
  102. package/dist/primitives/manager/McpManagerAddCustomTrigger.js +1 -1
  103. package/dist/primitives/manager/McpManagerConnectors.d.ts +14 -17
  104. package/dist/primitives/manager/McpManagerConnectors.d.ts.map +1 -1
  105. package/dist/primitives/manager/McpManagerConnectors.js +1 -1
  106. package/dist/primitives/manager/McpManagerCustomServers.d.ts +14 -17
  107. package/dist/primitives/manager/McpManagerCustomServers.d.ts.map +1 -1
  108. package/dist/primitives/manager/McpManagerCustomServers.js +1 -1
  109. package/dist/primitives/manager/McpManagerRoot.d.ts +6 -9
  110. package/dist/primitives/manager/McpManagerRoot.d.ts.map +1 -1
  111. package/dist/primitives/manager/McpManagerRoot.js +2 -2
  112. package/dist/primitives/manager.d.ts +4 -9
  113. package/dist/primitives/manager.d.ts.map +1 -1
  114. package/dist/primitives/server/McpServerConnectButton.d.ts +6 -9
  115. package/dist/primitives/server/McpServerConnectButton.d.ts.map +1 -1
  116. package/dist/primitives/server/McpServerConnectButton.js +2 -2
  117. package/dist/primitives/server/McpServerDisconnectButton.d.ts +6 -9
  118. package/dist/primitives/server/McpServerDisconnectButton.d.ts.map +1 -1
  119. package/dist/primitives/server/McpServerDisconnectButton.js +2 -2
  120. package/dist/primitives/server/McpServerError.d.ts +6 -9
  121. package/dist/primitives/server/McpServerError.d.ts.map +1 -1
  122. package/dist/primitives/server/McpServerError.js +2 -2
  123. package/dist/primitives/server/McpServerIcon.d.ts +12 -15
  124. package/dist/primitives/server/McpServerIcon.d.ts.map +1 -1
  125. package/dist/primitives/server/McpServerIcon.js +2 -2
  126. package/dist/primitives/server/McpServerName.d.ts +6 -9
  127. package/dist/primitives/server/McpServerName.d.ts.map +1 -1
  128. package/dist/primitives/server/McpServerName.js +2 -2
  129. package/dist/primitives/server/McpServerOAuthLink.d.ts +11 -14
  130. package/dist/primitives/server/McpServerOAuthLink.d.ts.map +1 -1
  131. package/dist/primitives/server/McpServerOAuthLink.js +2 -2
  132. package/dist/primitives/server/McpServerRemoveButton.d.ts +6 -9
  133. package/dist/primitives/server/McpServerRemoveButton.d.ts.map +1 -1
  134. package/dist/primitives/server/McpServerRemoveButton.js +2 -2
  135. package/dist/primitives/server/McpServerRoot.d.ts +6 -9
  136. package/dist/primitives/server/McpServerRoot.d.ts.map +1 -1
  137. package/dist/primitives/server/McpServerRoot.js +2 -2
  138. package/dist/primitives/server/McpServerStatus.d.ts +6 -9
  139. package/dist/primitives/server/McpServerStatus.d.ts.map +1 -1
  140. package/dist/primitives/server/McpServerStatus.js +2 -2
  141. package/dist/primitives/server/McpServerToolName.d.ts +6 -9
  142. package/dist/primitives/server/McpServerToolName.d.ts.map +1 -1
  143. package/dist/primitives/server/McpServerToolName.js +1 -1
  144. package/dist/primitives/server/McpServerTools.d.ts +8 -11
  145. package/dist/primitives/server/McpServerTools.d.ts.map +1 -1
  146. package/dist/primitives/server/McpServerTools.js +2 -2
  147. package/dist/primitives/server.d.ts +11 -16
  148. package/dist/primitives/server.d.ts.map +1 -1
  149. package/dist/resources/McpManagerResource.d.ts +13 -16
  150. package/dist/resources/McpManagerResource.d.ts.map +1 -1
  151. package/dist/resources/McpManagerResource.js +95 -64
  152. package/dist/resources/McpManagerResource.js.map +1 -1
  153. package/dist/resources/McpServerRemovalFence.d.ts +3 -6
  154. package/dist/resources/McpServerRemovalFence.d.ts.map +1 -1
  155. package/dist/resources/McpServerResource.d.ts +21 -24
  156. package/dist/resources/McpServerResource.d.ts.map +1 -1
  157. package/dist/resources/McpServerResource.js +55 -47
  158. package/dist/resources/McpServerResource.js.map +1 -1
  159. package/dist/resources/storage/McpCustomStorage.d.ts +2 -5
  160. package/dist/resources/storage/McpCustomStorage.d.ts.map +1 -1
  161. package/dist/resources/storage/McpLocalStorage.d.ts +18 -21
  162. package/dist/resources/storage/McpLocalStorage.d.ts.map +1 -1
  163. package/dist/resources/storage/McpLocalStorage.js +1 -1
  164. package/dist/resources/storage/McpMemoryStorage.d.ts +2 -5
  165. package/dist/resources/storage/McpMemoryStorage.d.ts.map +1 -1
  166. package/dist/resources/storage/types.d.ts +24 -27
  167. package/dist/resources/storage/types.d.ts.map +1 -1
  168. package/dist/resources/validateElicitationContent.d.ts +4 -6
  169. package/dist/resources/validateElicitationContent.d.ts.map +1 -1
  170. package/dist/utils/createMcpId.d.ts +1 -4
  171. package/dist/utils/createMcpId.d.ts.map +1 -1
  172. package/dist/utils/invokeMcpCallback.d.ts +1 -4
  173. package/dist/utils/invokeMcpCallback.d.ts.map +1 -1
  174. package/dist/utils/serverId.d.ts +2 -5
  175. package/dist/utils/serverId.d.ts.map +1 -1
  176. package/dist/utils/serverUrl.d.ts +4 -7
  177. package/dist/utils/serverUrl.d.ts.map +1 -1
  178. package/package.json +11 -10
  179. package/src/hooks/useMcpOAuthCallback.test.ts +53 -0
  180. package/src/hooks/useMcpOAuthCallback.tsx +12 -0
  181. package/src/index.ts +2 -1
  182. package/src/primitives/addForm/McpAddFormAccessibility.test.tsx +49 -0
  183. package/src/primitives/addForm/McpAddFormAuthFields.tsx +7 -15
  184. package/src/primitives/addForm/McpAddFormBearerTokenField.tsx +46 -0
  185. package/src/primitives/addForm/McpAddFormRoot.test.tsx +65 -0
  186. package/src/primitives/addForm/McpAddFormScopesField.tsx +34 -0
  187. package/src/primitives/addForm.ts +2 -0
  188. package/src/primitives/elicitation/prepareElicitationContent.ts +8 -6
  189. package/src/resources/McpManagerResource.test.ts +85 -0
  190. package/src/resources/McpManagerResource.ts +56 -23
  191. package/src/resources/McpServerResource.test.ts +121 -6
  192. package/src/resources/McpServerResource.ts +28 -12
@@ -1,11 +1,11 @@
1
+ import { clearOAuthProviderAuthState } from "../auth/createOAuthProvider.js";
1
2
  import { assertUniqueServerIds } from "../utils/serverId.js";
2
3
  import { createMcpId } from "../utils/createMcpId.js";
3
- import { clearOAuthProviderAuthState } from "../auth/createOAuthProvider.js";
4
4
  import { withMcpServerRemovalFence } from "./McpServerRemovalFence.js";
5
5
  import { McpServerResource } from "./McpServerResource.js";
6
6
  import { McpLocalStorage } from "./storage/McpLocalStorage.js";
7
- import { attachTransformScopes, useAssistantClientRef, useClientLookup } from "@assistant-ui/store";
8
7
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
8
+ import { attachTransformScopes, useAssistantClientRef, useClientLookup } from "@assistant-ui/store";
9
9
  import { useEffect, useEffectEvent, useRef, useState } from "@assistant-ui/tap/react-shim";
10
10
  import { resource, useResource, withKey } from "@assistant-ui/tap";
11
11
  import { useAssistantScopeEffect } from "@assistant-ui/store/client";
@@ -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(17);
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] !== scopeKey || $[4] !== storage) {
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
- records = await storage.loadCustomServers();
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 records;
97
- const persistedIds = new Set(records.map(_temp));
98
- return [...records, ...prev.filter((r_0) => !persistedIds.has(r_0.id))];
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] = scopeKey;
110
- $[4] = storage;
111
- $[5] = t3;
112
- } else t3 = $[5];
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 ($[6] !== hydrate) {
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
- $[6] = hydrate;
124
- $[7] = t4;
125
- } else t4 = $[7];
138
+ $[7] = hydrate;
139
+ $[8] = t4;
140
+ } else t4 = $[8];
126
141
  let t5;
127
- if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
142
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
128
143
  t5 = [];
129
- $[8] = t5;
130
- } else t5 = $[8];
144
+ $[9] = t5;
145
+ } else t5 = $[9];
131
146
  useEffect(t4, t5);
132
147
  let t6;
133
- if ($[9] !== persistenceQueues || $[10] !== scopeKey || $[11] !== storage) {
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
- $[9] = persistenceQueues;
149
- $[10] = scopeKey;
150
- $[11] = storage;
151
- $[12] = t6;
152
- } else t6 = $[12];
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 ($[13] !== customServers || $[14] !== isHydrated || $[15] !== updateCustomServers) {
156
- t7 = {
157
- customServers,
158
- isHydrated,
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
- $[13] = customServers;
162
- $[14] = isHydrated;
175
+ $[14] = removedBeforeHydration;
163
176
  $[15] = updateCustomServers;
164
177
  $[16] = t7;
165
178
  } else t7 = $[16];
166
- return t7;
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(_temp2);
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(_temp3), ...customServers.map(_temp4)]);
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] !== storage || $[15] !== storageScopeKey || $[16] !== updateCustomServers) {
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: _temp5
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] !== storage || $[28] !== storageScopeKey || $[29] !== updateCustomServers) {
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
- updateCustomServers((prev) => prev.filter((record) => record.id !== s_0.id));
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] = storage;
253
- $[28] = storageScopeKey;
254
- $[29] = updateCustomServers;
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] = storage;
266
- $[15] = storageScopeKey;
267
- $[16] = updateCustomServers;
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(_temp6);
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(_temp7);
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 record_0 = {
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((prev_0) => [...prev_0, record_0]);
400
- return record_0.id;
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] !== state || $[64] !== storage || $[65] !== storageScopeKey || $[66] !== updateCustomServers) {
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
- updateCustomServers((prev_1) => prev_1.filter((record_1) => record_1.id !== id));
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] = state;
427
- $[64] = storage;
428
- $[65] = storageScopeKey;
429
- $[66] = updateCustomServers;
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(r) {
484
+ function _temp() {
485
+ return /* @__PURE__ */ new Set();
486
+ }
487
+ function _temp2(r) {
457
488
  return r.id;
458
489
  }
459
- function _temp2() {
490
+ function _temp3() {
460
491
  return /* @__PURE__ */ new Map();
461
492
  }
462
- function _temp3(c) {
493
+ function _temp4(c) {
463
494
  return c.id;
464
495
  }
465
- function _temp4(s) {
496
+ function _temp5(s) {
466
497
  return s.id;
467
498
  }
468
- async function _temp5() {}
469
- function _temp6(s_1) {
499
+ async function _temp6() {}
500
+ function _temp7(s_1) {
470
501
  return s_1.kind === "connector";
471
502
  }
472
- function _temp7(s_2) {
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,4 @@
1
- import { McpServerResourceProps } from "./McpServerResource.js";
2
- //#region src/resources/McpServerRemovalFence.d.ts
3
- declare const withMcpServerRemovalFence: (props: McpServerResourceProps, beginRemovalFence: () => () => void) => McpServerResourceProps;
4
- declare const beginMcpServerRemovalFence: (props: McpServerResourceProps) => (() => void) | undefined;
5
- //#endregion
6
- export { beginMcpServerRemovalFence, withMcpServerRemovalFence };
1
+ import type { McpServerResourceProps } from "./McpServerResource.js";
2
+ export declare const withMcpServerRemovalFence: (props: McpServerResourceProps, beginRemovalFence: () => () => void) => McpServerResourceProps;
3
+ export declare const beginMcpServerRemovalFence: (props: McpServerResourceProps) => (() => void) | undefined;
7
4
  //# sourceMappingURL=McpServerRemovalFence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpServerRemovalFence.d.ts","names":[],"sources":["../../src/resources/McpServerRemovalFence.ts"],"mappings":";;cAQa,4BACX,OAAO,wBACP,wCACC;cAMU,6BACX,OAAO"}
1
+ {"version":3,"file":"McpServerRemovalFence.d.ts","sourceRoot":"","sources":["../../src/resources/McpServerRemovalFence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,+BAA4B;AAQlE,eAAO,MAAM,yBAAyB,GACpC,OAAO,sBAAsB,EAC7B,mBAAmB,MAAM,MAAM,IAAI,KAClC,sBAI2B,CAAC;AAE/B,eAAO,MAAM,0BAA0B,GACrC,OAAO,sBAAsB,KAC5B,CAAC,MAAM,IAAI,CAAC,GAAG,SACsD,CAAC"}
@@ -1,26 +1,23 @@
1
- import { MCPAuthConfig, MCPServerKind } from "../mcp-scope.js";
2
- import { MCPStorage } from "./storage/types.js";
3
- import { ClientOutput } from "@assistant-ui/store";
4
- //#region src/resources/McpServerResource.d.ts
5
- type McpServerResourceProps = {
6
- id: string;
7
- kind: MCPServerKind;
8
- name: string;
9
- url: string;
10
- icon?: string | undefined;
11
- auth: MCPAuthConfig;
12
- storage: MCPStorage;
13
- redirectUri: string;
14
- autoConnect: boolean;
15
- connectionTimeout?: number | undefined;
16
- cache?: {
17
- readonly defaultTtlMs?: number;
18
- } | undefined;
19
- readonly elicitation?: boolean;
20
- onRemove: () => Promise<void>;
1
+ import type { ClientOutput } from "@assistant-ui/store";
2
+ import type { MCPStorage } from "./storage/types.js";
3
+ import type { MCPAuthConfig, MCPServerKind } from "../mcp-scope.js";
4
+ export type McpServerResourceProps = {
5
+ id: string;
6
+ kind: MCPServerKind;
7
+ name: string;
8
+ url: string;
9
+ icon?: string | undefined;
10
+ auth: MCPAuthConfig;
11
+ storage: MCPStorage;
12
+ redirectUri: string;
13
+ autoConnect: boolean;
14
+ connectionTimeout?: number | undefined;
15
+ cache?: {
16
+ readonly defaultTtlMs?: number;
17
+ } | undefined;
18
+ readonly elicitation?: boolean;
19
+ onRemove: () => Promise<void>;
21
20
  };
22
- declare const getConnectionDependencies: (props: McpServerResourceProps) => readonly unknown[];
23
- declare const McpServerResource: import("@assistant-ui/tap").Resource<ClientOutput<"mcpServer">, [props: McpServerResourceProps]>;
24
- //#endregion
25
- export { McpServerResource, McpServerResourceProps, getConnectionDependencies };
21
+ export declare const getConnectionDependencies: (props: McpServerResourceProps) => readonly unknown[];
22
+ export declare const McpServerResource: import("@assistant-ui/tap").Resource<ClientOutput<"mcpServer">, [props: McpServerResourceProps]>;
26
23
  //# sourceMappingURL=McpServerResource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpServerResource.d.ts","names":[],"sources":["../../src/resources/McpServerResource.ts"],"mappings":";;;;KAsCY;EACV;EACA,MAAM;EACN;EACA;EACA;EACA,MAAM;EACN,SAAS;EACT;EACA;EACA;EACA;aAAmB;;WACV;EACT,gBAAgB;;cAOL,4BACX,OAAO;cAisBI,+CAAiB,SAAA,4BAAA,OAAA"}
1
+ {"version":3,"file":"McpServerResource.d.ts","sourceRoot":"","sources":["../../src/resources/McpServerResource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAuBxD,OAAO,KAAK,EAAE,UAAU,EAAE,2BAAwB;AAClD,OAAO,KAAK,EACV,aAAa,EAIb,aAAa,EAGd,wBAAqB;AAItB,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAMF,eAAO,MAAM,yBAAyB,GACpC,OAAO,sBAAsB,KAC5B,SAAS,OAAO,EA2BlB,CAAC;AAqrBF,eAAO,MAAM,iBAAiB,kGAwB5B,CAAC"}