Protected_ReadonlyAuthReadonlyAUTO_Part 3.4 — auto-collapse threshold for server groups
Protecteddestroy$Subclasses can emit anytime an error occurs.
Part 3.6 — favorited tool IDs for the current user.
Subclasses can emit this event anytime they want to communicate with the container to let it know that something has happened of significance.
ProtectednavigationSubclasses can emit this event anytime they want to open a record within a particular entity. The container should handle this event and open the record.
Part 3.2 — paginated tools (scales to thousands). Appended as user scrolls.
Tab ID for query param notification scoping. Set by resource wrappers that render child dashboards, so the child knows which tab it belongs to. If not set, falls back to Data.Configuration.tabId.
If specified, this provider will be used for communication and for all metadata purposes. By default, if not provided, the Metadata and RunView classes are used for this and the default GraphQLDataProvider is used which is connected to the same back-end MJAPI instance as the Metadata and RunView classes. If you want to have this component connect to a different MJAPI back-end, create an instance of a ProviderBase sub-class like GraphQLDataProvider/etc, and configure it as appropriate to connect to the MJAPI back-end you want to use, and then pass it in here.
Part 3.5 — Test dialog search string for tool combobox-style filter
Per-server tool count map used for "(N tools)" badge on group headers
Part 3.3 — derived data for the filter panel
Part 3.4 — tool counts from GetMCPToolCounts (global, respects search)
ReadonlytoolsTools-tab view-mode options for the shared
ReadonlyTransportSubclasses should emit this event anytime their internal state changes in a way that they'd like to persist.
StaticɵdirStaticɵfacActive filter count excluding searchTerm (surfaced separately via toolbar mj-page-search).
Set or change the dashboard configuration. Changing this property will NOT cause the dashboard to reload. Call Refresh() to do that.
Get the current filtered count based on active tab
Get current filters value (non-observable)
Get the total count based on active tab
Field config built dynamically based on the active tab.
Values record consumed by the centralized
Tab config consumed by the centralized
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified
Returns either the default RunReport provider or the one specified in the Provider property, if it was specified
Returns either the default RunView provider or the one specified in the Provider property, if it was specified
Part 3.5 — Test dialog combobox: filtered tools with recent-first ordering
Part 3.5 — recently used tool IDs derived from execution logs (dedup, max 5)
Get total tool count across all groups
Part 3.6 — Scale mode display. When a client-side filter (Favorites/Recently-used) is active,
bypass server pagination and filter the fully-loaded local this.tools list so the filter
considers ALL tools, not just the current 50-row page.
Count of non-default filter dimensions, used for "Filters (N)" badge
Derive category list (snake_case prefix) + counts from the currently loaded tools.
ProtectedGetRead current query params from tab configuration. Use in initDashboard() / ngOnInit() to get initial URL state.
Sub-classes can override this to provide a custom icon class
Part 3.4 — returns tool count for a server (falls back to ServerGroups length for legacy view)
Gets sync progress message for a connection
Get this component's tab ID. Checks ParentTabId input first (set by resource wrappers for child dashboards), then falls back to Data.Configuration.tabId.
Gets tools for a specific connection (via its server, O(1) lookup).
Gets tools for a specific server (O(1) lookup against the precomputed index).
ProtectedinitSubclasses can override this method to perform any initialization they need. This method only runs once when the dashboard is created.
Initiates OAuth authorization flow for a connection. Stores the current URL and redirects directly to the OAuth provider. Always uses the frontend callback URL so the OAuth redirect comes back to MJExplorer.
The MCP connection ID requiring OAuth
Checks if a connection is currently syncing
Loads all dashboard data using MCPEngine for cached entities and RunView for execution logs (historical data loaded on-demand)
If true, forces MCPEngine to reload from database (use after sync operations)
ProtectedloadSubclasses should override this method to load their data. This method is called when the dashboard is created and when Refresh() is called.
Part 3.6 — load the current user's favorited tool IDs.
Part 3.4 — fetch global + per-server + per-category counts (used for badges and to populate the category filter dropdown). Respects current search filter.
Part 3.2 — loads a page of tools via the paginated resolver. Uses the same GraphQLDataProvider + gql pattern as testExecuteTool above.
A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.
ProtectedNotifyAsk the host shell to close/dismiss this resource (typically: close the tab). Called by subclasses that hosted a form that emitted a 'dismiss' navigation event — most often, a brand-new record where the user clicked Discard. The record was never saved, the form is empty, and leaving it open serves no purpose. The tab-container listens for this and closes the workspace tab.
ProtectedNotifyCall this to notify the tab system that the resource's display name has changed. The tab container will update the tab title and browser title accordingly.
ProtectedNotifyProtectedNotifyInlined filter panel — single-field update helper
Handle filter changes from the filter panel component
Receive updated values from
Handles click on a log row to show detail panel
Closes the log detail panel
ProtectedOnCalled by the framework when the URL query params change due to browser back/forward navigation or a deep link.
Handles run again from log detail panel
Update searchTerm from the toolbar mj-page-search.
Close Test Tool dialog
Native-scroll infinite-load: triggers next page when user nears the bottom
Open Test Tool dialog
Optionaltool: MCPToolDataOptionalconnection: MCPConnectionDataPart 3.3 — set of tool IDs seen in recent execution logs (last N unique).
This method will result in the dashboard being reloaded.
ProtectedRefreshMarks this component's view (and its ancestors) as needing change detection and schedules a tick — the reliable way for a resource component to re-render after updating state from async work (RunView/RunQuery continuations, timers, websocket pushes, RxJS subscriptions).
WHY THIS EXISTS: the Explorer shell hosts resource components dynamically — createComponent()
ApplicationRef.attachView() — because tab content mounts into Golden Layout / cached DOM
containers, not into an Angular template. Since Angular 18's change-detection scheduler
rework (Explorer is on Angular 21), ApplicationRef.tick() only refreshes attached views
that are FLAGGED dirty; a root-level attached view whose component mutates plain fields from
an async continuation is never flagged, so the view silently never re-renders — even though
the component uses default (non-OnPush) change detection (issue #3106).The framework calls this automatically from NotifyLoadStarted() / NotifyLoadComplete(), so the standard load lifecycle re-renders without any subclass action. Call it yourself after any LATER async state change that must reach the DOM outside those signals.
Reset only the popover filters — leave searchTerm (toolbar) untouched.
ProtectedResourceOpens test tool dialog with a specific tool from expanded card
Optionalconnection: MCPConnectionDataScale-mode denominator. In bypass-pagination mode (favorites/recent filters), the user sees the fully filtered local list, so the "of N" reflects that filtered total. Otherwise we show the server-side total for the current query.
Set tools sort option
Set tools view mode (card or list)
This method can be used by a container to let the dashboard know that it is being opened/closed. Base class just sets a flag.
Optionalevent: EventToggle filter panel visibility
Toggle server group expansion
ProtectedUpdatePush query param changes to the URL. Creates a browser history entry. Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.
MCP Management Dashboard Component
Provides a tab-based interface for managing: