Skip to content

Nexus 0.5.2

Choose a tag to compare

@github-actions github-actions released this 24 Sep 11:09
· 60 commits to main since this release

Nexus 0.5.2 - September 24, 2025

Summary

This release introduces Role-Based Access Control (RBAC) for MCP tools, allowing fine-grained control over which users can access specific MCP servers and tools based on group membership. The implementation supports allow/deny lists at both server and tool levels, providing flexible security policies for enterprise deployments. Additionally, this release includes a fix for unconnected LLM spans in telemetry and various dependency updates.

New Features

Role-Based Access Control for MCP Tools

User Impact: Administrators can now restrict access to MCP servers and individual tools based on user group membership. This enables scenarios like limiting expensive or sensitive tools to specific user groups, blocking suspended users, or creating tiered access levels for different subscription plans.

Technical Details:

  • Implemented hierarchical access control with server-level and tool-level rules
  • Added support for allow lists and deny lists
  • Tool-level rules override server-level rules for fine-grained control
  • Empty allow list (allow = []) blocks all access without requiring client identification
  • Deny rules take priority over allow rules when both are specified
  • Files modified:
    • crates/mcp/src/access.rs - Core access control logic implementation
    • crates/config/src/mcp.rs - Configuration structures for allow/deny lists
    • crates/config/src/loader.rs - Configuration validation and loading
    • crates/mcp/src/server.rs - Integration of access control into MCP server
    • crates/mcp/src/server/search.rs - Tool filtering in search results
    • crates/mcp/src/server/search/grouped.rs - Grouped search with access filtering
    • crates/mcp/src/cache.rs - Cache key updates for access control

Configuration Example:

# Server-level access control
[mcp.servers.premium_tools]
cmd = ["premium-server"]
allow = ["premium", "enterprise"]  # Only these groups can access
deny = ["suspended"]                # Block specific groups

# Tool-level override (more specific than server-level)
[mcp.servers.premium_tools.tools.expensive_feature]
allow = ["enterprise"]  # Only enterprise can use this tool

[mcp.servers.premium_tools.tools.deprecated_tool]
allow = []  # Empty allow list blocks all access

Bug Fixes

Fixed Unconnected LLM Spans in Telemetry

Issue: LLM operations were creating orphaned trace spans that weren't properly connected to the parent trace context, making it difficult to track request flows in distributed tracing systems.

Resolution: Updated span creation logic to properly attach LLM spans to their parent context, ensuring complete trace hierarchies.

Technical Details:

  • Modified span parent assignment in LLM telemetry layer
  • Files modified: crates/server/src/tracing.rs, telemetry tracing tests
  • Ensures proper correlation of LLM requests with their originating API calls

Infrastructure/DevOps Changes

Dependency Updates

User Impact: Improved security, performance, and compatibility through updated dependencies.

Technical Details:

  • Updated taiki-e/install-action from v2.61.12 to v2.62.5 - CI/CD improvements
  • Updated opentelemetry-collector-contrib Docker image to v0.136.0 - Enhanced telemetry capabilities
  • Updated tempfile crate to v3.23.0 - Improved temporary file handling
  • Updated serde to v1.0.226 - Serialization improvements
  • Updated clap to v4.5.48 - CLI argument parsing enhancements
  • Regular cargo update for transitive dependency updates

Deployment Notes

Configuration Changes

For users upgrading from 0.5.1, the following new RBAC configuration options are available:

# MCP server-level access control
[mcp.servers.your_server]
allow = ["group1", "group2"]  # Optional: whitelist groups
deny = ["blocked_group"]      # Optional: blacklist groups

# Tool-level access control (overrides server-level)
[mcp.servers.your_server.tools.specific_tool]
allow = ["special_group"]      # Tool-specific access

# Client identification for RBAC (required when using group-based access)
[server.client_identification]
enabled = true

[server.client_identification.validation]
group_values = ["group1", "group2", "special_group", "blocked_group"]

Breaking Changes

None - this release maintains full backward compatibility with 0.5.1. The RBAC features are opt-in.

Migration Steps

  1. No migration required for existing deployments
  2. To enable RBAC:
    • Add allow or deny lists to MCP server configurations
    • Enable client identification if using group-based access
    • Configure group_values to list all valid groups