Member Junction
    Preparing search index...

    MCP Management Dashboard Component

    Provides a tab-based interface for managing:

    • MCP Servers
    • MCP Connections
    • MCP Tools
    • Execution Logs

    Hierarchy (View Summary)

    Implements

    • OnInit
    • AfterViewInit
    • OnDestroy
    Index

    Constructors

    Properties

    Accessors

    Methods

    activeFilterCount applyFilters cancelConnectionForm cancelServerForm computeCategoriesFromTools createConnection createServer deleteConnection deleteServer editConnection editServer formatDate formatDuration formatLogJson formatTestResult getFormattedInputSchema getLogSortClass getParamCount GetQueryParams getRequiredParamCount GetResourceDisplayName GetResourceIconClass getServerToolCount getStatusClass getSyncProgressMessage getSyncState getTabId getToolsForConnection getToolsForServer getTransportIcon initDashboard initiateOAuthFlow isConnectionExpanded isFavorited isRecentTestTool isServerExpanded isSyncing isToolExpanded loadAllData loadData loadFavorites loadToolCounts loadToolsPage ngAfterViewInit ngOnDestroy ngOnInit NotifyCloseRequested NotifyDisplayNameChanged NotifyLoadComplete NotifyLoadStarted onConnectionDialogClose onFilterFieldChange onFiltersChange onFilterValuesChange onLogClick onLogDetailClose onLogSortColumn OnQueryParamsChanged onRunAgainFromLog onSearchChange onSearchTermChange onServerDialogClose onStatusFilterChange onTestConnectionChange onTestServerChange onTestToolDialogClose onTestToolSearchChange onTestToolSelectChange onToolsScrolledIndexChange onToolsScrollNative openTestToolDialog pickTestTool recentToolIDSet Refresh RefreshView resetAllFilters resetPopoverFilters ResourceRecordSaved runToolFromCard saveConnectionForm saveServerForm scaleDenominator setActiveTab setToolsSort setToolsViewMode SetVisible syncConnectionTools testCloseDialog testExecuteTool testGoBack testProceedToConfig testRunAgain testSetParam toggleConnectionExpand toggleFavorite toggleFilterPanel toggleScalableMode toggleServerExpand toggleServerGroup toggleToolExpand trackPagedTool UpdateQueryParams

    Constructors

    Properties

    _config: DashboardConfig | null
    ActiveTab: MCPDashboardTab = 'servers'
    AuthTypes: { label: string; value: string }[] = ...
    AUTO_COLLAPSE_THRESHOLD: 100

    Part 3.4 — auto-collapse threshold for server groups

    ConnectionForm: {
        BearerToken: string;
        Description: string;
        MCPServerID: string;
        Name: string;
        Status: string;
    } = ...
    ConnectionFormError: string | null = null
    ConnectionFormSaving: boolean = false
    connections: MCPConnectionData[] = []
    destroy$: Subject<void> = ...
    EditingConnection: MCPConnectionData | null = null
    EditingServer: MCPServerData | null = null
    Error: EventEmitter<Error>

    Subclasses can emit anytime an error occurs.

    ErrorMessage: string | null = null
    executionLogs: MCPExecutionLogData[] = []
    ExpandedConnectionID: string | null = null
    ExpandedServerID: string | null = null
    ExpandedToolId: string | null = null
    favoritedToolIDs: Set<string> = ...

    Part 3.6 — favorited tool IDs for the current user.

    filteredConnections: MCPConnectionData[] = []
    filteredLogs: MCPExecutionLogData[] = []
    filteredServers: MCPServerData[] = []
    filteredTools: MCPToolData[] = []
    FilterPanelVisible: boolean = true
    filters$: BehaviorSubject<MCPDashboardFilters> = ...
    Interaction: EventEmitter<any>

    Subclasses can emit this event anytime they want to communicate with the container to let it know that something has happened of significance.

    IsLoading: boolean = false
    LogErrorExpanded: boolean = true
    LogInputArgsExpanded: boolean = true
    LogResultExpanded: boolean = true
    LogsSortAscending: boolean = false
    LogsSortColumn:
        | "status"
        | "error"
        | "server"
        | "duration"
        | "tool"
        | "connection"
        | "started" = 'started'
    navigationService: NavigationService
    OpenEntityRecord: EventEmitter<{ EntityName: string; RecordPKey: CompositeKey }>

    Subclasses 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.

    pagedTools: MCPToolSummary[] = []

    Part 3.2 — paginated tools (scales to thousands). Appended as user scrolls.

    ParentTabId: string | null

    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.

    Provider: IMetadataProvider | null

    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.

    SelectedLog: MCPExecutionLogData | null = null
    ServerForm: {
        Command: string;
        DefaultAuthType: string;
        Description: string;
        Name: string;
        RateLimitPerHour: number | null;
        RateLimitPerMinute: number | null;
        RequestTimeoutMs: number;
        ServerURL: string;
        Status: string;
        TransportType: string;
    } = ...
    ServerFormError: string | null = null
    ServerFormSaving: boolean = false
    ServerGroups: MCPServerGroup[] = []
    servers: MCPServerData[] = []
    ShowConnectionDialog: boolean = false
    ShowLogDetailPanel: boolean = false
    ShowServerDialog: boolean = false
    ShowTestToolDialog: boolean = false
    stats: MCPDashboardStats = ...
    SyncStates: Map<string, MCPSyncState> = ...
    TestExecutionResult:
        | {
            DurationMs?: number;
            ErrorMessage?: string;
            Result?: string;
            Success: boolean;
        }
        | null = null
    TestFilteredConnections: MCPConnectionData[] = []
    TestFilteredTools: MCPToolData[] = []
    TestIsExecuting: boolean = false
    TestParamConfigs: TestParamConfig[] = []
    TestParamValues: Record<string, string> = {}
    TestSelectedTool: MCPToolData | null = null
    TestStep: "select" | "configure" | "results" = 'select'
    TestToolConnectionID: string | null = null
    TestToolID: string | null = null
    TestToolSearch: string = ''

    Part 3.5 — Test dialog search string for tool combobox-style filter

    TestToolServerID: string | null = null
    toolCountByServer: Record<string, number> = {}

    Per-server tool count map used for "(N tools)" badge on group headers

    tools: MCPToolData[] = []
    toolsAvailableCategories: { category: string; count: number }[] = []
    toolsAvailableServers: { ID: string; Name: string }[] = []

    Part 3.3 — derived data for the filter panel

    toolsGlobalCount: number = 0

    Part 3.4 — tool counts from GetMCPToolCounts (global, respects search)

    toolsLoading: boolean = false
    toolsPageSize: number = 50
    toolsSkip: number = 0
    ToolsSortAscending: boolean = true
    ToolsSortBy: ToolsSortBy = 'server'
    toolsTotalCount: number = 0
    ToolsViewMode: ToolsViewMode = 'card'
    toolsViewOptions: { icon: string; key: string; title: string }[] = ...

    Tools-tab view-mode options for the shared .

    TransportTypes: { label: string; value: string }[] = ...
    UserStateChanged: EventEmitter<any>

    Subclasses should emit this event anytime their internal state changes in a way that they'd like to persist.

    useScalablePagination: boolean = false
    "ɵdir": unknown
    "ɵfac": unknown

    Accessors

    • get Config(): DashboardConfig | null

      Returns DashboardConfig | null

    • set Config(value: DashboardConfig): void

      Set or change the dashboard configuration. Changing this property will NOT cause the dashboard to reload. Call Refresh() to do that.

      Parameters

      Returns void

    • get Data(): ResourceData

      Returns ResourceData

    • set Data(value: ResourceData): void

      Parameters

      Returns void

    • get DisplayNameChangedEvent(): ((newName: string) => void) | null

      Returns ((newName: string) => void) | null

    • set DisplayNameChangedEvent(value: ((newName: string) => void) | null): void

      Parameters

      • value: ((newName: string) => void) | null

      Returns void

    • get LoadComplete(): boolean

      Returns boolean

    • get LoadCompleteEvent(): any

      Returns any

    • set LoadCompleteEvent(value: any): void

      Parameters

      • value: any

      Returns void

    • get LoadStarted(): boolean

      Returns boolean

    • get LoadStartedEvent(): any

      Returns any

    • set LoadStartedEvent(value: any): void

      Parameters

      • value: any

      Returns void

    • get ProviderToUse(): IMetadataProvider

      Returns either the default Metadata provider or the one specified in the Provider property, if it was specified

      Returns IMetadataProvider

    • get ResourceCloseRequestedEvent(): (() => void) | null

      Returns (() => void) | null

    • set ResourceCloseRequestedEvent(value: (() => void) | null): void

      Parameters

      • value: (() => void) | null

      Returns void

    • get ResourceRecordSavedEvent(): any

      Returns any

    • set ResourceRecordSavedEvent(value: any): void

      Parameters

      • value: any

      Returns void

    • get RunQueryToUse(): IRunQueryProvider

      Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified

      Returns IRunQueryProvider

    • get RunReportToUse(): IRunReportProvider

      Returns either the default RunReport provider or the one specified in the Provider property, if it was specified

      Returns IRunReportProvider

    • get RunViewToUse(): IRunViewProvider

      Returns either the default RunView provider or the one specified in the Provider property, if it was specified

      Returns IRunViewProvider

    • get visiblePagedTools(): MCPToolSummary[]

      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.

      Returns MCPToolSummary[]

    Methods

    • Gets the sort indicator class for a column header

      Parameters

      • column: "status" | "error" | "server" | "duration" | "tool" | "connection" | "started"

      Returns string

    • Read current query params from tab configuration. Use in initDashboard() / ngOnInit() to get initial URL state.

      Returns Record<string, string>

    • Get this component's tab ID. Checks ParentTabId input first (set by resource wrappers for child dashboards), then falls back to Data.Configuration.tabId.

      Returns string

    • 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.

      Parameters

      • connectionId: string

        The MCP connection ID requiring OAuth

      Returns Promise<void>

    • Loads all dashboard data using MCPEngine for cached entities and RunView for execution logs (historical data loaded on-demand)

      Parameters

      • forceRefresh: boolean = false

        If true, forces MCPEngine to reload from database (use after sync operations)

      Returns Promise<void>

    • 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.

      Returns Promise<void>

    • Ask 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.

      Returns void

    • Call 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.

      Parameters

      • newName: string

      Returns void

    • Returns void

    • Returns void

    • Handles click on a sortable column header

      Parameters

      • column: "status" | "error" | "server" | "duration" | "tool" | "connection" | "started"

      Returns void

    • This method will result in the dashboard being reloaded.

      Returns Promise<void>

    • Marks 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.

      Returns void

    • Scale-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.

      Returns number

    • 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.

      Parameters

      • visible: boolean

      Returns void

    • Push query param changes to the URL. Creates a browser history entry. Safe to call during OnQueryParamsChanged — auto-suppressed to prevent loops.

      Parameters

      • params: Record<string, string | null>

      Returns void