Skip to content

Add MCP Registry Access Bindings UI (list, detail, create/edit)#292

Merged
openshift-merge-bot[bot] merged 3 commits into
opendatahub-io:mcp-registry-prototypefrom
DaoDaoNoCode:rhoaieng-65778
Jun 11, 2026
Merged

Add MCP Registry Access Bindings UI (list, detail, create/edit)#292
openshift-merge-bot[bot] merged 3 commits into
opendatahub-io:mcp-registry-prototypefrom
DaoDaoNoCode:rhoaieng-65778

Conversation

@DaoDaoNoCode

@DaoDaoNoCode DaoDaoNoCode commented Jun 10, 2026

Copy link
Copy Markdown
Member

Related Issues/PRs

Relates to RHOAIENG-65778, RHOAIENG-65779

What changes are proposed in this pull request?

Implements the Access Bindings UI for the MCP Registry feature, including:

Access Bindings Tab (RHOAIENG-65778)

  • Card grid and list table views with search, pagination, and view toggle
  • Shared useCursorPaginatedQuery hook extracted from duplicate pagination logic
  • Shared PaginatedCardGrid and CardIconWrapper components
  • Responsive table column widths via flex metadata
  • Tab description text for access bindings

Create/Edit Access Binding Modal (RHOAIENG-65779)

  • Modal with server selector, endpoint URL input, version/alias grouped dropdown, and transport type
  • URL validation requiring valid http:// or https:// with inline error message
  • Create mode (from registry page or server detail) and edit mode (pre-filled fields)
  • @latest alias always shown in aliases group

Access Binding Detail Page

  • Metadata grid: description, endpoint URL (with copy button), transport, MCP server (link with version deep-link), version + status tag, timestamps, created/updated by
  • Client configuration JSON snippet via ShowArtifactCodeSnippet
  • Edit binding button opens AccessBindingModal, delete via overflow menu with confirmation
  • URL-driven version selection on server detail page (?version= query param) following prompts page pattern

Code Quality & Bug Fixes

  • Extract MCP_QUERY_KEYS constants to eliminate magic strings across 5 hook files
  • Extract useInvalidateServerQueries and useInvalidateBindingQueries to deduplicate cache invalidation
  • Fix decodeURIComponent on useParams to prevent double-encoding (matching model-registry pattern)
  • Fix MCPIcon.sizes type from string to string[] to match backend
  • Fix UpdateVersionStatusModal selectedStatus type safety
  • Type mutation generics to eliminate as Error casts
  • Add enabled option to useCursorPaginatedQuery for conditional fetching
  • Fix isEmptyState logic to correctly distinguish servers vs bindings empty states
  • Add aria-label on delete binding button for accessibility
  • Switch binding cards to href-based navigation for right-click "Open in new tab" support
Screen.Recording.2026-06-10.at.3.45.23.PM.mov

How is this PR tested?

  • Existing unit/integration tests
  • New unit/integration tests
  • Manual tests

142 tests across 13 suites, all passing. New test files:

  • AccessBindingModal.test.tsx (6 tests) — create/edit modes, URL validation, disabled states
  • MCPAccessBindingDetailPage.test.tsx (7 tests) — metadata, JSON config, loading/error, modals, breadcrumb
  • MCPServerAccessBindings.test.tsx (6 tests) — card rendering, empty/loading/error, edit/delete callbacks
  • useCursorPaginatedQuery.test.tsx (5 tests) — pagination, filter reset, enabled flag
  • Updated existing tests for URL param selection, binding links, button states

Does this PR require documentation update?

  • No.

Does this PR require updating the MLflow Skills repository?

  • No.

Release Notes

Is this a user-facing change?

  • No.
  • Yes. Give a description of this change to be included in the release notes for MLflow users.

Add Access Bindings UI to the MCP Registry — list/grid views with search and pagination, create/edit modal with URL validation, and detail page with metadata and client configuration.

What component(s), interfaces, languages, and integrations does this PR affect?

Components

  • area/uiux: Front-end, user experience, plotting, JavaScript, JavaScript dev server

How should the PR be classified in the release notes? Choose one:

  • rn/feature - A new user-facing feature worth mentioning in the release notes

Is this PR a critical bugfix or security fix that should go into the next patch release?

  • This PR is critical and needs to be in the next patch release
  • This PR can wait for the next minor release

Implements the Access Bindings tab on the MCP Registry page
(RHOAIENG-65778) with full list/card view toggle, search, and
pagination, following the same patterns as the Servers tab.

New components:
- MCPAccessBindingCard — Card component with ConnectIcon, resolved
  display name, description, and version/alias badge
- MCPAccessBindingCardGrid — uses shared PaginatedCardGrid
- MCPAccessBindingListTable — table with copy-to-clipboard endpoint,
  linked server name, formatted transport type, and pagination

Shared infrastructure extracted:
- PaginatedCardGrid — generic grid with loading/empty/pagination,
  reused by both MCPServerCardGrid and MCPAccessBindingCardGrid
- useCursorPaginatedQuery — generic pagination hook with localStorage
  page size, reused by both list query hooks
- utils.ts — buildSearchFilterClause, formatTransportType,
  resolveVersionDisplayName, resolveBindingDisplayName,
  emptyCenterStyles, DEFAULT_PAGE_SIZE, PAGE_SIZE_OPTIONS

Additional changes:
- Access Bindings is now the default tab (was Servers)
- MCPServerCard migrated to design system Card component
- Delete cascade invalidation — mutations now invalidate binding queries
- Query error display — versions/bindings errors shown as Alert
- MCPServerAccessBindings uses formatTransportType for consistency

Signed-off-by: Juntao Wang <juntwang@redhat.com>
… fixes

- Add AccessBindingModal with create/edit modes, server/version/alias
  selection, and transport type configuration
- Add MCPServerAccessBindings card-style binding display with edit/delete
  actions, transport tag, and clickable hover state using DS Card
- Add useAccessBindingMutation hooks for create/update with cache
  invalidation
- Add useSelectedMCPServerVersion hook for URL-driven version selection
  following the Prompts page pattern (?version= query param)
- Update bindings table server links to deep-link to the correct version
- Extract MCP_QUERY_KEYS constants to eliminate magic strings across hooks
- Extract useInvalidateServerQueries to remove duplicate invalidation
  blocks
- Add enabled option to useCursorPaginatedQuery for conditional fetching
- Fix isEmptyState logic to use isServersEmpty for correct tab behavior
- Fix unsafe error cast in AccessBindingModal
- Type mutation generics to eliminate as Error casts
- Replace hand-rolled BindingCard div with DS Card component
- Add responsive column widths via flex metadata on bindings table
- Add flexShrink: 0 on copy button to prevent squeeze by truncated text
- Add 8 new tests covering version URL selection, binding links, and
  empty state edge cases (111 total)

Signed-off-by: Juntao Wang <juntwang@redhat.com>
@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (4)
  • main
  • master
  • incubation
  • rhoai

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 13811a3d-68f6-4ece-8392-fd67d484d7b9

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added the size/XL Pull request size: XL label Jun 10, 2026
@DaoDaoNoCode DaoDaoNoCode added the rn/none Skip the validate-labeled CI job on the feature branches label Jun 10, 2026
- Add MCPAccessBindingDetailPage with metadata grid, client config JSON,
  edit/delete modals, copy endpoint URL, and breadcrumb navigation
- Add route, query hook, and delete mutation for binding detail
- Add URL validation (isValidEndpointUrl) requiring http:// or https://
  with inline error message on AccessBindingModal
- Add description text on Access Bindings tab
- Fix double-encoding of serverName by adding decodeURIComponent on
  useParams (matching model-registry pattern)
- Fix MCPIcon.sizes type from string to string[] to match backend
- Fix UpdateVersionStatusModal selectedStatus type safety
- Fix delete binding missing SERVER and BINDING_DETAIL invalidation
- Extract useInvalidateBindingQueries to reduce duplication
- Add edit/delete binding support on server detail page binding cards
  with stopPropagation to prevent card navigation
- Switch binding card grid to href-based navigation for right-click
  support
- Align metadata grid label width to 120px across detail pages
- Add created_by and last_updated_by fields to binding detail page
- Add 4 test files: AccessBindingModal, MCPAccessBindingDetailPage,
  MCPServerAccessBindings, useCursorPaginatedQuery (142 total tests)

Signed-off-by: Juntao Wang <juntwang@redhat.com>

@nananosirova nananosirova left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@openshift-ci

openshift-ci Bot commented Jun 11, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

Approval requirements bypassed by manually added approval.

This pull-request has been approved by: nananosirova

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-merge-bot openshift-merge-bot Bot merged commit f25db61 into opendatahub-io:mcp-registry-prototype Jun 11, 2026
90 of 93 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved lgtm rn/none Skip the validate-labeled CI job on the feature branches size/XL Pull request size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants