@shipit-ai/cli 1.173.1 → 1.174.0

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 (259) hide show
  1. package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts +9 -1
  2. package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.d.ts +7 -3
  4. package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.js +6 -5
  6. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +4 -0
  8. package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.d.ts +12 -0
  9. package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.d.ts.map +1 -1
  10. package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.js +11 -1
  11. package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.d.ts +10 -2
  12. package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.d.ts.map +1 -1
  13. package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.js +96 -14
  14. package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.d.ts +1 -1
  15. package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.d.ts.map +1 -1
  16. package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.js +2 -2
  17. package/dist/src/presentation/web/app/mcp-servers/page.d.ts.map +1 -1
  18. package/dist/src/presentation/web/app/mcp-servers/page.js +3 -1
  19. package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts +19 -0
  20. package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts.map +1 -0
  21. package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.js +106 -0
  22. package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.d.ts +11 -0
  23. package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.d.ts.map +1 -0
  24. package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.js +18 -0
  25. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-card.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-card.js +2 -8
  27. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.d.ts +2 -2
  28. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.js +26 -9
  30. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.stories.d.ts +1 -1
  31. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.stories.js +1 -1
  32. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.d.ts +45 -0
  33. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.d.ts.map +1 -0
  34. package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.js +138 -0
  35. package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.d.ts +2 -1
  36. package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.js +8 -8
  38. package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.stories.js +2 -2
  39. package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.d.ts +17 -13
  40. package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.js +21 -34
  42. package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.d.ts +1 -1
  43. package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.js +7 -8
  45. package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.d.ts +29 -0
  46. package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.d.ts.map +1 -0
  47. package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.js +25 -0
  48. package/dist/translations/ar/web.json +8 -2
  49. package/dist/translations/de/web.json +8 -2
  50. package/dist/translations/en/web.json +8 -2
  51. package/dist/translations/es/web.json +8 -2
  52. package/dist/translations/fr/web.json +8 -2
  53. package/dist/translations/he/web.json +8 -2
  54. package/dist/translations/pt/web.json +8 -2
  55. package/dist/translations/ru/web.json +8 -2
  56. package/dist/tsconfig.build.tsbuildinfo +1 -1
  57. package/package.json +1 -1
  58. package/web/.next/BUILD_ID +1 -1
  59. package/web/.next/build-manifest.json +3 -3
  60. package/web/.next/fallback-build-manifest.json +3 -3
  61. package/web/.next/prerender-manifest.json +3 -3
  62. package/web/.next/required-server-files.js +2 -2
  63. package/web/.next/required-server-files.json +2 -2
  64. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  65. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  68. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
  71. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  74. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  77. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  80. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  81. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  83. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  86. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
  89. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  92. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  97. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  98. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  101. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  102. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  104. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  105. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  106. package/web/.next/server/app/_global-error.html +1 -1
  107. package/web/.next/server/app/_global-error.rsc +1 -1
  108. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  109. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  110. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  113. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  114. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  115. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  117. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  118. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  119. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  120. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  121. package/web/.next/server/app/mcp-servers/page/server-reference-manifest.json +13 -13
  122. package/web/.next/server/app/mcp-servers/page.js.nft.json +1 -1
  123. package/web/.next/server/app/mcp-servers/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/plugins/page/server-reference-manifest.json +15 -15
  125. package/web/.next/server/app/plugins/page.js.nft.json +1 -1
  126. package/web/.next/server/app/plugins/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/app/settings/page/server-reference-manifest.json +12 -12
  128. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  129. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  131. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  132. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  133. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  134. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  135. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  136. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  137. package/web/.next/server/app/version/page.js.nft.json +1 -1
  138. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  140. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  141. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  143. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js +10 -0
  145. package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js.map +1 -0
  146. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  147. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  149. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js +3 -0
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js.map +1 -0
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__13pshs0._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__13pshs0._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  171. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
  173. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/{_1031n_-._.js → _083k45~._.js} +2 -2
  175. package/web/.next/server/chunks/ssr/{_1031n_-._.js.map → _083k45~._.js.map} +1 -1
  176. package/web/.next/server/chunks/ssr/{_12i_bjl._.js → _087x~el._.js} +2 -2
  177. package/web/.next/server/chunks/ssr/{_12i_bjl._.js.map → _087x~el._.js.map} +1 -1
  178. package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
  179. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/{_0xn_dfh._.js → _0bknjp-._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/{_0xn_dfh._.js.map → _0bknjp-._.js.map} +1 -1
  184. package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
  187. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/_0fswe4r._.js +3 -0
  189. package/web/.next/server/chunks/ssr/_0fswe4r._.js.map +1 -0
  190. package/web/.next/server/chunks/ssr/{_0z6p8yi._.js → _0glox21._.js} +2 -2
  191. package/web/.next/server/chunks/ssr/{_0z6p8yi._.js.map → _0glox21._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
  193. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
  195. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
  197. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/{_096x3u~._.js → _0vq0c0x._.js} +2 -2
  199. package/web/.next/server/chunks/ssr/{_096x3u~._.js.map → _0vq0c0x._.js.map} +1 -1
  200. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  201. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  203. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
  205. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  207. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/_0~g5-.e._.js +3 -0
  209. package/web/.next/server/chunks/ssr/_0~g5-.e._.js.map +1 -0
  210. package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
  211. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js +1 -1
  213. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js.map +1 -1
  214. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +1 -1
  215. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
  219. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  221. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  222. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  223. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  224. package/web/.next/server/middleware-build-manifest.js +3 -3
  225. package/web/.next/server/pages/500.html +1 -1
  226. package/web/.next/server/server-reference-manifest.js +1 -1
  227. package/web/.next/server/server-reference-manifest.json +57 -57
  228. package/web/.next/static/chunks/{07c0dde.-8.3e.js → 030tqac1cx-fj.js} +1 -1
  229. package/web/.next/static/chunks/{0242vp5_56bjp.js → 093...bdsa2vi.js} +1 -1
  230. package/web/.next/static/chunks/0a~-dbzk6tkpw.css +1 -0
  231. package/web/.next/static/chunks/{0j~279np0vu13.js → 0c.5-5ohi38wu.js} +1 -1
  232. package/web/.next/static/chunks/{0k3fxd~lsx6h_.js → 0djvgyu139qht.js} +1 -1
  233. package/web/.next/static/chunks/{084nyl7us-xbo.js → 0etn4uwpbu0p..js} +1 -1
  234. package/web/.next/static/chunks/0fzx4yzxqtc6v.js +1 -0
  235. package/web/.next/static/chunks/{0sgbbtfp4hspl.js → 0gz0lgz7pvrb5.js} +1 -1
  236. package/web/.next/static/chunks/0iey6w_th4w6t.js +1 -0
  237. package/web/.next/static/chunks/{15lkkh2eg.w0h.js → 0mukkm1m79wpt.js} +1 -1
  238. package/web/.next/static/chunks/{0cgfywkcky60_.js → 0ou6vmrmvv4.f.js} +1 -1
  239. package/web/.next/static/chunks/{15zjq.s38l64~.js → 0q1rh6cwq8q~e.js} +1 -1
  240. package/web/.next/static/chunks/{0xjj0-wsaziot.js → 0w9~abfpfmxwe.js} +1 -1
  241. package/web/.next/static/chunks/{0vscxcwhltksg.js → 0zwhmf.myybu0.js} +3 -3
  242. package/web/.next/static/chunks/{10j-adknfho63.js → 10rtagfoabp3b.js} +1 -1
  243. package/web/.next/static/chunks/{11rfk7fre_6t2.js → 113fyg.4c74k~.js} +1 -1
  244. package/web/.next/static/chunks/{16nbcfv~__pas.js → 11n8b8mq7xbv9.js} +1 -1
  245. package/web/.next/static/chunks/11v7w0zh-u9s8.js +8 -0
  246. package/web/.next/static/chunks/{0kv2-9owuv51~.js → 164.6ma3h~kkp.js} +1 -1
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b~nfa6._.js +0 -3
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b~nfa6._.js.map +0 -1
  249. package/web/.next/server/chunks/ssr/_0ia4o6_._.js +0 -3
  250. package/web/.next/server/chunks/ssr/_0ia4o6_._.js.map +0 -1
  251. package/web/.next/server/chunks/ssr/_0o.xc6x._.js +0 -3
  252. package/web/.next/server/chunks/ssr/_0o.xc6x._.js.map +0 -1
  253. package/web/.next/static/chunks/00h433i5-1v_-.css +0 -1
  254. package/web/.next/static/chunks/0jl9-2_wjbofj.js +0 -1
  255. package/web/.next/static/chunks/0r9cddoy0xkhk.js +0 -1
  256. package/web/.next/static/chunks/123j391jw_zg4.js +0 -1
  257. /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_buildManifest.js +0 -0
  258. /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_clientMiddlewareManifest.js +0 -0
  259. /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_ssgManifest.js +0 -0
@@ -3,20 +3,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useTranslation } from 'react-i18next';
4
4
  import { Card } from '../../ui/card.js';
5
5
  import { Badge } from '../../ui/badge.js';
6
- import { Server, Wifi, Terminal } from 'lucide-react';
7
- const TRANSPORT_ICONS = {
8
- http: Server,
9
- sse: Wifi,
10
- stdio: Terminal,
11
- };
6
+ import { McpServerIcon } from './mcp-server-icon.js';
12
7
  export function McpServerCard({ server, onSelect }) {
13
8
  const { t } = useTranslation('web');
14
- const TransportIcon = TRANSPORT_ICONS[server.transport] ?? Server;
15
9
  const description = server.mcp_info?.description ?? '';
16
10
  return (_jsxs(Card, { className: "cursor-pointer p-5 transition-all duration-300 hover:scale-[1.02] hover:shadow-md hover:ring-slate-300 dark:hover:ring-slate-600", role: "button", tabIndex: 0, onClick: () => onSelect(server), onKeyDown: (e) => {
17
11
  if (e.key === 'Enter' || e.key === ' ') {
18
12
  e.preventDefault();
19
13
  onSelect(server);
20
14
  }
21
- }, children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(TransportIcon, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("h3", { className: "text-sm font-semibold", children: server.name })] }), _jsx(Badge, { variant: "outline", className: "shrink-0 text-xs", children: t(`mcpServers.transport.${server.transport}`, server.transport.toUpperCase()) })] }), description ? (_jsx("p", { className: "text-muted-foreground mt-2 line-clamp-2 text-xs", children: description })) : null, _jsx("div", { className: "mt-3 flex items-center gap-2", children: server.auth_type && server.auth_type !== 'none' ? (_jsx(Badge, { variant: "secondary", className: "text-xs", children: t(`mcpServers.authType.${server.auth_type}`, server.auth_type) })) : null })] }));
15
+ }, "data-testid": `mcp-server-card-${server.server_name}`, children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "flex size-11 shrink-0 items-center justify-center rounded-lg bg-slate-100 ring-1 ring-slate-200/50 dark:bg-slate-800 dark:ring-slate-700/50", children: _jsx(McpServerIcon, { serverName: server.server_name, url: server.url, transport: server.transport, size: "md" }) }), _jsx("h3", { className: "text-foreground mt-2 min-w-0 flex-1 truncate text-sm leading-tight font-bold tracking-tight", children: server.name })] }), description ? (_jsx("p", { className: "text-muted-foreground mt-3 line-clamp-2 text-xs leading-relaxed", children: description })) : null, _jsxs("div", { className: "mt-4 flex flex-wrap items-center gap-1.5", children: [_jsx(Badge, { variant: "outline", children: t(`mcpServers.transport.${server.transport}`, server.transport.toUpperCase()) }), server.auth_type && server.auth_type !== 'none' ? (_jsx(Badge, { variant: "secondary", children: t(`mcpServers.authType.${server.auth_type}`, server.auth_type) })) : null] })] }));
22
16
  }
@@ -1,10 +1,10 @@
1
1
  import type { McpServerInfo } from '../../../../../../packages/core/src/application/ports/output/services/mcp-server-browser.interface.js';
2
2
  interface McpServerDetailDrawerProps {
3
3
  server: McpServerInfo | null;
4
- serverNames: string[];
4
+ proxyBaseUrl: string;
5
5
  open: boolean;
6
6
  onClose: () => void;
7
7
  }
8
- export declare function McpServerDetailDrawer({ server, serverNames, open, onClose, }: McpServerDetailDrawerProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export declare function McpServerDetailDrawer({ server, proxyBaseUrl, open, onClose, }: McpServerDetailDrawerProps): import("react/jsx-runtime").JSX.Element | null;
9
9
  export {};
10
10
  //# sourceMappingURL=mcp-server-detail-drawer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server-detail-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,gFAAgF,CAAC;AAExF,UAAU,0BAA0B;IAClC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAYD,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,WAAW,EACX,IAAI,EACJ,OAAO,GACR,EAAE,0BAA0B,kDA+E5B"}
1
+ {"version":3,"file":"mcp-server-detail-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,gFAAgF,CAAC;AAExF,UAAU,0BAA0B;IAClC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAYD,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,OAAO,GACR,EAAE,0BAA0B,kDA2J5B"}
@@ -1,12 +1,16 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useEffect, useState, useCallback } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { BaseDrawer } from '../../common/base-drawer/index.js';
6
6
  import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
7
7
  import { Separator } from '../../ui/separator.js';
8
8
  import { Badge } from '../../ui/badge.js';
9
+ import { Button } from '../../ui/button.js';
10
+ import { RefreshCw } from 'lucide-react';
9
11
  import { McpToolList } from './mcp-tool-list.js';
12
+ import { McpConnectInstructions } from './mcp-connect-instructions.js';
13
+ import { McpServerIcon } from './mcp-server-icon.js';
10
14
  import { fetchMcpServerToolsAction } from '../../../app/actions/fetch-mcp-server-tools.js';
11
15
  function isValidDisplayUrl(url) {
12
16
  if (!url)
@@ -19,19 +23,21 @@ function isValidDisplayUrl(url) {
19
23
  return false;
20
24
  }
21
25
  }
22
- export function McpServerDetailDrawer({ server, serverNames, open, onClose, }) {
26
+ export function McpServerDetailDrawer({ server, proxyBaseUrl, open, onClose, }) {
23
27
  const { t } = useTranslation('web');
24
28
  const [tools, setTools] = useState([]);
25
29
  const [loadingTools, setLoadingTools] = useState(false);
26
30
  const [toolError, setToolError] = useState(null);
27
- const loadTools = useCallback(async () => {
31
+ const [loadedServerName, setLoadedServerName] = useState(null);
32
+ const loadTools = useCallback(async (serverName) => {
28
33
  setLoadingTools(true);
29
34
  setToolError(null);
30
35
  try {
31
- const result = await fetchMcpServerToolsAction();
36
+ const result = await fetchMcpServerToolsAction(serverName);
32
37
  setTools(result.tools);
33
38
  if (result.error)
34
39
  setToolError(result.error);
40
+ setLoadedServerName(serverName);
35
41
  }
36
42
  catch {
37
43
  setToolError('Failed to load tools');
@@ -41,12 +47,23 @@ export function McpServerDetailDrawer({ server, serverNames, open, onClose, }) {
41
47
  }
42
48
  }, []);
43
49
  useEffect(() => {
44
- if (open && server && tools.length === 0) {
45
- loadTools();
46
- }
47
- }, [open, server, tools.length, loadTools]);
50
+ if (!open || !server)
51
+ return;
52
+ // Re-fetch whenever the drawer opens for a different server.
53
+ if (loadedServerName === server.server_name)
54
+ return;
55
+ loadTools(server.server_name);
56
+ }, [open, server, loadedServerName, loadTools]);
57
+ const handleRefresh = useCallback(() => {
58
+ if (!server)
59
+ return;
60
+ // Clear the cached server name to force a re-fetch and call loadTools
61
+ // directly for immediate feedback.
62
+ setLoadedServerName(null);
63
+ loadTools(server.server_name);
64
+ }, [server, loadTools]);
48
65
  if (!server)
49
66
  return null;
50
67
  const description = server.mcp_info?.description ?? '';
51
- return (_jsxs(BaseDrawer, { open: open, onClose: onClose, children: [_jsx(DrawerTitle, { children: server.name }), description ? _jsx(DrawerDescription, { children: description }) : null, _jsx(Separator, { className: "my-4" }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: t('mcpServers.detail.serverName') }), _jsx("span", { className: "font-mono text-xs", children: server.server_name })] }), isValidDisplayUrl(server.url) ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: t('mcpServers.detail.url') }), _jsx("span", { className: "max-w-[200px] truncate font-mono text-xs", children: server.url })] })) : null, _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: t('mcpServers.detail.transport') }), _jsx(Badge, { variant: "outline", className: "text-xs", children: t(`mcpServers.transport.${server.transport}`, server.transport.toUpperCase()) })] }), server.auth_type && server.auth_type !== 'none' ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: t('mcpServers.detail.authType') }), _jsx(Badge, { variant: "secondary", className: "text-xs", children: t(`mcpServers.authType.${server.auth_type}`, server.auth_type) })] })) : null] }), _jsx(Separator, { className: "my-4" }), _jsx("h3", { className: "mb-3 text-sm font-semibold", children: t('mcpServers.tools.title') }), loadingTools ? (_jsxs("p", { className: "text-muted-foreground text-sm", children: [t('accessibility.loading'), "..."] })) : toolError ? (_jsx("p", { className: "text-destructive text-sm", children: toolError })) : (_jsx(McpToolList, { tools: tools, serverNames: serverNames }))] }));
68
+ return (_jsx(BaseDrawer, { open: open, onClose: onClose, "data-testid": "mcp-server-detail-drawer", children: _jsxs("div", { className: "flex flex-col gap-6 overflow-y-auto p-6", children: [_jsxs("div", { className: "space-y-2", children: [_jsxs("span", { className: "text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: [t(`mcpServers.transport.${server.transport}`, server.transport.toUpperCase()), " \u00B7 MCP Server"] }), _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "flex size-12 shrink-0 items-center justify-center rounded-lg bg-slate-100 ring-1 ring-slate-200/50 dark:bg-slate-800 dark:ring-slate-700/50", children: _jsx(McpServerIcon, { serverName: server.server_name, url: server.url, transport: server.transport, size: "lg" }) }), _jsx(DrawerTitle, { className: "text-foreground mt-2 text-lg font-bold tracking-tight", children: server.name })] }), description ? (_jsx(DrawerDescription, { className: "text-muted-foreground text-sm leading-relaxed", children: description })) : null] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: t('mcpServers.detail.serverName') }), _jsx("span", { className: "font-mono text-xs", children: server.server_name })] }), isValidDisplayUrl(server.url) ? (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("span", { className: "text-muted-foreground shrink-0 text-xs font-medium", children: t('mcpServers.detail.url') }), _jsx("span", { className: "truncate font-mono text-xs", title: server.url, children: server.url })] })) : null, _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: t('mcpServers.detail.transport') }), _jsx(Badge, { variant: "outline", children: t(`mcpServers.transport.${server.transport}`, server.transport.toUpperCase()) })] }), server.auth_type && server.auth_type !== 'none' ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: t('mcpServers.detail.authType') }), _jsx(Badge, { variant: "secondary", children: t(`mcpServers.authType.${server.auth_type}`, server.auth_type) })] })) : null] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: "text-foreground text-sm font-bold tracking-tight", children: t('mcpServers.tools.title') }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-7", onClick: handleRefresh, disabled: loadingTools, "aria-label": t('mcpServers.tools.refresh'), "data-testid": "mcp-tools-refresh", children: _jsx(RefreshCw, { className: `size-3.5 ${loadingTools ? 'animate-spin' : ''}` }) })] }), loadingTools ? (_jsxs("p", { className: "text-muted-foreground text-sm", children: [t('accessibility.loading'), "..."] })) : toolError ? (_jsx("p", { className: "text-destructive text-sm", children: toolError })) : (_jsx(McpToolList, { tools: tools, serverName: server.server_name }))] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-foreground text-sm font-bold tracking-tight", children: t('mcpServers.connect.title') }), _jsx(McpConnectInstructions, { proxyBaseUrl: proxyBaseUrl, serverName: server.server_name })] })] }) }));
52
69
  }
@@ -6,7 +6,7 @@ declare const meta: {
6
6
  args: {
7
7
  open: true;
8
8
  onClose: () => undefined;
9
- serverNames: string[];
9
+ proxyBaseUrl: string;
10
10
  };
11
11
  };
12
12
  export default meta;
@@ -5,7 +5,7 @@ const meta = {
5
5
  args: {
6
6
  open: true,
7
7
  onClose: () => undefined,
8
- serverNames: ['deepwiki-mcp', 'github_mcp'],
8
+ proxyBaseUrl: 'http://localhost:4000',
9
9
  },
10
10
  };
11
11
  export default meta;
@@ -0,0 +1,45 @@
1
+ import { type ComponentType } from 'react';
2
+ interface McpServerIconProps {
3
+ serverName: string;
4
+ url?: string;
5
+ transport: string;
6
+ className?: string;
7
+ size?: 'sm' | 'md' | 'lg';
8
+ }
9
+ type BrandIconComponent = ComponentType<{
10
+ className?: string;
11
+ size?: number;
12
+ }>;
13
+ export type VendorResolution = {
14
+ kind: 'inline';
15
+ component: BrandIconComponent;
16
+ } | {
17
+ kind: 'simpleicons';
18
+ slug: string;
19
+ } | {
20
+ kind: 'none';
21
+ };
22
+ /**
23
+ * Resolve a vendor icon for an MCP server by matching name and URL against
24
+ * the VENDOR_MAP patterns. Returns an inline component, a SimpleIcons slug,
25
+ * or 'none' (caller falls back to transport icon).
26
+ *
27
+ * Exported for unit testing.
28
+ */
29
+ export declare function resolveVendorMapping(serverName: string, url?: string): VendorResolution;
30
+ /**
31
+ * Renders an MCP server's brand icon when recognizable, falling back to the
32
+ * transport-type icon otherwise.
33
+ *
34
+ * Resolution order:
35
+ * 1. Inline brand SVG (Microsoft, Azure, DeepWiki, Firecrawl, AWS)
36
+ * 2. SimpleIcons CDN image (GitHub, Stripe, Postgres, etc.)
37
+ * 3. Transport fallback (Server/Wifi/Terminal from lucide-react)
38
+ *
39
+ * For SimpleIcons images, we handle `onError` by swapping to the transport
40
+ * fallback — this protects against SimpleIcons slug changes without breaking
41
+ * the UI.
42
+ */
43
+ export declare function McpServerIcon({ serverName, url, transport, className, size, }: McpServerIconProps): import("react/jsx-runtime").JSX.Element;
44
+ export {};
45
+ //# sourceMappingURL=mcp-server-icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server-icon.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-server-icon.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAYrD,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,KAAK,kBAAkB,GAAG,aAAa,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA4F/E,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,CASvF;AAoBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,GAAG,EACH,SAAS,EACT,SAAS,EACT,IAAW,GACZ,EAAE,kBAAkB,2CA6BpB"}
@@ -0,0 +1,138 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Server, Wifi, Terminal } from 'lucide-react';
5
+ import { MicrosoftIcon, MicrosoftLearnIcon, AzureIcon, FirecrawlIcon, DeepWikiIcon, AwsIcon, } from './vendor-brand-icons.js';
6
+ /**
7
+ * Vendor icon resolution map.
8
+ *
9
+ * Priority rules:
10
+ * 1. More-specific patterns FIRST (e.g. `microsoft_learn` before `microsoft`,
11
+ * `github_copilot` before plain `github`).
12
+ * 2. Inline SVG brand icons take priority over SimpleIcons when both are
13
+ * available — inline icons are guaranteed to render and have no CDN
14
+ * dependency.
15
+ * 3. Verified slugs only. Every SimpleIcons slug in this file must return
16
+ * HTTP 200 from https://cdn.simpleicons.org/{slug} as of the last audit.
17
+ *
18
+ * When no vendor matches, the `McpServerIcon` component falls back to the
19
+ * transport-type Lucide icon (Server/Wifi/Terminal).
20
+ *
21
+ * Exported `resolveVendorMapping` is the source of truth for tests.
22
+ */
23
+ const VENDOR_MAP = [
24
+ // Microsoft (SimpleIcons removed all MS icons for legal reasons — use inline)
25
+ { match: /microsoft[_-]?learn|learn\.microsoft/, inlineIcon: MicrosoftLearnIcon },
26
+ { match: /foundry|ai\.azure|azure[_-]?foundry|bedrock[_-]?agentcore/, inlineIcon: AzureIcon },
27
+ { match: /\bazure\b/, inlineIcon: AzureIcon },
28
+ { match: /microsoft|\.microsoft\./, inlineIcon: MicrosoftIcon },
29
+ // GitHub / Copilot (SimpleIcons has these)
30
+ { match: /github[_-]?copilot|\bcopilot\b/, simpleIconSlug: 'githubcopilot' },
31
+ { match: /github|api\.github/, simpleIconSlug: 'github' },
32
+ { match: /gitlab/, simpleIconSlug: 'gitlab' },
33
+ { match: /bitbucket/, simpleIconSlug: 'bitbucket' },
34
+ // AI / LLM vendors
35
+ { match: /anthropic|\bclaude\b/, simpleIconSlug: 'anthropic' },
36
+ { match: /gemini|google[_-]?ai/, simpleIconSlug: 'googlegemini' },
37
+ { match: /perplexity/, simpleIconSlug: 'perplexity' },
38
+ // Documentation / knowledge (DeepWiki gets its own distinct mark)
39
+ { match: /deepwiki|deep[_-]?wiki/, inlineIcon: DeepWikiIcon },
40
+ { match: /notion/, simpleIconSlug: 'notion' },
41
+ { match: /confluence/, simpleIconSlug: 'confluence' },
42
+ { match: /readthedocs/, simpleIconSlug: 'readthedocs' },
43
+ { match: /mintlify/, simpleIconSlug: 'mintlify' },
44
+ // Web scraping / crawling (inline for Firecrawl — no SimpleIcons)
45
+ { match: /firecrawl/, inlineIcon: FirecrawlIcon },
46
+ // Cloud / infra
47
+ { match: /\baws\b|amazon[_-]?web|bedrock/, inlineIcon: AwsIcon },
48
+ { match: /cloudflare/, simpleIconSlug: 'cloudflare' },
49
+ { match: /vercel/, simpleIconSlug: 'vercel' },
50
+ { match: /netlify/, simpleIconSlug: 'netlify' },
51
+ { match: /digitalocean/, simpleIconSlug: 'digitalocean' },
52
+ { match: /railway/, simpleIconSlug: 'railway' },
53
+ // Databases
54
+ { match: /postgres/, simpleIconSlug: 'postgresql' },
55
+ { match: /mongodb/, simpleIconSlug: 'mongodb' },
56
+ { match: /\bredis\b/, simpleIconSlug: 'redis' },
57
+ { match: /mysql/, simpleIconSlug: 'mysql' },
58
+ { match: /sqlite/, simpleIconSlug: 'sqlite' },
59
+ { match: /supabase/, simpleIconSlug: 'supabase' },
60
+ { match: /planetscale/, simpleIconSlug: 'planetscale' },
61
+ // Productivity / collaboration
62
+ { match: /slack/, simpleIconSlug: 'slack' },
63
+ { match: /discord/, simpleIconSlug: 'discord' },
64
+ { match: /linear/, simpleIconSlug: 'linear' },
65
+ { match: /jira|atlassian/, simpleIconSlug: 'jira' },
66
+ { match: /asana/, simpleIconSlug: 'asana' },
67
+ { match: /zapier/, simpleIconSlug: 'zapier' },
68
+ // Observability
69
+ { match: /datadog/, simpleIconSlug: 'datadog' },
70
+ { match: /sentry/, simpleIconSlug: 'sentry' },
71
+ { match: /grafana/, simpleIconSlug: 'grafana' },
72
+ { match: /newrelic/, simpleIconSlug: 'newrelic' },
73
+ // Payments / commerce
74
+ { match: /stripe/, simpleIconSlug: 'stripe' },
75
+ { match: /shopify/, simpleIconSlug: 'shopify' },
76
+ ];
77
+ /**
78
+ * Resolve a vendor icon for an MCP server by matching name and URL against
79
+ * the VENDOR_MAP patterns. Returns an inline component, a SimpleIcons slug,
80
+ * or 'none' (caller falls back to transport icon).
81
+ *
82
+ * Exported for unit testing.
83
+ */
84
+ export function resolveVendorMapping(serverName, url) {
85
+ const haystack = `${serverName} ${url ?? ''}`.toLowerCase();
86
+ for (const entry of VENDOR_MAP) {
87
+ if (entry.match.test(haystack)) {
88
+ if (entry.inlineIcon)
89
+ return { kind: 'inline', component: entry.inlineIcon };
90
+ if (entry.simpleIconSlug)
91
+ return { kind: 'simpleicons', slug: entry.simpleIconSlug };
92
+ }
93
+ }
94
+ return { kind: 'none' };
95
+ }
96
+ const TRANSPORT_FALLBACKS = {
97
+ http: Server,
98
+ sse: Wifi,
99
+ stdio: Terminal,
100
+ };
101
+ const SIZE_CLASSES = {
102
+ sm: 'size-4',
103
+ md: 'size-5',
104
+ lg: 'size-6',
105
+ };
106
+ const SIZE_PIXELS = {
107
+ sm: 16,
108
+ md: 20,
109
+ lg: 24,
110
+ };
111
+ /**
112
+ * Renders an MCP server's brand icon when recognizable, falling back to the
113
+ * transport-type icon otherwise.
114
+ *
115
+ * Resolution order:
116
+ * 1. Inline brand SVG (Microsoft, Azure, DeepWiki, Firecrawl, AWS)
117
+ * 2. SimpleIcons CDN image (GitHub, Stripe, Postgres, etc.)
118
+ * 3. Transport fallback (Server/Wifi/Terminal from lucide-react)
119
+ *
120
+ * For SimpleIcons images, we handle `onError` by swapping to the transport
121
+ * fallback — this protects against SimpleIcons slug changes without breaking
122
+ * the UI.
123
+ */
124
+ export function McpServerIcon({ serverName, url, transport, className, size = 'sm', }) {
125
+ const [imageFailed, setImageFailed] = useState(false);
126
+ const resolution = resolveVendorMapping(serverName, url);
127
+ const FallbackIcon = TRANSPORT_FALLBACKS[transport] ?? Server;
128
+ const sizeClass = SIZE_CLASSES[size];
129
+ const sizePx = SIZE_PIXELS[size];
130
+ if (resolution.kind === 'inline') {
131
+ const Brand = resolution.component;
132
+ return _jsx(Brand, { className: `${sizeClass} shrink-0 ${className ?? ''}`, size: sizePx });
133
+ }
134
+ if (resolution.kind === 'simpleicons' && !imageFailed) {
135
+ return (_jsx("img", { src: `https://cdn.simpleicons.org/${resolution.slug}`, alt: "", width: sizePx, height: sizePx, className: `${sizeClass} shrink-0 ${className ?? ''}`, onError: () => setImageFailed(true) }));
136
+ }
137
+ return (_jsx(FallbackIcon, { className: `text-muted-foreground ${sizeClass} shrink-0 ${className ?? ''}` }));
138
+ }
@@ -1,6 +1,7 @@
1
1
  interface McpServersPageClientProps {
2
2
  proxyConfigured: boolean;
3
+ proxyBaseUrl: string;
3
4
  }
4
- export declare function McpServersPageClient({ proxyConfigured }: McpServersPageClientProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function McpServersPageClient({ proxyConfigured, proxyBaseUrl }: McpServersPageClientProps): import("react/jsx-runtime").JSX.Element;
5
6
  export {};
6
7
  //# sourceMappingURL=mcp-servers-page-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-servers-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.tsx"],"names":[],"mappings":"AAaA,UAAU,yBAAyB;IACjC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,wBAAgB,oBAAoB,CAAC,EAAE,eAAe,EAAE,EAAE,yBAAyB,2CA0HlF"}
1
+ {"version":3,"file":"mcp-servers-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.tsx"],"names":[],"mappings":"AAcA,UAAU,yBAAyB;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,wBAAgB,oBAAoB,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,yBAAyB,2CA2IhG"}
@@ -4,13 +4,14 @@ import { useState, useEffect, useMemo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { AlertCircle, Search, Server } from 'lucide-react';
6
6
  import { Input } from '../../ui/input.js';
7
- import { Badge } from '../../ui/badge.js';
7
+ import { Button } from '../../ui/button.js';
8
8
  import { EmptyState } from '../../common/empty-state/index.js';
9
+ import { PageHeader } from '../../common/page-header/index.js';
9
10
  import { McpServerCard } from './mcp-server-card.js';
10
11
  import { McpServerDetailDrawer } from './mcp-server-detail-drawer.js';
11
12
  import { fetchMcpServersAction } from '../../../app/actions/fetch-mcp-servers.js';
12
13
  const TRANSPORT_FILTERS = ['all', 'http', 'sse', 'stdio'];
13
- export function McpServersPageClient({ proxyConfigured }) {
14
+ export function McpServersPageClient({ proxyConfigured, proxyBaseUrl }) {
14
15
  const { t } = useTranslation('web');
15
16
  const [searchQuery, setSearchQuery] = useState('');
16
17
  const [transportFilter, setTransportFilter] = useState('all');
@@ -36,7 +37,6 @@ export function McpServersPageClient({ proxyConfigured }) {
36
37
  setLoading(false);
37
38
  });
38
39
  }, [proxyConfigured, t]);
39
- const serverNames = useMemo(() => servers.map((s) => s.server_name), [servers]);
40
40
  const filtered = useMemo(() => {
41
41
  return servers.filter((server) => {
42
42
  const query = searchQuery.toLowerCase();
@@ -48,12 +48,12 @@ export function McpServersPageClient({ proxyConfigured }) {
48
48
  });
49
49
  }, [servers, searchQuery, transportFilter]);
50
50
  if (!proxyConfigured) {
51
- return (_jsx("div", { className: "flex h-full items-center justify-center p-8", children: _jsx(EmptyState, { icon: _jsx(AlertCircle, { className: "h-8 w-8" }), title: t('mcpServers.noProxy') }) }));
51
+ return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: t('mcpServers.title'), description: t('mcpServers.subtitle') }), _jsx(EmptyState, { icon: _jsx(AlertCircle, { className: "size-10" }), title: t('mcpServers.noProxy') })] }));
52
52
  }
53
53
  if (loading) {
54
- return (_jsx("div", { className: "flex h-full items-center justify-center p-8", children: _jsxs("p", { className: "text-muted-foreground", children: [t('accessibility.loading'), "..."] }) }));
54
+ return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: t('mcpServers.title'), description: t('mcpServers.subtitle') }), _jsxs("div", { className: "text-muted-foreground text-center text-sm", children: [t('accessibility.loading'), "..."] })] }));
55
55
  }
56
- return (_jsxs("div", { className: "space-y-6 p-6", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold", children: t('mcpServers.title') }), error ? (_jsx("div", { className: "border-destructive/50 bg-destructive/10 mt-2 rounded-md border p-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "text-destructive h-4 w-4" }), _jsx("p", { className: "text-destructive text-sm", children: error })] }) })) : null, _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: t('mcpServers.subtitle') })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [_jsx(Input, { placeholder: t('mcpServers.searchPlaceholder'), value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "max-w-xs" }), _jsx("div", { className: "flex gap-1", children: TRANSPORT_FILTERS.map((filter) => (_jsx(Badge, { variant: transportFilter === filter ? 'default' : 'outline', className: "cursor-pointer", onClick: () => setTransportFilter(filter), children: filter === 'all'
57
- ? t('mcpServers.filter.all')
58
- : t(`mcpServers.transport.${filter}`, filter.toUpperCase()) }, filter))) })] }), filtered.length === 0 ? (_jsx("div", { className: "flex items-center justify-center py-16", children: _jsx(EmptyState, { icon: servers.length === 0 ? _jsx(Server, { className: "h-8 w-8" }) : _jsx(Search, { className: "h-8 w-8" }), title: servers.length === 0 ? t('mcpServers.noServers') : t('mcpServers.noResults') }) })) : (_jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filtered.map((server) => (_jsx(McpServerCard, { server: server, onSelect: setSelectedServer }, server.server_id))) })), _jsx(McpServerDetailDrawer, { server: selectedServer, serverNames: serverNames, open: !!selectedServer, onClose: () => setSelectedServer(null) })] }));
56
+ return (_jsxs("div", { className: "flex flex-col gap-8 p-8", children: [_jsx(PageHeader, { eyebrow: "Developer Portal", title: t('mcpServers.title'), description: t('mcpServers.subtitle') }), error ? (_jsxs("div", { role: "alert", className: "border-destructive/40 bg-destructive/10 editorial-shadow flex items-center gap-2 rounded-xl border px-4 py-3", children: [_jsx(AlertCircle, { className: "text-destructive size-4 shrink-0" }), _jsx("p", { className: "text-destructive text-sm font-medium", children: error })] })) : null, _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2" }), _jsx(Input, { placeholder: t('mcpServers.searchPlaceholder'), value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "ps-9", "data-testid": "mcp-servers-search" })] }), _jsx("div", { className: "flex flex-wrap gap-2", children: TRANSPORT_FILTERS.map((filter) => (_jsx(Button, { variant: transportFilter === filter ? 'default' : 'outline', size: "sm", onClick: () => setTransportFilter(filter), "data-testid": `mcp-servers-filter-${filter}`, children: filter === 'all'
57
+ ? t('mcpServers.filter.all')
58
+ : t(`mcpServers.transport.${filter}`, filter.toUpperCase()) }, filter))) }), filtered.length === 0 ? (_jsx(EmptyState, { icon: servers.length === 0 ? _jsx(Server, { className: "size-10" }) : _jsx(Search, { className: "size-10" }), title: servers.length === 0 ? t('mcpServers.noServers') : t('mcpServers.noResults') })) : (_jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filtered.map((server) => (_jsx(McpServerCard, { server: server, onSelect: setSelectedServer }, server.server_id))) })), _jsx(McpServerDetailDrawer, { server: selectedServer, proxyBaseUrl: proxyBaseUrl, open: !!selectedServer, onClose: () => setSelectedServer(null) })] }));
59
59
  }
@@ -5,8 +5,8 @@ const meta = {
5
5
  };
6
6
  export default meta;
7
7
  export const Default = {
8
- args: { proxyConfigured: true },
8
+ args: { proxyConfigured: true, proxyBaseUrl: 'http://localhost:4000' },
9
9
  };
10
10
  export const NoProxy = {
11
- args: { proxyConfigured: false },
11
+ args: { proxyConfigured: false, proxyBaseUrl: '' },
12
12
  };
@@ -1,23 +1,27 @@
1
1
  import type { McpToolInfo } from '../../../../../../packages/core/src/application/ports/output/services/mcp-server-browser.interface.js';
2
2
  interface McpToolListProps {
3
3
  tools: McpToolInfo[];
4
- serverNames: string[];
5
- }
6
- interface GroupedTools {
4
+ /**
5
+ * The server name that these tools belong to. Used to strip the
6
+ * `{serverName}-` prefix from tool names for nicer display.
7
+ */
7
8
  serverName: string;
8
- tools: {
9
- displayName: string;
10
- description?: string;
11
- }[];
9
+ }
10
+ interface DisplayTool {
11
+ displayName: string;
12
+ description?: string;
13
+ key: string;
12
14
  }
13
15
  /**
14
- * Groups tools by server name prefix.
16
+ * Normalize tools by stripping the `{serverName}-` prefix if present.
17
+ *
18
+ * LiteLLM sometimes prefixes tool names with the server alias (e.g.,
19
+ * `github_mcp-list_issues`). When we're displaying tools for a single
20
+ * known server, the prefix is redundant — strip it for cleaner UI.
15
21
  *
16
- * LiteLLM prefixes tool names with `{server_name}-` (e.g., `github_mcp-list_issues`).
17
- * We match each tool's name against known server names and strip the prefix for display.
18
- * Tools with no matching prefix go in an "Other" group.
22
+ * Exported for unit testing.
19
23
  */
20
- export declare function groupToolsByServer(tools: McpToolInfo[], serverNames: string[]): GroupedTools[];
21
- export declare function McpToolList({ tools, serverNames }: McpToolListProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function stripServerPrefix(tools: McpToolInfo[], serverName: string): DisplayTool[];
25
+ export declare function McpToolList({ tools, serverName }: McpToolListProps): import("react/jsx-runtime").JSX.Element;
22
26
  export {};
23
27
  //# sourceMappingURL=mcp-tool-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tool-list.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-tool-list.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gFAAgF,CAAC;AAElH,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CA2B9F;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,gBAAgB,2CAoCnE"}
1
+ {"version":3,"file":"mcp-tool-list.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-tool-list.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gFAAgF,CAAC;AAElH,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAYzF;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,gBAAgB,2CAwBlE"}
@@ -4,45 +4,32 @@ import { useMemo } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { Badge } from '../../ui/badge.js';
6
6
  /**
7
- * Groups tools by server name prefix.
7
+ * Normalize tools by stripping the `{serverName}-` prefix if present.
8
8
  *
9
- * LiteLLM prefixes tool names with `{server_name}-` (e.g., `github_mcp-list_issues`).
10
- * We match each tool's name against known server names and strip the prefix for display.
11
- * Tools with no matching prefix go in an "Other" group.
9
+ * LiteLLM sometimes prefixes tool names with the server alias (e.g.,
10
+ * `github_mcp-list_issues`). When we're displaying tools for a single
11
+ * known server, the prefix is redundant strip it for cleaner UI.
12
+ *
13
+ * Exported for unit testing.
12
14
  */
13
- export function groupToolsByServer(tools, serverNames) {
14
- const groups = new Map();
15
- for (const tool of tools) {
16
- let matched = false;
17
- for (const serverName of serverNames) {
18
- const prefix = `${serverName}-`;
19
- if (tool.name.startsWith(prefix)) {
20
- const displayName = tool.name.slice(prefix.length);
21
- if (!groups.has(serverName))
22
- groups.set(serverName, []);
23
- groups.get(serverName).push({ displayName, description: tool.description });
24
- matched = true;
25
- break;
26
- }
27
- }
28
- if (!matched) {
29
- if (!groups.has('other'))
30
- groups.set('other', []);
31
- groups.get('other').push({ displayName: tool.name, description: tool.description });
32
- }
33
- }
34
- return Array.from(groups.entries())
35
- .sort(([a], [b]) => a.localeCompare(b))
36
- .map(([serverName, tools]) => ({
37
- serverName,
38
- tools: tools.sort((a, b) => a.displayName.localeCompare(b.displayName)),
39
- }));
15
+ export function stripServerPrefix(tools, serverName) {
16
+ const prefix = `${serverName}-`;
17
+ return tools
18
+ .map((tool) => {
19
+ const displayName = tool.name.startsWith(prefix) ? tool.name.slice(prefix.length) : tool.name;
20
+ return {
21
+ displayName,
22
+ description: tool.description,
23
+ key: tool.name,
24
+ };
25
+ })
26
+ .sort((a, b) => a.displayName.localeCompare(b.displayName));
40
27
  }
41
- export function McpToolList({ tools, serverNames }) {
28
+ export function McpToolList({ tools, serverName }) {
42
29
  const { t } = useTranslation('web');
43
- const grouped = useMemo(() => groupToolsByServer(tools, serverNames), [tools, serverNames]);
30
+ const displayTools = useMemo(() => stripServerPrefix(tools, serverName), [tools, serverName]);
44
31
  if (tools.length === 0) {
45
32
  return _jsx("p", { className: "text-muted-foreground text-sm", children: t('mcpServers.tools.noTools') });
46
33
  }
47
- return (_jsx("div", { className: "space-y-4", children: grouped.map((group) => (_jsxs("div", { children: [_jsx("h4", { className: "text-muted-foreground mb-2 text-xs font-medium tracking-wider uppercase", children: group.serverName === 'other' ? t('mcpServers.tools.other') : group.serverName }), _jsx("div", { className: "space-y-2", children: group.tools.map((tool) => (_jsxs("div", { className: "rounded-md border p-2", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx(Badge, { variant: "outline", className: "font-mono text-xs", children: tool.displayName }) }), tool.description ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: tool.description })) : null] }, `${group.serverName}-${tool.displayName}`))) })] }, group.serverName))) }));
34
+ return (_jsx("div", { className: "space-y-2", children: displayTools.map((tool) => (_jsxs("div", { className: "rounded-md border p-2", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx(Badge, { variant: "outline", className: "font-mono text-xs", children: tool.displayName }) }), tool.description ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: tool.description })) : null] }, tool.key))) }));
48
35
  }
@@ -8,5 +8,5 @@ export default meta;
8
8
  type Story = StoryObj<typeof meta>;
9
9
  export declare const WithTools: Story;
10
10
  export declare const NoTools: Story;
11
- export declare const UnmatchedTools: Story;
11
+ export declare const UnprefixedTools: Story;
12
12
  //# sourceMappingURL=mcp-tool-list.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tool-list.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,QAAA,MAAM,IAAI;;;CAG0B,CAAC;AAErC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAQ5B,CAAC"}
1
+ {"version":3,"file":"mcp-tool-list.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,QAAA,MAAM,IAAI;;;CAG0B,CAAC;AAErC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KASvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAQ7B,CAAC"}
@@ -6,27 +6,26 @@ const meta = {
6
6
  export default meta;
7
7
  export const WithTools = {
8
8
  args: {
9
- serverNames: ['deepwiki-mcp', 'github_mcp'],
9
+ serverName: 'deepwiki-mcp',
10
10
  tools: [
11
11
  { name: 'deepwiki-mcp-read_wiki', description: 'Read wiki contents' },
12
12
  { name: 'deepwiki-mcp-search', description: 'Search documentation' },
13
- { name: 'github_mcp-list_issues', description: 'List GitHub issues' },
14
- { name: 'github_mcp-create_issue', description: 'Create a new issue' },
13
+ { name: 'deepwiki-mcp-list_repos', description: 'List indexed repositories' },
15
14
  ],
16
15
  },
17
16
  };
18
17
  export const NoTools = {
19
18
  args: {
20
- serverNames: ['deepwiki-mcp'],
19
+ serverName: 'empty_server',
21
20
  tools: [],
22
21
  },
23
22
  };
24
- export const UnmatchedTools = {
23
+ export const UnprefixedTools = {
25
24
  args: {
26
- serverNames: ['deepwiki-mcp'],
25
+ serverName: 'my_server',
27
26
  tools: [
28
- { name: 'deepwiki-mcp-read_wiki', description: 'Read wiki contents' },
29
- { name: 'unknown-server-tool', description: 'Tool from unknown server' },
27
+ { name: 'query', description: 'Execute a query' },
28
+ { name: 'list_tables', description: 'List all tables' },
30
29
  ],
31
30
  },
32
31
  };