@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.
- package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts +9 -1
- package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.d.ts +7 -3
- package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.js +6 -5
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +4 -0
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.js +11 -1
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.d.ts +10 -2
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.js +96 -14
- package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.d.ts +1 -1
- package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.js +2 -2
- package/dist/src/presentation/web/app/mcp-servers/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/mcp-servers/page.js +3 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts +19 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.js +106 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.js +18 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-card.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-card.js +2 -8
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.d.ts +2 -2
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.js +26 -9
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.stories.js +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.d.ts +45 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.js +138 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.d.ts +2 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.js +8 -8
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.stories.js +2 -2
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.d.ts +17 -13
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.js +21 -34
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.js +7 -8
- package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.d.ts +29 -0
- package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.js +25 -0
- package/dist/translations/ar/web.json +8 -2
- package/dist/translations/de/web.json +8 -2
- package/dist/translations/en/web.json +8 -2
- package/dist/translations/es/web.json +8 -2
- package/dist/translations/fr/web.json +8 -2
- package/dist/translations/he/web.json +8 -2
- package/dist/translations/pt/web.json +8 -2
- package/dist/translations/ru/web.json +8 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +3 -3
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/mcp-servers/page/server-reference-manifest.json +13 -13
- package/web/.next/server/app/mcp-servers/page.js.nft.json +1 -1
- package/web/.next/server/app/mcp-servers/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/plugins/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/plugins/page.js.nft.json +1 -1
- package/web/.next/server/app/plugins/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js +10 -0
- package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13pshs0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13pshs0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
- package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1031n_-._.js → _083k45~._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1031n_-._.js.map → _083k45~._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_12i_bjl._.js → _087x~el._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_12i_bjl._.js.map → _087x~el._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0xn_dfh._.js → _0bknjp-._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0xn_dfh._.js.map → _0bknjp-._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0fswe4r._.js +3 -0
- package/web/.next/server/chunks/ssr/_0fswe4r._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0z6p8yi._.js → _0glox21._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0z6p8yi._.js.map → _0glox21._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_096x3u~._.js → _0vq0c0x._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_096x3u~._.js.map → _0vq0c0x._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0~g5-.e._.js +3 -0
- package/web/.next/server/chunks/ssr/_0~g5-.e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +57 -57
- package/web/.next/static/chunks/{07c0dde.-8.3e.js → 030tqac1cx-fj.js} +1 -1
- package/web/.next/static/chunks/{0242vp5_56bjp.js → 093...bdsa2vi.js} +1 -1
- package/web/.next/static/chunks/0a~-dbzk6tkpw.css +1 -0
- package/web/.next/static/chunks/{0j~279np0vu13.js → 0c.5-5ohi38wu.js} +1 -1
- package/web/.next/static/chunks/{0k3fxd~lsx6h_.js → 0djvgyu139qht.js} +1 -1
- package/web/.next/static/chunks/{084nyl7us-xbo.js → 0etn4uwpbu0p..js} +1 -1
- package/web/.next/static/chunks/0fzx4yzxqtc6v.js +1 -0
- package/web/.next/static/chunks/{0sgbbtfp4hspl.js → 0gz0lgz7pvrb5.js} +1 -1
- package/web/.next/static/chunks/0iey6w_th4w6t.js +1 -0
- package/web/.next/static/chunks/{15lkkh2eg.w0h.js → 0mukkm1m79wpt.js} +1 -1
- package/web/.next/static/chunks/{0cgfywkcky60_.js → 0ou6vmrmvv4.f.js} +1 -1
- package/web/.next/static/chunks/{15zjq.s38l64~.js → 0q1rh6cwq8q~e.js} +1 -1
- package/web/.next/static/chunks/{0xjj0-wsaziot.js → 0w9~abfpfmxwe.js} +1 -1
- package/web/.next/static/chunks/{0vscxcwhltksg.js → 0zwhmf.myybu0.js} +3 -3
- package/web/.next/static/chunks/{10j-adknfho63.js → 10rtagfoabp3b.js} +1 -1
- package/web/.next/static/chunks/{11rfk7fre_6t2.js → 113fyg.4c74k~.js} +1 -1
- package/web/.next/static/chunks/{16nbcfv~__pas.js → 11n8b8mq7xbv9.js} +1 -1
- package/web/.next/static/chunks/11v7w0zh-u9s8.js +8 -0
- package/web/.next/static/chunks/{0kv2-9owuv51~.js → 164.6ma3h~kkp.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b~nfa6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b~nfa6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0ia4o6_._.js +0 -3
- package/web/.next/server/chunks/ssr/_0ia4o6_._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0o.xc6x._.js +0 -3
- package/web/.next/server/chunks/ssr/_0o.xc6x._.js.map +0 -1
- package/web/.next/static/chunks/00h433i5-1v_-.css +0 -1
- package/web/.next/static/chunks/0jl9-2_wjbofj.js +0 -1
- package/web/.next/static/chunks/0r9cddoy0xkhk.js +0 -1
- package/web/.next/static/chunks/123j391jw_zg4.js +0 -1
- /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_buildManifest.js +0 -0
- /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_ssgManifest.js +0 -0
package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts
CHANGED
|
@@ -33,6 +33,14 @@ export interface McpToolInfo {
|
|
|
33
33
|
}
|
|
34
34
|
export interface IMcpServerBrowserService {
|
|
35
35
|
fetchServers(proxyBaseUrl: string, apiKey?: string): Promise<McpServerInfo[]>;
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Fetch tools for a specific MCP server via JSON-RPC.
|
|
38
|
+
*
|
|
39
|
+
* LiteLLM exposes each MCP server at `{proxyBaseUrl}/{serverName}/mcp` and
|
|
40
|
+
* accepts standard MCP JSON-RPC requests. This method POSTs a
|
|
41
|
+
* `{"jsonrpc":"2.0","id":1,"method":"tools/list"}` body and parses the
|
|
42
|
+
* `result.tools` array from the response.
|
|
43
|
+
*/
|
|
44
|
+
fetchTools(proxyBaseUrl: string, serverName: string, apiKey?: string): Promise<McpToolInfo[]>;
|
|
37
45
|
}
|
|
38
46
|
//# sourceMappingURL=mcp-server-browser.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-browser.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/mcp-server-browser.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9E,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server-browser.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/mcp-server-browser.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9E;;;;;;;OAOG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC/F"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fetch MCP Server Tools Use Case
|
|
3
3
|
*
|
|
4
|
-
* Retrieves the list of MCP tools from the configured
|
|
5
|
-
*
|
|
4
|
+
* Retrieves the list of MCP tools for a specific server from the configured
|
|
5
|
+
* LiteLLM proxy via JSON-RPC (POST {proxyUrl}/{serverName}/mcp).
|
|
6
6
|
*
|
|
7
7
|
* Business Rules:
|
|
8
8
|
* - Reads proxy URL from settings via ISettingsReader
|
|
9
9
|
* - If proxy not configured, returns empty array
|
|
10
|
+
* - Requires a server name to target a specific MCP server
|
|
10
11
|
* - Delegates to IMcpServerBrowserService for HTTP retrieval
|
|
11
12
|
*/
|
|
12
13
|
import type { ISettingsReader } from '../../ports/output/services/settings-reader.interface.js';
|
|
13
14
|
import type { IMcpServerBrowserService, McpToolInfo } from '../../ports/output/services/mcp-server-browser.interface.js';
|
|
15
|
+
export interface FetchMcpServerToolsInput {
|
|
16
|
+
serverName: string;
|
|
17
|
+
}
|
|
14
18
|
export interface FetchMcpServerToolsResult {
|
|
15
19
|
tools: McpToolInfo[];
|
|
16
20
|
}
|
|
@@ -18,6 +22,6 @@ export declare class FetchMcpServerToolsUseCase {
|
|
|
18
22
|
private readonly settingsReader;
|
|
19
23
|
private readonly browserService;
|
|
20
24
|
constructor(settingsReader: ISettingsReader, browserService: IMcpServerBrowserService);
|
|
21
|
-
execute(): Promise<FetchMcpServerToolsResult>;
|
|
25
|
+
execute(input: FetchMcpServerToolsInput): Promise<FetchMcpServerToolsResult>;
|
|
22
26
|
}
|
|
23
27
|
//# sourceMappingURL=fetch-mcp-server-tools.use-case.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-mcp-server-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fetch-mcp-server-tools.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EACZ,MAAM,6DAA6D,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,qBACa,0BAA0B;IAGnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,cAAc,EAAE,eAAe,EAE/B,cAAc,EAAE,wBAAwB;IAGrD,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAanF"}
|
package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fetch MCP Server Tools Use Case
|
|
3
3
|
*
|
|
4
|
-
* Retrieves the list of MCP tools from the configured
|
|
5
|
-
*
|
|
4
|
+
* Retrieves the list of MCP tools for a specific server from the configured
|
|
5
|
+
* LiteLLM proxy via JSON-RPC (POST {proxyUrl}/{serverName}/mcp).
|
|
6
6
|
*
|
|
7
7
|
* Business Rules:
|
|
8
8
|
* - Reads proxy URL from settings via ISettingsReader
|
|
9
9
|
* - If proxy not configured, returns empty array
|
|
10
|
+
* - Requires a server name to target a specific MCP server
|
|
10
11
|
* - Delegates to IMcpServerBrowserService for HTTP retrieval
|
|
11
12
|
*/
|
|
12
13
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
@@ -29,14 +30,14 @@ let FetchMcpServerToolsUseCase = class FetchMcpServerToolsUseCase {
|
|
|
29
30
|
this.settingsReader = settingsReader;
|
|
30
31
|
this.browserService = browserService;
|
|
31
32
|
}
|
|
32
|
-
async execute() {
|
|
33
|
+
async execute(input) {
|
|
33
34
|
const settings = this.settingsReader.getSettings();
|
|
34
35
|
const proxyUrl = settings?.litellmProxy?.baseUrl;
|
|
35
|
-
if (!proxyUrl) {
|
|
36
|
+
if (!proxyUrl || !input.serverName) {
|
|
36
37
|
return { tools: [] };
|
|
37
38
|
}
|
|
38
39
|
const apiKey = settings.litellmProxy?.apiKey;
|
|
39
|
-
const tools = await this.browserService.fetchTools(proxyUrl, apiKey);
|
|
40
|
+
const tools = await this.browserService.fetchTools(proxyUrl, input.serverName, apiKey);
|
|
40
41
|
return { tools };
|
|
41
42
|
}
|
|
42
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-tokens.module.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/di/modules/web-tokens.module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"web-tokens.module.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/di/modules/web-tokens.module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAoEpD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CA8I5E"}
|
|
@@ -20,6 +20,7 @@ import { AutoResolveMergedBranchesUseCase } from '../../../application/use-cases
|
|
|
20
20
|
// Agent use cases
|
|
21
21
|
import { ApproveAgentRunUseCase } from '../../../application/use-cases/agents/approve-agent-run.use-case.js';
|
|
22
22
|
import { RejectAgentRunUseCase } from '../../../application/use-cases/agents/reject-agent-run.use-case.js';
|
|
23
|
+
import { StopAgentRunUseCase } from '../../../application/use-cases/agents/stop-agent-run.use-case.js';
|
|
23
24
|
import { PollAgentEventsUseCase } from '../../../application/use-cases/agents/poll-agent-events.use-case.js';
|
|
24
25
|
// Tool use cases
|
|
25
26
|
import { InstallToolUseCase } from '../../../application/use-cases/tools/install-tool.use-case.js';
|
|
@@ -115,6 +116,9 @@ export function registerWebTokensModule(container) {
|
|
|
115
116
|
container.register('RejectAgentRunUseCase', {
|
|
116
117
|
useFactory: (c) => c.resolve(RejectAgentRunUseCase),
|
|
117
118
|
});
|
|
119
|
+
container.register('StopAgentRunUseCase', {
|
|
120
|
+
useFactory: (c) => c.resolve(StopAgentRunUseCase),
|
|
121
|
+
});
|
|
118
122
|
container.register('PollAgentEventsUseCase', {
|
|
119
123
|
useFactory: (c) => c.resolve(PollAgentEventsUseCase),
|
|
120
124
|
});
|
|
@@ -45,6 +45,18 @@ declare const McpToolInfoSchema: z.ZodObject<{
|
|
|
45
45
|
description: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<string, string>>;
|
|
46
46
|
inputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
47
47
|
}, z.core.$strip>;
|
|
48
|
+
export declare const McpJsonRpcToolsListResponseSchema: z.ZodObject<{
|
|
49
|
+
jsonrpc: z.ZodOptional<z.ZodString>;
|
|
50
|
+
id: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
51
|
+
result: z.ZodObject<{
|
|
52
|
+
tools: z.ZodArray<z.ZodObject<{
|
|
53
|
+
name: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
54
|
+
title: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
55
|
+
description: z.ZodPipe<z.ZodDefault<z.ZodString>, z.ZodTransform<string, string>>;
|
|
56
|
+
inputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
57
|
+
}, z.core.$strip>>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
}, z.core.$strip>;
|
|
48
60
|
export declare const McpToolListResponseSchema: z.ZodObject<{
|
|
49
61
|
tools: z.ZodArray<z.ZodObject<{
|
|
50
62
|
name: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-browser.schema.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;iBAavB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;kBAA+B,CAAC;AAEhE,QAAA,MAAM,iBAAiB;;;;;iBAWrB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server-browser.schema.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;iBAavB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;kBAA+B,CAAC;AAEhE,QAAA,MAAM,iBAAiB;;;;;iBAWrB,CAAC;AAIH,eAAO,MAAM,iCAAiC;;;;;;;;;;;iBAM5C,CAAC;AAGH,eAAO,MAAM,yBAAyB;;;;;;;iBAEpC,CAAC;AAGH,eAAO,MAAM,yBAAyB;;;;;kBAA6B,CAAC;AAEpE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACzE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -46,8 +46,18 @@ const McpToolInfoSchema = z.object({
|
|
|
46
46
|
.transform((s) => s.slice(0, 2000)),
|
|
47
47
|
inputSchema: z.record(z.string(), z.unknown()).optional(),
|
|
48
48
|
});
|
|
49
|
+
// MCP JSON-RPC response for tools/list:
|
|
50
|
+
// { "jsonrpc": "2.0", "id": 1, "result": { "tools": [...] } }
|
|
51
|
+
export const McpJsonRpcToolsListResponseSchema = z.object({
|
|
52
|
+
jsonrpc: z.string().optional(),
|
|
53
|
+
id: z.union([z.string(), z.number()]).optional(),
|
|
54
|
+
result: z.object({
|
|
55
|
+
tools: z.array(McpToolInfoSchema),
|
|
56
|
+
}),
|
|
57
|
+
});
|
|
58
|
+
// Some older LiteLLM versions / compat modes may return the wrapped result directly
|
|
49
59
|
export const McpToolListResponseSchema = z.object({
|
|
50
60
|
tools: z.array(McpToolInfoSchema),
|
|
51
61
|
});
|
|
52
|
-
//
|
|
62
|
+
// Bare array fallback
|
|
53
63
|
export const McpToolListFallbackSchema = z.array(McpToolInfoSchema);
|
|
@@ -4,14 +4,22 @@
|
|
|
4
4
|
* Implements IMcpServerBrowserService using Node 22+ native fetch for
|
|
5
5
|
* read-only HTTP retrieval from LiteLLM proxy endpoints:
|
|
6
6
|
* - GET /public/mcp_hub — list accessible MCP servers
|
|
7
|
-
* -
|
|
7
|
+
* - POST /{serverName}/mcp — list tools for a specific server via JSON-RPC
|
|
8
8
|
*
|
|
9
9
|
* Pattern: AbortController timeout, redirect rejection, size limit, Zod validation.
|
|
10
10
|
* Silent failure to empty arrays on any error.
|
|
11
|
+
*
|
|
12
|
+
* LiteLLM's MCP tool listing is per-server via JSON-RPC, not a global REST
|
|
13
|
+
* endpoint. See https://docs.litellm.ai/docs/mcp for the canonical API shape:
|
|
14
|
+
*
|
|
15
|
+
* POST {proxyBaseUrl}/{serverName}/mcp
|
|
16
|
+
* Content-Type: application/json
|
|
17
|
+
* x-litellm-api-key: Bearer {apiKey}
|
|
18
|
+
* {"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
|
|
11
19
|
*/
|
|
12
20
|
import type { IMcpServerBrowserService, McpServerInfo, McpToolInfo } from '../../../application/ports/output/services/mcp-server-browser.interface.js';
|
|
13
21
|
export declare class McpServerBrowserService implements IMcpServerBrowserService {
|
|
14
22
|
fetchServers(proxyBaseUrl: string, apiKey?: string): Promise<McpServerInfo[]>;
|
|
15
|
-
fetchTools(proxyBaseUrl: string, apiKey?: string): Promise<McpToolInfo[]>;
|
|
23
|
+
fetchTools(proxyBaseUrl: string, serverName: string, apiKey?: string): Promise<McpToolInfo[]>;
|
|
16
24
|
}
|
|
17
25
|
//# sourceMappingURL=mcp-server-browser.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-browser.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-server-browser.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EACV,wBAAwB,EACxB,aAAa,EACb,WAAW,EACZ,MAAM,4EAA4E,CAAC;AAYpF,qBACa,uBAAwB,YAAW,wBAAwB;IAChE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAoB7E,UAAU,CACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,EAAE,CAAC;CAqC1B"}
|
|
@@ -4,10 +4,18 @@
|
|
|
4
4
|
* Implements IMcpServerBrowserService using Node 22+ native fetch for
|
|
5
5
|
* read-only HTTP retrieval from LiteLLM proxy endpoints:
|
|
6
6
|
* - GET /public/mcp_hub — list accessible MCP servers
|
|
7
|
-
* -
|
|
7
|
+
* - POST /{serverName}/mcp — list tools for a specific server via JSON-RPC
|
|
8
8
|
*
|
|
9
9
|
* Pattern: AbortController timeout, redirect rejection, size limit, Zod validation.
|
|
10
10
|
* Silent failure to empty arrays on any error.
|
|
11
|
+
*
|
|
12
|
+
* LiteLLM's MCP tool listing is per-server via JSON-RPC, not a global REST
|
|
13
|
+
* endpoint. See https://docs.litellm.ai/docs/mcp for the canonical API shape:
|
|
14
|
+
*
|
|
15
|
+
* POST {proxyBaseUrl}/{serverName}/mcp
|
|
16
|
+
* Content-Type: application/json
|
|
17
|
+
* x-litellm-api-key: Bearer {apiKey}
|
|
18
|
+
* {"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
|
|
11
19
|
*/
|
|
12
20
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
13
21
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -16,9 +24,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
16
24
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
25
|
};
|
|
18
26
|
import { injectable } from 'tsyringe';
|
|
19
|
-
import { McpServerListSchema, McpToolListResponseSchema, McpToolListFallbackSchema, } from './mcp-server-browser.schema.js';
|
|
27
|
+
import { McpServerListSchema, McpJsonRpcToolsListResponseSchema, McpToolListResponseSchema, McpToolListFallbackSchema, } from './mcp-server-browser.schema.js';
|
|
20
28
|
const FETCH_TIMEOUT_MS = 10_000;
|
|
21
29
|
const MAX_RESPONSE_SIZE = 5_000_000;
|
|
30
|
+
const SAFE_SERVER_NAME_REGEX = /^[a-zA-Z0-9_-]{1,100}$/;
|
|
22
31
|
let McpServerBrowserService = class McpServerBrowserService {
|
|
23
32
|
async fetchServers(proxyBaseUrl, apiKey) {
|
|
24
33
|
try {
|
|
@@ -26,8 +35,8 @@ let McpServerBrowserService = class McpServerBrowserService {
|
|
|
26
35
|
if (!url)
|
|
27
36
|
return [];
|
|
28
37
|
const endpoint = `${url}/public/mcp_hub`;
|
|
29
|
-
const headers =
|
|
30
|
-
const json = await fetchJson(endpoint, headers);
|
|
38
|
+
const headers = buildGetHeaders(apiKey);
|
|
39
|
+
const json = await fetchJson(endpoint, { method: 'GET', headers });
|
|
31
40
|
if (json === null)
|
|
32
41
|
return [];
|
|
33
42
|
const parsed = McpServerListSchema.safeParse(json);
|
|
@@ -39,21 +48,34 @@ let McpServerBrowserService = class McpServerBrowserService {
|
|
|
39
48
|
return [];
|
|
40
49
|
}
|
|
41
50
|
}
|
|
42
|
-
async fetchTools(proxyBaseUrl, apiKey) {
|
|
51
|
+
async fetchTools(proxyBaseUrl, serverName, apiKey) {
|
|
43
52
|
try {
|
|
44
53
|
const url = parseAndValidateUrl(proxyBaseUrl);
|
|
45
54
|
if (!url)
|
|
46
55
|
return [];
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
// Validate server name against an allowlist regex before URL interpolation
|
|
57
|
+
// to prevent path traversal / injection into the request URL.
|
|
58
|
+
if (!SAFE_SERVER_NAME_REGEX.test(serverName))
|
|
59
|
+
return [];
|
|
60
|
+
const endpoint = `${url}/${serverName}/mcp`;
|
|
61
|
+
const headers = buildPostHeaders(apiKey);
|
|
62
|
+
const body = JSON.stringify({
|
|
63
|
+
jsonrpc: '2.0',
|
|
64
|
+
id: 1,
|
|
65
|
+
method: 'tools/list',
|
|
66
|
+
});
|
|
67
|
+
const json = await fetchJson(endpoint, { method: 'POST', headers, body });
|
|
50
68
|
if (json === null)
|
|
51
69
|
return [];
|
|
52
|
-
//
|
|
70
|
+
// Primary format: JSON-RPC 2.0 response { jsonrpc, id, result: { tools: [...] } }
|
|
71
|
+
const rpcParsed = McpJsonRpcToolsListResponseSchema.safeParse(json);
|
|
72
|
+
if (rpcParsed.success)
|
|
73
|
+
return rpcParsed.data.result.tools;
|
|
74
|
+
// Fallback: some versions may return { tools: [...] } directly
|
|
53
75
|
const wrapped = McpToolListResponseSchema.safeParse(json);
|
|
54
76
|
if (wrapped.success)
|
|
55
77
|
return wrapped.data.tools;
|
|
56
|
-
// Fallback: bare array
|
|
78
|
+
// Fallback: bare array
|
|
57
79
|
const bare = McpToolListFallbackSchema.safeParse(json);
|
|
58
80
|
if (bare.success)
|
|
59
81
|
return bare.data;
|
|
@@ -79,35 +101,95 @@ function parseAndValidateUrl(proxyBaseUrl) {
|
|
|
79
101
|
return null;
|
|
80
102
|
}
|
|
81
103
|
}
|
|
82
|
-
function
|
|
104
|
+
function buildGetHeaders(apiKey) {
|
|
83
105
|
const headers = {};
|
|
84
106
|
if (apiKey) {
|
|
85
107
|
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
86
108
|
}
|
|
87
109
|
return headers;
|
|
88
110
|
}
|
|
89
|
-
|
|
111
|
+
function buildPostHeaders(apiKey) {
|
|
112
|
+
// LiteLLM's MCP JSON-RPC endpoint expects `x-litellm-api-key: Bearer <key>`,
|
|
113
|
+
// not a standard `Authorization` header. See docs.litellm.ai/docs/mcp
|
|
114
|
+
// "Forwarding Custom Headers to MCP Servers" section.
|
|
115
|
+
const headers = {
|
|
116
|
+
'Content-Type': 'application/json',
|
|
117
|
+
Accept: 'application/json, text/event-stream',
|
|
118
|
+
};
|
|
119
|
+
if (apiKey) {
|
|
120
|
+
headers['x-litellm-api-key'] = `Bearer ${apiKey}`;
|
|
121
|
+
}
|
|
122
|
+
return headers;
|
|
123
|
+
}
|
|
124
|
+
async function fetchJson(endpoint, options) {
|
|
90
125
|
const controller = new AbortController();
|
|
91
126
|
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
92
127
|
try {
|
|
93
128
|
const res = await fetch(endpoint, {
|
|
129
|
+
method: options.method,
|
|
94
130
|
signal: controller.signal,
|
|
95
131
|
redirect: 'error',
|
|
96
|
-
headers,
|
|
132
|
+
headers: options.headers,
|
|
133
|
+
body: options.body,
|
|
97
134
|
});
|
|
98
135
|
if (!res.ok)
|
|
99
136
|
return null;
|
|
137
|
+
const contentType = res.headers.get('content-type')?.toLowerCase() ?? '';
|
|
100
138
|
const text = await res.text();
|
|
101
139
|
if (text.length > MAX_RESPONSE_SIZE)
|
|
102
140
|
return null;
|
|
141
|
+
// MCP Streamable HTTP transport may return either application/json
|
|
142
|
+
// or text/event-stream. SSE responses look like:
|
|
143
|
+
// event: message
|
|
144
|
+
// data: {"jsonrpc":"2.0","id":1,"result":{"tools":[...]}}
|
|
145
|
+
//
|
|
146
|
+
// We extract the first `data:` line's payload and parse that as JSON.
|
|
147
|
+
// If the content type is JSON, we parse directly.
|
|
148
|
+
if (contentType.includes('text/event-stream')) {
|
|
149
|
+
return parseSseFirstDataEvent(text);
|
|
150
|
+
}
|
|
103
151
|
try {
|
|
104
152
|
return JSON.parse(text);
|
|
105
153
|
}
|
|
106
154
|
catch {
|
|
107
|
-
return
|
|
155
|
+
// Some servers omit the content-type header but return SSE anyway.
|
|
156
|
+
// Try SSE parsing as a fallback before giving up.
|
|
157
|
+
return parseSseFirstDataEvent(text);
|
|
108
158
|
}
|
|
109
159
|
}
|
|
110
160
|
finally {
|
|
111
161
|
clearTimeout(timeout);
|
|
112
162
|
}
|
|
113
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Extract the first `data: ...` payload from a Server-Sent Events response
|
|
166
|
+
* body and parse it as JSON. Returns null if no valid data line is found.
|
|
167
|
+
*
|
|
168
|
+
* Handles:
|
|
169
|
+
* event: message
|
|
170
|
+
* data: {"jsonrpc":"2.0",...}
|
|
171
|
+
*
|
|
172
|
+
* And multi-line data fields (per SSE spec — though rare for MCP).
|
|
173
|
+
*/
|
|
174
|
+
function parseSseFirstDataEvent(body) {
|
|
175
|
+
const lines = body.split(/\r?\n/);
|
|
176
|
+
const dataParts = [];
|
|
177
|
+
for (const line of lines) {
|
|
178
|
+
if (line.startsWith('data:')) {
|
|
179
|
+
// Strip the "data:" prefix and any single leading space.
|
|
180
|
+
dataParts.push(line.slice(5).replace(/^ /, ''));
|
|
181
|
+
}
|
|
182
|
+
else if (line === '' && dataParts.length > 0) {
|
|
183
|
+
// Empty line terminates the first SSE event — stop collecting.
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (dataParts.length === 0)
|
|
188
|
+
return null;
|
|
189
|
+
try {
|
|
190
|
+
return JSON.parse(dataParts.join('\n'));
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FetchMcpServerToolsResult } from '../../../../../packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.js';
|
|
2
|
-
export declare function fetchMcpServerToolsAction(): Promise<FetchMcpServerToolsResult & {
|
|
2
|
+
export declare function fetchMcpServerToolsAction(serverName: string): Promise<FetchMcpServerToolsResult & {
|
|
3
3
|
error?: string;
|
|
4
4
|
}>;
|
|
5
5
|
//# sourceMappingURL=fetch-mcp-server-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-mcp-server-tools.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/fetch-mcp-server-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mFAAmF,CAAC;AAEnI,wBAAsB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"fetch-mcp-server-tools.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/fetch-mcp-server-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mFAAmF,CAAC;AAEnI,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,yBAAyB,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOzD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { resolve } from '../../lib/server-container.js';
|
|
3
|
-
export async function fetchMcpServerToolsAction() {
|
|
3
|
+
export async function fetchMcpServerToolsAction(serverName) {
|
|
4
4
|
try {
|
|
5
5
|
const useCase = resolve('FetchMcpServerToolsUseCase');
|
|
6
|
-
return await useCase.execute();
|
|
6
|
+
return await useCase.execute({ serverName });
|
|
7
7
|
}
|
|
8
8
|
catch {
|
|
9
9
|
return { tools: [], error: 'Failed to fetch MCP server tools' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/mcp-servers/page.tsx"],"names":[],"mappings":"AAMA,wBAA8B,cAAc,
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/mcp-servers/page.tsx"],"names":[],"mappings":"AAMA,wBAA8B,cAAc,qDAgB3C"}
|
|
@@ -8,13 +8,15 @@ export default async function McpServersPage() {
|
|
|
8
8
|
if (!flags.mcpServers)
|
|
9
9
|
notFound();
|
|
10
10
|
let proxyConfigured = false;
|
|
11
|
+
let proxyBaseUrl = '';
|
|
11
12
|
try {
|
|
12
13
|
const useCase = resolve('LoadSettingsUseCase');
|
|
13
14
|
const settings = await useCase.execute();
|
|
14
15
|
proxyConfigured = !!settings.litellmProxy?.baseUrl;
|
|
16
|
+
proxyBaseUrl = settings.litellmProxy?.baseUrl ?? '';
|
|
15
17
|
}
|
|
16
18
|
catch {
|
|
17
19
|
// Settings not available
|
|
18
20
|
}
|
|
19
|
-
return _jsx(McpServersPageClient, { proxyConfigured: proxyConfigured });
|
|
21
|
+
return _jsx(McpServersPageClient, { proxyConfigured: proxyConfigured, proxyBaseUrl: proxyBaseUrl });
|
|
20
22
|
}
|
package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface McpConnectInstructionsProps {
|
|
2
|
+
proxyBaseUrl: string;
|
|
3
|
+
serverName: string;
|
|
4
|
+
}
|
|
5
|
+
type ClientId = 'claude-code' | 'cursor' | 'vscode' | 'gemini' | 'codex' | 'curl';
|
|
6
|
+
/**
|
|
7
|
+
* Generate copy-pasteable connection snippets for various MCP clients.
|
|
8
|
+
*
|
|
9
|
+
* The LiteLLM proxy exposes each MCP server at {proxyBaseUrl}/{serverName}/mcp
|
|
10
|
+
* and authenticates via the `x-litellm-api-key: Bearer <key>` header.
|
|
11
|
+
*
|
|
12
|
+
* All snippets use `<LITELLM_API_KEY>` as a placeholder that the user must
|
|
13
|
+
* replace with their actual virtual key — we never inline a real key into
|
|
14
|
+
* copyable instructions.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildSnippet(clientId: ClientId, proxyBaseUrl: string, serverName: string): string;
|
|
17
|
+
export declare function McpConnectInstructions({ proxyBaseUrl, serverName }: McpConnectInstructionsProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=mcp-connect-instructions.d.ts.map
|
package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-connect-instructions.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.tsx"],"names":[],"mappings":"AAOA,UAAU,2BAA2B;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAgBlF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAkFjG;AAED,wBAAgB,sBAAsB,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,2BAA2B,2CAkE/F"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
import { Button } from '../../ui/button.js';
|
|
6
|
+
import { Check, Copy } from 'lucide-react';
|
|
7
|
+
const CLIENTS = [
|
|
8
|
+
{ id: 'claude-code', label: 'Claude Code' },
|
|
9
|
+
{ id: 'cursor', label: 'Cursor' },
|
|
10
|
+
{ id: 'vscode', label: 'VS Code' },
|
|
11
|
+
{ id: 'gemini', label: 'Gemini CLI' },
|
|
12
|
+
{ id: 'codex', label: 'Codex CLI' },
|
|
13
|
+
{ id: 'curl', label: 'cURL' },
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Generate copy-pasteable connection snippets for various MCP clients.
|
|
17
|
+
*
|
|
18
|
+
* The LiteLLM proxy exposes each MCP server at {proxyBaseUrl}/{serverName}/mcp
|
|
19
|
+
* and authenticates via the `x-litellm-api-key: Bearer <key>` header.
|
|
20
|
+
*
|
|
21
|
+
* All snippets use `<LITELLM_API_KEY>` as a placeholder that the user must
|
|
22
|
+
* replace with their actual virtual key — we never inline a real key into
|
|
23
|
+
* copyable instructions.
|
|
24
|
+
*/
|
|
25
|
+
export function buildSnippet(clientId, proxyBaseUrl, serverName) {
|
|
26
|
+
const endpoint = `${proxyBaseUrl.replace(/\/$/, '')}/${serverName}/mcp`;
|
|
27
|
+
switch (clientId) {
|
|
28
|
+
case 'claude-code':
|
|
29
|
+
// Claude Code supports `claude mcp add` command
|
|
30
|
+
return [
|
|
31
|
+
`claude mcp add --transport http ${serverName} \\`,
|
|
32
|
+
` ${endpoint} \\`,
|
|
33
|
+
` --header "x-litellm-api-key: Bearer <LITELLM_API_KEY>"`,
|
|
34
|
+
].join('\n');
|
|
35
|
+
case 'cursor':
|
|
36
|
+
// Cursor: ~/.cursor/mcp.json
|
|
37
|
+
return JSON.stringify({
|
|
38
|
+
mcpServers: {
|
|
39
|
+
[serverName]: {
|
|
40
|
+
url: endpoint,
|
|
41
|
+
headers: {
|
|
42
|
+
'x-litellm-api-key': 'Bearer <LITELLM_API_KEY>',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}, null, 2);
|
|
47
|
+
case 'vscode':
|
|
48
|
+
// VS Code / Copilot: settings.json under "mcp"
|
|
49
|
+
return JSON.stringify({
|
|
50
|
+
mcp: {
|
|
51
|
+
servers: {
|
|
52
|
+
[serverName]: {
|
|
53
|
+
type: 'http',
|
|
54
|
+
url: endpoint,
|
|
55
|
+
headers: {
|
|
56
|
+
'x-litellm-api-key': 'Bearer <LITELLM_API_KEY>',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
}, null, 2);
|
|
62
|
+
case 'gemini':
|
|
63
|
+
// Gemini CLI: ~/.gemini/settings.json or project .gemini/settings.json
|
|
64
|
+
return JSON.stringify({
|
|
65
|
+
mcpServers: {
|
|
66
|
+
[serverName]: {
|
|
67
|
+
httpUrl: endpoint,
|
|
68
|
+
headers: {
|
|
69
|
+
'x-litellm-api-key': 'Bearer <LITELLM_API_KEY>',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
}, null, 2);
|
|
74
|
+
case 'codex':
|
|
75
|
+
// Codex CLI: ~/.codex/config.toml
|
|
76
|
+
return [
|
|
77
|
+
`[mcp_servers.${serverName}]`,
|
|
78
|
+
`url = "${endpoint}"`,
|
|
79
|
+
`headers = { "x-litellm-api-key" = "Bearer <LITELLM_API_KEY>" }`,
|
|
80
|
+
].join('\n');
|
|
81
|
+
case 'curl':
|
|
82
|
+
return [
|
|
83
|
+
`curl --location '${endpoint}' \\`,
|
|
84
|
+
` --header 'Content-Type: application/json' \\`,
|
|
85
|
+
` --header 'x-litellm-api-key: Bearer <LITELLM_API_KEY>' \\`,
|
|
86
|
+
` --data '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'`,
|
|
87
|
+
].join('\n');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function McpConnectInstructions({ proxyBaseUrl, serverName }) {
|
|
91
|
+
const { t } = useTranslation('web');
|
|
92
|
+
const [activeClient, setActiveClient] = useState('claude-code');
|
|
93
|
+
const [copied, setCopied] = useState(false);
|
|
94
|
+
const snippet = buildSnippet(activeClient, proxyBaseUrl, serverName);
|
|
95
|
+
const handleCopy = async () => {
|
|
96
|
+
try {
|
|
97
|
+
await navigator.clipboard.writeText(snippet);
|
|
98
|
+
setCopied(true);
|
|
99
|
+
setTimeout(() => setCopied(false), 2000);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Clipboard not available (e.g., insecure context) — silently ignore.
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsx("div", { className: "flex flex-wrap gap-1.5 rounded-lg border border-slate-200/60 bg-slate-50/50 p-1 dark:border-slate-700/50 dark:bg-slate-900/40", role: "tablist", "aria-label": t('mcpServers.connect.title'), children: CLIENTS.map((client) => (_jsx("button", { type: "button", role: "tab", "aria-selected": activeClient === client.id, onClick: () => setActiveClient(client.id), "data-state": activeClient === client.id ? 'active' : 'inactive', className: "data-[state=active]:bg-card data-[state=active]:text-primary text-muted-foreground hover:text-foreground rounded-md px-2.5 py-1 text-xs font-medium transition-all data-[state=active]:shadow-sm data-[state=active]:ring-1 data-[state=active]:ring-slate-200/70 dark:data-[state=active]:ring-slate-700/50", children: client.label }, client.id))) }), _jsxs("div", { className: "editorial-shadow group relative overflow-hidden rounded-xl border border-slate-200/60 bg-slate-50/60 dark:border-slate-700/50 dark:bg-slate-900/60", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-slate-200/60 bg-slate-100/40 px-3 py-2 dark:border-slate-700/50 dark:bg-slate-900/40", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "size-2 rounded-full bg-slate-300 dark:bg-slate-600", "aria-hidden": true }), _jsx("span", { className: "size-2 rounded-full bg-slate-300 dark:bg-slate-600", "aria-hidden": true }), _jsx("span", { className: "size-2 rounded-full bg-slate-300 dark:bg-slate-600", "aria-hidden": true })] }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-6 shrink-0", onClick: handleCopy, "aria-label": t('mcpServers.connect.copy'), children: copied ? _jsx(Check, { className: "text-primary size-3" }) : _jsx(Copy, { className: "size-3" }) })] }), _jsx("pre", { className: "max-h-64 overflow-auto p-3 font-mono text-[11px] leading-relaxed", children: _jsx("code", { children: snippet }) })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: t('mcpServers.connect.replaceKey') })] }));
|
|
106
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { McpConnectInstructions } from './mcp-connect-instructions.js';
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof McpConnectInstructions;
|
|
6
|
+
};
|
|
7
|
+
export default meta;
|
|
8
|
+
type Story = StoryObj<typeof meta>;
|
|
9
|
+
export declare const Default: Story;
|
|
10
|
+
export declare const HttpsProxy: Story;
|
|
11
|
+
//# sourceMappingURL=mcp-connect-instructions.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-connect-instructions.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,QAAA,MAAM,IAAI;;;CAGqC,CAAC;AAEhD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { McpConnectInstructions } from './mcp-connect-instructions.js';
|
|
2
|
+
const meta = {
|
|
3
|
+
title: 'Features/McpServers/McpConnectInstructions',
|
|
4
|
+
component: McpConnectInstructions,
|
|
5
|
+
};
|
|
6
|
+
export default meta;
|
|
7
|
+
export const Default = {
|
|
8
|
+
args: {
|
|
9
|
+
proxyBaseUrl: 'http://localhost:4000',
|
|
10
|
+
serverName: 'deepwiki_mcp',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
export const HttpsProxy = {
|
|
14
|
+
args: {
|
|
15
|
+
proxyBaseUrl: 'https://litellm.example.com',
|
|
16
|
+
serverName: 'github_mcp',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-card.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-server-card.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gFAAgF,CAAC;AAEpH,UAAU,kBAAkB;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"mcp-server-card.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/mcp-servers/mcp-server-card.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gFAAgF,CAAC;AAEpH,UAAU,kBAAkB;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAkDrE"}
|