Software Requirements Specification (SRS) & Test Verification Catalog
Automated Verification Document: Generated via
dotnet run --project scripts/CatalogGeneratorCatalog Statistics: 456 Requirements Verified across 1041 Test Proofs (363 Functional Capabilities, 93 Safety Guardrails).
1. System Taxonomy & Verification Summary
| Category | Domain | Total Requirements | Positive Features | Guardrails / Fail-Closed | Verification Proofs |
|---|---|---|---|---|---|
API | API | 2 | 2 | 0 | 2 proofs |
AUTH | Authentication, RBAC & Identity | 100 | 96 | 4 | 233 proofs |
CORE | CORE | 8 | 7 | 1 | 14 proofs |
DB | Multi-Database Persistence & Migrations | 23 | 22 | 1 | 35 proofs |
DOC | DOC | 4 | 4 | 0 | 4 proofs |
GUARD | Universal Safety & Fail-Closed Guardrails | 66 | 3 | 63 | 138 proofs |
MCP | Model Context Protocol Engine & Tool Routing | 117 | 110 | 7 | 251 proofs |
SEC | Secrets Providers & Encryption | 65 | 56 | 9 | 138 proofs |
TRANS | Transports (SSE, HTTP, STDIO, Proxy) | 36 | 32 | 4 | 42 proofs |
UI | Dashboard, Test Bench & Settings UI | 35 | 31 | 4 | 184 proofs |
2. Functional Requirements ("What the Application DOES")
[API-GET-SERVERS-FLEET-REPOSITORY] Retrieves configured MCP server fleet from the database repository.
- Category:
API(API) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MinimalApiEndpointsTests.cs#L42(GetServers_Returns_Server_List)
- [Backend xUnit]
[API-SERVER-CRUD-LIFECYCLE] Supports full CRUD lifecycle (create, read, update, delete) for downstream MCP server definitions.
- Category:
API(API) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MinimalApiEndpointsTests.cs#L55(Post_Put_Delete_Server_Lifecycle_Works)
- [Backend xUnit]
[AUTH-001] Verify DatabaseUserSecretStore encrypts and decrypts secret correctly.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserSecretStoreTests.cs#L8(DatabaseUserSecretStore_SavesAndRetrieves_Secret)
- [Backend xUnit]
[AUTH-002] Verify UserCredentialsController returns configured server IDs.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserCredentialsControllerTests.cs#L11(GetUserCredentials_ReturnsServerIds)
- [Backend xUnit]
[AUTH-02] AppKey scopes restrict access precisely across all MCP capabilities and backend targets
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (49):
- [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L242(Pairwise_AppKeyScopes_RestrictsAccessPrecisely) - [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L278(CreateAppKey_CreatesNewKey_Successfully_WithDifferentScopeSlugs) - [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L391(GetAppKeysLimits_ReturnsLimitsAndCounts) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L197(AppKeysController_CreateAppKey_ValidCategory_Succeeds) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L281(ClientsController_CreateClient_ValidCategory_Succeeds) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L364(ClientSession_CategoryScope_AuthorizesMatchingServerTools_AndDeniesOthers) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L388(ClientSession_GroupAliasScope_AuthorizesIdenticallyToCategory) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L410(ClientSession_CategoryScope_IsCaseInsensitive) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L460(ClientSession_ResourcesAndTemplates_FilteredByCategoryScope) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L488(ClientSession_DynamicServerMembership_UpdatesAccessDynamically) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L524(ClientSession_MixedScopes_CombinesCategoryAndSpecificToolScopes) - [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L551(ClientSession_Complete_FiltersServerNamesByCategoryScope) - [Backend xUnit]
ModelContextGateway.Tests/AuditSidAttributionTests.cs#L34(AppKeyAuthenticationHandler_Emits_Sid_Claim_When_OwnerSid_Present) - [Backend xUnit]
ModelContextGateway.Tests/AuditSidAttributionTests.cs#L69(AppKeyIdentityProvider_ResolvesOwnerAndSid_FromHttpContextItems) - [Backend xUnit]
ModelContextGateway.Tests/AuditSidAttributionTests.cs#L87(AppKeyIdentityProvider_ReturnsAnonymous_WhenNoAppKey) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L86(AppKeys_PrefixLookup_WorksCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L122(AppKeys_KeyExpiration_CheckedCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L151(AppKeys_Limits_CheckWorks) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L189(AppKeys_Sha256Hashing_VerificationWorks) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L338(ServiceCollection_Resolves_VaultUserSecretStore_WhenConfigured) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L388(ExternalJwtAuthenticationHandler_Authenticates_Valid_Bearer_Jwt) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L49(Pipeline_QueryToken_MiddlewareBypass) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L320(Pipeline_AppKey_Create_And_Revoke) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L403(Pipeline_GET_AppKeys_Returns200) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L412(Pipeline_GET_AppKeysLimits_Returns200) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L252(AppKeyScopes_RestrictTargetAccessPrecisely) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L22(initializes with default state) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L57(handles fetch error gracefully without crashing) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L123(handles register error with toast and propagates error) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L195(handles delete failure with error toast) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L261(opens and closes add client modal and resets created result) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L316(initializes with default state) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L388(loads app key limits) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L402(handles fetch error gracefully without crashing) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L466(handles create key error with toast and throws) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L541(handles revoke failure with error toast) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L559(loads user quotas and updates store) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L577(handles fetchUserQuotas error gracefully without crashing) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L616(handles setUserQuota error with toast and throws) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L687(handles deleteUserQuota failure with error toast) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L705(opens and closes create modal and clears result) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L51(switches between format tabs (Standard, VS Code, Generic SSE)) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L78(switches server scope from all servers to individual server) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L97(updates domain when LAN or custom is chosen) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L122(toggles meta mode when server scope is all) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L143(populates app keys dropdown and injects selected key) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L166(copies configuration to clipboard and triggers success toast) - [Frontend Vitest]
frontend/src/test/components/ClientModal.test.tsx#L15(renders nothing when isAddClientOpen is false) - [Playwright E2E]
frontend/e2e/multi-user-matrix.spec.ts#L70(AppKey Direct Context: connects with API key header identity)
- [Backend xUnit]
[AUTH-03] Auth middleware allows bypass routes and extracts SSO headers in a case-insensitive manner.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (25):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L621(AuthMiddleware_CaseInsensitivity_BypassAndHeader_Check) - [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L319(Pairwise_SsoIdentityAndGroupMappings_EvaluateCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L330(HeaderIdentityProvider_DynamicallyLoadsAndAppliesDbConfig) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L53(GetAllProviders_ReturnsOkWithSecretAndAuthProviders) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L161(GetAuthProviders_ReturnsOkWithList) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L185(SaveAuthProvider_SavesSuccessfully) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L10(OidcIdentityProvider_Parses_Remote_User_And_Groups_Headers) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L31(CompositeIdentityProvider_Falls_Back_To_Oidc_When_AD_Not_Authenticated) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L74(HeaderAuth_AllowsHeaders_ForTrustedProxy) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L97(OidcIdentityProvider_DoesNotMapAdminSid_ForAdminGroups) - [Backend xUnit]
ModelContextGateway.Tests/AuditSidAttributionTests.cs#L11(HeaderIdentityProvider_Extracts_RemoteUserSid_And_Populates_Sid) - [Backend xUnit]
ModelContextGateway.Tests/CompositeIdentityProviderTests.cs#L9(ProviderName_ReturnsComposite) - [Backend xUnit]
ModelContextGateway.Tests/CompositeIdentityProviderTests.cs#L17(ResolveIdentityAsync_ReturnsFirstNonAnonymousUser) - [Backend xUnit]
ModelContextGateway.Tests/CompositeIdentityProviderTests.cs#L38(ResolveIdentityAsync_FallsBackToAnonymous_WhenNoUserResolved) - [Backend xUnit]
ModelContextGateway.Tests/CompositeIdentityProviderTests.cs#L55(ResolveIdentityAsync_FallsBackToOidcProvider_WhenAnonymous) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L367(Pipeline_GET_Permissions_Mappings_Returns200) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L385(Pipeline_GET_Providers_Auth_Returns200) - [Backend xUnit]
ModelContextGateway.Tests/GroupMappingsAndSpecAuthTests.cs#L93(GroupMapping_AllowsUser_WhenMappingResolvesToAllowedInternalGroup) - [Backend xUnit]
ModelContextGateway.Tests/GroupMappingsAndSpecAuthTests.cs#L111(GroupMapping_AllowsUser_WhenOidcGroupMapsToAllowedInternalGroup) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L629(AuthMiddleware_Allows_SSO_Session_With_RemoteUser_Header) - [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L207(DeleteMapping_DeletesSuccessfully) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L60(handles provider fetch warnings gracefully when endpoints are unavailable) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L80(saves auth provider config and refreshes providers) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L109(handles auth provider save error and displays toast) - [Playwright E2E]
frontend/e2e/multi-user-matrix.spec.ts#L36(Operator Context: allows overview and testbench navigation with operator identity)
- [Backend xUnit]
[AUTH-04] ActiveDirectoryIdentityProvider extracts Windows caller SIDs and security groups via IWindowsIdentityAccessor and augments with LDAP
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (16):
- [Backend xUnit]
ModelContextGateway.Tests/ActiveDirectoryWindowsIdentityTests.cs#L12(ResolveIdentityAsync_ExtractsWindowsIdentitySids_ViaAccessor) - [Backend xUnit]
ModelContextGateway.Tests/ActiveDirectoryWindowsIdentityTests.cs#L50(ResolveIdentityAsync_AugmentsWithLdapSids_WhenLdapServiceProvided) - [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L365(LdapActiveDirectoryService_RespectsDisabledStatusInDatabase) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs#L11(ResolveUserSidsAsync_ReturnsEmpty_WhenLdapProviderDisabledInDb) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs#L59(ResolveUserSidsAsync_UsesCache_WhenCachedSidsExist) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L298(TestLdapConnection_ValidatesInputAndHandlesFailureGracefully) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L55(ActiveDirectoryIdentityProvider_Resolves_Steve_Identity_And_Sids) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L89(ActiveDirectoryIdentityProvider_Augments_Steve_With_LdapGroupSids) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L23(ConvertSidBytesToString_FormatsValidBinarySid) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L34(ConvertSidBytesToString_ReturnsEmpty_OnInvalidBytes) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L42(ResolveUserSidsAsync_ReturnsEmpty_WhenUsernameEmpty) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L53(ResolveUserSidsAsync_ReturnsEmpty_WhenServerNotConfigured) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L79(ActiveDirectoryIdentityProvider_ReturnsAnonymous_WhenUntrustedProxy) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L96(ActiveDirectoryIdentityProvider_ReturnsAnonymous_WhenNotWindowsAuth) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L112(ActiveDirectoryIdentityProvider_ResolvesLdapSids_WhenLdapServiceProvided) - [Playwright E2E]
frontend/e2e/ldap-identity-and-auth-flow.spec.ts#L10(should configure LDAP identity provider, test connection, and save settings)
- [Backend xUnit]
[AUTH-05] McpServer supports AllowPassThroughAuth flag
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/McpServerTests.cs#L5(McpServer_Should_Have_AllowPassThroughAuth) - [Playwright E2E]
frontend/e2e/my-mcp-servers.spec.ts#L12(should render user provided servers and allow editing credentials with SQLite schema)
- [Backend xUnit]
[AUTH-06] Transports use passThroughToken when AllowPassThroughAuth is true
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L208(Transports_Use_PassThroughToken_If_Allowed)
- [Backend xUnit]
[AUTH-101] HTTP transport injects X-Forwarded-User header based on connected user identity.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityHeaderTests.cs#L9(HttpTransport_InjectsXForwardedUserHeader)
- [Backend xUnit]
[AUTH-110] CreateAppKey allows creating unlimited AppKeys when UserMaxKeys is set to 0.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L343(CreateAppKey_AllowsUnlimited_WhenLimitsAreZero) - [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L135(ApplyConfigurationResponseContext_SetsRegistrationEndpoint) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L51(GetClients_ReturnsOk_WithClientsAndMappedProperties) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L238(GetClients_NeverLeaksRawBearerSecretOrHash)
- [Backend xUnit]
[AUTH-118] AppKey table contains LastUsedAt column and repository updates and queries it accurately.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeyLastUsedPersistenceTests.cs#L41(AppKeyRepository_UpdatesAndReads_LastUsedAt) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L214(FindDcrClient_ReturnsMatchingClient) - [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L556(RegisterClient_DuplicateDcrRequest_ReusesExistingClientIdAndUpdatesRecord)
- [Backend xUnit]
[AUTH-119] OAuthClients table contains LastUsedAt column and repository updates and queries it accurately.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeyLastUsedPersistenceTests.cs#L69(OAuthClientRepository_UpdatesAndReads_LastUsedAt) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L237(CleanupDcrClients_PrunesDuplicateRegistrations_AndExpiredClients) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L333(CleanupClients_CallsRepoAndReturnsCleanedCount)
- [Backend xUnit]
[AUTH-120] ActivityTracker throttles database updates to at most once per 60 seconds per key.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ActivityTrackerTests.cs#L9(RecordAppKeyUsage_DebouncesWithinWindow)
- [Backend xUnit]
[AUTH-121] ActivityTracker throttles OAuth client updates to at most once per 60 seconds per client.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ActivityTrackerTests.cs#L35(RecordClientUsage_DebouncesWithinWindow)
- [Backend xUnit]
[AUTH-122] RotateAppKey issues new plaintext key, updates database, resets LastUsedAt, and audits action.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeyRotationControllerTests.cs#L12(RotateAppKey_Success_ReturnsNewPlaintextKey)
- [Backend xUnit]
[AUTH-130] Renders In-House IdP / External JWT Bearer card, toggles enable, fills authority, and saves configuration.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/IdentityAuthTab.test.tsx#L167(renders In-House IdP External JWT card, toggles on, and saves configuration)
- [Frontend Vitest]
[AUTH-131] RFC 9728 Protected Resource Metadata endpoint exposes discovery document with canonical resource URI, authorization servers, scopes, and documentation.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L37(ProtectedResourceDiscovery_ReturnsValidMetadataDocument) - [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L58(ProtectedResourceDiscovery_TargetPath_ReturnsPathAwareMetadataDocument) - [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L75(ProtectedResourceDiscovery_CustomResourceQuery_OverridesResourceUri) - [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L91(ProtectedResourceDiscovery_ConfiguredExternalIdp_ReturnsConfiguredAuthorizationServer)
- [Backend xUnit]
[AUTH-132] Unauthenticated client requests to /sse endpoint return 401 Unauthorized with RFC 9728 WWW-Authenticate header containing realm and resource_metadata.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L115(UnauthenticatedMcpRequest_SseEndpoint_Returns401WithRfc9728WwwAuthenticateHeader) - [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L131(UnauthenticatedMcpRequest_TargetServerEndpoint_Returns401WithTargetResourceMetadata) - [Backend xUnit]
ModelContextGateway.Tests/Rfc9728ProtectedResourceDiscoveryTests.cs#L147(UnauthenticatedMcpRequest_MessageEndpoint_Returns401WithRfc9728WwwAuthenticateHeader)
- [Backend xUnit]
[AUTH-133] Verify initiating OAuth 3LO egress flow generates secure state and authorization redirect URL.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EgressOAuthTests.cs#L72(Authorize_WithValidServer_Initiates3LoFlowWithSecureStateAndRedirectUrl)
- [Backend xUnit]
[AUTH-134] Verify OAuth egress callback exchanges authorization code and stores credentials in user secret store.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EgressOAuthTests.cs#L146(Callback_WithValidStateAndCode_ExchangesTokenAndPersistsInUserSecretStore)
- [Backend xUnit]
[AUTH-135] Verify upstream dispatch automatically refreshes expired OAuth egress token and updates user secret store.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EgressOAuthTests.cs#L260(UpstreamDispatch_WithExpiredOAuthToken_RefreshesTokenAutomatically)
- [Backend xUnit]
[AUTH-136] Verify disconnect endpoint deletes stored user OAuth credentials.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EgressOAuthTests.cs#L361(Disconnect_DeletesUserSecretAndReturnsSuccess)
- [Backend xUnit]
[AUTH-137] Verify GetOAuthServers returns servers with correct isConnected status.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EgressOAuthTests.cs#L406(GetOAuthServers_ReturnsConfiguredServersWithConnectionStatus)
- [Backend xUnit]
[AUTH-14] Tool execution catches 401 Unauthorized from downstream target servers and returns interactive auth remediation.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L211(ExecuteTargetToolAsync_Catches401_AndReturnsAuthPrompt)
- [Backend xUnit]
[AUTH-15] OpenIddict initializes ephemeral development signing certificates in Development environment.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/OpenIddictProductionTests.cs#L30(Development_WithNoCert_BootsOnDevCerts) - [Backend xUnit]
ModelContextGateway.Tests/OpenIddictProductionTests.cs#L46(Production_WithValidPfx_Boots)
- [Backend xUnit]
[AUTH-35] Single-user homelab startup initializes SQLite, auto-generates Admin and Client AppKeys without PFX certificate requirements
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SingleUserHomelabTests.cs#L30(Homelab_ZeroConfigStartup_SeedsAdminAndClientKeys_AndPersistsFiles)
- [Backend xUnit]
[AUTH-36] Pre-configured MCG_CLIENT_APP_KEYS seeds functional individualized client keys with custom scopes
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SingleUserHomelabTests.cs#L98(Homelab_PreConfiguredClientKeys_SeedsIndividualizedScopedKeys)
- [Backend xUnit]
[AUTH-37] AppKeys with server and category scopes enforce precise tool execution boundaries
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SingleUserHomelabTests.cs#L168(AppKey_ScopeExtraction_ExtractsSemanticPrefixes)
- [Backend xUnit]
[AUTH-38] LAN CIDR network configuration allows standalone web dashboard access from local subnet
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SingleUserHomelabTests.cs#L183(Standalone_LanCidr_GrantsAdminAccessToLocalSubnet)
- [Backend xUnit]
[AUTH-39] Zero-config startup defaults enterprise auth providers and secret providers to disabled
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SingleUserHomelabTests.cs#L211(ZeroConfig_Startup_DefaultsEnterpriseProviders_ToDisabled)
- [Backend xUnit]
[AUTH-ADMIN-FULL-ACCESS] Administrator identities bypass granular capability policies and have full access to all MCP methods.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L154(AdminBypass_AllowsAllCapabilities_EvenWithoutDbPolicies)
- [Backend xUnit]
[AUTH-ADMIN-POLICY-ALLOW-GROUPNAME] AdminPolicy allows principal with configured Admin Group Name (e.g., full_admin)
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs#L13(AdminPolicy_Allows_Principal_With_AdminGroupName)
- [Backend xUnit]
[AUTH-ADMIN-POLICY-ALLOW-GROUPS-ARRAY] AdminPolicy allows principal with configured Admin Groups array
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs#L81(AdminPolicy_Allows_Principal_With_ConfiguredAdminGroups)
- [Backend xUnit]
[AUTH-ADMIN-POLICY-ALLOW-SID] AdminPolicy allows principal with configured Admin SID
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs#L47(AdminPolicy_Allows_Principal_With_AdminSid) - [Backend xUnit]
ModelContextGateway.Tests/AdminPolicySidOnlyTests.cs#L58(AdminPolicy_Allows_Principal_With_AdminSid)
- [Backend xUnit]
[AUTH-ADMIN-VALIDATE-GROUPNAME] SecurityValidationHelper authorizes principals via Admin Group Name
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L246(SecurityValidationHelper_IsAdmin_AllowsAdminGroupName)
- [Backend xUnit]
[AUTH-ADMIN-VALIDATE-GROUPS-ARRAY] SecurityValidationHelper authorizes principals via custom configured Admin:Groups array
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L277(SecurityValidationHelper_IsAdmin_AllowsCustomAdminGroupsArray)
- [Backend xUnit]
[AUTH-ADMIN-VALIDATE-MAPPED-GROUPS] SecurityValidationHelper authorizes principals via mappedGroups database resolution
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L292(SecurityValidationHelper_IsAdmin_AllowsMappedGroups)
- [Backend xUnit]
[AUTH-ADMIN-VALIDATE-SID] SecurityValidationHelper authorizes principals via Admin Group SID
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L228(SecurityValidationHelper_IsAdmin_RequiresAdminGroupSid)
- [Backend xUnit]
[AUTH-APPKEY-ADMIN-FUTURE-CATEGORY] Admin callers can create forward-looking AppKeys for unconfigured categories
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L258(AppKeysController_CreateAppKey_UnknownCategory_Admin_Succeeds)
- [Backend xUnit]
[AUTH-APPKEY-ADMIN-QUOTA] Administrator can create, update, and delete custom user quota overrides.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L403(QuotaEndpoints_Admin_CanManageCustomUserQuotas)
- [Backend xUnit]
[AUTH-APPKEY-ADMIN-SCOPE-ALLOW] AppKeys with admin scope grant Administrator role and pass AdminPolicy.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L79(AppKey_WithAdminScope_GrantsAdminAccess)
- [Backend xUnit]
[AUTH-APPKEY-ITEMS-SCOPE-ALLOW] SecurityValidationHelper recognizes admin scopes in HttpContext.Items.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L255(IsAdmin_AppKeyScopes_InHttpContextItems_ReturnsTrue)
- [Backend xUnit]
[AUTH-APPKEY-KEYTYPE-PERSISTENCE-FILTER] IAppKeyRepository persists KeyType and filters keys by personal vs system
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs#L146(AppKeyRepository_SaveAndGet_PersistsKeyTypeAndFilters)
- [Backend xUnit]
[AUTH-APPKEY-WILDCARD-SCOPE-ALLOW] AppKeys with wildcard scope '*' grant Administrator role and pass AdminPolicy.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L140(AppKey_WithWildcardScope_GrantsAdminAccess)
- [Backend xUnit]
[AUTH-COMPACT-APPKEY-TAXONOMY] Generates compact ~32-character Base62 AppKeys with semantic prefixes.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L417(CreateCredentialAsync_GeneratesCompactKeysWithSemanticPrefixes)
- [Backend xUnit]
[AUTH-CUSTOM-ADMIN-KEY-SEEDING] Seeds custom MCG_ADMIN_AUTH_KEY when provided in configuration.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L189(Startup_SeedsCustomAdminKey_WhenConfigured) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L241(Startup_SeedsCustomAdminKey_WhenMcgAdminKeyConfigured) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L292(Startup_UpdatesAdminKeyHash_WhenEnvironmentKeyChanges)
- [Backend xUnit]
[AUTH-MOCK-SIMULATE-UNAUTHORIZED] MockDownstreamMcpServer simulates 401 Unauthorized status code for authentication testing.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MockDownstreamMcpServerTests.cs#L62(MockDownstreamMcpServer_Simulates401Unauthorized)
- [Backend xUnit]
[AUTH-OIDC-PRESERVE-GROUP-NAMES] OidcIdentityProvider preserves group names without synthesizing Windows SIDs
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L307(OidcIdentityProvider_DoesNotGrantAdminSid_FromGroupOrUserNames)
- [Backend xUnit]
[AUTH-PERM-GET-MAPPINGS] PermissionsController returns group mappings list with 200 OK.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L137(GetMappings_ReturnsOk)
- [Backend xUnit]
[AUTH-PERM-POLICY-LIST] PermissionsController returns access policies list with 200 OK.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L48(GetPolicies_ReturnsOk)
- [Backend xUnit]
[AUTH-PERM-POLICY-REMOVE] PermissionsController removes access policies.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L114(DeletePolicy_DeletesSuccessfully)
- [Backend xUnit]
[AUTH-PERSONAL-APPKEY-LIST] Non-admin users can view their personal App Keys
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (6):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L125(GetAppKeys_NonAdmin_ReturnsOnlyPersonalKeys_ForCurrentUser) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L351(loads app keys and updates store) - [Frontend Vitest]
frontend/src/test/components/App.test.tsx#L81(renders role-adaptive UI for non-admin user) - [Frontend Vitest]
frontend/src/test/components/AppKeysCard.test.tsx#L33(renders role-adapted My App Keys view for non-admin user) - [Frontend Vitest]
frontend/src/test/components/AppKeysCard.test.tsx#L78(renders keys list, opens rotate modal, and revokes key) - [Playwright E2E]
frontend/e2e/personal-appkeys-and-quotas.spec.ts#L5(Non-Admin Context: displays My App Keys navigation and personal quota indicator)
- [Backend xUnit]
[AUTH-PERSONAL-APPKEY-QUOTA-OVERRIDE] Custom user quotas override default limit
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (6):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L223(CreateAppKey_CustomQuotaOverride_AllowsHigherLimit) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L594(sets user quota override and refreshes quota list) - [Frontend Vitest]
frontend/src/test/components/GeneralTab.test.tsx#L6(renders GeneralTab with security default quota inputs and triggers save) - [Frontend Vitest]
frontend/src/test/components/GeneralTab.test.tsx#L71(updates form state when settings prop changes) - [Frontend Vitest]
frontend/src/test/components/AppKeysCard.test.tsx#L215(manages custom user quotas in admin quotas tab) - [Playwright E2E]
frontend/e2e/personal-appkeys-and-quotas.spec.ts#L134(Admin Context: configures custom user quota override)
- [Backend xUnit]
[AUTH-PIPELINE-ADMIN-DASHBOARD] Dashboard management API suite executes for authorized administrators.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L171(Pipeline_Dashboard_Management_Suite)
- [Backend xUnit]
[AUTH-PIPELINE-GET-CLIENTS] GET /api/clients returns active client sessions with 200 OK.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L349(Pipeline_GET_Clients_Returns200)
- [Backend xUnit]
[AUTH-PIPELINE-GET-POLICIES] GET /api/permissions/policies returns access policies with 200 OK.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L358(Pipeline_GET_Permissions_Policies_Returns200)
- [Backend xUnit]
[AUTH-PIPELINE-PERM-CRUD] Permissions policy and group mapping CRUD endpoints manage RBAC rules.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L305(Pipeline_Permissions_Policy_And_Mapping_CRUD)
- [Backend xUnit]
[AUTH-PREFIX-EXTRACTION] ExtractKeyPrefix parses semantic prefixes, Base62 selectors, and legacy tokens accurately.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L451(ExtractKeyPrefix_ExtractsSemanticAndLegacyPrefixesAccurately)
- [Backend xUnit]
[AUTH-QUERY-TOKEN-EXTRACTION] Query string token middleware extracts access_token or token query parameter to Authorization header.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/EndpointAuthorizationTests.cs#L7(QueryStringTokenMiddleware_Extracts_AccessToken_To_AuthorizationHeader) - [Backend xUnit]
ModelContextGateway.Tests/EndpointAuthorizationTests.cs#L45(QueryStringTokenMiddleware_Extracts_Token_To_AuthorizationHeader)
- [Backend xUnit]
[AUTH-RBAC-GROUP-ALLOW] RBAC grants access when user claims match the required policy security group.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L94(RBAC_AllowsUser_WhenPolicyMatchesRequiredGroup)
- [Backend xUnit]
[AUTH-RBAC-PROMPT-FILTER] prompts/list filters exposed prompts according to caller permissions.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L362(ListPromptsAsync_FiltersUnauthorizedPrompts)
- [Backend xUnit]
[AUTH-RBAC-RESOURCE-FILTER] resources/list filters exposed resources according to caller permissions.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L405(ListResourcesAsync_FiltersUnauthorizedResources)
- [Backend xUnit]
[AUTH-RBAC-TEMPLATE-FILTER] resources/templates/list filters exposed resource templates according to caller permissions.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L448(ListResourceTemplatesAsync_FiltersUnauthorizedTemplates)
- [Backend xUnit]
[AUTH-RBAC-TOOL-FILTER] tools/list filters exposed backend tools according to caller permissions.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L317(ListToolsAsync_FiltersUnauthorizedTools)
- [Backend xUnit]
[AUTH-RBAC-TOOLS-FILTER] tools/list filters exposed backend tools according to caller role and RBAC policy permissions.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L200(ToolsList_FiltersByAuthorization)
- [Backend xUnit]
[AUTH-SERVER-LEVEL-POLICY] Server-level access policies authorize all child tools, prompts, and resources under that server.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L212(ServerLevelPolicy_AuthorizesAllCapabilitiesUnderServer)
- [Backend xUnit]
[AUTH-SSE-PER-MESSAGE-IDENTITY] SSE streams re-validate caller identity and permissions per message payload.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L121(SSE_ValidatesIdentityPerMessage)
- [Backend xUnit]
[AUTH-STANDALONE-ADMINPOLICY-LOOPBACK-ALLOW] AdminPolicy succeeds in standalone mode for unauthenticated loopback requests.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L176(AdminPolicy_StandaloneMode_LoopbackIp_PassesAdminPolicy)
- [Backend xUnit]
[AUTH-STANDALONE-CUSTOM-CIDR-ALLOW] Standalone mode grants admin access to client IPs matching Admin:StandaloneAllowedNetworks CIDR ranges.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L35(IsAdmin_StandaloneMode_CustomCidr_ReturnsTrue)
- [Backend xUnit]
[AUTH-STANDALONE-LOOPBACK-ALLOW] Standalone mode without external IDP grants admin access to loopback IP addresses.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L14(IsAdmin_StandaloneMode_LoopbackIp_ReturnsTrue)
- [Backend xUnit]
[AUTH-STORE-MAPPING-FETCH] fetches group mappings and updates store
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L156(fetches group mappings and updates store)
- [Frontend Vitest]
[AUTH-STORE-MAPPING-MODAL-TOGGLE] handles mapping modal open and close
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L330(handles mapping modal open and close)
- [Frontend Vitest]
[AUTH-STORE-MAPPING-SAVE] saves a group mapping and closes mapping modal
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L171(saves a group mapping and closes mapping modal)
- [Frontend Vitest]
[AUTH-STORE-POLICY-CREATE] creates/saves a policy (ALLOW rule) and closes modal
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L53(creates/saves a policy (ALLOW rule) and closes modal)
- [Frontend Vitest]
[AUTH-STORE-POLICY-FETCH] fetches access policies and updates store
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L38(fetches access policies and updates store)
- [Frontend Vitest]
[AUTH-STORE-POLICY-INIT] initializes with empty policies and mappings
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L21(initializes with empty policies and mappings)
- [Frontend Vitest]
[AUTH-STORE-POLICY-MODAL-TOGGLE] handles policy modal open and close
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L314(handles policy modal open and close)
- [Frontend Vitest]
[AUTH-SYSTEM-APPKEY-SEPARATION] System keys are distinct and require admin permissions
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (10):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L151(SystemAppKeys_RequireAdmin_AndSeparateFromPersonalKeys) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L311(PersonalAppKey_WithAllScope_DoesNotGrantAdministratorRole) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L364(SystemAppKey_WithAdminScope_GrantsAdministratorRole) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L335(switches keyTypeTab between personal and system) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L369(fetches system-filtered app keys via query parameters) - [Frontend Vitest]
frontend/src/test/components/App.test.tsx#L15(renders header, navigation tabs, and default overview dashboard for admin user) - [Frontend Vitest]
frontend/src/test/components/App.test.tsx#L36(switches between tabs on navigation click) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L31(allows admin to select key type and create system app key) - [Frontend Vitest]
frontend/src/test/components/AppKeysCard.test.tsx#L159(handles admin tab switching and username filtering) - [Playwright E2E]
frontend/e2e/personal-appkeys-and-quotas.spec.ts#L87(Admin Context: manages segmented App-Level Keys and User Personal Keys)
- [Backend xUnit]
[UI-100] initializes with empty providers
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L1(initializes with empty providers)
- [Frontend Vitest]
[UI-101] should initialize with default values
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L1(should initialize with default values)
- [Frontend Vitest]
[UI-114] renders nothing when isPolicyModalOpen is false
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/PolicyModal.test.tsx#L1(renders nothing when isPolicyModalOpen is false)
- [Frontend Vitest]
[UI-120] RBAC and SID mapping administration UI allows configuring role policies and SID associations
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/rbac-enforcement-flow.spec.ts#L1(should create, verify, and delete RBAC policy and SID mapping)
- [Playwright E2E]
[UI-123] should open App Keys & Security view and display client setup controls
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/client-setup-and-appkeys.spec.ts#L1(should open App Keys & Security view and display client setup controls)
- [Playwright E2E]
[UI-125] Admin role renders full administrative dashboard and server management controls
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/multi-user-matrix.spec.ts#L1(Admin Context: renders full administrator view and privileged controls)
- [Playwright E2E]
[UI-127] should navigate to settings permissions tab and open policy configuration modal
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/rbac-and-permissions.spec.ts#L1(should navigate to settings permissions tab and open policy configuration modal)
- [Playwright E2E]
[UI-129] should create client application and generate AppKey with scope constraints
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/appkey-and-client-lifecycle.spec.ts#L1(should create client application and generate AppKey with scope constraints)
- [Playwright E2E]
[UI-AUTH-TAB-AD-TOGGLE] Renders Active Directory disabled initially, toggles on and exposes fields.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/IdentityAuthTab.test.tsx#L12(renders Active Directory disabled initially, toggles on and exposes fields)
- [Frontend Vitest]
[UI-AUTH-TAB-LDAP-TEST] Fills LDAP parameters and executes test connection.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/IdentityAuthTab.test.tsx#L46(fills LDAP parameters and executes test connection)
- [Frontend Vitest]
[UI-POLICY-MODAL-CANCEL-DISMISS] closes modal on cancel click
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/PolicyModal.test.tsx#L87(closes modal on cancel click)
- [Frontend Vitest]
[UI-POLICY-MODAL-CREATE-DEFAULTS] renders create policy form with default inputs
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/PolicyModal.test.tsx#L28(renders create policy form with default inputs)
- [Frontend Vitest]
[UI-POLICY-MODAL-EDIT-PREFILL] renders edit policy form pre-filled with policy data
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/PolicyModal.test.tsx#L44(renders edit policy form pre-filled with policy data)
- [Frontend Vitest]
[UI-USER-STORE-ERROR-FALLBACK] handles error response gracefully and sets unauthenticated user state
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L50(handles error response gracefully and sets unauthenticated user state)
- [Frontend Vitest]
[UI-USER-STORE-HEALTH-VERSION] successfully updates version and service from /health endpoint
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L113(successfully updates version and service from /health endpoint)
- [Frontend Vitest]
[UI-USER-STORE-LOAD-PROFILE] successfully loads user profile from /api/me
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L23(successfully loads user profile from /api/me)
- [Frontend Vitest]
[UI-USER-STORE-NETWORK-FAILURE] handles network failure gracefully
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L69(handles network failure gracefully)
- [Frontend Vitest]
[UI-USER-STORE-ROLE-EXTRACTION] correctly handles non-admin user role extraction
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L89(correctly handles non-admin user role extraction)
- [Frontend Vitest]
[UI-USER-STORE-VERSION-FALLBACK] keeps existing fallback version on error
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useUserStore.test.ts#L128(keeps existing fallback version on error)
- [Frontend Vitest]
[CORE-101] Auto-added requirement tracking
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/SessionManagerTests.cs#L9(PerformanceMetrics_And_TotalRequests_IncrementCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/SessionManagerTests.cs#L33(UpdateBackendStatus_TracksBackendHealth)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-BUILD-INIT-REQUEST] BuildInitializeRequest formats standard JSON-RPC 2.0 initialize request with dynamic protocol version.
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L116(BuildInitializeRequest_GeneratesValidJsonRpc)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-CONSTANTS] Metadata constants and assembly version return consistent non-empty identifiers.
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L133(MetadataConstants_ReturnExpectedValues)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-EXTRACTION-JSONELEMENT] ExtractRequestedProtocolVersion parses protocolVersion from JsonElement params object.
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L96(ExtractRequestedProtocolVersion_FromJsonElement_ParsesValidVersion) - [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L105(ExtractRequestedProtocolVersion_FromJsonElement_FallsBackToDefault)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-EXTRACTION-STRING] ExtractRequestedProtocolVersion parses protocolVersion from initialize request payload or isolated params.
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L68(ExtractRequestedProtocolVersion_FromString_ParsesValidVersion) - [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L82(ExtractRequestedProtocolVersion_FromString_FallsBackToDefault)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-SUPPORTED-VERSIONS] IsSupportedProtocolVersion validates supported protocol versions case-insensitively with whitespace trimming.
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L8(IsSupportedProtocolVersion_ReturnsTrue_ForKnownVersions) - [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L22(IsSupportedProtocolVersion_ReturnsTrue_ForNullOrWhitespace)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-VERSION-NEGOTIATION] NegotiateProtocolVersion canonicalizes casing for known protocol versions.
- Category:
CORE(CORE) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L41(NegotiateProtocolVersion_ReturnsCanonicalVersion_WhenMatchFound) - [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L49(NegotiateProtocolVersion_FallsBackToDefault_WhenUnrecognized) - [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L57(NegotiateProtocolVersion_FallsBackToDefault_WhenNullOrEmpty)
- [Backend xUnit]
[DB-02] MSSQL stored procedure scripts declare all required procedures and parameter contracts correctly
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L311(Mssql_Scripts_DeclareAllProceduresAndExpectedParameters) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L369(MySql_Scripts_DeclareAllProceduresWithP_PrefixParameters) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L708(Repositories_MySQL_AppKeyOperations_UseP_PrefixParameters) - [Backend xUnit]
ModelContextGateway.Tests/MySqlLiveIntegrationTests.cs#L25(MySql_LiveRepository_AppKeyAndSecretProviderLifecycle_Succeeds)
- [Backend xUnit]
[DB-07] SQLite upgrade migration automatically provisions OAuthClients table on legacy database
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (10):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L433(Sqlite_UpgradeMigration_ProvisionsOAuthClientsTable) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L543(Mssql_Migration004_DeclaresOAuthClientsTableAndProcedures) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L565(MySql_Migration004_DeclaresOAuthClientsTableAndProcedures) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L71(SaveAndGetOAuthClientById_Success) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L108(SaveOAuthClient_UpdateExisting_Success) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L150(GetOAuthClients_ReturnsAllClientsOrderedByCreatedAt) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L177(DeleteOAuthClient_ExistingClient_ReturnsTrueAndRemovesClient) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L198(DeleteOAuthClient_NonExistentClient_ReturnsFalse) - [Backend xUnit]
ModelContextGateway.Tests/OAuthClientRepositoryTests.cs#L206(GetOAuthClientById_NonExistentClient_ReturnsNull) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L335(Seeder_Initializes_OAuthClients_Table)
- [Backend xUnit]
[DB-FACTORY-MSSQL-CONFIGURED] DbConnectionFactory initializes MS SQL Server database connection using Microsoft.Data.SqlClient.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbConnectionFactoryTests.cs#L46(Factory_Creates_MsSql_Connection_When_Configured)
- [Backend xUnit]
[DB-FACTORY-MYSQL-CONFIGURED] DbConnectionFactory initializes MySQL database connection using MySqlConnector.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbConnectionFactoryTests.cs#L28(Factory_Creates_MySql_Connection_When_Configured)
- [Backend xUnit]
[DB-FACTORY-SQLITE-DEFAULT] DbConnectionFactory initializes SQLite database connection with SQLCipher encryption.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbConnectionFactoryTests.cs#L10(Factory_Creates_Sqlite_Connection_By_Default)
- [Backend xUnit]
[DB-INITIALIZER-CRUD-CONTRACT] DatabaseInitializer baseline schema supports CRUD operations across core domain tables.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseInitializerTests.cs#L71(InitializeDatabase_SupportsCrud_AcrossCoreTables)
- [Backend xUnit]
[DB-INITIALIZER-ENSURE-ALIAS] EnsureAliasColumn safely adds Alias column if missing and is idempotent.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseInitializerTests.cs#L54(EnsureAliasColumn_AddsColumnIfMissing_AndIsIdempotent)
- [Backend xUnit]
[DB-INITIALIZER-IDEMPOTENCY] DatabaseInitializer is idempotent and succeeds without error when executed multiple times.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseInitializerTests.cs#L40(InitializeDatabase_IsIdempotent_WhenCalledMultipleTimes)
- [Backend xUnit]
[DB-INITIALIZER-SCHEMA-BASELINE] DatabaseInitializer creates all 12 canonical tables on a fresh SQLite database.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseInitializerTests.cs#L10(InitializeDatabase_CreatesAllExpectedTables_OnFreshSqliteConnection)
- [Backend xUnit]
[DB-MAPPING-SAVE-SQLITE] PermissionsController persists group mappings to SQLite database.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L182(SaveMapping_SavesSuccessfully_OnSqlite)
- [Backend xUnit]
[DB-POLICY-SAVE-MYSQL] PermissionsController persists access policy to MySQL database repository.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L91(SavePolicy_SavesSuccessfully_OnMySql)
- [Backend xUnit]
[DB-POLICY-SAVE-SQLITE] PermissionsController persists access policy to SQLite database repository.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L80(SavePolicy_SavesSuccessfully_OnSqlite)
- [Backend xUnit]
[DB-PROVIDER-INSTANTIATION-DIALECTS] DbConnectionFactory instantiates valid IDbConnection instances across sqlite, mysql, and mssql dialects.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MultiDatabaseProviderIntegrationTests.cs#L9(DbConnectionFactory_Instantiates_SupportedProviders)
- [Backend xUnit]
[DB-QUOTA-REPO-DELETE] IUserQuotaRepository DeleteUserQuotaAsync removes user quota record
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs#L132(UserQuotaRepository_Delete_RemovesQuota)
- [Backend xUnit]
[DB-QUOTA-REPO-DI-REGISTRATION] IUserQuotaRepository is registered in dependency injection and resolvable
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs#L199(DependencyInjection_RegistersIUserQuotaRepository)
- [Backend xUnit]
[DB-QUOTA-REPO-GET-ALL] IUserQuotaRepository GetAllUserQuotasAsync retrieves all quotas ordered by username
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs#L98(UserQuotaRepository_GetAll_ReturnsAllUserQuotas)
- [Backend xUnit]
[DB-QUOTA-REPO-SET-GET] IUserQuotaRepository persists user quota overrides and retrieves them correctly
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs#L85(UserQuotaRepository_SetAndGet_ReturnsPersistedQuota)
- [Backend xUnit]
[DB-QUOTA-REPO-UPDATE-CONFLICT] IUserQuotaRepository SetUserQuotaAsync updates existing quota on conflict
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs#L117(UserQuotaRepository_Update_UpdatesExistingQuota)
- [Backend xUnit]
[DB-SEEDER-INIT-SETTINGS-PROVIDERS] DatabaseSeederService initializes default router settings, provider configs, and schema.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L30(Seeder_Initializes_Default_Settings_And_Providers)
- [Backend xUnit]
[DB-SEEDER-ROUTER-DEFAULT-DATA] DatabaseSeeder initializes default router tables, settings, and seed servers.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SeederAndDiscoveryTests.cs#L53(DatabaseSeeder_SeedsDefaultData_Successfully)
- [Backend xUnit]
[DB-SQLITE-LEGACY-UPGRADE-MIGRATION] SQLite auto-migration seamlessly upgrades legacy schema, encrypts plaintext secrets, and preserves data
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L29(Sqlite_UpgradeMigration_FromLegacySchema_PreservesDataAndPassesValidation)
- [Backend xUnit]
[DB-TYPEHANDLER-JSON-LIST-SERIALIZATION] JsonListTypeHandler serializes and deserializes string collections to JSON text across database providers.
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MultiDatabaseProviderIntegrationTests.cs#L42(JsonListTypeHandler_SerializesAndDeserializes_StringLists)
- [Backend xUnit]
[DOC-SETUP-SKILL-FRONTMATTER] mcg-setup skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 characters
- Category:
DOC(DOC) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SetupSkillTests.cs#L18(Skill_Frontmatter_IsValidAndWithinCharacterLimit)
- [Backend xUnit]
[DOC-SETUP-SKILL-MIRROR] The mcg-setup skill and templates are mirrored 1:1 in .agents/skills/mcg-setup/
- Category:
DOC(DOC) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SetupSkillTests.cs#L152(Skill_MirroredInAgentsDirectory)
- [Backend xUnit]
[DOC-SETUP-SKILL-TEMPLATES] All scaffold templates exist, are non-empty, and contain required directives such as responseBufferLimit, MCG_MASTER_KEY, and ghcr.io/spelech/model-context-gateway
- Category:
DOC(DOC) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SetupSkillTests.cs#L98(Templates_AreValidAndContainRequiredDirectives)
- [Backend xUnit]
[DOC-SETUP-SKILL-WORKFLOW] mcg-setup skill contains all 6 required setup phases including environment probing, hosting platforms, env vs UI trade-offs, identity/network topology, artifact generation, and health/client configuration
- Category:
DOC(DOC) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SetupSkillTests.cs#L44(Skill_ContainsAllRequiredPhasesAndComparisons)
- [Backend xUnit]
[GUARD-DISPOSED-01] Stateless HTTP POST lifecycle: HTTP response completes, HttpContext is marked disposed, background backend initialization completes successfully without ObjectDisposedException.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DownstreamSessionIntegrationTests.cs#L225(StatelessHttpLifecycle_DisposedHttpContext_CompletesInitializationWithoutThrowing)
- [Backend xUnit]
[GUARD-LDAP-FILTER-ESCAPE] EscapeLdapFilter sanitizes and escapes special LDAP filter characters to prevent LDAP injection.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L10(EscapeLdapFilter_EscapesSpecialCharacters)
- [Backend xUnit]
[GUARD-SECURITY-IDENTIFIER-VALIDATION] SecurityValidationHelper validates tool and prompt names against namespaced server identifiers.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SecurityValidationHelperTests.cs#L44(ValidateToolOrPromptName_ValidatesNames)
- [Backend xUnit]
[API-PIPELINE-GET-HEALTH] GET /health returns gateway health status with 200 OK.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L439(Pipeline_GET_Health_Returns200)
- [Backend xUnit]
[API-PIPELINE-GET-SERVERS] GET /api/servers returns backend servers list with 200 OK.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L340(Pipeline_GET_Servers_Returns200)
- [Backend xUnit]
[API-PIPELINE-GET-STATS] GET /api/stats returns server statistics with 200 OK.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L430(Pipeline_GET_Stats_Returns200)
- [Backend xUnit]
[API-PIPELINE-GET-VERSION] GET /api/version returns version information with 200 OK.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L331(Pipeline_GET_Version_Returns200)
- [Backend xUnit]
[API-PIPELINE-POST-MESSAGE-PROTOCOL] Full end-to-end JSON-RPC session message suite executes over HTTP POST.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L143(Pipeline_POST_Message_FullProtocolSession_Suite)
- [Backend xUnit]
[API-PIPELINE-POST-SSE-PROTOCOL] Full end-to-end JSON-RPC protocol suite executes across SSE pipeline.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L86(Pipeline_POST_Sse_JSONRPC_Full_Protocol_Suite)
- [Backend xUnit]
[API-PIPELINE-SERVER-CRUD] Backend server CRUD pipeline endpoints persist and manage downstream servers.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L277(Pipeline_Server_CRUD_Endpoints)
- [Backend xUnit]
[HEALTH-PROBE-ALL-ENABLED-FLEET] BackendHealthCheckService probes all enabled backend servers in the fleet.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L161(ProbeAllServersAsync_Probes_All_Enabled_Servers)
- [Backend xUnit]
[HEALTH-PROBE-CUSTOM-SERVER-CONNECTED] BackendHealthCheckService marks registered custom servers as Connected.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L264(ProbeServerAsync_Sets_Connected_For_Custom_Server)
- [Backend xUnit]
[HEALTH-PROBE-DISABLED-SERVER] BackendHealthCheckService marks disabled servers as Disabled.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L132(ProbeServerAsync_Sets_Disabled_When_Server_Not_Enabled)
- [Backend xUnit]
[HEALTH-PROBE-HTTP-CONNECTED-200] BackendHealthCheckService marks server as Connected when downstream HTTP/SSE endpoint returns 200 OK.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L57(ProbeServerAsync_Sets_Connected_When_Endpoint_Responds_200)
- [Backend xUnit]
[HEALTH-PROBE-HTTP-FAILED-EXCEPTION] BackendHealthCheckService marks server as Failed when downstream HTTP connection fails.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L97(ProbeServerAsync_Sets_Failed_When_Endpoint_Throws_Exception)
- [Backend xUnit]
[HEALTH-PROBE-STDIO-VALID-CONNECTED] BackendHealthCheckService sets valid STDIO servers to Connected without making network HTTP probes.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L190(ProbeServerAsync_Sets_Connected_For_Valid_Stdio_Server_Without_Http_Probe)
- [Backend xUnit]
[MCP-01] initializes with default state
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (29):
- [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L24(initializes with default state) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L46(successfully loads servers and updates state) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L65(triggers batch reconnect when refreshAll is true) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L85(handles server fetch errors gracefully and shows error toast) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L105(creates a new server via POST when no id is present) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L142(updates an existing server via PUT when id is present) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L176(shows error toast when save fails) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L194(sends PUT request to update server enabled state and refreshes) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L216(handles toggle failure with error toast) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L232(sends reconnect POST request and shows info toast) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L252(handles reconnect failure with error toast) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L325(updates search query and resets page to 1) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L338(updates sortBy and groupBy) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L352(updates page and pageSize) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L367(toggles group collapse state) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L381(manages modal open/close actions) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L403(opens inspect modal and loads server inspection data) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L428(handles inspect failure with error toast) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L445(sets inspect active tab and search query) - [Frontend Vitest]
frontend/src/test/components/ServerCard.test.tsx#L66(renders connecting/retrying state) - [Frontend Vitest]
frontend/src/test/components/ServerCard.test.tsx#L83(renders failed state with retry button) - [Frontend Vitest]
frontend/src/test/components/ServerCard.test.tsx#L106(renders disconnected state with connect button and hidden badge) - [Frontend Vitest]
frontend/src/test/components/ServerCard.test.tsx#L129(renders disabled state) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L41(renders Add MCP Server form with default values when in add mode) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L62(renders Edit MCP Server form populated with server details when editing) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L83(switches to connection command when STDIO transport type is selected) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L104(shows custom header input when auth shape is custom-header or query) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L127(closes modal when cancel button or close X is clicked) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L147(submits form with correctly formatted payload including trimmed categories)
- [Frontend Vitest]
[MCP-02] All MCP protocol capabilities enforce caller role authorizations consistently
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (7):
- [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L385(Pairwise_AllCapabilities_UnderCallerRoles_EvaluateCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L698(CompleteAsync_AuditInvocation_ExtractsRequestIdAndItemName_InSinglePass) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L746(FilterAuthorizedToolsAsync_ExtractsPropertyNames_FromMultipleObjectTypes) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L773(CompleteAsync_AuditInvocation_HandlesNonObjectJsonPayloads_Gracefully) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L38(ListToolsAsync_ReturnsMetaTools_InMetaMode) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L59(InvalidateCache_ClearsPopulatedState) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L348(ToolListing_And_Remapping_Works_Correctly)
- [Backend xUnit]
[MCP-05] ResourceRoutingManager returns all registered resources when search query is empty.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (17):
- [Backend xUnit]
ModelContextGateway.Tests/ResourceRoutingManagerTests.cs#L8(SearchResourcesAsync_ReturnsAll_WhenQueryIsEmpty) - [Backend xUnit]
ModelContextGateway.Tests/ResourceRoutingManagerTests.cs#L23(SearchResourcesAsync_FiltersByQuery_MatchingNameOrDescription) - [Backend xUnit]
ModelContextGateway.Tests/ResourceRoutingManagerTests.cs#L41(ReadResourceAsync_LocalBuiltInResources_ReturnCorrectJson) - [Backend xUnit]
ModelContextGateway.Tests/ResourceRoutingManagerTests.cs#L82(ListResourceTemplatesAsync_ReturnsBuiltInTemplates) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L7(SearchResourcesAsync_ReturnsTop15_WhenQueryIsNullOrEmpty) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L35(SearchResourcesAsync_FiltersDictionaryResources_ByNameAndDescription) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L60(SearchResourcesAsync_FiltersJsonElementResources_ByNameAndDescription) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L80(SearchResourcesAsync_HandlesNullAndMissingPropertiesGracefully) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L103(SearchResourcesAsync_LimitsResultsTo15Items) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L122(TryMatchLogsTemplate_MatchesValidUri_ExtractsServerId) - [Backend xUnit]
ModelContextGateway.Tests/ResourceCatalogManagerTests.cs#L134(TryMatchLogsTemplate_ReturnsFalse_ForInvalidPatterns) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L411(ResourceRouting_And_UriTranslation_Works_Correctly) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L767(BuiltInResources_Templates_And_Autocompletion_Works_Correctly) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L977(CustomUserPrompts_And_Resources_Work_Correctly) - [Backend xUnit]
ModelContextGateway.Tests/SecurityValidationHelperTests.cs#L61(ValidateResourceUri_ValidatesUris) - [Backend xUnit]
ModelContextGateway.Tests/ResourceRoutingTests.cs#L5(SearchResourcesAsync_FiltersResourcesCorrectly) - [Frontend Vitest]
frontend/src/test/components/ResourceTesterCard.test.tsx#L47(handles custom URI input and submit)
- [Backend xUnit]
[MCP-06] prompts/list aggregates, namespaces, and routes prompts to target backends.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L499(PromptListAggregation_And_Routing_Works_Correctly) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L853(MetaPrompts_Works_Correctly) - [Frontend Vitest]
frontend/src/test/components/PromptTesterCard.test.tsx#L53(triggers arg change and form submit)
- [Backend xUnit]
[MCP-08] completion/complete forwards prompt completions to backend when caller is authorized.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L473(CompleteAsync_ForPrompt_ForwardsToBackend_WhenAuthorized) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L531(CompleteAsync_ForResourceTemplate_ForwardsToBackend_WhenAuthorized) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L589(CompleteAsync_LogsTemplate_ReturnsOnlyAuthorizedServers)
- [Backend xUnit]
[MCP-10] DockerAutoDiscoveryService handles missing Docker socket gracefully without throwing unhandled exceptions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (5):
- [Backend xUnit]
ModelContextGateway.Tests/SeederAndDiscoveryTests.cs#L83(DockerAutoDiscovery_ScanContainers_HandlesMissingSocketGracefully) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L46(Service_Initializes_With_Valid_Dependencies) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L80(ExecuteAsync_SkipsScan_WhenDockerSocketDoesNotExist) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L104(ParseDiscoveredServers_ParsesValidDockerContainerLabels) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L138(UpsertDiscoveredServers_AddsNewServers_AndDisablesStoppedServers)
- [Backend xUnit]
[MCP-15] All JSON-RPC results return a resultType discriminator (complete or input_required) per MCP 2026-07-28 spec.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/ProtocolResultTypeTests.cs#L7(EnsureResultType_AttachesComplete_WhenMissing) - [Backend xUnit]
ModelContextGateway.Tests/ProtocolResultTypeTests.cs#L23(EnsureResultType_PreservesExistingResultType) - [Backend xUnit]
ModelContextGateway.Tests/ProtocolResultTypeTests.cs#L39(EnsureResultType_HandlesNullResult) - [Backend xUnit]
ModelContextGateway.Tests/ProtocolResultTypeTests.cs#L53(EnsureResultType_HandlesJsonElement)
- [Backend xUnit]
[MCP-21] Admin endpoint handles direct Streamable HTTP POST tools/list request returning JSON even with Accept text/event-stream header.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (8):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L370(AdminEndpoint_DirectPost_ToolsList_ReturnsJson_EvenWithSseAcceptHeader) - [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L401(AdminEndpoint_DirectPost_Notification_ReturnsAccepted) - [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L421(TargetAdminEndpoint_DirectPost_ToolsList_ReturnsJson) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L8(Middleware_Parses_2026_Spec_Headers) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L36(Middleware_Falls_Back_To_Json_Body_When_Headers_Missing) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L64(Middleware_Matches_Admin_And_Target_Proxy_Paths) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L86(Middleware_Detects_Notifications_Correctly) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L103(Middleware_Skips_Non_Mcp_Paths)
- [Backend xUnit]
[MCP-23] AdminMcpServer HandleInitializeAsync includes subscriptions capability in capabilities object.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L655(HandleInitializeAsync_Advertises_Subscriptions_Capability) - [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L667(ProcessRequestAsync_Handles_Subscriptions_Listen) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L194(Middleware_Parses_Subscriptions_Listen_Request)
- [Backend xUnit]
[MCP-24] McpSpecMiddleware extracts OpenTelemetry W3C traceparent, tracestate, and baggage from headers and _meta.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L219(Middleware_Extracts_Trace_Context_From_Headers_And_Meta)
- [Backend xUnit]
[MCP-25] ToolRoutingManager falls back to SessionManager global server tools cache during cold-start search_tools execution
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L264(CallToolAsync_SearchTools_FallsBackToGlobalSessionManagerCache_WhenLocalCacheEmpty) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L319(CallToolAsync_SearchTools_PopulatesRoutingTable_FromGlobalCacheWithMultipleDelimiters) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L379(CallToolAsync_SearchTools_PopulatesRoutingTable_ResolvingAliasesToCanonicalServerId)
- [Backend xUnit]
[MCP-26] ToolRoutingManager dynamically registers prefix routes for tools with slash, colon, and double underscore delimiters
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (5):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L434(CallToolAsync_DynamicPrefixRoute_ResolvesAllDelimiters) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L477(NormalizeTargetToolName_NormalizesSlashAndColonDelimiters) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L493(NormalizeTargetToolName_ResolvesBareToolName_WhenUnambiguous) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L506(NormalizeTargetToolName_ReturnsAmbiguityError_WhenToolExistsAcrossMultipleServers) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L526(SearchTools_ReturnsValidJsonArray_WhenNoToolsMatch)
- [Backend xUnit]
[MCP-27] McpServer supports Alias property
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/McpServerTests.cs#L15(McpServer_Supports_Alias_Property) - [Backend xUnit]
ModelContextGateway.Tests/McpServerTests.cs#L30(DatabaseInitializer_EnsureAliasColumn_AddsColumnSuccessfully) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L563(CacheTools_Exposes_Slash_Formatted_Name_With_Server_Alias) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L599(CacheTools_Exposes_Slash_Formatted_Name_With_Server_Id_When_Alias_Empty)
- [Backend xUnit]
[MCP-30] IsUserAuthorizedAsync matches granular tool policies across /, :, and __ delimiters.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L284(IsUserAuthorizedAsync_MatchesToolPolicy_AcrossDelimiters) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L300(IsUserAuthorizedAsync_ResolvesAliasesAndServerIds_ForServerPolicies) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L624(NormalizeTargetToolName_Resolves_Multiple_Delimiters_And_Aliases)
- [Backend xUnit]
[MCP-33] OpenAiEmbeddingProvider generates embeddings via OpenAI and Ollama compatible endpoints.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (5):
- [Backend xUnit]
ModelContextGateway.Tests/OpenAiEmbeddingProviderTests.cs#L26(GenerateEmbeddingAsync_SendsValidPayload_AndParsesResponse) - [Backend xUnit]
ModelContextGateway.Tests/OpenAiEmbeddingProviderTests.cs#L75(GenerateEmbeddingsAsync_PreservesInputOrder_AcrossBatch) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerHybridSearchTests.cs#L39(SearchToolsAsync_CombinesKeywordAndVectorRanks_UsingRRF) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerHybridSearchTests.cs#L92(SearchToolsAsync_ScoresLexicalSignals_AcrossNameDescriptionTagsAndParameters) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerHybridSearchTests.cs#L141(SearchTools_SynchronousMethod_ReturnsRankedCandidates)
- [Backend xUnit]
[MCP-35] Test call and prompt endpoints resolve server and strip prefix across slash, dunder, and colon delimiters.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L500(TestCall_ResolvesServerAndStripsPrefix_AcrossDelimiters) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L535(TestResourceRead_LocalAndValidation_Behaviors) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L554(TestBench_ResolvesServerAlias_AcrossCapabilities)
- [Backend xUnit]
[MCP-36] PromptRoutingManager resolves prompt directly on cold-start without requiring prior prompts/list call.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/PromptAndResourceResilienceTests.cs#L11(PromptRoutingManager_GetPromptAsync_ResolvesDirectly_OnColdStart) - [Playwright E2E]
frontend/e2e/prompts-and-resources-execution.spec.ts#L1(should select and execute prompt with parameters in Test Bench)
- [Backend xUnit]
[MCP-37] ResourceRoutingManager resolves mcp:// URIs directly on cold-start without prior resources/list.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PromptAndResourceResilienceTests.cs#L120(ResourceRoutingManager_ReadResourceAsync_ResolvesDirectly_OnColdStart)
- [Backend xUnit]
[MCP-38] PromptRoutingManager supports slash, colon, and double-underscore delimiters for prompts/get.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/PromptAndResourceResilienceTests.cs#L56(PromptRoutingManager_GetPromptAsync_SupportsMultipleDelimiters) - [Backend xUnit]
ModelContextGateway.Tests/PromptAndResourceResilienceTests.cs#L101(PromptRoutingManager_GetPromptAsync_ResolvesRouterLocalPrompts_AcrossDelimiters) - [Playwright E2E]
frontend/e2e/prompts-and-resources-execution.spec.ts#L93(should select and read resource in Test Bench)
- [Backend xUnit]
[MCP-39] CapabilityEndpoints test bench APIs return 404 Not Found gracefully when target server is missing.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PromptAndResourceResilienceTests.cs#L165(CapabilityEndpoints_TestBench_HandlesMissingServer_GracefullyWith404)
- [Backend xUnit]
[MCP-ADMIN-ENDPOINT-CALL-TOOL] Admin endpoint /admin/message executes tools/call for manage_system diagnostics.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L294(AdminEndpoint_SseSession_CallTool_ManageSystemDiagnostics)
- [Backend xUnit]
[MCP-ADMIN-ENDPOINT-HEAD-REQUEST] Admin endpoint /admin handles HEAD request returning text/event-stream headers.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L212(AdminEndpoint_HeadRequest_ReturnsEventStreamHeaders)
- [Backend xUnit]
[MCP-ADMIN-ENDPOINT-LIST-TOOLS] Admin endpoint /admin/message executes tools/list over active SSE session and returns 10 admin tools.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L224(AdminEndpoint_SseSession_ListTools)
- [Backend xUnit]
[MCP-ADMIN-ENDPOINT-ROUTER-ADMIN-TARGET] Target proxy endpoint /router-admin routes directly to the Admin MCP server.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L149(TargetProxy_RouterAdmin_RoutesToAdminServer)
- [Backend xUnit]
[MCP-ADMIN-ENDPOINT-SSE-HANDSHAKE] Admin endpoint /admin/sse performs initialize handshake with 2026-07-28 protocol version.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L62(AdminEndpoint_SseHandshake_NegotiatesProtocol)
- [Backend xUnit]
[MCP-ADMIN-INITIALIZE-HANDSHAKE] AdminMcpServer initialize handles protocol negotiation for 2026-07-28 and 2024-11-05.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L199(HandleInitializeAsync_NegotiatesProtocolVersion)
- [Backend xUnit]
[MCP-ADMIN-PARITY-APPKEYS] manage_appkeys supports full parity for list, get_limits, create, and revoke actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L370(ManageAppKeys_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-CLIENTS] manage_clients supports full parity for register, list, and delete actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L423(ManageClients_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-CUSTOM-FILES] manage_custom_files supports full parity for list, get, save, and delete prompt and resource files.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L716(ManageCustomFiles_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-GROUP-MAPPINGS] manage_group_mappings supports full parity for list, save, and delete external-to-internal group mappings.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L530(ManageGroupMappings_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-JSONRPC-DISPATCH] AdminMcpServer processes standard JSON-RPC 2.0 requests (tools/list, tools/call, ping).
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L873(AdminTools_ProcessRequest_JsonRpcProtocol)
- [Backend xUnit]
[MCP-ADMIN-PARITY-POLICIES] manage_policies supports full parity for list, save, and delete access control policies.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L464(ManagePolicies_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-PROVIDERS] manage_providers supports full parity for list, save_secret, test_vault, save_auth, and test_ldap actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L577(ManageProviders_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-SERVER-ALIAS] AdminMcpServer manage_servers supports server alias for add, update, and list actions with collision validation.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L948(AdminMcpServer_ManageServers_Supports_Alias)
- [Backend xUnit]
[MCP-ADMIN-PARITY-SERVERS] Validates that the manage_servers tool provides comprehensive administrative capabilities including listing, retrieving, creating, updating, toggling, deleting, and reconnecting servers.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L234(ManageServers_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-SETTINGS] manage_settings supports full parity for get and update global router configurations.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L667(ManageSettings_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-SYSTEM] manage_system supports full parity for diagnostics, get_logs, clear_logs, and query_audit actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L816(ManageSystem_Parity_AllActions)
- [Backend xUnit]
[MCP-ADMIN-PARITY-TEST-TOOL-CALL] test_tool_call executes test bench backend tool calls and formats responses.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L846(TestToolCall_Execution_Parity)
- [Backend xUnit]
[MCP-ADMIN-PARITY-TOOLS-COVERAGE] Ensures every UI management workflow is backed by a verified, equivalent action within the consolidated Admin MCP tools.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L191(AdminTools_ExecuteSuccessfully)
- [Backend xUnit]
[MCP-ADMIN-RECONNECT-ALL-PROPAGATION] AdminMcpServer manage_servers reconnect_all triggers StartInitializationForBackend across active sessions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L730(ManageServers_ReconnectAll_TriggersSessionBackendInitialization)
- [Backend xUnit]
[MCP-ADMIN-REQUEST-WITHOUT-ID-NOT-DROPPED] Admin endpoint executes requests without an ID and does not drop them as notifications.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L550(AdminEndpoint_DirectPost_RequestWithoutId_ExecutesSuccessfully)
- [Backend xUnit]
[MCP-ADMIN-REVERSE-PROXY-X-FORWARDED-HOST] Admin SSE endpoint prioritizes X-Forwarded-Host header over Request.Host in endpoint URI advertising.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L514(AdminEndpoint_SseHandshake_UsesXForwardedHost)
- [Backend xUnit]
[MCP-ADMIN-SKILL-E2E-PROVISIONING] Admin automation templates and JSON-RPC tool calls successfully provision a blank-slate gateway instance end-to-end via HTTP /admin/message.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminAutomationSkillTests.cs#L176(EndToEnd_BlankSlateProvisioning_ConfiguresAllEntitiesViaAdminTools)
- [Backend xUnit]
[MCP-ADMIN-SKILL-FRONTMATTER] mcg-admin skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 characters
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminAutomationSkillTests.cs#L21(Skill_Frontmatter_IsValidAndWithinCharacterLimit)
- [Backend xUnit]
[MCP-ADMIN-SKILL-MIRROR] mcg-admin skill files and templates are identically mirrored between skills/ and .agents/skills/ directories
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminAutomationSkillTests.cs#L147(Skill_MirroredInAgentsDirectory)
- [Backend xUnit]
[MCP-ADMIN-SKILL-TEMPLATES] All mcg-admin scaffold templates exist, are non-empty, and contain valid JSON or scripts for Authentik, Keycloak, Entra, ActiveDirectory, Cloudflare, Vault, Embeddings, Docker, and shell automation
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminAutomationSkillTests.cs#L103(Templates_AllExistAndAreValidJsonOrScripts)
- [Backend xUnit]
[MCP-ADMIN-SKILL-WORKFLOW] mcg-admin skill contains all 7 administration phases including diagnostics, secrets, auth providers, RBAC/group mappings, settings/embeddings, servers/clients, and live tool verification
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminAutomationSkillTests.cs#L47(Skill_ContainsAllRequiredPhasesAndProviderCookbooks)
- [Backend xUnit]
[MCP-ADMIN-SSE-ZOD-COMPLIANT] Admin endpoint direct POST response does not serialize null error or _meta fields.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L487(AdminEndpoint_DirectPost_SerializesResponseWithoutNullErrorOrMeta)
- [Backend xUnit]
[MCP-ADMIN-TOOL-AUDIT-LOG] AdminMcpServer tool calls record audit log entries with caller and tool name.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L270(CallToolAsync_RecordsAuditLog)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-APPKEYS] AdminMcpServer executes manage_appkeys create, list, limits, and revoke actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L287(CallToolAsync_ManageAppKeys_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-CLIENTS] AdminMcpServer executes manage_clients register, list, and delete actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L334(CallToolAsync_ManageClients_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-CUSTOM-FILES] AdminMcpServer executes manage_custom_files save, get, list, and delete actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L508(CallToolAsync_ManageCustomFiles_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-GROUP-MAPPINGS] AdminMcpServer executes manage_group_mappings save, list, and delete actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L406(CallToolAsync_ManageGroupMappings_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-POLICIES] AdminMcpServer executes manage_policies save, list, and delete actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L372(CallToolAsync_ManagePolicies_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-PROVIDERS] AdminMcpServer executes manage_providers list, save_secret, and save_auth actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L439(CallToolAsync_ManageProviders_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-SERVERS] AdminMcpServer executes manage_servers list, get, create, update, toggle, and delete actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L218(CallToolAsync_ManageServers_ListAndCreate)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-SETTINGS] AdminMcpServer executes manage_settings get and update actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L482(CallToolAsync_ManageSettings_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOL-MANAGE-SYSTEM] AdminMcpServer executes manage_system diagnostics, get_logs, clear_logs, and query_audit actions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L562(CallToolAsync_ManageSystem_Lifecycle)
- [Backend xUnit]
[MCP-ADMIN-TOOLS-LIST-COUNT] AdminMcpServer tools/list returns all 10 consolidated tools with complete JSON schemas.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L151(ListToolsAsync_ReturnsTenConsolidatedTools)
- [Backend xUnit]
[MCP-ADMIN-ZOD-STRICT-RESPONSE] JsonRpcResponse serialization omits null result, error, and _meta fields completely to satisfy Zod strict validation.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L452(JsonRpcResponse_Serialization_OmitsNullFieldsCompletely)
- [Backend xUnit]
[MCP-COLDSTART-01] Full cold-start cycle: SessionManager cache seeded -> search_tools -> execute_tool dispatches to downstream mock server and returns output.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DownstreamSessionIntegrationTests.cs#L130(ColdStartCycle_SeedsRoutingTable_AndDispatchesExecuteToolDownstream)
- [Backend xUnit]
[MCP-DOWNSTREAM-INIT-DIAGNOSTICS] Initializes downstream MCP backends with detailed diagnostic logging.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L317(TestInitializationDiagnostics)
- [Backend xUnit]
[MCP-ERROR-ACTIONABLE-SUGGESTION-CATEGORIES] ToolErrorFormatter categorizes error messages and produces domain-specific remediation guidance.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolErrorFormatterTests.cs#L42(GetActionableSuggestion_ReturnsExpectedCategory)
- [Backend xUnit]
[MCP-ERROR-FORMAT-JSONRPC-REMEDIATION] ToolErrorFormatter attaches actionable suggestions and remediation resource URIs to JSON-RPC error payloads.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolErrorFormatterTests.cs#L7(TransformError_FormatsJsonRpcErrorWithRemediation)
- [Backend xUnit]
[MCP-ERROR-FORMAT-UNHANDLED-EXCEPTION] ToolErrorFormatter converts unhandled exceptions to standardized JSON-RPC error format with suggestions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolErrorFormatterTests.cs#L27(TransformException_FormatsExceptionWithRemediation)
- [Backend xUnit]
[MCP-EXEC-TOOL-ENFORCE-AUTH-POLICIES] Meta-mode execute_tool strictly enforces target tool authorization policies
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L567(Pairwise_MetaMode_ExecuteTool_EnforcesTargetAuthorization)
- [Backend xUnit]
[MCP-EXEC-TOOL-ENFORCE-CATEGORY-SCOPES] Router meta-mode execute_tool validates and enforces category scopes on target tool calls
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L428(ClientSession_ExecuteTool_EnforcesCategoryScopeOnInnerTarget)
- [Backend xUnit]
[MCP-FILES-DIR-HELPER-INIT] CustomFilesDirectoryHelper initializes and creates required directories on startup.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L1069(CustomFilesDirectoryHelper_CreatesDirectoriesCorrectly)
- [Backend xUnit]
[MCP-JSON-REWRITE-ADVERSARIAL-EDGE-CASES] JsonNode request rewrite handles adversarial mixed arrays, block comments, and malformed JSON.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L590(JsonNode_Rewrite_HandlesAdversarialEdgeCases)
- [Backend xUnit]
[MCP-JSON-REWRITE-BATCH-COMMENTS-COMMAS] RewriteRequestJson accurately parses JSON batches, comments, and trailing commas using System.Text.Json JsonNode.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L191(JsonNode_Rewrite_HandlesBatchCommentsAndCommas)
- [Backend xUnit]
[MCP-JSON-REWRITE-META-IN-PARAMS] RewriteRequestJson strips _meta from root and embeds it into params to comply with MCP JSON-RPC 2.0 Zod schema.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L216(JsonNode_Rewrite_EnsuresMetaInsideParamsAndNotAtRoot)
- [Backend xUnit]
[MCP-JSONRPC-CONVERTER-MINIMAL-VARIANTS] JsonRpcMessageConverter deserializes edge-case minimal/null JSON-RPC variants without stack overflows.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L702(PlainJsonRpcMessages_DoNotCauseStackOverflow_PolymorphicVariants)
- [Backend xUnit]
[MCP-JSONRPC-CONVERTER-PRIORITIZE-RESPONSE] JsonRpcMessageConverter prioritizes result/error properties over method property in polymorphic response parsing.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L354(SendRequestAsync_Succeeds_When_Response_Has_Method_Property)
- [Backend xUnit]
[MCP-JSONRPC-DESERIALIZE-PLAIN-NO-OVERFLOW] Deserializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L287(Deserializing_Plain_JsonRpcMessage_Does_Not_Cause_StackOverflow)
- [Backend xUnit]
[MCP-JSONRPC-POLYMORPHIC-DESERIALIZATION] Polymorphic JSON-RPC message deserializer accurately instantiates request, response, and notification subclasses.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L259(PolymorphicDeserialization_Correctly_Deserializes_JsonRpcMessage_Subclasses)
- [Backend xUnit]
[MCP-JSONRPC-SERIALIZE-PLAIN-NO-OVERFLOW] Serializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L303(Serializing_Plain_JsonRpcMessage_Does_Not_Cause_StackOverflow)
- [Backend xUnit]
[MCP-MOCK-JSONRPC-FLOW] MockDownstreamMcpServer handles initialize, initialized, tools/list, and tools/call JSON-RPC 2.0 protocol cycles.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MockDownstreamMcpServerTests.cs#L11(MockDownstreamMcpServer_HandlesStandardJsonRpcFlow)
- [Backend xUnit]
[MCP-MOCK-RESOURCES-PROMPTS-SUPPORT] MockDownstreamMcpServer handles resources/list and prompts/list MCP protocol methods.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L123(MockDownstreamMcpServer_HandlesResourcesAndPrompts)
- [Backend xUnit]
[MCP-RESILIENT-01] Prefix-based resilient routing: execute_tool called with unregistered but prefixed tool name dynamically resolves server and executes.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DownstreamSessionIntegrationTests.cs#L294(PrefixBasedResilientRouting_DynamicallyRegistersAndDispatchesTool)
- [Backend xUnit]
[MCP-SESSION-BUILTIN-PROMPTS] ClientSession lists built-in diagnostic and routing prompts.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L115(ListPromptsAsync_ReturnsBuiltinDiagnosticPrompts)
- [Backend xUnit]
[MCP-SESSION-BUILTIN-RESOURCES] ClientSession lists built-in resources including router://status.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L99(ListResourcesAsync_ReturnsBuiltinRouterStatusResource)
- [Backend xUnit]
[MCP-SESSION-CALL-SEARCH-TOOLS] ClientSession calls built-in search_tools and returns structured search results.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L132(CallToolAsync_SearchTools_ExecutesSuccessfullyWithStructuredContent)
- [Backend xUnit]
[MCP-SESSION-ERROR-TRANSFORM-CANCEL-SAMPLING] Translates backend error codes, handles cancellation tokens, and executes sampling requests.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L880(ErrorTransformation_Cancellation_And_Sampling_Works_Correctly)
- [Backend xUnit]
[MCP-SESSION-GET-PROMPT-DIAGNOSE] ClientSession gets router__diagnose_failure prompt and returns diagnostic prompt instructions.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L176(GetPromptAsync_DiagnoseFailure_ReturnsDiagnosticInstructions)
- [Backend xUnit]
[MCP-SESSION-MANAGER-PER-SERVER-CACHE] SessionManager caches and isolates connections per downstream backend server.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L1084(SessionManager_PerServerCache_WorksCorrectly)
- [Backend xUnit]
[MCP-SESSION-METAMODE-TOOLS] ClientSession exposes meta-mode tools search_tools and execute_tool in meta mode.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L80(ListToolsAsync_WhenInMetaMode_ExposesSearchAndExecuteTools)
- [Backend xUnit]
[MCP-SESSION-READ-ROUTER-STATUS] ClientSession reads router://status resource and returns online gateway metadata.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L153(ReadResourceAsync_RouterStatus_ReturnsOnlineStatusPayload)
- [Backend xUnit]
[MCP-SESSION-REQUEST-CANCELLATION] ClientSession registers and triggers request cancellation for active cancellation tokens.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L198(RegisterRequestCancellation_And_CancelRequest_CancelsActiveToken)
- [Backend xUnit]
[MCP-SESSION-UNREGISTERED-RESPONSE] ClientSession returns false when handling client response for unregistered request ID.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientSessionTests.cs#L214(TryHandleClientResponse_ReturnsFalse_WhenNoPendingRequest)
- [Backend xUnit]
[MCP-WIRE-JSONRPC-SPEC] MockDownstreamMcpServer treats messages with omitted id as notifications returning 202 Accepted with empty body.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MockDownstreamMcpServerTests.cs#L98(MockDownstreamMcpServer_TreatsOmittedIdAsNotification_ReturningAccepted)
- [Backend xUnit]
[MCP-WIRE-PROTOCOL-MATRIX] MockDownstreamMcpServer dynamically negotiates requested protocol version.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MockDownstreamMcpServerTests.cs#L80(MockDownstreamMcpServer_DynamicallyNegotiatesProtocolVersion)
- [Backend xUnit]
[UI-104] renders resource tester with servers and resources
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/ResourceTesterCard.test.tsx#L1(renders resource tester with servers and resources)
- [Frontend Vitest]
[UI-106] renders connected server details with badges and triggers actions
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/ServerCard.test.tsx#L1(renders connected server details with badges and triggers actions)
- [Frontend Vitest]
[UI-107] renders prompt dropdown and filters by selected server
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/PromptTesterCard.test.tsx#L1(renders prompt dropdown and filters by selected server)
- [Frontend Vitest]
[UI-112] renders nothing when isAddEditOpen is false
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L1(renders nothing when isAddEditOpen is false) - [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L186(renders alias input, validates characters, and submits alias (UI-SERVERS-ALIAS-MANAGEMENT))
- [Frontend Vitest]
[UI-121] should open Add Server modal and switch secret provider types
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/server-management.spec.ts#L1(should open Add Server modal and switch secret provider types)
- [Playwright E2E]
[UI-SERVERS-ALIAS-MANAGEMENT] renders server alias badge alongside server id when configured
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/ServerCard.test.tsx#L145(renders server alias badge alongside server id when configured (UI-SERVERS-ALIAS-MANAGEMENT))
- [Frontend Vitest]
[API-PIPELINE-GET-AUDIT] GET /api/audit returns audit log records with 200 OK.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L394(Pipeline_GET_Audit_Returns200)
- [Backend xUnit]
[API-PIPELINE-GET-LOGS] GET /api/logs returns system log records with 200 OK.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L421(Pipeline_GET_Logs_Returns200)
- [Backend xUnit]
[AUTH-107] RegisterClient successfully handles DCR requests when open DCR is enabled.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L36(RegisterClient_CreatesApplicationAndReturnsOk)
- [Backend xUnit]
[AUTH-109] RegisterClient uses IOAuthClientRepository when IOpenIddictApplicationManager is null.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L94(RegisterClient_UsesOAuthClientRepository_WhenApplicationManagerNull) - [Frontend Vitest]
frontend/src/test/pages/ConsentView.test.tsx#L16(renders client name from query string and sets form action and hidden inputs) - [Playwright E2E]
frontend/e2e/oauth-consent-flow.spec.ts#L5(should render interactive OAuth consent screen and display requesting client name)
- [Backend xUnit]
[AUTH-113] RegisterClient supports public clients with PKCE (token_endpoint_auth_method: none) and omits client secret.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L351(RegisterClient_PublicClient_SucceedsWithoutSecret)
- [Backend xUnit]
[AUTH-115] RegisterClient dynamically binds requested scopes to OpenIddict application descriptor permissions.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L435(RegisterClient_DynamicScopes_AddedToPermissions)
- [Backend xUnit]
[MCP-ADMIN-TEST-TOOL-CALL-SECRET-RESOLUTION] AdminMcpServer test_tool_call resolves server secrets via injected ISecretRetriever.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L765(TestToolCall_ResolvesSecretsViaInjectedSecretRetriever)
- [Backend xUnit]
[MCP-ADMIN-TEST-TOOL-CALL-USER-SECRET-STORE] AdminMcpServer test_tool_call resolves user credentials via injected IUserSecretStore and caller context.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L856(TestToolCall_ResolvesUserCredentialsViaInjectedUserSecretStore)
- [Backend xUnit]
[SEC-02] VaultSecretRetriever dynamically loads, applies, and reloads Vault configurations from database repository.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (29):
- [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L294(VaultSecretRetriever_DynamicallyLoadsAndAppliesDbConfig_WithReload) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L79(GetSecretProviders_ReturnsOkWithList) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L121(SaveSecretProvider_SavesSuccessfully) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L257(TestVaultConnection_ValidatesInputAndHandlesFailureGracefully) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L349(SaveSecretProvider_HttpUrl_AllowedForLocalhost) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L373(SaveSecretProvider_HttpUrl_AllowedForSimpleHost) - [Backend xUnit]
ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs#L8(GetSecretForProviderAsync_ReturnsNull_WhenProviderIsNone) - [Backend xUnit]
ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs#L26(GetSecretForProviderAsync_RoutesToTargetProvider_AndCachesValue) - [Backend xUnit]
ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs#L48(GetSecretForProviderAsync_MatchesVaultAliasNames) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L11(ProviderName_ReturnsHashiCorpVault) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L36(EnsureVaultClientAsync_ReturnsNull_WhenCredentialsMissing) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L56(EnsureVaultClientAsync_CreatesClient_WhenValidConfig) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L78(GetSecretAsync_ReturnsCachedValue_WhenPresent) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L92(GetSecretAsync_ReturnsNull_WhenClientIsNull) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L482(ConnectAndInitializeBackendAsync_WithVaultServer_ResolvesRetrieverFromRootServices_WhenHttpContextIsNull) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L344(StdioTransport_ShouldPassSecretViaEnvironmentVariables_AndNotCommandLine) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L429(StdioTransport_ShouldSanitizeAndMaskSecretsInLogs) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L129(VaultUserSecretStore_SaveSecretAsync_WritesToVaultKv2) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L164(VaultUserSecretStore_DeleteSecretAsync_DeletesFromVaultKv2) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L187(VaultUserSecretStore_GetServerIdsAsync_ListsPathsFromVaultKv2) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L216(VaultUserSecretStore_Resolves_Enterprise_Path_Template_And_Discrete_KVs) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L376(Pipeline_GET_Providers_Secret_Returns200) - [Backend xUnit]
ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs#L37(GetSecretAsync_MintsTokenViaTokenExchange_AndCachesResponse) - [Backend xUnit]
ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs#L190(CompositeSecretRetriever_RoutesOboAndPocketIdAliases_ToTokenExchangeRetriever) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L41(successfully loads auth and secret providers) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L131(saves secret provider preserving Vault token and mount path) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L170(saves Windows Registry and Environment secret providers correctly) - [Frontend Vitest]
frontend/src/test/stores/useProviderStore.test.ts#L205(handles secret provider save error with toast and throws) - [Playwright E2E]
frontend/e2e/vault-approle-config-flow.spec.ts#L10(should configure Vault AppRole credentials and test connection in settings)
- [Backend xUnit]
[SEC-03] EnvironmentSecretRetriever retrieves configured environment variable value.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (5):
- [Backend xUnit]
ModelContextGateway.Tests/SecretRetrieverTests.cs#L5(EnvironmentSecretRetriever_ReturnsEnvVariable_WhenExists) - [Backend xUnit]
ModelContextGateway.Tests/SecretRetrieverTests.cs#L25(EnvironmentSecretRetriever_ReturnsNull_WhenVariableDoesNotExist) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L370(TrustedProxyHelper_AllowsXForwardedFor_WhenChainIsFullyTrusted) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L431(TrustedProxyHelper_ConfiguredProxyTrusted_CIDR) - [Backend xUnit]
ModelContextGateway.Tests/EnvironmentSecretRetrieverTests.cs#L5(EnvironmentSecretRetriever_RetrievesSecret_FromEnvironmentVariables)
- [Backend xUnit]
[SEC-04] WindowsRegistrySecretRetriever handles non-Windows platforms gracefully and returns null.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/SecretRetrieverTests.cs#L34(WindowsRegistrySecretRetriever_HandlesNonWindowsGracefully) - [Backend xUnit]
ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs#L12(GetSecretAsync_ReturnsPlainString_WhenRegistryValueIsString) - [Backend xUnit]
ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs#L27(GetSecretAsync_DecryptsDpapiBytes_WhenRegistryValueIsByteArray) - [Backend xUnit]
ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs#L51(GetSecretAsync_ReturnsNull_WhenKeyNotFoundOrNull)
- [Backend xUnit]
[SEC-05] renders RPC message stream with formatted JSON
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (6):
- [Frontend Vitest]
frontend/src/test/components/LogsTerminalCard.test.tsx#L61(renders RPC message stream with formatted JSON) - [Frontend Vitest]
frontend/src/test/components/LogsTerminalCard.test.tsx#L81(toggles autoscroll and handles clear logs) - [Frontend Vitest]
frontend/src/test/components/LogsTerminalCard.test.tsx#L108(shows empty state when no logs match filter) - [Frontend Vitest]
frontend/src/test/components/GeneralTabLogoUpload.test.tsx#L56(renders img live preview when dashboardIcon is an image URL) - [Frontend Vitest]
frontend/src/test/components/GeneralTabLogoUpload.test.tsx#L88(updates dashboardIcon and live preview when a logo image file is uploaded) - [Frontend Vitest]
frontend/src/test/components/GeneralTabLogoUpload.test.tsx#L141(saves settings with the updated logo URL when form is submitted after upload)
- [Frontend Vitest]
[SEC-30] Renders User Secret Storage options and toggles Vault with warning when disabled.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/SecretProvidersTab.test.tsx#L136(renders User Secret Storage options and toggles Vault with warning when disabled)
- [Frontend Vitest]
[SEC-ADMIN-AUDIT-REDACTION] AdminMcpServer redacts sensitive secrets from argument payloads before recording audit logs.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L613(CallToolAsync_AuditLog_RedactsSensitivePayloadData)
- [Backend xUnit]
[SEC-APPKEY-SANITIZE-METADATA-GET] AppKeys API returns sanitized key metadata without leaking plaintext tokens.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L259(GetAppKeys_ReturnsSanitizedKeys_ForAdminAndFiltered)
- [Backend xUnit]
[SEC-AUDIT-LOG-ADMIN-ACTION-RECORD] AuditLogger records administrative configuration changes and security events to AdminAuditLogs table.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuditLoggerTests.cs#L75(LogAdminActionAsync_WritesEntryToDatabase)
- [Backend xUnit]
[SEC-AUDIT-LOG-INVOCATION-RECORD] AuditLogger writes tool invocation audit records with actor attribution and duration to AuditLogs table.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuditLoggerTests.cs#L60(LogInvocationAsync_WritesEntryToDatabase)
- [Backend xUnit]
[SEC-AUDIT-LOGGER-ADMIN-PERSIST] AuditLogger persists administrative actions directly into AdminAuditLogs database table.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuditQueryApiTests.cs#L150(LogAdminActionAsync_WritesRowToAdminAuditLogs)
- [Backend xUnit]
[SEC-AUDIT-MAPPING-SAVE-ACTION] PermissionsController records audit action when group mapping is saved.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuditQueryApiTests.cs#L117(SaveMapping_WritesAuditAction_OnSuccess)
- [Backend xUnit]
[SEC-AUDIT-PER-REQUEST-ACTOR-ATTRIBUTION] Audit logger attributes per-request actor credentials accurately across stateless calls.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L128(AuditLogger_RecordsPerRequestActor_NotHandshakeActor)
- [Backend xUnit]
[SEC-AUDIT-POLICY-SAVE-ACTION] PermissionsController records audit action when access policy is saved.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuditQueryApiTests.cs#L83(SavePolicy_WritesAuditAction_OnSuccess)
- [Backend xUnit]
[SEC-AUDIT-QUERY-FILTERED-ROWS] Audit queries support filtering by user, server, and pagination while recording query access in audit log.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuditQueryApiTests.cs#L60(AuditQuery_ReturnsFilteredRows_AndLogsAuditAction)
- [Backend xUnit]
[SEC-GATEWAY-ZERO-CONFIG-BOOT] Gateway boots from a blank slate with zero master key environment variables, auto-generates .master.key, and serves health and admin endpoints.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminAutomationSkillTests.cs#L352(Gateway_BlankSlate_WithoutMasterKeyEnv_AutoGeneratesKeyFileAndBootsSuccessfully)
- [Backend xUnit]
[SEC-HTTP-SECRET-URL-FALLBACK] HttpTransport falls back to URL and SecretItemKey when specific secret paths are unconfigured.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L160(HttpTransport_ResolveTokenAsync_Defaults_To_Url_And_ApiKey_When_Not_Configured)
- [Backend xUnit]
[SEC-KEY-PROVIDER-AUTOGEN] EncryptionKeyProvider delegates to DbKeyHelper to auto-generate master key when unconfigured.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EncryptionKeyProviderTests.cs#L42(GetDbEncryptionKey_AutoGenerates_WhenUnconfigured)
- [Backend xUnit]
[SEC-KEY-PROVIDER-CONFIG] EncryptionKeyProvider returns configured DB_ENCRYPTION_KEY or MCG_SECRET.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EncryptionKeyProviderTests.cs#L28(GetDbEncryptionKey_UsesConfig_WhenProvided)
- [Backend xUnit]
[SEC-KEY-PROVIDER-FALLBACK] EncryptionKeyProvider falls back to DB_ENCRYPTION_KEY when MCG_SECRET is unconfigured.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EncryptionKeyProviderTests.cs#L70(GetRouterSecret_FallsBackToDbEncryptionKey_WhenDbEncryptionKeyProvided)
- [Backend xUnit]
[SEC-KEY-PROVIDER-SECRET] EncryptionKeyProvider returns configured MCG_SECRET.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/EncryptionKeyProviderTests.cs#L56(GetRouterSecret_UsesConfig_WhenProvided)
- [Backend xUnit]
[SEC-KEYFILE-AUTOGEN] Blank-slate initialization auto-generates a 256-bit base64 master key and persists it to .master.key.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L63(ResolveDbEncryptionKey_AutoGeneratesAndPersistsKey_WhenBlankSlate)
- [Backend xUnit]
[SEC-KEYFILE-ENV-PRECEDENCE] Explicit environment variables MCG_MASTER_KEY or MCG_SECRET take precedence over keyfiles.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L28(ResolveDbEncryptionKey_ReturnsConfiguredEnvKey_WhenPresent)
- [Backend xUnit]
[SEC-KEYFILE-FILE-OVER-KEYFILE] Explicit file secrets take precedence over persistent .master.key files.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L123(ResolveDbEncryptionKey_FileSecretTakesPrecedenceOverKeyFile)
- [Backend xUnit]
[SEC-KEYFILE-FILE-SECRET] File-based secrets configured via MCG_MASTER_KEY_FILE or standard Docker secrets paths are resolved.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L45(ResolveDbEncryptionKey_ReturnsFileSecret_WhenKeyFileSpecified)
- [Backend xUnit]
[SEC-KEYFILE-HIERARCHY-PRECEDENCE] Explicit environment variables take precedence over file secrets and keyfiles.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L101(ResolveDbEncryptionKey_EnvVarTakesPrecedenceOverFileSecretAndKeyFile)
- [Backend xUnit]
[SEC-KEYFILE-RELOAD] Existing .master.key file is loaded across gateway restarts without key mutation.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L83(ResolveDbEncryptionKey_LoadsExistingKeyFile_OnSubsequentBoot)
- [Backend xUnit]
[SEC-KEYSOURCE-DETECTION] Correctly identifies KeySource origin for environment, file, and auto-generated keys.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L144(ResolveDbEncryptionKey_IdentifiesKeySourceAccurately)
- [Backend xUnit]
[SEC-KEYSOURCE-SETCACHEDKEY] SetCachedKey sets in-memory encryption key and updates ActiveKeySource.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L314(SetCachedKey_UpdatesCachedKeyAndActiveKeySource)
- [Backend xUnit]
[SEC-LOG-PROVIDER-PRESERVE-PLAIN] SanitizingLoggerProvider preserves non-sensitive log statements intact.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SanitizingLoggerProviderTests.cs#L43(SanitizingLoggerProvider_LeavesPlainMessagesUnchanged)
- [Backend xUnit]
[SEC-LOG-PROVIDER-REDACT-EXCEPTIONS] SanitizingLoggerProvider sanitizes exception messages and stack traces to prevent credential leaks in error logs.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SanitizingLoggerProviderTests.cs#L76(SanitizingLoggerProvider_RedactsSecretsInExceptionMessageAndToString)
- [Backend xUnit]
[SEC-LOG-PROVIDER-REDACT-SECRETS] SanitizingLoggerProvider automatically redacts Bearer tokens, API keys, and credentials in log message strings.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SanitizingLoggerProviderTests.cs#L8(SanitizingLoggerProvider_RedactsBearerTokensAndKeys)
- [Backend xUnit]
[SEC-MASTERKEY-ATOMIC-REENCRYPTION] Atomically re-encrypts database credentials when setting a custom master key.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (5):
- [Backend xUnit]
ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs#L142(SetMasterKey_AtomicallyReEncryptsDatabaseCredentials) - [Backend xUnit]
ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs#L241(SetMasterKey_RejectsWhenKeySourceIsExternalOrVault) - [Backend xUnit]
ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs#L259(AdminMcpServer_ManageSystem_SetMasterKey_ReencryptsCleanly) - [Backend xUnit]
ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs#L338(SetMasterKey_RejectsInvalidOrShortKeys) - [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L482(Pipeline_POST_MasterKey_RejectsWhenExternalKeySource)
- [Backend xUnit]
[SEC-MASTERKEY-CONFIGURED-STATUS-BADGE] Displays configured badge and rotate button when custom master key is configured.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/GeneralTab.test.tsx#L192(renders configured badge and rotate key button when master key is Configured)
- [Frontend Vitest]
[SEC-MASTERKEY-CUSTOM-MODAL-REENCRYPTION] Validates master key inputs (length, match) and triggers atomic re-encryption.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Frontend Vitest]
frontend/src/test/components/MasterKeyModal.test.tsx#L6(validates key inputs and submits custom master key to callback) - [Frontend Vitest]
frontend/src/test/components/MasterKeyModal.test.tsx#L54(generates a strong random master key when auto-generate button is clicked) - [Frontend Vitest]
frontend/src/test/components/MasterKeyModal.test.tsx#L85(displays validation error when onSetMasterKey returns failure)
- [Frontend Vitest]
[SEC-MASTERKEY-EXTERNAL-LOCKED-BADGE] Displays locked badge when master key is externally managed via Vault or Environment.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/GeneralTab.test.tsx#L149(renders locked badge when master key is managed externally)
- [Frontend Vitest]
[SEC-MASTERKEY-UI-STATUS-BANNER] Displays warning banner when keySource is AutoGenerated and opens custom master key modal.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/GeneralTab.test.tsx#L115(renders AutoGenerated warning banner and opens MasterKeyModal)
- [Frontend Vitest]
[SEC-PII-BASIC-COOKIE-QUERY-USERINFO] PiiSanitizer redacts Basic auth credentials, session cookies, query access tokens, and URL userinfo credentials.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PiiSanitizerTests.cs#L53(PiiSanitizer_Redacts_Basic_ApiKey_Cookie_QueryToken_UrlUserInfo)
- [Backend xUnit]
[SEC-PII-BEARER-TOKEN] PiiSanitizer redacts Bearer authentication tokens from payload strings.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PiiSanitizerTests.cs#L5(SanitizePayload_Redacts_Bearer_Tokens)
- [Backend xUnit]
[SEC-PII-CONNECTION-STRING-PASSWORD] PiiSanitizer redacts database connection string passwords.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PiiSanitizerTests.cs#L29(SanitizePayload_Redacts_ConnectionString_Passwords)
- [Backend xUnit]
[SEC-PII-JSON-APIKEY-PASSWORD] PiiSanitizer redacts apiKey, password, and secret properties in JSON payloads.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PiiSanitizerTests.cs#L16(SanitizePayload_Redacts_Api_Keys_And_Passwords)
- [Backend xUnit]
[SEC-PII-LOGBUFFER-IN-MEMORY] LogBuffer sanitizes PII and credentials prior to buffering in memory.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PiiSanitizerTests.cs#L40(LogBuffer_Add_Sanitizes_PII_Payloads)
- [Backend xUnit]
[SEC-PROVIDER-MASK-SECRETS-GET] ProvidersController GET endpoints mask sensitive tokens and passwords as asterisks.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L130(ProvidersController_GetEndpoints_RedactSensitiveSecrets)
- [Backend xUnit]
[SEC-PROVIDER-REDACT-AUDIT-PAYLOADS] ProvidersController redacts sensitive secrets in administrative audit logs.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L185(ProvidersController_SaveEndpoints_RedactAuditLogPayloads)
- [Backend xUnit]
[SEC-SESSIONID-OPAQUE-NOT-BEARER] Mcp-Session-Id header generates opaque UUIDs without leaking bearer tokens.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L1119(Mcp_SessionId_IsOpaque_NotBearerToken)
- [Backend xUnit]
[SEC-VAULT-BOOTSTRAPPING] Bootstraps master encryption key directly from HashiCorp Vault when VAULT_ADDR is configured.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L191(ResolveDbEncryptionKey_BootstrapsFromVault_WhenVaultConfigured)
- [Backend xUnit]
[SEC-VAULT-CUSTOM-MOUNT-PATH] SseTransport resolves dynamic secrets from Vault using custom mounts, paths, and secret fields.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L134(SseTransport_ResolveTokenAsync_Uses_Custom_Path_Field_And_Mount)
- [Backend xUnit]
[SEC-VAULT-CUSTOM-PATH] Bootstraps master key from Vault using custom mount path and secret key name.
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L236(ResolveDbEncryptionKey_BootstrapsFromVault_WithCustomPathAndKeyName)
- [Backend xUnit]
[UI-105] renders system logs and handles level filter
- Category:
SEC(Secrets Providers & Encryption) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/LogsTerminalCard.test.tsx#L1(renders system logs and handles level filter)
- [Frontend Vitest]
[TRANS-01] HttpTransport formats X-API-Key header when downstream server AuthShape is 'x-api-key'.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L258(HttpTransport_Applies_XApiKey_AuthShape) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L280(HttpTransport_Applies_CustomHeader_AuthShape) - [Backend xUnit]
ModelContextGateway.Tests/EnterpriseAuthAndVaultScenarioTests.cs#L303(HttpTransport_Applies_Slack_PerUser_Token_And_ForwardedUser) - [Playwright E2E]
frontend/e2e/full-ui-flow-http-direct.spec.ts#L13(should register HTTP server with Direct Key, verify status badge, and execute tool in Test Bench)
- [Backend xUnit]
[TRANS-02] Register STDIO server with Env provider, verify connection card, and execute tool via Test Bench.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/full-ui-flow-stdio-env.spec.ts#L13(should register STDIO server, verify card, and execute echo tool via Test Bench)
- [Playwright E2E]
[TRANS-03] HttpTransport SendNotificationAsync gracefully handles 404 and 405 without throwing exceptions
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L160(HttpTransport_SendNotificationAsync_DoesNotThrow_On404Or405)
- [Backend xUnit]
[TRANS-04] HTTP stateless transport correctly accumulates multi-line SSE streams and skips intermediate notification events
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/HttpTransportTests.cs#L72(SendRequestAsync_ParsesSseStreamWithIntermediateNotifications)
- [Backend xUnit]
[TRANS-05] HTTP stateless transport reads entire multi-line and formatted JSON response bodies without premature truncation
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/HttpTransportTests.cs#L109(SendRequestAsync_ParsesFormattedMultiLineJsonPayload)
- [Backend xUnit]
[TRANS-06] HTTP stateless transport joins multi-line SSE data fields into complete JSON payloads
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/HttpTransportTests.cs#L146(SendRequestAsync_ParsesMultiLineDataLinesInSse)
- [Backend xUnit]
[TRANS-AUTH-SHAPES-CUSTOM-HEADER] SseTransport applies custom header names for proprietary target backend authentication.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L45(SseTransport_ApplyAuthAndCustomHeaders_Formats_CustomHeader)
- [Backend xUnit]
[TRANS-AUTH-SHAPES-HEADERS-JSON] SseTransport parses and applies extra request headers from HeadersJson configuration.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L112(SseTransport_ApplyAuthAndCustomHeaders_Parses_HeadersJson)
- [Backend xUnit]
[TRANS-AUTH-SHAPES-QUERY-PARAM] SseTransport appends authentication tokens as URL query parameters when query auth shape is configured.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L67(SseTransport_ApplyAuthAndCustomHeaders_Appends_QueryParameter)
- [Backend xUnit]
[TRANS-AUTH-SHAPES-STANDARD-HEADERS] SseTransport formats standard authorization shapes (bearer, basic, raw, x-api-key) into HTTP headers.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L17(SseTransport_ApplyAuthAndCustomHeaders_Formats_Standard_Headers)
- [Backend xUnit]
[TRANS-BACKEND-MULTIPLEX-CONCURRENT-RPC] BackendConnection multiplexes 100+ concurrent asynchronous polymorphic RPC requests without deadlocking.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L512(AsynchronousRouting_HighVolumeAndPolymorphic_DoesNotHang)
- [Backend xUnit]
[TRANS-DISCONNECT-PENDING-CLEANUP] Cleans up and cancels pending requests upon backend transport disconnect.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L277(BackendDisconnectCleanup_ClearsPendingRequests)
- [Backend xUnit]
[TRANS-EXPLICIT-NULL-ID-ISOLATION] Handles JSON-RPC requests with explicit null IDs and multiplexes upstream calls correctly.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L346(ConcurrentResponseIsolation_ExplicitNullId_Succeeds)
- [Backend xUnit]
[TRANS-HIGH-CONCURRENCY-ISOLATION] Maintains strict response isolation under high concurrency with 100+ callers reusing identical RPC IDs.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L111(HighConcurrencyResponseIsolation_RepeatedIdsAcrossCallers)
- [Backend xUnit]
[TRANS-HTTP-AUTH-CUSTOM-HEADER] HttpTransport formats custom header authentication for target servers.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L90(HttpTransport_ApplyAuthAndCustomHeaders_Formats_CustomHeader)
- [Backend xUnit]
[TRANS-HTTP-RESOLVE-STATIC-APIKEY] HTTP stateless transport resolves static API keys when secret provider is None
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/HttpTransportTests.cs#L11(ResolveTokenAsync_ReturnsApiKey_WhenProviderNone)
- [Backend xUnit]
[TRANS-ISOLATION-SAME-ID-REVERSED-ORDER] Multiplexes concurrent client calls sharing identical JSON-RPC IDs and routes reversed responses correctly.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L12(ConcurrentResponseIsolation_TwoCallersSameId_SucceedsWithReversedResponseOrder)
- [Backend xUnit]
[TRANS-MIXED-ID-TYPES-ISOLATION] Handles mixed numeric, string, and null JSON-RPC IDs concurrently across backend transports.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L614(ConcurrentResponseIsolation_MixedNumericStringNullIds)
- [Backend xUnit]
[TRANS-NOTIFICATION-NO-RESPONSE-LISTENER] Handles JSON-RPC notifications without registering pending response listeners.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L419(ConcurrentResponseIsolation_Notification_DoesNotExpectResponse)
- [Backend xUnit]
[TRANS-SSE-LOG-ENDPOINT-WAIT-EXCEPTION] SSE transport logs exceptions gracefully when waiting for endpoint URL without throwing unhandled exceptions.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SseTransportTests.cs#L76(SendRequestAsync_HandlesEndpointWaitTimeoutGracefully)
- [Backend xUnit]
[TRANS-SSE-NOTIF-FORWARD-FIELDS-INTACT] SSE backend notifications are forwarded to client sessions with all payload fields intact.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L437(SseBackend_Notification_IsForwardedToClient_WithAllFieldsIntact)
- [Backend xUnit]
[TRANS-SSE-RESOLVE-STATIC-APIKEY] SSE transport resolves static plaintext API keys when provider is None
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/SseTransportTests.cs#L13(ResolveTokenAsync_ReturnsApiKey_WhenProviderNone)
- [Backend xUnit]
[TRANS-SSE-STREAM-LIFECYCLE] SSE transport correctly resolves relative endpoint URLs and ignores keep-alive SSE comments.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/SseTransportTests.cs#L100(SseTransport_ResolvesRelativeEndpointUrl_AndProcessesKeepAliveComments) - [Backend xUnit]
ModelContextGateway.Tests/SseTransportTests.cs#L143(SseTransport_MultiplexesResponse_CorrelatingUpstreamRequestId)
- [Backend xUnit]
[TRANS-STATELESS-CANCELLATION-ISOLATION] Isolates cancellation tokens between concurrent stateless client requests.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L482(ClientSession_ConcurrentStatelessRequestIsolateCancellation)
- [Backend xUnit]
[TRANS-STDIO-DRAIN-BUFFER-EOF] STDIO transport drains buffered stdout/stderr streams to EOF when process exits rapidly
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L472(StdioTransport_ShouldDrainReaderStreamsToEOF_WhenProcessExitsImmediately)
- [Backend xUnit]
[TRANS-STDIO-SPAWN-TOOL-CALL] STDIO transport spawns subprocess, handles JSON-RPC initialization and executes tool calls
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L49(StdioTransport_ShouldInitializeAndCallToolSuccessfully)
- [Backend xUnit]
[TRANS-STDIO-STREAM-STDERR-LOGS] STDIO transport streams subprocess stderr asynchronously to structured router diagnostic logs
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L170(StdioTransport_ShouldRouteStderrToLogs)
- [Backend xUnit]
[TRANS-STDIO-TERMINATE-CLEANLY] STDIO transport terminates subprocess tree cleanly upon disposal or cancellation
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L242(StdioTransport_ShouldSupportCancellationAndProcessTreeTermination)
- [Backend xUnit]
[TRANS-STDIO-TOKENIZE-PRESERVE-QUOTES] STDIO command-line tokenizer preserves quoted arguments and space escaping
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L327(StdioTransport_ParseCommandLine_Handles_Quotes_And_Spaces)
- [Backend xUnit]
[TRANS-TARGETED-CANCELLATION-ISOLATION] Targeted cancellation does not cancel concurrent client sessions reusing identical RPC IDs.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L532(ClientSession_TargetedCancellation_DoesNotCancelOtherClientsReusingId)
- [Backend xUnit]
[TRANS-TIMEOUT-PENDING-CLEANUP] SendRequestAsync times out cleanly and removes pending completion handlers without leaking memory.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L294(SendRequestAsync_TimesOutCleanly_AndDoesNotLeak) - [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L217(TimeoutAndCancellationCleanup_DoesNotLeavePendingRequests)
- [Backend xUnit]
[TRANS-VALIDATION-HTTP-ALLOWED-IPS] ServerValidationHelper accepts valid HTTP/HTTPS endpoints allowed by IP security rules.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L38(IsValidServerUrl_Accepts_Valid_Http_Urls)
- [Backend xUnit]
[UI-01] opens confirmation modal and resolves true when confirmed
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (61):
- [Frontend Vitest]
frontend/src/test/stores/useConfirmStore.test.ts#L31(opens confirmation modal and resolves true when confirmed) - [Frontend Vitest]
frontend/src/test/stores/useConfirmStore.test.ts#L58(resolves false when cancelled) - [Frontend Vitest]
frontend/src/test/stores/useConfirmStore.test.ts#L76(settles existing pending promise with false when a new confirmation is opened) - [Frontend Vitest]
frontend/src/test/components/DashboardView.test.tsx#L115(renders empty state when no servers match search) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L26(renders CustomFileModal in create mode and displays visual builder tabs) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L41(allows adding and removing arguments in visual builder) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L68(allows adding and removing messages in visual builder) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L95(switches between Raw JSON Editor and Visual Prompt Builder with synchronization) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L177(changes file type to resources and adjusts extension) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L194(submits form and calls saveCustomFile) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L222(renders in edit mode when editingFileMeta is set) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L244(allows adding assistant messages, modifying argument required checkbox, and rendering empty arguments state) - [Frontend Vitest]
frontend/src/test/components/HeaderBranding.test.tsx#L37(identifies FontAwesome class names and invalid inputs as non-image URLs) - [Frontend Vitest]
frontend/src/test/components/HeaderBranding.test.tsx#L54(updates document.title and sets custom image favicon when icon is an image URL) - [Frontend Vitest]
frontend/src/test/components/HeaderBranding.test.tsx#L69(sets default title and generated SVG favicon when branding is null or uses FontAwesome icon) - [Frontend Vitest]
frontend/src/test/components/HeaderBranding.test.tsx#L87(renders img element with logo-icon logo-img class when branding.icon is an image endpoint) - [Frontend Vitest]
frontend/src/test/components/HeaderBranding.test.tsx#L115(renders FontAwesome i element when branding.icon is a FontAwesome class) - [Frontend Vitest]
frontend/src/test/components/MappingModal.test.tsx#L27(renders create mapping form with empty inputs) - [Frontend Vitest]
frontend/src/test/components/MappingModal.test.tsx#L42(renders edit mapping form pre-filled with mapping data) - [Frontend Vitest]
frontend/src/test/components/MappingModal.test.tsx#L57(submits form with externalId and internalGroup) - [Frontend Vitest]
frontend/src/test/components/MappingModal.test.tsx#L82(closes modal on cancel click) - [Frontend Vitest]
frontend/src/test/components/Header.test.tsx#L38(renders admin badge and shield icon for full_admin users) - [Frontend Vitest]
frontend/src/test/components/Header.test.tsx#L64(renders standard user badge for non-admin users) - [Frontend Vitest]
frontend/src/test/components/Header.test.tsx#L90(does not render user status item when unauthenticated) - [Frontend Vitest]
frontend/src/test/components/Header.test.tsx#L110(displays gateway status and SSE endpoint) - [Frontend Vitest]
frontend/src/test/components/Header.test.tsx#L126(toggles light and dark theme on button click and updates document attribute) - [Frontend Vitest]
frontend/src/test/components/SettingsTabs.test.tsx#L49(renders IdentityAuthTab and SecretProvidersTab inside ProvidersTab) - [Frontend Vitest]
frontend/src/test/components/SettingsTabs.test.tsx#L77(renders CustomFilesTab and triggers modal open and delete) - [Frontend Vitest]
frontend/src/test/components/SettingsTabs.test.tsx#L110(renders AccessControlTab with policies and mappings) - [Frontend Vitest]
frontend/src/test/components/SettingsTabs.test.tsx#L139(renders BackupsTab) - [Frontend Vitest]
frontend/src/test/components/SettingsView.test.tsx#L144(saves embedding settings and displays success feedback) - [Frontend Vitest]
frontend/src/test/components/SettingsView.test.tsx#L183(saves Auth Provider configurations including Active Directory and OIDC header mappings) - [Frontend Vitest]
frontend/src/test/components/SettingsView.test.tsx#L240(saves secret providers while preserving Vault config and secrets) - [Frontend Vitest]
frontend/src/test/components/SettingsView.test.tsx#L311(renders custom files table with edit and delete actions) - [Frontend Vitest]
frontend/src/test/components/SettingsView.test.tsx#L354(renders access policies and group mappings with CRUD actions) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L71(handles semantic search queries in SemanticRouterCard) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L99(executes tool and updates console) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L130(executes prompt get in prompt tester tab) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L164(executes resource read in resource inspector tab) - [Frontend Vitest]
frontend/src/test/components/SharedComponents.test.tsx#L26(renders title, children, and handles close button click) - [Frontend Vitest]
frontend/src/test/components/SharedComponents.test.tsx#L50(renders various statuses correctly with indicators) - [Frontend Vitest]
frontend/src/test/components/SharedComponents.test.tsx#L72(returns null when totalItems is 0) - [Frontend Vitest]
frontend/src/test/components/SharedComponents.test.tsx#L91(renders page info and navigation controls) - [Frontend Vitest]
frontend/src/test/components/SharedComponents.test.tsx#L130(handles pageSize all) - [Frontend Vitest]
frontend/src/test/components/ConfirmModal.test.tsx#L32(renders title, message, and action buttons when open) - [Frontend Vitest]
frontend/src/test/components/ConfirmModal.test.tsx#L58(calls handleConfirm when confirm button clicked) - [Frontend Vitest]
frontend/src/test/components/ConfirmModal.test.tsx#L82(calls handleCancel when cancel button clicked) - [Frontend Vitest]
frontend/src/test/components/LayoutCentering.test.tsx#L19(renders top navigation bar with centered alignment in layout.css and App) - [Frontend Vitest]
frontend/src/test/components/LayoutCentering.test.tsx#L42(renders tester tabs with centered alignment in tester.css) - [Frontend Vitest]
frontend/src/test/components/LayoutCentering.test.tsx#L58(renders SettingsView sub-navigation bar with centered alignment) - [Frontend Vitest]
frontend/src/test/components/LayoutCentering.test.tsx#L74(renders AppKeysCard sub-navigation tabs with centered alignment for admin) - [Frontend Vitest]
frontend/src/test/components/LayoutCentering.test.tsx#L90(uses body::before and body::after pseudo-elements for ambient gradients and removes background-decor DOM nodes) - [Frontend Vitest]
frontend/src/test/components/LayoutCentering.test.tsx#L117(defines focus-visible outline indicators for interactive focus styling) - [Frontend Vitest]
frontend/src/test/api/typedApi.test.ts#L74(calls client and appkey endpoints correctly) - [Frontend Vitest]
frontend/src/test/api/typedApi.test.ts#L125(calls user quota endpoints correctly) - [Frontend Vitest]
frontend/src/test/api/typedApi.test.ts#L154(calls policies and mappings endpoints correctly) - [Frontend Vitest]
frontend/src/test/api/typedApi.test.ts#L181(calls settings, providers, custom files, approvals endpoints correctly) - [Frontend Vitest]
frontend/src/test/api/typedApi.test.ts#L237(calls testbench tool, prompt, resource, log endpoints correctly) - [Playwright E2E]
frontend/e2e/prompts-resources-customfiles.spec.ts#L37(should navigate to Custom Files and Prompts in Settings view) - [Playwright E2E]
frontend/e2e/dashboard.spec.ts#L28(should display aggregate statistics cards) - [Playwright E2E]
frontend/e2e/dashboard.spec.ts#L42(should filter servers using search input)
- [Frontend Vitest]
[UI-02] Inspect modal displays spinner loading state while querying server capabilities
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (6):
- [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L61(renders loading state when inspectLoading is true) - [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L79(renders tools tab with schema and handles tab switching) - [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L116(renders resources tab items and handles search filtering) - [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L144(renders prompts tab with arguments and empty state when filtered out) - [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L166(renders empty states for tabs when data is empty) - [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L194(closes modal when close button is clicked)
- [Frontend Vitest]
[UI-03] Grouped server view renders category sections and supports collapsible groups
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Frontend Vitest]
frontend/src/test/components/DashboardView.test.tsx#L63(renders grouped server view by category and allows collapsing) - [Frontend Vitest]
frontend/src/test/components/DashboardView.test.tsx#L90(renders grouped server view by status and type)
- [Frontend Vitest]
[UI-04] Tool selector filters available tools by selected backend server
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (7):
- [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L77(filters tools by selected server and handles tool change) - [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L106(filters custom tools with no namespace prefix when selectedServer is custom) - [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L131(renders dynamic fields for boolean, number, string, array, and object types) - [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L178(renders empty state when selected tool takes no arguments) - [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L203(switches to raw JSON tab and handles raw JSON editing) - [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L242(handles form submission) - [Playwright E2E]
frontend/e2e/prompts-resources-customfiles.spec.ts#L5(should interact with Prompt Tester and Resource Tester cards in Test Bench)
- [Frontend Vitest]
[UI-05] Router allows customized branding parameters (DashboardTitle, DashboardIcon) to be saved and retrieved via the API.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L254(Pipeline_Settings_Branding_ReadWrite) - [Frontend Vitest]
frontend/src/test/components/HeaderBranding.test.tsx#L7(identifies image URLs and paths accurately) - [Frontend Vitest]
frontend/src/test/components/GeneralTabLogoUpload.test.tsx#L6(renders branding label and FontAwesome icon preview when icon is a CSS class)
- [Backend xUnit]
[UI-06] Router supports uploading and retrieving custom branding logo images via dedicated endpoints.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L448(Branding_Logo_Upload_And_Retrieval_Works)
- [Backend xUnit]
[UI-07] Audits desktop viewport layout for zero horizontal overflow and high UX score.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (34):
- [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L255(should pass layout audit on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L276(should pass layout audit on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L321(should pass layout audit on Samsung Galaxy Tab S10 Lite tablet viewport (portrait)) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L342(should pass layout audit on Samsung Galaxy Tab S10 Lite tablet viewport (landscape)) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L363(should pass layout audit for Add Server modal on Samsung Galaxy Tab S10 Lite tablet) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L404(should pass layout audit for Add Server modal on desktop 1080p) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L444(should pass layout audit for Add Server modal on Samsung Galaxy S25+ mobile) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L486(should pass layout audit across Capabilities Inspect modal tabs) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L542(should pass layout audit on App Keys & Security tab) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L570(should pass layout audit on Settings tab) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L598(should maintain layout stability during tab navigation) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L620(should pass layout audit on Test Bench tab on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L662(should pass layout audit on Test Bench tab on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L693(should pass layout audit on Test Bench tab on Samsung Galaxy Tab S10 Lite tablet viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L724(should pass layout audit on Test Bench Prompts and Resources tabs) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L776(should pass layout audit on App Keys & Security sub-tabs on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L833(should pass layout audit on App Keys & Security sub-tabs on Samsung Galaxy Tab S10 Lite tablet viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L886(should pass layout audit on Settings sub-tabs on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L953(should pass layout audit on Settings sub-tabs on Samsung Galaxy Tab S10 Lite tablet viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1019(should pass layout audit on My MCP Servers tab on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1046(should pass layout audit on My MCP Servers tab on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1074(should pass layout audit on My MCP Servers tab on Samsung Galaxy Tab S10 Lite tablet viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1101(should pass layout audit across Capabilities Inspect modal tabs on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1168(should pass layout audit across Capabilities Inspect modal tabs on Samsung Galaxy Tab S10 Lite tablet viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1235(should pass layout audit for AppKey modal on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1279(should pass layout audit for AppKey modal on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1324(should pass layout audit for Client modal on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1368(should pass layout audit for Client modal on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1413(should pass layout audit for CustomFile modal on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1462(should pass layout audit for CustomFile modal on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1512(should pass layout audit for Policy modal on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1561(should pass layout audit for Policy modal on Samsung Galaxy S25+ mobile viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1611(should pass layout audit for Mapping modal on desktop 1080p viewport) - [Playwright E2E]
frontend/e2e/layout-inspector.spec.ts#L1660(should pass layout audit for Mapping modal on Samsung Galaxy S25+ mobile viewport)
- [Playwright E2E]
[UI-102] Dashboard renders stats card, connected server list, and setup instructions
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/DashboardView.test.tsx#L1(renders stats card, server list, and client setup guide)
- [Frontend Vitest]
[UI-103] Interactive tool tester renders server and tool selection dropdowns
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/ToolTesterCard.test.tsx#L1(renders initial server and tool selection options)
- [Frontend Vitest]
[UI-108] renders nothing when isMappingModalOpen is false
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/MappingModal.test.tsx#L1(renders nothing when isMappingModalOpen is false)
- [Frontend Vitest]
[UI-109] Renders ClientSetupGuide below the user credentials card.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Frontend Vitest]
frontend/src/test/pages/MyMcpServers.test.tsx#L104(renders client setup guide below credentials card) - [Frontend Vitest]
frontend/src/test/components/ClientSetupGuide.test.tsx#L1(renders default standard mcpServers configuration with meta mode)
- [Frontend Vitest]
[UI-110] renders title, MCG badge, subtitle, and version badge
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/Header.test.tsx#L1(renders title, MCG badge, subtitle, and version badge)
- [Frontend Vitest]
[UI-111] renders GeneralTab and triggers save
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/SettingsTabs.test.tsx#L1(renders GeneralTab and triggers save)
- [Frontend Vitest]
[UI-113] renders tab navigation and switches active subviews
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/SettingsView.test.tsx#L1(renders tab navigation and switches active subviews)
- [Frontend Vitest]
[UI-115] renders test bench cards and switches tabs
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L1(renders test bench cards and switches tabs)
- [Frontend Vitest]
[UI-116] Modal remains hidden when isInspectOpen is false
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/ServerInspectModal.test.tsx#L1(renders nothing when isInspectOpen is false)
- [Frontend Vitest]
[UI-117] returns null when isOpen is false
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/SharedComponents.test.tsx#L1(returns null when isOpen is false)
- [Frontend Vitest]
[UI-119] calls server endpoints correctly
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/api/typedApi.test.ts#L1(calls server endpoints correctly)
- [Frontend Vitest]
[UI-122] should navigate to Settings view and configure vector embedding options
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/settings.spec.ts#L1(should navigate to Settings view and configure vector embedding options)
- [Playwright E2E]
[UI-124] Renders main dashboard navigation tabs and layout headers
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/dashboard.spec.ts#L1(should render the dashboard layout and header components)
- [Playwright E2E]
[UI-126] should open Server Inspect Modal and inspect capabilities tabs deterministically
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/server-inspector.spec.ts#L1(should open Server Inspect Modal and inspect capabilities tabs deterministically)
- [Playwright E2E]
[UI-128] should navigate to Test Bench view, render tester cards, and test semantic search
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Playwright E2E]
frontend/e2e/testbench.spec.ts#L1(should navigate to Test Bench view and render tester cards deterministically)
- [Playwright E2E]
[UI-130] Renders Connect Account button for OAuth-enabled servers directing to authorization URL.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/pages/MyMcpServers.test.tsx#L121(renders connect account button for oauth-enabled servers and handles redirect)
- [Frontend Vitest]
[UI-131] Renders Connected (OAuth) badge and supports account disconnection.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/pages/MyMcpServers.test.tsx#L157(renders connected (oauth) badge and disconnects account)
- [Frontend Vitest]
[UI-132] groups slash-namespaced tools into distinct backend servers without grouping under custom
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (10):
- [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L198(groups slash-namespaced tools into distinct backend servers without grouping under custom) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L232(filters tools by selected server and displays clean tool names) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L269(displays tool hint banner with clean name, server badge, full description, and parameter badge when tool is selected) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L304(renders enum parameters as select dropdown with placeholder and options) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L349(populates argument values when Pre-fill Example button is clicked) - [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L421(groups slash and dunder namespaced prompts into servers and displays prompt hint banner) - [Frontend Vitest]
frontend/src/test/utils/mcpNaming.test.ts#L5(parses tool names with slash delimiter) - [Frontend Vitest]
frontend/src/test/utils/mcpNaming.test.ts#L18(parses tool names with dunder delimiter) - [Frontend Vitest]
frontend/src/test/utils/mcpNaming.test.ts#L31(parses tool names with colon delimiter) - [Frontend Vitest]
frontend/src/test/utils/mcpNaming.test.ts#L44(identifies un-namespaced custom tools)
- [Frontend Vitest]
[UI-133] verifies deterministic data-testid attributes and interactive flow across test bench tabs
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/TestBenchView.test.tsx#L473(renders and interacts with test bench elements via deterministic data-testid attributes)
- [Frontend Vitest]
[UI-134] verifies server modal exposes deterministic data-testid attributes
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L225(exposes deterministic data-testid attributes for automation)
- [Frontend Vitest]
[UI-135] toggles 3LO OAuth fields and submits with complete OAuth configuration
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Frontend Vitest]
frontend/src/test/components/ServerModal.test.tsx#L249(toggles 3LO OAuth fields and submits with complete OAuth configuration) - [Frontend Vitest]
frontend/src/test/components/AppKeyRotateModal.test.tsx#L22(renders confirmation warning, rotates key, and shows config generator)
- [Frontend Vitest]
[UI-137] Renders Last Used column and triggers Rotate Secret action for registered clients.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (2):
- [Frontend Vitest]
frontend/src/test/components/RegisteredClientsCard.test.tsx#L158(renders Last Used column and triggers Rotate Secret action) - [Frontend Vitest]
frontend/src/test/components/AppKeysCard.test.tsx#L278(renders Last Used column and triggers Rotate Key modal)
- [Frontend Vitest]
[UI-30] Renders client registration form with inputs for name, client type, redirect URIs, grant types, scopes, and expiration.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (3):
- [Frontend Vitest]
frontend/src/test/components/ClientModal.test.tsx#L27(renders client registration form with rich OAuth fields and cancel button) - [Frontend Vitest]
frontend/src/test/components/ClientModal.test.tsx#L55(submits registration form with parsed scopes array and OAuth metadata) - [Frontend Vitest]
frontend/src/test/components/ClientModal.test.tsx#L94(renders one-time secret display result card with copy buttons when createdClientResult is populated)
- [Frontend Vitest]
[UI-32] Registers OAuth client with extended metadata (redirect URIs, grant types, client type, expiration) and captures one-time credentials.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Positive Feature Capability
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L76(creates client with one-time secret result and refreshes list)
- [Frontend Vitest]
3. Boundary & Guardrail Invariants ("What the Application DOES NOT DO")
IMPORTANT
The following guardrails define strict security boundaries, fail-closed fault invariants, and forbidden application states.
[AUTH-ADMIN-POLICY-REJECT-REGULAR] AdminPolicy rejects principal with unconfigured regular role without Admin SID or Admin Group
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs#L116(AdminPolicy_Denies_StandardRole_WithoutAdminSidOrGroup) - [Backend xUnit]
ModelContextGateway.Tests/AdminPolicySidOnlyTests.cs#L16(AdminPolicy_Denies_StandardRole_Without_AdminSid)
- [Backend xUnit]
[AUTH-ADMIN-REJECT-NONADMIN] SecurityValidationHelper rejects non-admin groups and guest identities
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L260(SecurityValidationHelper_IsAdmin_RejectsNonAdminGroups)
- [Backend xUnit]
[AUTH-PERSONAL-APPKEY-CREATE] Non-admin users can create personal App Keys up to quota
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (9):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L191(CreateAppKey_NonAdmin_CreatesPersonalKey_UpToDefaultQuota) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L421(creates category-scoped key, captures one-time plaintext key, and refreshes) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L19(renders nothing when isCreateModalOpen is false) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L61(locks key type to personal key for non-admin and shows quota feedback) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L115(handles scope serialization for server scope and target username for admin) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L154(handles scope serialization for category scope and expiration days) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L192(disables submit button when quota limit is reached) - [Frontend Vitest]
frontend/src/test/components/AppKeyModal.test.tsx#L217(displays one-time secret result and copies plaintext key to clipboard) - [Playwright E2E]
frontend/e2e/personal-appkeys-and-quotas.spec.ts#L33(Non-Admin Context: mints personal key, views snippet, and revokes key)
- [Backend xUnit]
[GUARD-LDAP-FAIL-CLOSED] LdapActiveDirectoryService fails closed with SecurityException when LDAP connection throws an exception.
- Category:
AUTH(Authentication, RBAC & Identity) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L132(ResolveUserSidsAsync_ThrowsSecurityException_OnConnectionFailure)
- [Backend xUnit]
[CORE-GATEWAY-METADATA-UNSUPPORTED-VERSIONS] IsSupportedProtocolVersion rejects unrecognized protocol versions.
- Category:
CORE(CORE) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/GatewayMetadataTests.cs#L32(IsSupportedProtocolVersion_ReturnsFalse_ForUnknownVersions)
- [Backend xUnit]
[SEC-DB-ENCRYPTION-KEY-AUTOGEN-FAIL] ResolveDbEncryptionKey wraps file persistence errors in InvalidOperationException
- Category:
DB(Multi-Database Persistence & Migrations) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L334(ResolveDbEncryptionKey_ThrowsInvalidOperationException_WhenAutoGenerationFails)
- [Backend xUnit]
[AUTH-123] RotateAppKey forbids non-owner non-admin user from rotating another user's key.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeyRotationControllerTests.cs#L81(RotateAppKey_ForbiddenForDifferentUser)
- [Backend xUnit]
[AUTH-EXTERNAL-IDP-DENIES-ANONYMOUS-LOOPBACK] When an external IDP is configured, anonymous loopback requests do not bypass authentication.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L224(AdminPolicy_ExternalIdpConfigured_LoopbackIp_RequiresCredentials)
- [Backend xUnit]
[AUTH-STANDALONE-ADMINPOLICY-EXTERNAL-DENY] AdminPolicy rejects unauthenticated requests from non-whitelisted external IPs in standalone mode.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L200(AdminPolicy_StandaloneMode_ExternalUntrustedIp_FailsAdminPolicy)
- [Backend xUnit]
[AUTH-STANDALONE-EXTERNAL-DENY] Standalone mode denies admin access to non-whitelisted external IPs without an Admin AppKey.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/StandaloneAdminAuthTests.cs#L57(IsAdmin_StandaloneMode_UntrustedIp_ReturnsFalse)
- [Backend xUnit]
[GUARD-01] handles policy save failure with error toast
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (2):
- [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L86(handles policy save failure with error toast) - [Frontend Vitest]
frontend/src/test/components/PolicyModal.test.tsx#L60(submits form with constructed payload for DENY policy)
- [Frontend Vitest]
[GUARD-02] SSE transport fails closed with SecurityException when secret provider resolution fails
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (12):
- [Backend xUnit]
ModelContextGateway.Tests/SseTransportTests.cs#L34(ResolveTokenAsync_ThrowsSecurityException_WhenSecretProviderFails) - [Backend xUnit]
ModelContextGateway.Tests/SseTransportTests.cs#L55(ResolveTokenAsync_ThrowsInvalidOperationException_WhenNoRetrieverRegistered) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs#L37(ResolveUserSidsAsync_ThrowsInvalidOperation_WhenDbConfigSpecifiesPlaintextLdap) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs#L78(ResolveUserSidsAsync_FailsClosedWithSecurityException_OnUnreachableServer) - [Backend xUnit]
ModelContextGateway.Tests/DbKeyHelperTests.cs#L283(ResolveDbEncryptionKey_ThrowsInvalidOperationException_WhenVaultFails) - [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L218(HttpTransport_SendRequestAsync_Throws_When_Impersonation_Missing_WindowsIdentity) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L188(LdapService_ThrowsInvalidOperation_WhenUseSslFalse) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L208(LdapService_ThrowsSecurityException_OnBindFailure) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L394(StdioTransport_ShouldFailClosed_WhenSecretResolutionFails) - [Backend xUnit]
ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs#L64(ResolveUserSidsAsync_ThrowsInvalidOperation_WhenPlaintextLdapConfigured) - [Backend xUnit]
ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs#L61(EnsureVaultClientAsync_ReturnsNull_WhenVaultProviderDisabledInRepo) - [Backend xUnit]
ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs#L113(GetSecretAsync_ThrowsSecurityException_OnVaultException)
- [Backend xUnit]
[GUARD-03] CompositeSecretRetriever throws InvalidOperationException when an unregistered secret provider is requested.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (13):
- [Backend xUnit]
ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs#L17(GetSecretForProviderAsync_ThrowsInvalidOperationException_WhenProviderNotRegistered) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L19(EnsureVaultClientAsync_ThrowsArgumentException_WhenAddressInvalidScheme) - [Backend xUnit]
ModelContextGateway.Tests/VaultSecretRetrieverTests.cs#L104(GetSecretAsync_UsesCustomVaultClientFactory) - [Backend xUnit]
ModelContextGateway.Tests/TransportsAuthShapeTests.cs#L184(SseTransport_ResolveTokenAsync_FailsClosed_WhenVaultResolvesNull) - [Backend xUnit]
ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs#L66(GetSecretAsync_HandlesExceptionGracefully_ReturnsNull) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L104(StdioTransport_ShouldThrowSecurityExceptionForUnsafeExecutable) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L126(StdioTransport_ShouldThrowSecurityExceptionForShellExecutable) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L148(StdioTransport_ShouldThrowOnInvalidExecutable) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L210(StdioTransport_ShouldTimeoutOnSlowRequests) - [Backend xUnit]
ModelContextGateway.Tests/StdioTransportTests.cs#L289(StdioTransport_ShouldHandleUnexpectedExit) - [Backend xUnit]
ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs#L94(GetSecretAsync_ThrowsInvalidOperationException_WhenTokenEndpointMissing) - [Backend xUnit]
ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs#L102(GetSecretAsync_ThrowsSecurityException_WhenHttpResponseIsNotSuccess) - [Playwright E2E]
frontend/e2e/multi-user-matrix.spec.ts#L55(Guest / Denied Context: restricted user session renders safely)
- [Backend xUnit]
[GUARD-04] Malformed completion payloads or unmapped backends must fail closed safely
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (20):
- [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L508(Pairwise_CompleteAsync_MalformedOrMissingBackends_ThrowsOrFailsClosed) - [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L531(Pairwise_DatabaseDisconnection_FailsClosedSafely) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L163(SchemaValidation_FailsClosed_WhenRequiredColumnOrTableMissing) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L189(SchemaValidation_FailsClosed_WhenUserQuotasOrKeyTypeMissing) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs#L587(SchemaValidation_FailsClosed_WhenOAuthClientsTableMissing) - [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L449(Controllers_HandleDbFailures_Returning500) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L64(GetAllProviders_Returns500_OnDbException) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L140(SaveSecretProvider_Returns500_WhenRepositoryThrows) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L206(SaveAuthProvider_Returns500_WhenRepositoryThrows) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L227(GetSecretProviders_Returns500_OnDbException) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L242(GetAuthProviders_Returns500_OnDbException) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L216(AuditLogger_ThrowsException_OnDatabaseError) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L240(CallTool_FailsClosed_WhenAuditLogFails) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L279(CallTool_FailsClosed_WhenAuditLoggerUnresolved) - [Backend xUnit]
ModelContextGateway.Tests/AuditLoggerTests.cs#L91(LogInvocationAsync_ThrowsInvalidOperationException_OnConnectionFailure) - [Backend xUnit]
ModelContextGateway.Tests/AuditLoggerTests.cs#L104(LogAdminActionAsync_ThrowsInvalidOperationException_OnConnectionFailure) - [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L173(RBAC_DefaultsToDenied_WhenDbExceptionThrown) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L89(AuditLogger_AuditFailClosed_RefusesInvocation_OnAuditWriteError) - [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L217(DeleteMapping_Returns500_OnDbException) - [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L230(GetPolicies_Returns500_OnDbException)
- [Backend xUnit]
[GUARD-05] Socket-level SSRF protection blocks private and loopback IP connections unless explicitly allowlisted.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (16):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L730(Connect_BlocksPrivateOrLoopbackIPs_AtSocketLevel) - [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L762(SecurityValidationHelper_IsBlockedIp_ValidatesAllBlockedAndAllowedRanges) - [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L84(PrivateOrLoopback_Blocked_When_AllowPrivateIps_False) - [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L256(FailClosedValidation_RejectsInvalidJson_AndInsecureUrls) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L103(SaveSecretProvider_ReturnsBadRequest_WhenHttpUrlPassedInConfig) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L330(SaveAuthProvidersBatch_ReturnsBadRequest_WhenAllProvidersDisabled) - [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L397(SaveSecretProvider_HttpUrl_RejectedForExternal) - [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L28(IsValidServerUrl_Rejects_Invalid_Http_Urls) - [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L53(Validation_Rejects_TypeOnly_Update_Leaving_Incompatible_Url) - [Backend xUnit]
ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs#L232(ProbeServerAsync_Sets_Failed_For_Invalid_Stdio_Server_Command) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L59(DockerDiscovery_SkipsContainer_ResolvingToPrivateIp) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceTests.cs#L83(ApiEmbeddingService_GetEmbeddingAsync_Throws_On_Http_Error) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L58(McpClient_NamedHttpClient_Applies_SsrfConnectCallback_AndBlocksPrivateIps) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L1054(CustomFilesSanitization_PreventsDirectoryTraversal) - [Backend xUnit]
ModelContextGateway.Tests/SecurityValidationHelperTests.cs#L7(IsBlockedIp_ValidatesSpecialIpRanges) - [Backend xUnit]
ModelContextGateway.Tests/SecurityValidationHelperTests.cs#L31(IsInSubnet_HandlesSpecialCases)
- [Backend xUnit]
[GUARD-06] Auth middleware enforces case-insensitive route matching preventing path bypass.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (13):
- [Backend xUnit]
ModelContextGateway.Tests/ChallengerTests.cs#L234(AuthMiddleware_CaseInsensitivity_Bypass_Check) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L52(HeaderAuth_StripsHeaders_ForUntrustedProxy) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L330(TrustedProxyHelper_DeniesLoopback_WhenNotExplicitlyAllowlisted) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L349(TrustedProxyHelper_DeniesXForwardedFor_WhenChainHasUntrustedHop) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L390(TrustedProxyHelper_Unconfigured_LoopbackTrusted_LANNotTrusted) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L412(TrustedProxyHelper_ConfiguredProxyTrusted) - [Backend xUnit]
ModelContextGateway.Tests/IdentityProviderTests.cs#L458(TrustedProxyHelper_ForgedHeaderFromLanHost_DegradesToGuest) - [Backend xUnit]
ModelContextGateway.Tests/CorsTests.cs#L20(Cors_DefaultFallback_Allows_LocalhostOrigins) - [Backend xUnit]
ModelContextGateway.Tests/CorsTests.cs#L50(Cors_DefaultFallback_Denies_In_Production) - [Backend xUnit]
ModelContextGateway.Tests/CorsTests.cs#L92(Cors_WithConfiguredOrigins_RestrictsToConfigured) - [Backend xUnit]
ModelContextGateway.Tests/CorsTests.cs#L121(Cors_WithAllowedOriginsKeyFallback_RestrictsToConfigured) - [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L243(SavePolicy_ReturnsBadRequest_WhenWildcardDenyPolicy) - [Backend xUnit]
ModelContextGateway.Tests/OpenIddictProductionTests.cs#L12(Production_WithNoCert_Throws_InvalidOperationException)
- [Backend xUnit]
[GUARD-07] Custom files endpoint validates file path ensuring sibling directory traversal and parent traversal fail closed.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/CustomFilesSecurityTests.cs#L8(IsSafePath_BlocksSiblingDirectoryTraversal_AndAllowsLegitimateFiles)
- [Backend xUnit]
[GUARD-ADMIN-CUSTOM-FILES-VALIDATION] manage_custom_files rejects invalid prompt JSON syntax and unsupported file categories.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L779(ManageCustomFiles_ValidationGuardrails)
- [Backend xUnit]
[GUARD-ADMIN-ENDPOINT-UNAUTHORIZED] Unauthenticated / non-admin client request to /admin receives 403 Forbidden.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminEndpointsTests.cs#L193(AdminEndpoint_UnauthorizedCaller_Returns403)
- [Backend xUnit]
[GUARD-ADMIN-POLICIES-WILDCARD-DENY] manage_policies rejects wildcard deny policies to prevent global lockout.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L513(ManagePolicies_WildcardDenyGuardrail)
- [Backend xUnit]
[GUARD-ADMIN-PROVIDERS-LDAP-PLAINTEXT] manage_providers rejects unencrypted LDAP connections on port 389.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L650(ManageProviders_LdapPlaintextGuardrail)
- [Backend xUnit]
[GUARD-ADMIN-SERVERS-VALIDATION] Verifies that the manage_servers tool accurately enforces validation by rejecting malformed transport types, missing required parameters, and requests for non-existent servers.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminToolsParityTests.cs#L324(ManageServers_ValidationGuardrails)
- [Backend xUnit]
[GUARD-ADMIN-UNKNOWN-TOOL] AdminMcpServer returns an error response for unknown tool or action invocations.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L596(CallToolAsync_UnknownToolOrAction_ReturnsErrorResponse)
- [Backend xUnit]
[GUARD-APPKEY-EMPTY-CATEGORY] AppKey creation with empty or whitespace category must fail closed with BadRequest
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L239(AppKeysController_CreateAppKey_EmptyCategory_FailsWithBadRequest)
- [Backend xUnit]
[GUARD-APPKEY-MALFORMED-SCOPES] Corrupted AppKey scopes JSON must fail closed and reject execution
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L490(Pairwise_CorruptedAppKeyScopesJson_FailsClosed_ReturnsFalse)
- [Backend xUnit]
[GUARD-APPKEY-MISSING-NAME] Rejects AppKey creation with BadRequest when name is missing.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L312(CreateAppKey_ReturnsBadRequest_WhenNameMissing)
- [Backend xUnit]
[GUARD-APPKEY-QUOTA-INVALID-PARAM] Returns BadRequest on invalid quota override input parameters.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L433(QuotaEndpoints_Validation_ReturnsBadRequest_OnInvalidInputs)
- [Backend xUnit]
[GUARD-APPKEY-REVOKE-FORBID] Returns Forbid when non-owner/non-admin attempts to revoke an AppKey.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L378(RevokeAppKey_ReturnsForbid_WhenUserNotOwnerOrAdmin)
- [Backend xUnit]
[GUARD-APPKEY-REVOKE-NOTFOUND] Returns NotFound when revoking non-existent AppKey ID.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L369(RevokeAppKey_ReturnsNotFound_WhenIdDoesNotExist)
- [Backend xUnit]
[GUARD-APPKEY-UNKNOWN-CATEGORY] Non-admin callers cannot create AppKeys with unconfigured categories
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L220(AppKeysController_CreateAppKey_UnknownCategory_NonAdmin_FailsWithBadRequest)
- [Backend xUnit]
[GUARD-APPKEY-USER-QUOTA] Enforces user AppKey limit and returns BadRequest when quota is exceeded.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AppKeysControllerTests.cs#L324(CreateAppKey_EnforcesUserLimit_ForNonAdmin)
- [Backend xUnit]
[GUARD-AUTH-MIDDLEWARE-UNAUTHORIZED] Auth middleware blocks unauthorized requests with HTTP 401 Unauthorized.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L591(AuthMiddleware_Blocks_Unauthorized_Request)
- [Backend xUnit]
[GUARD-AUTH-NULL-TARGET] Null or empty capability targets must immediately fail closed and return unauthorized
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs#L468(Pairwise_NullOrEmptyTarget_FailsClosed_ReturnsFalse)
- [Backend xUnit]
[GUARD-CLIENT-CLEANUP-REPO-ERR] CleanupClients returns 500 when repository throws.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L352(CleanupClients_Returns500_WhenOAuthClientRepositoryThrows)
- [Backend xUnit]
[GUARD-CLIENT-CREATE-REPO-ERR] CreateClient returns 500 when repository throws
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L300(CreateClient_Returns500_WhenOAuthClientRepositoryThrows)
- [Backend xUnit]
[GUARD-CLIENT-DELETE-REPO-ERR] DeleteClient returns 500 when repository throws
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L317(DeleteClient_Returns500_WhenOAuthClientRepositoryThrows)
- [Backend xUnit]
[GUARD-CLIENT-EMPTY-CATEGORY] Client creation with empty category scope must fail closed with BadRequest
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs#L304(ClientsController_CreateClient_EmptyCategory_ReturnsBadRequest)
- [Backend xUnit]
[GUARD-CLIENT-EMPTY-SCOPE] CreateClient fails closed when category scope is empty
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L283(CreateClient_ReturnsBadRequest_WhenCategoryScopeEmpty)
- [Backend xUnit]
[GUARD-CLIENT-MISSING-NAME] CreateClient fails closed when DisplayName is missing
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L270(CreateClient_ReturnsBadRequest_WhenDisplayNameMissing)
- [Backend xUnit]
[GUARD-HTTP-NO-SECRET-RETRIEVER] HTTP stateless transport fails closed with InvalidOperationException when no secret retriever is configured
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/HttpTransportTests.cs#L54(ResolveTokenAsync_ThrowsInvalidOperationException_WhenNoRetrieverRegistered)
- [Backend xUnit]
[GUARD-HTTP-SECRET-RETRIEVAL-FAIL-CLOSED] HTTP stateless transport fails closed with SecurityException when secret resolution fails
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/HttpTransportTests.cs#L31(ResolveTokenAsync_ThrowsSecurityException_WhenSecretProviderFails)
- [Backend xUnit]
[GUARD-MAPPING-GET-DB-ERROR] PermissionsController returns 500 on database error during mapping retrieval.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L147(GetMappings_Returns500_OnDbException)
- [Backend xUnit]
[GUARD-MAPPING-MISSING-EXT-ID] PermissionsController rejects mapping save missing external ID with BadRequest.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L160(SaveMapping_ReturnsBadRequest_WhenExternalIdMissing)
- [Backend xUnit]
[GUARD-MAPPING-MISSING-GROUP] PermissionsController rejects mapping save missing internal group with BadRequest.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L171(SaveMapping_ReturnsBadRequest_WhenInternalGroupMissing)
- [Backend xUnit]
[GUARD-MAPPING-SAVE-DB-ERROR] PermissionsController returns 500 when saving mapping encounters DB error.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L193(SaveMapping_Returns500_OnDbException)
- [Backend xUnit]
[GUARD-MAPPING-UNMAPPED-DENY] Fails closed and denies access when no valid group mapping exists for a restricted target.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/GroupMappingsAndSpecAuthTests.cs#L125(GroupMapping_RejectsUser_WhenNoMappingExistsForRestrictedTarget)
- [Backend xUnit]
[GUARD-POLICY-DELETE-DB-ERROR] PermissionsController fails closed with 500 when database delete fails.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L124(DeletePolicy_Returns500_OnDbException)
- [Backend xUnit]
[GUARD-POLICY-MISSING-GROUP] PermissionsController rejects policy saves missing requiredGroup with BadRequest.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L69(SavePolicy_ReturnsBadRequest_WhenRequiredGroupMissing)
- [Backend xUnit]
[GUARD-POLICY-MISSING-TARGET] PermissionsController rejects policy saves missing targetId with BadRequest.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/PermissionsControllerTests.cs#L58(SavePolicy_ReturnsBadRequest_WhenTargetIdMissing)
- [Backend xUnit]
[GUARD-PROVIDER-MISSING-AUTH-NAME] ProvidersController rejects saving auth provider without providerName with BadRequest.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L172(SaveAuthProvider_ReturnsBadRequest_WhenProviderNameMissing)
- [Backend xUnit]
[GUARD-PROVIDER-MISSING-SECRET-NAME] ProvidersController rejects saving secret provider without providerName with BadRequest.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ProvidersControllerTests.cs#L90(SaveSecretProvider_ReturnsBadRequest_WhenProviderNameMissing)
- [Backend xUnit]
[GUARD-RBAC-COMPLETION-PROMPT] completion/complete throws UnauthorizedAccessException when caller lacks prompt permissions.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L613(CompleteAsync_ForPrompt_ThrowsUnauthorized_WhenCallerDenied)
- [Backend xUnit]
[GUARD-RBAC-COMPLETION-TEMPLATE] completion/complete throws UnauthorizedAccessException when caller lacks resource template permissions.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L645(CompleteAsync_ForResourceTemplate_ThrowsUnauthorized_WhenCallerDenied)
- [Backend xUnit]
[GUARD-RBAC-COMPLETION-UNRESOLVED] completion/complete fails closed on unknown or unresolved completion references.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L677(CompleteAsync_FailsClosed_OnUnknownOrUnresolvedTargets)
- [Backend xUnit]
[GUARD-RBAC-DEFAULT-DENY] RBAC defaults to deny when no matching access policies are configured.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L84(RBAC_DefaultsToDenied_WhenNoPoliciesConfigured) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L177(NonAdmin_DefaultsToDeny_WhenNoMatchingPoliciesConfigured)
- [Backend xUnit]
[GUARD-RBAC-EXPLICIT-DENY] RBAC enforces explicit policy denials to reject unauthorized callers.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L118(RBAC_RejectsUser_OnExplicitDeny) - [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L235(ExplicitDeny_OverridesGroupAllow)
- [Backend xUnit]
[GUARD-RBAC-MISSING-GROUP] RBAC denies access when user does not possess the required security group.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L106(RBAC_RejectsUser_WhenPolicyRequiresDifferentGroup)
- [Backend xUnit]
[GUARD-RBAC-NULL-TARGET] IsUserAuthorizedAsync fails closed on null, empty, or whitespace target identifiers.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs#L198(IsUserAuthorizedAsync_FailsClosed_OnNullOrWhitespaceTarget)
- [Backend xUnit]
[GUARD-RBAC-PROMPT-UNAUTHORIZED] GetPromptAsync throws UnauthorizedAccessException when user lacks permissions for target prompt.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L145(GetPromptAsync_ThrowsUnauthorized_WhenUnauthorized)
- [Backend xUnit]
[GUARD-RBAC-RESOURCE-UNAUTHORIZED] ReadResourceAsync throws UnauthorizedAccessException when user lacks permissions for target resource.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L159(ReadResourceAsync_ThrowsUnauthorized_WhenUnauthorized)
- [Backend xUnit]
[GUARD-RBAC-TOOL-UNAUTHORIZED] CallToolAsync returns a formatted security error when user is unauthorized.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/FineGrainedRbacTests.cs#L130(CallToolAsync_ReturnsError_WhenUnauthorized)
- [Backend xUnit]
[GUARD-ROUTING-UNKNOWN-TOOL] ToolRoutingManager throws KeyNotFoundException when calling a tool not registered in the routing table.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L187(CallToolAsync_ThrowsKeyNotFound_WhenToolNotInRoutingTable)
- [Backend xUnit]
[GUARD-ROUTING-UNREGISTERED-RESOURCE] ResourceRoutingManager throws KeyNotFoundException when reading an unregistered resource URI.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ResourceRoutingManagerTests.cs#L67(ReadResourceAsync_ThrowsKeyNotFound_WhenResourceNotRegistered)
- [Backend xUnit]
[GUARD-STATE-DISCONNECT-CANCELLATION] JsonRpcStateManager rejects registration and cancels pending completions upon disconnect.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs#L578(JsonRpcStateManager_Disconnect_PreventsRegistrationAndCancelsPending)
- [Backend xUnit]
[GUARD-TOOL-CANCELLATION] ToolRoutingManager propagates task cancellation gracefully with a standardized JSON-RPC error response.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L155(CallToolAsync_ReturnsCancellationError_WhenCancelled)
- [Backend xUnit]
[GUARD-TOOL-MANDATORY-PARAMS] ToolRoutingManager returns an error when execute_tool is invoked without the mandatory tool name parameter.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L125(CallToolAsync_ExecuteTool_ReturnsError_WhenNameMissing)
- [Backend xUnit]
[GUARD-UNSUPPORTED-DB-PROVIDER] DbConnectionFactory fails closed and throws InvalidOperationException when configured with unsupported database provider.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/MultiDatabaseProviderIntegrationTests.cs#L29(DbConnectionFactory_Throws_OnUnsupportedProvider)
- [Backend xUnit]
[GUARD-VALIDATION-STDIO-SHELL-OPERATORS] ServerValidationHelper validates stdio commands against unsafe shell operators, piping, and command injection.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L7(IsValidStdioCommand_ValidatesExecutableAndDisallowsUnsafeCommands)
- [Backend xUnit]
[MCP-ADMIN-TOOL-TEST-CALL-ERROR] AdminMcpServer test_tool_call propagates downstream backend errors with visibility.
- Category:
GUARD(Universal Safety & Fail-Closed Guardrails) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L637(CallToolAsync_TestToolCall_MissingServer_ReturnsError)
- [Backend xUnit]
[MCP-12] DynamicEmbeddingService retrieves and persists embedding provider configurations in Settings table.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (24):
- [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L62(DynamicEmbeddingService_Gets_And_Saves_Settings) - [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L108(ReloadSettings_UpdatesSettingsAndActiveService) - [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L125(DynamicEmbeddingService_GetEmbeddingAsync_Uses_ApiProvider_When_Configured) - [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L149(CosineSimilarity_Calculates_Correct_Vector_Distance) - [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L173(PreWarmAsync_Executes_Without_Throwing) - [Backend xUnit]
ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs#L199(GenerateEmbeddingAsync_Uses_UnderlyingProvider) - [Backend xUnit]
ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs#L7(Service_InitializesAndSetsUpPaths) - [Backend xUnit]
ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs#L20(ReloadSettings_ClearsSessionAndTokenizerState) - [Backend xUnit]
ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs#L36(CosineSimilarity_CalculatesOrthogonalAndIdenticalVectors) - [Backend xUnit]
ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs#L54(GetEmbeddingAsync_ReturnsEmpty384Vector_ForEmptyString) - [Backend xUnit]
ModelContextGateway.Tests/SemanticSearchServiceTests.cs#L42(SearchToolsSemanticAsync_ScoresAndRanksTools) - [Backend xUnit]
ModelContextGateway.Tests/SemanticSearchServiceTests.cs#L61(SearchTools_KeywordMatching_WorksCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/SemanticSearchServiceTests.cs#L78(SearchToolsSemanticAsync_FallsBackToKeyword_WhenEmbeddingServiceThrows) - [Backend xUnit]
ModelContextGateway.Tests/SeederAndDiscoveryTests.cs#L106(SemanticSearchService_Fallback_With_DummyEmbeddings) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceAdapterTests.cs#L9(Constructor_NullEmbeddingService_ThrowsArgumentNullException) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceAdapterTests.cs#L19(InnerService_ReturnsInjectedEmbeddingService) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceAdapterTests.cs#L29(GenerateEmbeddingAsync_DelegatesToGetEmbeddingAsync) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceAdapterTests.cs#L45(GenerateEmbeddingsAsync_NullOrEmptyList_ReturnsEmptyArray) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceAdapterTests.cs#L62(GenerateEmbeddingsAsync_ValidList_DelegatesToGetEmbeddingAsync_AndPreservesOrder) - [Backend xUnit]
ModelContextGateway.Tests/EmbeddingServiceTests.cs#L61(ApiEmbeddingService_GetEmbeddingAsync_Returns_Vector_From_OpenAI_Response) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L93(CallToolAsync_SearchTools_ReturnsSemanticResults) - [Backend xUnit]
ModelContextGateway.Tests/McpIntegrationTests.cs#L668(SemanticToolSearchRanking_Sorts_By_Score) - [Backend xUnit]
ModelContextGateway.Tests/ApiEmbeddingServiceTests.cs#L5(CalculateCosineSimilarity_ComputesSimilarity) - [Backend xUnit]
ModelContextGateway.Tests/ApiEmbeddingServiceTests.cs#L17(ReloadSettings_UpdatesSettings)
- [Backend xUnit]
[MCP-22] AdminMcpServer ProcessRequestAsync handles server/discover request returning supported versions and subscriptions capability.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/AdminMcpServerTests.cs#L686(ProcessRequestAsync_Handles_Server_Discover) - [Backend xUnit]
ModelContextGateway.Tests/DownstreamSessionIntegrationTests.cs#L371(DownstreamBackend_ProtocolVersionMismatch_NegotiatesOlderVersionSuccessfully) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L124(Middleware_Extracts_Stateless_Capabilities_And_ClientInfo_In_Meta) - [Backend xUnit]
ModelContextGateway.Tests/McpSpecMiddlewareTests.cs#L162(Middleware_Rejects_Unsupported_Protocol_Version_With_32021_Error)
- [Backend xUnit]
[MCP-28] ToolRoutingManager rejects ambiguous bare tool calls when duplicate tool names exist across distinct servers, listing candidates with namespaces.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerTests.cs#L647(NormalizeTargetToolName_Returns_Ambiguity_Error_Listing_Aliases_For_Duplicates)
- [Backend xUnit]
[MCP-29] ServerValidationHelper rejects invalid characters in Alias.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (5):
- [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L72(ValidateServer_Rejects_Invalid_Alias_Characters) - [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L89(ValidateServer_Rejects_Alias_Colliding_With_Existing_ServerId) - [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L104(ValidateServer_Rejects_Alias_Colliding_With_Existing_Server_Alias) - [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L119(ValidateServer_Accepts_Valid_Alias_And_Self_Retention) - [Backend xUnit]
ModelContextGateway.Tests/ServerEndpointsValidationTests.cs#L141(ValidateServer_Rejects_CaseInsensitive_Collisions)
- [Backend xUnit]
[MCP-31] DockerAutoDiscoveryService parses mcp.alias from Docker container labels
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (4):
- [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L188(ParseDiscoveredServers_Parses_McpAlias_Label) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L213(ParseDiscoveredServers_Parses_McpNamespace_Fallback_Label) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L237(ParseDiscoveredServers_Ignores_Invalid_Alias_Characters) - [Backend xUnit]
ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs#L261(UpsertDiscoveredServers_PreservesExistingDbAlias_AndInsertsDiscoveredAlias)
- [Backend xUnit]
[MCP-32] InMemorySimdToolVectorStore scores tool embeddings using .NET 10 hardware SIMD TensorPrimitives.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (6):
- [Backend xUnit]
ModelContextGateway.Tests/InMemorySimdToolVectorStoreTests.cs#L8(SearchSimilarAsync_ScoresIdenticalVectors_WithMaxSimilarity) - [Backend xUnit]
ModelContextGateway.Tests/InMemorySimdToolVectorStoreTests.cs#L24(SearchSimilarAsync_ScoresOrthogonalVectors_WithZeroSimilarity) - [Backend xUnit]
ModelContextGateway.Tests/InMemorySimdToolVectorStoreTests.cs#L38(SearchSimilarAsync_ScoresOppositeVectors_WithNegativeSimilarity) - [Backend xUnit]
ModelContextGateway.Tests/InMemorySimdToolVectorStoreTests.cs#L52(SearchSimilarAsync_RanksDescendingByCosineSimilarity) - [Backend xUnit]
ModelContextGateway.Tests/InMemorySimdToolVectorStoreTests.cs#L74(SearchSimilarAsync_HandlesDimensionMismatch_AndEmptyGracefully) - [Backend xUnit]
ModelContextGateway.Tests/InMemorySimdToolVectorStoreTests.cs#L94(UpsertAndRemove_ManagesToolEmbeddings_Correctly)
- [Backend xUnit]
[MCP-34] ToolRoutingManager gracefully falls back to keyword matching when NoOpEmbeddingProvider is active.
- Category:
MCP(Model Context Protocol Engine & Tool Routing) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (6):
- [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerFallbackTests.cs#L26(SearchToolsAsync_FallsBackToKeyword_WhenNoOpEmbeddingProviderUsed) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerFallbackTests.cs#L44(SearchToolsAsync_FallsBackToKeyword_WhenEmbeddingProviderThrows) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerFallbackTests.cs#L66(SearchToolsAsync_FallsBackToKeyword_WhenEmbeddingProviderIsNull) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerFallbackTests.cs#L83(SearchToolsAsync_ReturnsDefaultCandidates_WhenQueryHasNoMatches) - [Backend xUnit]
ModelContextGateway.Tests/ToolRoutingManagerFallbackTests.cs#L101(CallToolAsync_SearchTools_ExecutesHybridRrfSearch) - [Backend xUnit]
ModelContextGateway.Tests/OpenAiEmbeddingProviderTests.cs#L108(GenerateEmbeddingAsync_ThrowsOnLoopbackIp_WhenPrivateIpsDisallowed)
- [Backend xUnit]
[AUTH-106] Exchange throws InvalidOperationException when request is null.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L19(Exchange_ThrowsInvalidOperationException_WhenRequestNull)
- [Backend xUnit]
[AUTH-108] Authorize throws InvalidOperationException when OIDC request is null.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L77(Authorize_ThrowsInvalidOperationException_WhenRequestNull)
- [Backend xUnit]
[AUTH-111] Pipeline exposes RFC 9728 OAuth Protected Resource discovery endpoints with dynamic resource identifiers.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (8):
- [Backend xUnit]
ModelContextGateway.Tests/PipelineIntegrationTests.cs#L63(Pipeline_WellKnown_Endpoints_ReturnSuccess) - [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L159(Exchange_ClientCredentials_ValidSecret_ReturnsSignInResult) - [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L206(Exchange_ClientCredentials_InvalidSecret_ReturnsForbid) - [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L251(Exchange_ClientCredentials_ExpiredClient_ReturnsForbid) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L84(CreateClient_ReturnsOk_WithGeneratedCredentials) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L153(DatabaseAssertion_PlaintextNotPersisted) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L179(CreateClient_AdminCreator_DoesNotInheritAdminSid) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L215(CreateClient_WithExpiresInDays_SetsExpiration)
- [Backend xUnit]
[AUTH-112] Authorize resolves client application from IOAuthClientRepository and redirects to consent.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (3):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L297(Authorize_ResolvesClientAndRedirectsToConsent) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L120(DeleteClient_ReturnsNoContent_WhenAppExists) - [Backend xUnit]
ModelContextGateway.Tests/ClientsControllerTests.cs#L141(DeleteClient_ReturnsNotFound_WhenAppDoesNotExist)
- [Backend xUnit]
[AUTH-114] RegisterClient rejects invalid or non-absolute redirect URIs with standard RFC 7591 invalid_redirect_uri error.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L400(RegisterClient_InvalidRedirectUri_ReturnsBadRequest)
- [Backend xUnit]
[AUTH-116] Exchange rejects client_credentials grant attempts by public clients with UnauthorizedClient error.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L475(Exchange_PublicClient_ClientCredentials_ReturnsForbid)
- [Backend xUnit]
[AUTH-117] RegisterClient returns 403 Forbidden with access_denied when open client registration is disabled and caller is unauthorized.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/AuthorizationControllerTests.cs#L516(RegisterClient_WhenClosedRegistration_UnauthorizedUser_ReturnsForbidden)
- [Backend xUnit]
[SEC-01] SQLite database is encrypted at rest using SQLCipher with DB_ENCRYPTION_KEY.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (17):
- [Backend xUnit]
ModelContextGateway.Tests/DatabaseEncryptionTests.cs#L8(SqliteDatabase_IsEncrypted_WithSQLCipher) - [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L70(SaveSecretProvider_EncryptsConfigJson_AtRestInDatabase) - [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L99(SaveAuthProvider_EncryptsConfigJson_AtRestInDatabase) - [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L218(ProvidersController_MaskPreserving_PreservesExistingDecryptedSecret_WhenMaskSubmitted) - [Backend xUnit]
ModelContextGateway.Tests/AppKeyAuthenticationTests.cs#L72(SymmetricEncryptionHelper_EncryptsAndDecryptsCorrectly) - [Backend xUnit]
ModelContextGateway.Tests/CorsTests.cs#L146(Cors_RejectsWildcardAndInvalidOrigins_AndLogsWarning) - [Backend xUnit]
ModelContextGateway.Tests/CorsTests.cs#L181(Cors_AllInvalidOrigins_FallsBackToDefaultAndLogsWarning) - [Backend xUnit]
ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs#L127(GetSecretAsync_ThrowsHttpRequestException_WhenHttpClientFails) - [Backend xUnit]
ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs#L165(GetSecretAsync_ThrowsJsonException_WhenResponseIsInvalidJson) - [Backend xUnit]
ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs#L14(EnsureVaultClientAsync_CreatesClient_WithAppRoleCredentials) - [Backend xUnit]
ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs#L35(EnsureVaultClientAsync_LoadsFromSecretRepo_WhenConfigJsonHasAppRole) - [Backend xUnit]
ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs#L87(ReloadConfigAsync_ClearsClient_ForcesRecreation) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L52(DbEncryptionKey_Warning_Detection_Works_Correctly) - [Backend xUnit]
ModelContextGateway.Tests/DatabaseSeederServiceTests.cs#L70(Startup_MigratesLegacyKeysToHashedKeys) - [Frontend Vitest]
frontend/src/test/components/SecretProvidersTab.test.tsx#L19(renders provider inputs and submits updated configuration) - [Frontend Vitest]
frontend/src/test/components/SecretProvidersTab.test.tsx#L90(handles Test Vault connection button with success and failure responses) - [Playwright E2E]
frontend/e2e/full-ui-flow-sse-vault.spec.ts#L13(should register SSE server with Vault provider (Mount/Path/Field), verify badge, and run semantic search)
- [Backend xUnit]
[SEC-PROVIDER-GUARD-CORRUPT-ENCRYPTED-FIELD] Router must not overwrite corrupt encrypted database fields if an update occurs without user reset.
- Category:
SEC(Secrets Providers & Encryption) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs#L388(SaveSecretProvider_WhenDecryptionFailed_DoesNotOverwriteCorruptPayload)
- [Backend xUnit]
[TRANS-HTTP-DISPOSED-GUARD] HttpTransport SendRequestAsync returns -32001 Not Connected when transport has been disposed.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (2):
- [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L59(HttpTransport_SendRequestAsync_ReturnsDisposedError_WhenDisposed) - [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L80(HttpTransport_CallMethodAsync_ReturnsDisposedError_WhenDisposed)
- [Backend xUnit]
[TRANS-SSE-CALLMETHOD-DISCONNECT-GUARD] SseTransport CallMethodAsync returns -32001 Not Connected when backend is disconnected.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L12(SseTransport_CallMethodAsync_ReturnsNotConnected_WhenDisconnected)
- [Backend xUnit]
[TRANS-SSE-SENDREQUEST-DISCONNECT-GUARD] SseTransport SendRequestAsync returns -32001 Not Connected when backend is disconnected.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L36(SseTransport_SendRequestAsync_ReturnsNotConnected_WhenDisconnected)
- [Backend xUnit]
[TRANS-STDIO-DISPOSED-GUARD] StdioTransport SendRequestAsync returns -32001 Process Not Running when transport has been disposed.
- Category:
TRANS(Transports (SSE, HTTP, STDIO, Proxy)) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Backend xUnit]
ModelContextGateway.Tests/TransportResilienceTests.cs#L101(StdioTransport_SendRequestAsync_ReturnsProcessNotRunning_WhenDisposed)
- [Backend xUnit]
[UI-136] Disables backdrop click dismissal on the key rotation modal to protect plaintext credentials.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (1):
- [Frontend Vitest]
frontend/src/test/components/AppKeyRotateModal.test.tsx#L67(prevents backdrop click dismissal)
- [Frontend Vitest]
[UI-31] Fetches registered OAuth clients and updates store state.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (7):
- [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L37(fetches registered clients and updates state) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L213(prompts confirmation and calls cleanupClientsApi when confirmed) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L239(cancels DCR cleanup when user cancels confirmation modal) - [Frontend Vitest]
frontend/src/test/components/RegisteredClientsCard.test.tsx#L42(renders header, register button, and calls fetchClients on mount) - [Frontend Vitest]
frontend/src/test/components/RegisteredClientsCard.test.tsx#L73(renders empty state when no registered clients exist) - [Frontend Vitest]
frontend/src/test/components/RegisteredClientsCard.test.tsx#L90(renders rich client columns and handles client ID copy) - [Frontend Vitest]
frontend/src/test/components/RegisteredClientsCard.test.tsx#L136(triggers deleteClient when Delete button is clicked)
- [Frontend Vitest]
[UI-CONFIRM-MODAL] Centralized promise-based confirmation store resolves true on confirmation and false on cancellation.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (16):
- [Frontend Vitest]
frontend/src/test/stores/useConfirmStore.test.ts#L4(initializes in closed state) - [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L100(deletes a policy when confirmed) - [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L129(does not delete policy when confirm is cancelled) - [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L202(deletes a group mapping when confirmed) - [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L231(does not delete group mapping when confirm is cancelled) - [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L258(deletes a custom file when confirmed) - [Frontend Vitest]
frontend/src/test/stores/usePolicyStore.test.ts#L287(does not delete custom file when confirm is cancelled) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L141(prompts confirmation and deletes client when confirmed) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L170(cancels deletion when user denies confirmation) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L487(confirms and revokes AppKey and refreshes list) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L516(cancels revocation when confirm is rejected) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L632(prompts confirmation modal and resets user quota when confirmed) - [Frontend Vitest]
frontend/src/test/stores/useClientStore.test.ts#L662(cancels quota reset when user denies confirmation) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L269(prompts window.confirm and deletes server when confirmed) - [Frontend Vitest]
frontend/src/test/stores/useServerStore.test.ts#L298(does not send delete request when confirm is cancelled) - [Frontend Vitest]
frontend/src/test/components/ConfirmModal.test.tsx#L6(renders nothing when closed)
- [Frontend Vitest]
[UI-TOAST-TRANSITION] Displays error toast notification when saving invalid JSON credentials for user-provided server.
- Category:
UI(Dashboard, Test Bench & Settings UI) - Type: Negative / Safety Guardrail (Fail-Closed)
- Verification Proofs (8):
- [Frontend Vitest]
frontend/src/test/pages/MyMcpServers.test.tsx#L25(shows error toast when saving invalid JSON credentials) - [Frontend Vitest]
frontend/src/test/pages/MyMcpServers.test.tsx#L66(saves valid credentials successfully and closes modal) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L112(shows error toast when switching from invalid JSON to Visual Prompt Builder) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L133(shows error toast when saving without a file name) - [Frontend Vitest]
frontend/src/test/components/CustomFileModal.test.tsx#L153(shows error toast when saving prompt with invalid JSON content) - [Frontend Vitest]
frontend/src/test/components/IdentityAuthTab.test.tsx#L99(saves updated Active Directory configuration JSON) - [Frontend Vitest]
frontend/src/test/components/IdentityAuthTab.test.tsx#L138(displays error toast when saving auth providers fails) - [Frontend Vitest]
frontend/src/test/components/SecretProvidersTab.test.tsx#L63(displays error toast when saving secret providers fails)
- [Frontend Vitest]
4. Complete Verification Traceability Matrix
| Requirement ID | Type | Category | Description | Primary Proof | Suite |
|---|---|---|---|---|---|
API-GET-SERVERS-FLEET-REPOSITORY | Positive | API | Retrieves configured MCP server fleet from the database repository. | MinimalApiEndpointsTests.cs:L42 | Backend xUnit |
API-SERVER-CRUD-LIFECYCLE | Positive | API | Supports full CRUD lifecycle (create, read, update, delete) for downstream MCP server definitions. | MinimalApiEndpointsTests.cs:L55 | Backend xUnit |
AUTH-001 | Positive | AUTH | Verify DatabaseUserSecretStore encrypts and decrypts secret correctly. | UserSecretStoreTests.cs:L8 | Backend xUnit |
AUTH-002 | Positive | AUTH | Verify UserCredentialsController returns configured server IDs. | UserCredentialsControllerTests.cs:L11 | Backend xUnit |
AUTH-02 | Positive | AUTH | AppKey scopes restrict access precisely across all MCP capabilities and backend targets | PairwiseIntegrationMatrixTests.cs:L242 | Backend xUnit |
AUTH-03 | Positive | AUTH | Auth middleware allows bypass routes and extracts SSO headers in a case-insensitive manner. | ChallengerTests.cs:L621 | Backend xUnit |
AUTH-04 | Positive | AUTH | ActiveDirectoryIdentityProvider extracts Windows caller SIDs and security groups via IWindowsIdentityAccessor and augments with LDAP | ActiveDirectoryWindowsIdentityTests.cs:L12 | Backend xUnit |
AUTH-05 | Positive | AUTH | McpServer supports AllowPassThroughAuth flag | McpServerTests.cs:L5 | Backend xUnit |
AUTH-06 | Positive | AUTH | Transports use passThroughToken when AllowPassThroughAuth is true | TransportsAuthShapeTests.cs:L208 | Backend xUnit |
AUTH-101 | Positive | AUTH | HTTP transport injects X-Forwarded-User header based on connected user identity. | IdentityHeaderTests.cs:L9 | Backend xUnit |
AUTH-110 | Positive | AUTH | CreateAppKey allows creating unlimited AppKeys when UserMaxKeys is set to 0. | AppKeysControllerTests.cs:L343 | Backend xUnit |
AUTH-118 | Positive | AUTH | AppKey table contains LastUsedAt column and repository updates and queries it accurately. | AppKeyLastUsedPersistenceTests.cs:L41 | Backend xUnit |
AUTH-119 | Positive | AUTH | OAuthClients table contains LastUsedAt column and repository updates and queries it accurately. | AppKeyLastUsedPersistenceTests.cs:L69 | Backend xUnit |
AUTH-120 | Positive | AUTH | ActivityTracker throttles database updates to at most once per 60 seconds per key. | ActivityTrackerTests.cs:L9 | Backend xUnit |
AUTH-121 | Positive | AUTH | ActivityTracker throttles OAuth client updates to at most once per 60 seconds per client. | ActivityTrackerTests.cs:L35 | Backend xUnit |
AUTH-122 | Positive | AUTH | RotateAppKey issues new plaintext key, updates database, resets LastUsedAt, and audits action. | AppKeyRotationControllerTests.cs:L12 | Backend xUnit |
AUTH-130 | Positive | AUTH | Renders In-House IdP / External JWT Bearer card, toggles enable, fills authority, and saves configuration. | IdentityAuthTab.test.tsx:L167 | Frontend Vitest |
AUTH-131 | Positive | AUTH | RFC 9728 Protected Resource Metadata endpoint exposes discovery document with canonical resource URI, authorization servers, scopes, and documentation. | Rfc9728ProtectedResourceDiscoveryTests.cs:L37 | Backend xUnit |
AUTH-132 | Positive | AUTH | Unauthenticated client requests to /sse endpoint return 401 Unauthorized with RFC 9728 WWW-Authenticate header containing realm and resource_metadata. | Rfc9728ProtectedResourceDiscoveryTests.cs:L115 | Backend xUnit |
AUTH-133 | Positive | AUTH | Verify initiating OAuth 3LO egress flow generates secure state and authorization redirect URL. | EgressOAuthTests.cs:L72 | Backend xUnit |
AUTH-134 | Positive | AUTH | Verify OAuth egress callback exchanges authorization code and stores credentials in user secret store. | EgressOAuthTests.cs:L146 | Backend xUnit |
AUTH-135 | Positive | AUTH | Verify upstream dispatch automatically refreshes expired OAuth egress token and updates user secret store. | EgressOAuthTests.cs:L260 | Backend xUnit |
AUTH-136 | Positive | AUTH | Verify disconnect endpoint deletes stored user OAuth credentials. | EgressOAuthTests.cs:L361 | Backend xUnit |
AUTH-137 | Positive | AUTH | Verify GetOAuthServers returns servers with correct isConnected status. | EgressOAuthTests.cs:L406 | Backend xUnit |
AUTH-14 | Positive | AUTH | Tool execution catches 401 Unauthorized from downstream target servers and returns interactive auth remediation. | ToolRoutingManagerTests.cs:L211 | Backend xUnit |
AUTH-15 | Positive | AUTH | OpenIddict initializes ephemeral development signing certificates in Development environment. | OpenIddictProductionTests.cs:L30 | Backend xUnit |
AUTH-35 | Positive | AUTH | Single-user homelab startup initializes SQLite, auto-generates Admin and Client AppKeys without PFX certificate requirements | SingleUserHomelabTests.cs:L30 | Backend xUnit |
AUTH-36 | Positive | AUTH | Pre-configured MCG_CLIENT_APP_KEYS seeds functional individualized client keys with custom scopes | SingleUserHomelabTests.cs:L98 | Backend xUnit |
AUTH-37 | Positive | AUTH | AppKeys with server and category scopes enforce precise tool execution boundaries | SingleUserHomelabTests.cs:L168 | Backend xUnit |
AUTH-38 | Positive | AUTH | LAN CIDR network configuration allows standalone web dashboard access from local subnet | SingleUserHomelabTests.cs:L183 | Backend xUnit |
AUTH-39 | Positive | AUTH | Zero-config startup defaults enterprise auth providers and secret providers to disabled | SingleUserHomelabTests.cs:L211 | Backend xUnit |
AUTH-ADMIN-FULL-ACCESS | Positive | AUTH | Administrator identities bypass granular capability policies and have full access to all MCP methods. | UnifiedMcpAuthorizationTests.cs:L154 | Backend xUnit |
AUTH-ADMIN-POLICY-ALLOW-GROUPNAME | Positive | AUTH | AdminPolicy allows principal with configured Admin Group Name (e.g., full_admin) | AdminPolicyHybridAuthTests.cs:L13 | Backend xUnit |
AUTH-ADMIN-POLICY-ALLOW-GROUPS-ARRAY | Positive | AUTH | AdminPolicy allows principal with configured Admin Groups array | AdminPolicyHybridAuthTests.cs:L81 | Backend xUnit |
AUTH-ADMIN-POLICY-ALLOW-SID | Positive | AUTH | AdminPolicy allows principal with configured Admin SID | AdminPolicyHybridAuthTests.cs:L47 | Backend xUnit |
AUTH-ADMIN-POLICY-REJECT-REGULAR | Guardrail | AUTH | AdminPolicy rejects principal with unconfigured regular role without Admin SID or Admin Group | AdminPolicyHybridAuthTests.cs:L116 | Backend xUnit |
AUTH-ADMIN-REJECT-NONADMIN | Guardrail | AUTH | SecurityValidationHelper rejects non-admin groups and guest identities | IdentityProviderTests.cs:L260 | Backend xUnit |
AUTH-ADMIN-VALIDATE-GROUPNAME | Positive | AUTH | SecurityValidationHelper authorizes principals via Admin Group Name | IdentityProviderTests.cs:L246 | Backend xUnit |
AUTH-ADMIN-VALIDATE-GROUPS-ARRAY | Positive | AUTH | SecurityValidationHelper authorizes principals via custom configured Admin:Groups array | IdentityProviderTests.cs:L277 | Backend xUnit |
AUTH-ADMIN-VALIDATE-MAPPED-GROUPS | Positive | AUTH | SecurityValidationHelper authorizes principals via mappedGroups database resolution | IdentityProviderTests.cs:L292 | Backend xUnit |
AUTH-ADMIN-VALIDATE-SID | Positive | AUTH | SecurityValidationHelper authorizes principals via Admin Group SID | IdentityProviderTests.cs:L228 | Backend xUnit |
AUTH-APPKEY-ADMIN-FUTURE-CATEGORY | Positive | AUTH | Admin callers can create forward-looking AppKeys for unconfigured categories | CategoryScopedAppKeysTests.cs:L258 | Backend xUnit |
AUTH-APPKEY-ADMIN-QUOTA | Positive | AUTH | Administrator can create, update, and delete custom user quota overrides. | AppKeysControllerTests.cs:L403 | Backend xUnit |
AUTH-APPKEY-ADMIN-SCOPE-ALLOW | Positive | AUTH | AppKeys with admin scope grant Administrator role and pass AdminPolicy. | StandaloneAdminAuthTests.cs:L79 | Backend xUnit |
AUTH-APPKEY-ITEMS-SCOPE-ALLOW | Positive | AUTH | SecurityValidationHelper recognizes admin scopes in HttpContext.Items. | StandaloneAdminAuthTests.cs:L255 | Backend xUnit |
AUTH-APPKEY-KEYTYPE-PERSISTENCE-FILTER | Positive | AUTH | IAppKeyRepository persists KeyType and filters keys by personal vs system | UserQuotaAndAppKeyRepositoryTests.cs:L146 | Backend xUnit |
AUTH-APPKEY-WILDCARD-SCOPE-ALLOW | Positive | AUTH | AppKeys with wildcard scope '*' grant Administrator role and pass AdminPolicy. | StandaloneAdminAuthTests.cs:L140 | Backend xUnit |
AUTH-COMPACT-APPKEY-TAXONOMY | Positive | AUTH | Generates compact ~32-character Base62 AppKeys with semantic prefixes. | AppKeyAuthenticationTests.cs:L417 | Backend xUnit |
AUTH-CUSTOM-ADMIN-KEY-SEEDING | Positive | AUTH | Seeds custom MCG_ADMIN_AUTH_KEY when provided in configuration. | DatabaseSeederServiceTests.cs:L189 | Backend xUnit |
AUTH-MOCK-SIMULATE-UNAUTHORIZED | Positive | AUTH | MockDownstreamMcpServer simulates 401 Unauthorized status code for authentication testing. | MockDownstreamMcpServerTests.cs:L62 | Backend xUnit |
AUTH-OIDC-PRESERVE-GROUP-NAMES | Positive | AUTH | OidcIdentityProvider preserves group names without synthesizing Windows SIDs | IdentityProviderTests.cs:L307 | Backend xUnit |
AUTH-PERM-GET-MAPPINGS | Positive | AUTH | PermissionsController returns group mappings list with 200 OK. | PermissionsControllerTests.cs:L137 | Backend xUnit |
AUTH-PERM-POLICY-LIST | Positive | AUTH | PermissionsController returns access policies list with 200 OK. | PermissionsControllerTests.cs:L48 | Backend xUnit |
AUTH-PERM-POLICY-REMOVE | Positive | AUTH | PermissionsController removes access policies. | PermissionsControllerTests.cs:L114 | Backend xUnit |
AUTH-PERSONAL-APPKEY-CREATE | Guardrail | AUTH | Non-admin users can create personal App Keys up to quota | AppKeysControllerTests.cs:L191 | Backend xUnit |
AUTH-PERSONAL-APPKEY-LIST | Positive | AUTH | Non-admin users can view their personal App Keys | AppKeysControllerTests.cs:L125 | Backend xUnit |
AUTH-PERSONAL-APPKEY-QUOTA-OVERRIDE | Positive | AUTH | Custom user quotas override default limit | AppKeysControllerTests.cs:L223 | Backend xUnit |
AUTH-PIPELINE-ADMIN-DASHBOARD | Positive | AUTH | Dashboard management API suite executes for authorized administrators. | PipelineIntegrationTests.cs:L171 | Backend xUnit |
AUTH-PIPELINE-GET-CLIENTS | Positive | AUTH | GET /api/clients returns active client sessions with 200 OK. | PipelineIntegrationTests.cs:L349 | Backend xUnit |
AUTH-PIPELINE-GET-POLICIES | Positive | AUTH | GET /api/permissions/policies returns access policies with 200 OK. | PipelineIntegrationTests.cs:L358 | Backend xUnit |
AUTH-PIPELINE-PERM-CRUD | Positive | AUTH | Permissions policy and group mapping CRUD endpoints manage RBAC rules. | PipelineIntegrationTests.cs:L305 | Backend xUnit |
AUTH-PREFIX-EXTRACTION | Positive | AUTH | ExtractKeyPrefix parses semantic prefixes, Base62 selectors, and legacy tokens accurately. | AppKeyAuthenticationTests.cs:L451 | Backend xUnit |
AUTH-QUERY-TOKEN-EXTRACTION | Positive | AUTH | Query string token middleware extracts access_token or token query parameter to Authorization header. | EndpointAuthorizationTests.cs:L7 | Backend xUnit |
AUTH-RBAC-GROUP-ALLOW | Positive | AUTH | RBAC grants access when user claims match the required policy security group. | FineGrainedRbacTests.cs:L94 | Backend xUnit |
AUTH-RBAC-PROMPT-FILTER | Positive | AUTH | prompts/list filters exposed prompts according to caller permissions. | UnifiedMcpAuthorizationTests.cs:L362 | Backend xUnit |
AUTH-RBAC-RESOURCE-FILTER | Positive | AUTH | resources/list filters exposed resources according to caller permissions. | UnifiedMcpAuthorizationTests.cs:L405 | Backend xUnit |
AUTH-RBAC-TEMPLATE-FILTER | Positive | AUTH | resources/templates/list filters exposed resource templates according to caller permissions. | UnifiedMcpAuthorizationTests.cs:L448 | Backend xUnit |
AUTH-RBAC-TOOL-FILTER | Positive | AUTH | tools/list filters exposed backend tools according to caller permissions. | UnifiedMcpAuthorizationTests.cs:L317 | Backend xUnit |
AUTH-RBAC-TOOLS-FILTER | Positive | AUTH | tools/list filters exposed backend tools according to caller role and RBAC policy permissions. | FineGrainedRbacTests.cs:L200 | Backend xUnit |
AUTH-SERVER-LEVEL-POLICY | Positive | AUTH | Server-level access policies authorize all child tools, prompts, and resources under that server. | UnifiedMcpAuthorizationTests.cs:L212 | Backend xUnit |
AUTH-SSE-PER-MESSAGE-IDENTITY | Positive | AUTH | SSE streams re-validate caller identity and permissions per message payload. | IdentityProviderTests.cs:L121 | Backend xUnit |
AUTH-STANDALONE-ADMINPOLICY-LOOPBACK-ALLOW | Positive | AUTH | AdminPolicy succeeds in standalone mode for unauthenticated loopback requests. | StandaloneAdminAuthTests.cs:L176 | Backend xUnit |
AUTH-STANDALONE-CUSTOM-CIDR-ALLOW | Positive | AUTH | Standalone mode grants admin access to client IPs matching Admin:StandaloneAllowedNetworks CIDR ranges. | StandaloneAdminAuthTests.cs:L35 | Backend xUnit |
AUTH-STANDALONE-LOOPBACK-ALLOW | Positive | AUTH | Standalone mode without external IDP grants admin access to loopback IP addresses. | StandaloneAdminAuthTests.cs:L14 | Backend xUnit |
AUTH-STORE-MAPPING-FETCH | Positive | AUTH | fetches group mappings and updates store | usePolicyStore.test.ts:L156 | Frontend Vitest |
AUTH-STORE-MAPPING-MODAL-TOGGLE | Positive | AUTH | handles mapping modal open and close | usePolicyStore.test.ts:L330 | Frontend Vitest |
AUTH-STORE-MAPPING-SAVE | Positive | AUTH | saves a group mapping and closes mapping modal | usePolicyStore.test.ts:L171 | Frontend Vitest |
AUTH-STORE-POLICY-CREATE | Positive | AUTH | creates/saves a policy (ALLOW rule) and closes modal | usePolicyStore.test.ts:L53 | Frontend Vitest |
AUTH-STORE-POLICY-FETCH | Positive | AUTH | fetches access policies and updates store | usePolicyStore.test.ts:L38 | Frontend Vitest |
AUTH-STORE-POLICY-INIT | Positive | AUTH | initializes with empty policies and mappings | usePolicyStore.test.ts:L21 | Frontend Vitest |
AUTH-STORE-POLICY-MODAL-TOGGLE | Positive | AUTH | handles policy modal open and close | usePolicyStore.test.ts:L314 | Frontend Vitest |
AUTH-SYSTEM-APPKEY-SEPARATION | Positive | AUTH | System keys are distinct and require admin permissions | AppKeysControllerTests.cs:L151 | Backend xUnit |
GUARD-LDAP-FAIL-CLOSED | Guardrail | AUTH | LdapActiveDirectoryService fails closed with SecurityException when LDAP connection throws an exception. | LdapActiveDirectoryServiceTests.cs:L132 | Backend xUnit |
UI-100 | Positive | AUTH | initializes with empty providers | useProviderStore.test.ts:L1 | Frontend Vitest |
UI-101 | Positive | AUTH | should initialize with default values | useUserStore.test.ts:L1 | Frontend Vitest |
UI-114 | Positive | AUTH | renders nothing when isPolicyModalOpen is false | PolicyModal.test.tsx:L1 | Frontend Vitest |
UI-120 | Positive | AUTH | RBAC and SID mapping administration UI allows configuring role policies and SID associations | rbac-enforcement-flow.spec.ts:L1 | Playwright E2E |
UI-123 | Positive | AUTH | should open App Keys & Security view and display client setup controls | client-setup-and-appkeys.spec.ts:L1 | Playwright E2E |
UI-125 | Positive | AUTH | Admin role renders full administrative dashboard and server management controls | multi-user-matrix.spec.ts:L1 | Playwright E2E |
UI-127 | Positive | AUTH | should navigate to settings permissions tab and open policy configuration modal | rbac-and-permissions.spec.ts:L1 | Playwright E2E |
UI-129 | Positive | AUTH | should create client application and generate AppKey with scope constraints | appkey-and-client-lifecycle.spec.ts:L1 | Playwright E2E |
UI-AUTH-TAB-AD-TOGGLE | Positive | AUTH | Renders Active Directory disabled initially, toggles on and exposes fields. | IdentityAuthTab.test.tsx:L12 | Frontend Vitest |
UI-AUTH-TAB-LDAP-TEST | Positive | AUTH | Fills LDAP parameters and executes test connection. | IdentityAuthTab.test.tsx:L46 | Frontend Vitest |
UI-POLICY-MODAL-CANCEL-DISMISS | Positive | AUTH | closes modal on cancel click | PolicyModal.test.tsx:L87 | Frontend Vitest |
UI-POLICY-MODAL-CREATE-DEFAULTS | Positive | AUTH | renders create policy form with default inputs | PolicyModal.test.tsx:L28 | Frontend Vitest |
UI-POLICY-MODAL-EDIT-PREFILL | Positive | AUTH | renders edit policy form pre-filled with policy data | PolicyModal.test.tsx:L44 | Frontend Vitest |
UI-USER-STORE-ERROR-FALLBACK | Positive | AUTH | handles error response gracefully and sets unauthenticated user state | useUserStore.test.ts:L50 | Frontend Vitest |
UI-USER-STORE-HEALTH-VERSION | Positive | AUTH | successfully updates version and service from /health endpoint | useUserStore.test.ts:L113 | Frontend Vitest |
UI-USER-STORE-LOAD-PROFILE | Positive | AUTH | successfully loads user profile from /api/me | useUserStore.test.ts:L23 | Frontend Vitest |
UI-USER-STORE-NETWORK-FAILURE | Positive | AUTH | handles network failure gracefully | useUserStore.test.ts:L69 | Frontend Vitest |
UI-USER-STORE-ROLE-EXTRACTION | Positive | AUTH | correctly handles non-admin user role extraction | useUserStore.test.ts:L89 | Frontend Vitest |
UI-USER-STORE-VERSION-FALLBACK | Positive | AUTH | keeps existing fallback version on error | useUserStore.test.ts:L128 | Frontend Vitest |
CORE-101 | Positive | CORE | Auto-added requirement tracking | SessionManagerTests.cs:L9 | Backend xUnit |
CORE-GATEWAY-METADATA-BUILD-INIT-REQUEST | Positive | CORE | BuildInitializeRequest formats standard JSON-RPC 2.0 initialize request with dynamic protocol version. | GatewayMetadataTests.cs:L116 | Backend xUnit |
CORE-GATEWAY-METADATA-CONSTANTS | Positive | CORE | Metadata constants and assembly version return consistent non-empty identifiers. | GatewayMetadataTests.cs:L133 | Backend xUnit |
CORE-GATEWAY-METADATA-EXTRACTION-JSONELEMENT | Positive | CORE | ExtractRequestedProtocolVersion parses protocolVersion from JsonElement params object. | GatewayMetadataTests.cs:L96 | Backend xUnit |
CORE-GATEWAY-METADATA-EXTRACTION-STRING | Positive | CORE | ExtractRequestedProtocolVersion parses protocolVersion from initialize request payload or isolated params. | GatewayMetadataTests.cs:L68 | Backend xUnit |
CORE-GATEWAY-METADATA-SUPPORTED-VERSIONS | Positive | CORE | IsSupportedProtocolVersion validates supported protocol versions case-insensitively with whitespace trimming. | GatewayMetadataTests.cs:L8 | Backend xUnit |
CORE-GATEWAY-METADATA-UNSUPPORTED-VERSIONS | Guardrail | CORE | IsSupportedProtocolVersion rejects unrecognized protocol versions. | GatewayMetadataTests.cs:L32 | Backend xUnit |
CORE-GATEWAY-METADATA-VERSION-NEGOTIATION | Positive | CORE | NegotiateProtocolVersion canonicalizes casing for known protocol versions. | GatewayMetadataTests.cs:L41 | Backend xUnit |
DB-02 | Positive | DB | MSSQL stored procedure scripts declare all required procedures and parameter contracts correctly | DatabaseSchemaUpgradeAndContractTests.cs:L311 | Backend xUnit |
DB-07 | Positive | DB | SQLite upgrade migration automatically provisions OAuthClients table on legacy database | DatabaseSchemaUpgradeAndContractTests.cs:L433 | Backend xUnit |
DB-FACTORY-MSSQL-CONFIGURED | Positive | DB | DbConnectionFactory initializes MS SQL Server database connection using Microsoft.Data.SqlClient. | DbConnectionFactoryTests.cs:L46 | Backend xUnit |
DB-FACTORY-MYSQL-CONFIGURED | Positive | DB | DbConnectionFactory initializes MySQL database connection using MySqlConnector. | DbConnectionFactoryTests.cs:L28 | Backend xUnit |
DB-FACTORY-SQLITE-DEFAULT | Positive | DB | DbConnectionFactory initializes SQLite database connection with SQLCipher encryption. | DbConnectionFactoryTests.cs:L10 | Backend xUnit |
DB-INITIALIZER-CRUD-CONTRACT | Positive | DB | DatabaseInitializer baseline schema supports CRUD operations across core domain tables. | DatabaseInitializerTests.cs:L71 | Backend xUnit |
DB-INITIALIZER-ENSURE-ALIAS | Positive | DB | EnsureAliasColumn safely adds Alias column if missing and is idempotent. | DatabaseInitializerTests.cs:L54 | Backend xUnit |
DB-INITIALIZER-IDEMPOTENCY | Positive | DB | DatabaseInitializer is idempotent and succeeds without error when executed multiple times. | DatabaseInitializerTests.cs:L40 | Backend xUnit |
DB-INITIALIZER-SCHEMA-BASELINE | Positive | DB | DatabaseInitializer creates all 12 canonical tables on a fresh SQLite database. | DatabaseInitializerTests.cs:L10 | Backend xUnit |
DB-MAPPING-SAVE-SQLITE | Positive | DB | PermissionsController persists group mappings to SQLite database. | PermissionsControllerTests.cs:L182 | Backend xUnit |
DB-POLICY-SAVE-MYSQL | Positive | DB | PermissionsController persists access policy to MySQL database repository. | PermissionsControllerTests.cs:L91 | Backend xUnit |
DB-POLICY-SAVE-SQLITE | Positive | DB | PermissionsController persists access policy to SQLite database repository. | PermissionsControllerTests.cs:L80 | Backend xUnit |
DB-PROVIDER-INSTANTIATION-DIALECTS | Positive | DB | DbConnectionFactory instantiates valid IDbConnection instances across sqlite, mysql, and mssql dialects. | MultiDatabaseProviderIntegrationTests.cs:L9 | Backend xUnit |
DB-QUOTA-REPO-DELETE | Positive | DB | IUserQuotaRepository DeleteUserQuotaAsync removes user quota record | UserQuotaAndAppKeyRepositoryTests.cs:L132 | Backend xUnit |
DB-QUOTA-REPO-DI-REGISTRATION | Positive | DB | IUserQuotaRepository is registered in dependency injection and resolvable | UserQuotaAndAppKeyRepositoryTests.cs:L199 | Backend xUnit |
DB-QUOTA-REPO-GET-ALL | Positive | DB | IUserQuotaRepository GetAllUserQuotasAsync retrieves all quotas ordered by username | UserQuotaAndAppKeyRepositoryTests.cs:L98 | Backend xUnit |
DB-QUOTA-REPO-SET-GET | Positive | DB | IUserQuotaRepository persists user quota overrides and retrieves them correctly | UserQuotaAndAppKeyRepositoryTests.cs:L85 | Backend xUnit |
DB-QUOTA-REPO-UPDATE-CONFLICT | Positive | DB | IUserQuotaRepository SetUserQuotaAsync updates existing quota on conflict | UserQuotaAndAppKeyRepositoryTests.cs:L117 | Backend xUnit |
DB-SEEDER-INIT-SETTINGS-PROVIDERS | Positive | DB | DatabaseSeederService initializes default router settings, provider configs, and schema. | DatabaseSeederServiceTests.cs:L30 | Backend xUnit |
DB-SEEDER-ROUTER-DEFAULT-DATA | Positive | DB | DatabaseSeeder initializes default router tables, settings, and seed servers. | SeederAndDiscoveryTests.cs:L53 | Backend xUnit |
DB-SQLITE-LEGACY-UPGRADE-MIGRATION | Positive | DB | SQLite auto-migration seamlessly upgrades legacy schema, encrypts plaintext secrets, and preserves data | DatabaseSchemaUpgradeAndContractTests.cs:L29 | Backend xUnit |
DB-TYPEHANDLER-JSON-LIST-SERIALIZATION | Positive | DB | JsonListTypeHandler serializes and deserializes string collections to JSON text across database providers. | MultiDatabaseProviderIntegrationTests.cs:L42 | Backend xUnit |
SEC-DB-ENCRYPTION-KEY-AUTOGEN-FAIL | Guardrail | DB | ResolveDbEncryptionKey wraps file persistence errors in InvalidOperationException | DbKeyHelperTests.cs:L334 | Backend xUnit |
DOC-SETUP-SKILL-FRONTMATTER | Positive | DOC | mcg-setup skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 characters | SetupSkillTests.cs:L18 | Backend xUnit |
DOC-SETUP-SKILL-MIRROR | Positive | DOC | The mcg-setup skill and templates are mirrored 1:1 in .agents/skills/mcg-setup/ | SetupSkillTests.cs:L152 | Backend xUnit |
DOC-SETUP-SKILL-TEMPLATES | Positive | DOC | All scaffold templates exist, are non-empty, and contain required directives such as responseBufferLimit, MCG_MASTER_KEY, and ghcr.io/spelech/model-context-gateway | SetupSkillTests.cs:L98 | Backend xUnit |
DOC-SETUP-SKILL-WORKFLOW | Positive | DOC | mcg-setup skill contains all 6 required setup phases including environment probing, hosting platforms, env vs UI trade-offs, identity/network topology, artifact generation, and health/client configuration | SetupSkillTests.cs:L44 | Backend xUnit |
AUTH-123 | Guardrail | GUARD | RotateAppKey forbids non-owner non-admin user from rotating another user's key. | AppKeyRotationControllerTests.cs:L81 | Backend xUnit |
AUTH-EXTERNAL-IDP-DENIES-ANONYMOUS-LOOPBACK | Guardrail | GUARD | When an external IDP is configured, anonymous loopback requests do not bypass authentication. | StandaloneAdminAuthTests.cs:L224 | Backend xUnit |
AUTH-STANDALONE-ADMINPOLICY-EXTERNAL-DENY | Guardrail | GUARD | AdminPolicy rejects unauthenticated requests from non-whitelisted external IPs in standalone mode. | StandaloneAdminAuthTests.cs:L200 | Backend xUnit |
AUTH-STANDALONE-EXTERNAL-DENY | Guardrail | GUARD | Standalone mode denies admin access to non-whitelisted external IPs without an Admin AppKey. | StandaloneAdminAuthTests.cs:L57 | Backend xUnit |
GUARD-01 | Guardrail | GUARD | handles policy save failure with error toast | usePolicyStore.test.ts:L86 | Frontend Vitest |
GUARD-02 | Guardrail | GUARD | SSE transport fails closed with SecurityException when secret provider resolution fails | SseTransportTests.cs:L34 | Backend xUnit |
GUARD-03 | Guardrail | GUARD | CompositeSecretRetriever throws InvalidOperationException when an unregistered secret provider is requested. | CompositeSecretRetrieverTests.cs:L17 | Backend xUnit |
GUARD-04 | Guardrail | GUARD | Malformed completion payloads or unmapped backends must fail closed safely | PairwiseIntegrationMatrixTests.cs:L508 | Backend xUnit |
GUARD-05 | Guardrail | GUARD | Socket-level SSRF protection blocks private and loopback IP connections unless explicitly allowlisted. | ChallengerTests.cs:L730 | Backend xUnit |
GUARD-06 | Guardrail | GUARD | Auth middleware enforces case-insensitive route matching preventing path bypass. | ChallengerTests.cs:L234 | Backend xUnit |
GUARD-07 | Guardrail | GUARD | Custom files endpoint validates file path ensuring sibling directory traversal and parent traversal fail closed. | CustomFilesSecurityTests.cs:L8 | Backend xUnit |
GUARD-ADMIN-CUSTOM-FILES-VALIDATION | Guardrail | GUARD | manage_custom_files rejects invalid prompt JSON syntax and unsupported file categories. | AdminToolsParityTests.cs:L779 | Backend xUnit |
GUARD-ADMIN-ENDPOINT-UNAUTHORIZED | Guardrail | GUARD | Unauthenticated / non-admin client request to /admin receives 403 Forbidden. | AdminEndpointsTests.cs:L193 | Backend xUnit |
GUARD-ADMIN-POLICIES-WILDCARD-DENY | Guardrail | GUARD | manage_policies rejects wildcard deny policies to prevent global lockout. | AdminToolsParityTests.cs:L513 | Backend xUnit |
GUARD-ADMIN-PROVIDERS-LDAP-PLAINTEXT | Guardrail | GUARD | manage_providers rejects unencrypted LDAP connections on port 389. | AdminToolsParityTests.cs:L650 | Backend xUnit |
GUARD-ADMIN-SERVERS-VALIDATION | Guardrail | GUARD | Verifies that the manage_servers tool accurately enforces validation by rejecting malformed transport types, missing required parameters, and requests for non-existent servers. | AdminToolsParityTests.cs:L324 | Backend xUnit |
GUARD-ADMIN-UNKNOWN-TOOL | Guardrail | GUARD | AdminMcpServer returns an error response for unknown tool or action invocations. | AdminMcpServerTests.cs:L596 | Backend xUnit |
GUARD-APPKEY-EMPTY-CATEGORY | Guardrail | GUARD | AppKey creation with empty or whitespace category must fail closed with BadRequest | CategoryScopedAppKeysTests.cs:L239 | Backend xUnit |
GUARD-APPKEY-MALFORMED-SCOPES | Guardrail | GUARD | Corrupted AppKey scopes JSON must fail closed and reject execution | PairwiseIntegrationMatrixTests.cs:L490 | Backend xUnit |
GUARD-APPKEY-MISSING-NAME | Guardrail | GUARD | Rejects AppKey creation with BadRequest when name is missing. | AppKeysControllerTests.cs:L312 | Backend xUnit |
GUARD-APPKEY-QUOTA-INVALID-PARAM | Guardrail | GUARD | Returns BadRequest on invalid quota override input parameters. | AppKeysControllerTests.cs:L433 | Backend xUnit |
GUARD-APPKEY-REVOKE-FORBID | Guardrail | GUARD | Returns Forbid when non-owner/non-admin attempts to revoke an AppKey. | AppKeysControllerTests.cs:L378 | Backend xUnit |
GUARD-APPKEY-REVOKE-NOTFOUND | Guardrail | GUARD | Returns NotFound when revoking non-existent AppKey ID. | AppKeysControllerTests.cs:L369 | Backend xUnit |
GUARD-APPKEY-UNKNOWN-CATEGORY | Guardrail | GUARD | Non-admin callers cannot create AppKeys with unconfigured categories | CategoryScopedAppKeysTests.cs:L220 | Backend xUnit |
GUARD-APPKEY-USER-QUOTA | Guardrail | GUARD | Enforces user AppKey limit and returns BadRequest when quota is exceeded. | AppKeysControllerTests.cs:L324 | Backend xUnit |
GUARD-AUTH-MIDDLEWARE-UNAUTHORIZED | Guardrail | GUARD | Auth middleware blocks unauthorized requests with HTTP 401 Unauthorized. | McpIntegrationTests.cs:L591 | Backend xUnit |
GUARD-AUTH-NULL-TARGET | Guardrail | GUARD | Null or empty capability targets must immediately fail closed and return unauthorized | PairwiseIntegrationMatrixTests.cs:L468 | Backend xUnit |
GUARD-CLIENT-CLEANUP-REPO-ERR | Guardrail | GUARD | CleanupClients returns 500 when repository throws. | ClientsControllerTests.cs:L352 | Backend xUnit |
GUARD-CLIENT-CREATE-REPO-ERR | Guardrail | GUARD | CreateClient returns 500 when repository throws | ClientsControllerTests.cs:L300 | Backend xUnit |
GUARD-CLIENT-DELETE-REPO-ERR | Guardrail | GUARD | DeleteClient returns 500 when repository throws | ClientsControllerTests.cs:L317 | Backend xUnit |
GUARD-CLIENT-EMPTY-CATEGORY | Guardrail | GUARD | Client creation with empty category scope must fail closed with BadRequest | CategoryScopedAppKeysTests.cs:L304 | Backend xUnit |
GUARD-CLIENT-EMPTY-SCOPE | Guardrail | GUARD | CreateClient fails closed when category scope is empty | ClientsControllerTests.cs:L283 | Backend xUnit |
GUARD-CLIENT-MISSING-NAME | Guardrail | GUARD | CreateClient fails closed when DisplayName is missing | ClientsControllerTests.cs:L270 | Backend xUnit |
GUARD-DISPOSED-01 | Positive | GUARD | Stateless HTTP POST lifecycle: HTTP response completes, HttpContext is marked disposed, background backend initialization completes successfully without ObjectDisposedException. | DownstreamSessionIntegrationTests.cs:L225 | Backend xUnit |
GUARD-HTTP-NO-SECRET-RETRIEVER | Guardrail | GUARD | HTTP stateless transport fails closed with InvalidOperationException when no secret retriever is configured | HttpTransportTests.cs:L54 | Backend xUnit |
GUARD-HTTP-SECRET-RETRIEVAL-FAIL-CLOSED | Guardrail | GUARD | HTTP stateless transport fails closed with SecurityException when secret resolution fails | HttpTransportTests.cs:L31 | Backend xUnit |
GUARD-LDAP-FILTER-ESCAPE | Positive | GUARD | EscapeLdapFilter sanitizes and escapes special LDAP filter characters to prevent LDAP injection. | LdapActiveDirectoryServiceTests.cs:L10 | Backend xUnit |
GUARD-MAPPING-GET-DB-ERROR | Guardrail | GUARD | PermissionsController returns 500 on database error during mapping retrieval. | PermissionsControllerTests.cs:L147 | Backend xUnit |
GUARD-MAPPING-MISSING-EXT-ID | Guardrail | GUARD | PermissionsController rejects mapping save missing external ID with BadRequest. | PermissionsControllerTests.cs:L160 | Backend xUnit |
GUARD-MAPPING-MISSING-GROUP | Guardrail | GUARD | PermissionsController rejects mapping save missing internal group with BadRequest. | PermissionsControllerTests.cs:L171 | Backend xUnit |
GUARD-MAPPING-SAVE-DB-ERROR | Guardrail | GUARD | PermissionsController returns 500 when saving mapping encounters DB error. | PermissionsControllerTests.cs:L193 | Backend xUnit |
GUARD-MAPPING-UNMAPPED-DENY | Guardrail | GUARD | Fails closed and denies access when no valid group mapping exists for a restricted target. | GroupMappingsAndSpecAuthTests.cs:L125 | Backend xUnit |
GUARD-POLICY-DELETE-DB-ERROR | Guardrail | GUARD | PermissionsController fails closed with 500 when database delete fails. | PermissionsControllerTests.cs:L124 | Backend xUnit |
GUARD-POLICY-MISSING-GROUP | Guardrail | GUARD | PermissionsController rejects policy saves missing requiredGroup with BadRequest. | PermissionsControllerTests.cs:L69 | Backend xUnit |
GUARD-POLICY-MISSING-TARGET | Guardrail | GUARD | PermissionsController rejects policy saves missing targetId with BadRequest. | PermissionsControllerTests.cs:L58 | Backend xUnit |
GUARD-PROVIDER-MISSING-AUTH-NAME | Guardrail | GUARD | ProvidersController rejects saving auth provider without providerName with BadRequest. | ProvidersControllerTests.cs:L172 | Backend xUnit |
GUARD-PROVIDER-MISSING-SECRET-NAME | Guardrail | GUARD | ProvidersController rejects saving secret provider without providerName with BadRequest. | ProvidersControllerTests.cs:L90 | Backend xUnit |
GUARD-RBAC-COMPLETION-PROMPT | Guardrail | GUARD | completion/complete throws UnauthorizedAccessException when caller lacks prompt permissions. | UnifiedMcpAuthorizationTests.cs:L613 | Backend xUnit |
GUARD-RBAC-COMPLETION-TEMPLATE | Guardrail | GUARD | completion/complete throws UnauthorizedAccessException when caller lacks resource template permissions. | UnifiedMcpAuthorizationTests.cs:L645 | Backend xUnit |
GUARD-RBAC-COMPLETION-UNRESOLVED | Guardrail | GUARD | completion/complete fails closed on unknown or unresolved completion references. | UnifiedMcpAuthorizationTests.cs:L677 | Backend xUnit |
GUARD-RBAC-DEFAULT-DENY | Guardrail | GUARD | RBAC defaults to deny when no matching access policies are configured. | FineGrainedRbacTests.cs:L84 | Backend xUnit |
GUARD-RBAC-EXPLICIT-DENY | Guardrail | GUARD | RBAC enforces explicit policy denials to reject unauthorized callers. | FineGrainedRbacTests.cs:L118 | Backend xUnit |
GUARD-RBAC-MISSING-GROUP | Guardrail | GUARD | RBAC denies access when user does not possess the required security group. | FineGrainedRbacTests.cs:L106 | Backend xUnit |
GUARD-RBAC-NULL-TARGET | Guardrail | GUARD | IsUserAuthorizedAsync fails closed on null, empty, or whitespace target identifiers. | UnifiedMcpAuthorizationTests.cs:L198 | Backend xUnit |
GUARD-RBAC-PROMPT-UNAUTHORIZED | Guardrail | GUARD | GetPromptAsync throws UnauthorizedAccessException when user lacks permissions for target prompt. | FineGrainedRbacTests.cs:L145 | Backend xUnit |
GUARD-RBAC-RESOURCE-UNAUTHORIZED | Guardrail | GUARD | ReadResourceAsync throws UnauthorizedAccessException when user lacks permissions for target resource. | FineGrainedRbacTests.cs:L159 | Backend xUnit |
GUARD-RBAC-TOOL-UNAUTHORIZED | Guardrail | GUARD | CallToolAsync returns a formatted security error when user is unauthorized. | FineGrainedRbacTests.cs:L130 | Backend xUnit |
GUARD-ROUTING-UNKNOWN-TOOL | Guardrail | GUARD | ToolRoutingManager throws KeyNotFoundException when calling a tool not registered in the routing table. | ToolRoutingManagerTests.cs:L187 | Backend xUnit |
GUARD-ROUTING-UNREGISTERED-RESOURCE | Guardrail | GUARD | ResourceRoutingManager throws KeyNotFoundException when reading an unregistered resource URI. | ResourceRoutingManagerTests.cs:L67 | Backend xUnit |
GUARD-SECURITY-IDENTIFIER-VALIDATION | Positive | GUARD | SecurityValidationHelper validates tool and prompt names against namespaced server identifiers. | SecurityValidationHelperTests.cs:L44 | Backend xUnit |
GUARD-STATE-DISCONNECT-CANCELLATION | Guardrail | GUARD | JsonRpcStateManager rejects registration and cancels pending completions upon disconnect. | ConcurrentResponseIsolationTests.cs:L578 | Backend xUnit |
GUARD-TOOL-CANCELLATION | Guardrail | GUARD | ToolRoutingManager propagates task cancellation gracefully with a standardized JSON-RPC error response. | ToolRoutingManagerTests.cs:L155 | Backend xUnit |
GUARD-TOOL-MANDATORY-PARAMS | Guardrail | GUARD | ToolRoutingManager returns an error when execute_tool is invoked without the mandatory tool name parameter. | ToolRoutingManagerTests.cs:L125 | Backend xUnit |
GUARD-UNSUPPORTED-DB-PROVIDER | Guardrail | GUARD | DbConnectionFactory fails closed and throws InvalidOperationException when configured with unsupported database provider. | MultiDatabaseProviderIntegrationTests.cs:L29 | Backend xUnit |
GUARD-VALIDATION-STDIO-SHELL-OPERATORS | Guardrail | GUARD | ServerValidationHelper validates stdio commands against unsafe shell operators, piping, and command injection. | ServerEndpointsValidationTests.cs:L7 | Backend xUnit |
MCP-ADMIN-TOOL-TEST-CALL-ERROR | Guardrail | GUARD | AdminMcpServer test_tool_call propagates downstream backend errors with visibility. | AdminMcpServerTests.cs:L637 | Backend xUnit |
API-PIPELINE-GET-HEALTH | Positive | MCP | GET /health returns gateway health status with 200 OK. | PipelineIntegrationTests.cs:L439 | Backend xUnit |
API-PIPELINE-GET-SERVERS | Positive | MCP | GET /api/servers returns backend servers list with 200 OK. | PipelineIntegrationTests.cs:L340 | Backend xUnit |
API-PIPELINE-GET-STATS | Positive | MCP | GET /api/stats returns server statistics with 200 OK. | PipelineIntegrationTests.cs:L430 | Backend xUnit |
API-PIPELINE-GET-VERSION | Positive | MCP | GET /api/version returns version information with 200 OK. | PipelineIntegrationTests.cs:L331 | Backend xUnit |
API-PIPELINE-POST-MESSAGE-PROTOCOL | Positive | MCP | Full end-to-end JSON-RPC session message suite executes over HTTP POST. | PipelineIntegrationTests.cs:L143 | Backend xUnit |
API-PIPELINE-POST-SSE-PROTOCOL | Positive | MCP | Full end-to-end JSON-RPC protocol suite executes across SSE pipeline. | PipelineIntegrationTests.cs:L86 | Backend xUnit |
API-PIPELINE-SERVER-CRUD | Positive | MCP | Backend server CRUD pipeline endpoints persist and manage downstream servers. | PipelineIntegrationTests.cs:L277 | Backend xUnit |
HEALTH-PROBE-ALL-ENABLED-FLEET | Positive | MCP | BackendHealthCheckService probes all enabled backend servers in the fleet. | BackendHealthCheckServiceTests.cs:L161 | Backend xUnit |
HEALTH-PROBE-CUSTOM-SERVER-CONNECTED | Positive | MCP | BackendHealthCheckService marks registered custom servers as Connected. | BackendHealthCheckServiceTests.cs:L264 | Backend xUnit |
HEALTH-PROBE-DISABLED-SERVER | Positive | MCP | BackendHealthCheckService marks disabled servers as Disabled. | BackendHealthCheckServiceTests.cs:L132 | Backend xUnit |
HEALTH-PROBE-HTTP-CONNECTED-200 | Positive | MCP | BackendHealthCheckService marks server as Connected when downstream HTTP/SSE endpoint returns 200 OK. | BackendHealthCheckServiceTests.cs:L57 | Backend xUnit |
HEALTH-PROBE-HTTP-FAILED-EXCEPTION | Positive | MCP | BackendHealthCheckService marks server as Failed when downstream HTTP connection fails. | BackendHealthCheckServiceTests.cs:L97 | Backend xUnit |
HEALTH-PROBE-STDIO-VALID-CONNECTED | Positive | MCP | BackendHealthCheckService sets valid STDIO servers to Connected without making network HTTP probes. | BackendHealthCheckServiceTests.cs:L190 | Backend xUnit |
MCP-01 | Positive | MCP | initializes with default state | useServerStore.test.ts:L24 | Frontend Vitest |
MCP-02 | Positive | MCP | All MCP protocol capabilities enforce caller role authorizations consistently | PairwiseIntegrationMatrixTests.cs:L385 | Backend xUnit |
MCP-05 | Positive | MCP | ResourceRoutingManager returns all registered resources when search query is empty. | ResourceRoutingManagerTests.cs:L8 | Backend xUnit |
MCP-06 | Positive | MCP | prompts/list aggregates, namespaces, and routes prompts to target backends. | McpIntegrationTests.cs:L499 | Backend xUnit |
MCP-08 | Positive | MCP | completion/complete forwards prompt completions to backend when caller is authorized. | UnifiedMcpAuthorizationTests.cs:L473 | Backend xUnit |
MCP-10 | Positive | MCP | DockerAutoDiscoveryService handles missing Docker socket gracefully without throwing unhandled exceptions. | SeederAndDiscoveryTests.cs:L83 | Backend xUnit |
MCP-12 | Guardrail | MCP | DynamicEmbeddingService retrieves and persists embedding provider configurations in Settings table. | DynamicEmbeddingServiceTests.cs:L62 | Backend xUnit |
MCP-15 | Positive | MCP | All JSON-RPC results return a resultType discriminator (complete or input_required) per MCP 2026-07-28 spec. | ProtocolResultTypeTests.cs:L7 | Backend xUnit |
MCP-21 | Positive | MCP | Admin endpoint handles direct Streamable HTTP POST tools/list request returning JSON even with Accept text/event-stream header. | AdminEndpointsTests.cs:L370 | Backend xUnit |
MCP-22 | Guardrail | MCP | AdminMcpServer ProcessRequestAsync handles server/discover request returning supported versions and subscriptions capability. | AdminMcpServerTests.cs:L686 | Backend xUnit |
MCP-23 | Positive | MCP | AdminMcpServer HandleInitializeAsync includes subscriptions capability in capabilities object. | AdminMcpServerTests.cs:L655 | Backend xUnit |
MCP-24 | Positive | MCP | McpSpecMiddleware extracts OpenTelemetry W3C traceparent, tracestate, and baggage from headers and _meta. | McpSpecMiddlewareTests.cs:L219 | Backend xUnit |
MCP-25 | Positive | MCP | ToolRoutingManager falls back to SessionManager global server tools cache during cold-start search_tools execution | ToolRoutingManagerTests.cs:L264 | Backend xUnit |
MCP-26 | Positive | MCP | ToolRoutingManager dynamically registers prefix routes for tools with slash, colon, and double underscore delimiters | ToolRoutingManagerTests.cs:L434 | Backend xUnit |
MCP-27 | Positive | MCP | McpServer supports Alias property | McpServerTests.cs:L15 | Backend xUnit |
MCP-28 | Guardrail | MCP | ToolRoutingManager rejects ambiguous bare tool calls when duplicate tool names exist across distinct servers, listing candidates with namespaces. | ToolRoutingManagerTests.cs:L647 | Backend xUnit |
MCP-29 | Guardrail | MCP | ServerValidationHelper rejects invalid characters in Alias. | ServerEndpointsValidationTests.cs:L72 | Backend xUnit |
MCP-30 | Positive | MCP | IsUserAuthorizedAsync matches granular tool policies across /, :, and __ delimiters. | UnifiedMcpAuthorizationTests.cs:L284 | Backend xUnit |
MCP-31 | Guardrail | MCP | DockerAutoDiscoveryService parses mcp.alias from Docker container labels | DockerAutoDiscoveryServiceTests.cs:L188 | Backend xUnit |
MCP-32 | Guardrail | MCP | InMemorySimdToolVectorStore scores tool embeddings using .NET 10 hardware SIMD TensorPrimitives. | InMemorySimdToolVectorStoreTests.cs:L8 | Backend xUnit |
MCP-33 | Positive | MCP | OpenAiEmbeddingProvider generates embeddings via OpenAI and Ollama compatible endpoints. | OpenAiEmbeddingProviderTests.cs:L26 | Backend xUnit |
MCP-34 | Guardrail | MCP | ToolRoutingManager gracefully falls back to keyword matching when NoOpEmbeddingProvider is active. | ToolRoutingManagerFallbackTests.cs:L26 | Backend xUnit |
MCP-35 | Positive | MCP | Test call and prompt endpoints resolve server and strip prefix across slash, dunder, and colon delimiters. | PipelineIntegrationTests.cs:L500 | Backend xUnit |
MCP-36 | Positive | MCP | PromptRoutingManager resolves prompt directly on cold-start without requiring prior prompts/list call. | PromptAndResourceResilienceTests.cs:L11 | Backend xUnit |
MCP-37 | Positive | MCP | ResourceRoutingManager resolves mcp:// URIs directly on cold-start without prior resources/list. | PromptAndResourceResilienceTests.cs:L120 | Backend xUnit |
MCP-38 | Positive | MCP | PromptRoutingManager supports slash, colon, and double-underscore delimiters for prompts/get. | PromptAndResourceResilienceTests.cs:L56 | Backend xUnit |
MCP-39 | Positive | MCP | CapabilityEndpoints test bench APIs return 404 Not Found gracefully when target server is missing. | PromptAndResourceResilienceTests.cs:L165 | Backend xUnit |
MCP-ADMIN-ENDPOINT-CALL-TOOL | Positive | MCP | Admin endpoint /admin/message executes tools/call for manage_system diagnostics. | AdminEndpointsTests.cs:L294 | Backend xUnit |
MCP-ADMIN-ENDPOINT-HEAD-REQUEST | Positive | MCP | Admin endpoint /admin handles HEAD request returning text/event-stream headers. | AdminEndpointsTests.cs:L212 | Backend xUnit |
MCP-ADMIN-ENDPOINT-LIST-TOOLS | Positive | MCP | Admin endpoint /admin/message executes tools/list over active SSE session and returns 10 admin tools. | AdminEndpointsTests.cs:L224 | Backend xUnit |
MCP-ADMIN-ENDPOINT-ROUTER-ADMIN-TARGET | Positive | MCP | Target proxy endpoint /router-admin routes directly to the Admin MCP server. | AdminEndpointsTests.cs:L149 | Backend xUnit |
MCP-ADMIN-ENDPOINT-SSE-HANDSHAKE | Positive | MCP | Admin endpoint /admin/sse performs initialize handshake with 2026-07-28 protocol version. | AdminEndpointsTests.cs:L62 | Backend xUnit |
MCP-ADMIN-INITIALIZE-HANDSHAKE | Positive | MCP | AdminMcpServer initialize handles protocol negotiation for 2026-07-28 and 2024-11-05. | AdminMcpServerTests.cs:L199 | Backend xUnit |
MCP-ADMIN-PARITY-APPKEYS | Positive | MCP | manage_appkeys supports full parity for list, get_limits, create, and revoke actions. | AdminToolsParityTests.cs:L370 | Backend xUnit |
MCP-ADMIN-PARITY-CLIENTS | Positive | MCP | manage_clients supports full parity for register, list, and delete actions. | AdminToolsParityTests.cs:L423 | Backend xUnit |
MCP-ADMIN-PARITY-CUSTOM-FILES | Positive | MCP | manage_custom_files supports full parity for list, get, save, and delete prompt and resource files. | AdminToolsParityTests.cs:L716 | Backend xUnit |
MCP-ADMIN-PARITY-GROUP-MAPPINGS | Positive | MCP | manage_group_mappings supports full parity for list, save, and delete external-to-internal group mappings. | AdminToolsParityTests.cs:L530 | Backend xUnit |
MCP-ADMIN-PARITY-JSONRPC-DISPATCH | Positive | MCP | AdminMcpServer processes standard JSON-RPC 2.0 requests (tools/list, tools/call, ping). | AdminToolsParityTests.cs:L873 | Backend xUnit |
MCP-ADMIN-PARITY-POLICIES | Positive | MCP | manage_policies supports full parity for list, save, and delete access control policies. | AdminToolsParityTests.cs:L464 | Backend xUnit |
MCP-ADMIN-PARITY-PROVIDERS | Positive | MCP | manage_providers supports full parity for list, save_secret, test_vault, save_auth, and test_ldap actions. | AdminToolsParityTests.cs:L577 | Backend xUnit |
MCP-ADMIN-PARITY-SERVER-ALIAS | Positive | MCP | AdminMcpServer manage_servers supports server alias for add, update, and list actions with collision validation. | AdminMcpServerTests.cs:L948 | Backend xUnit |
MCP-ADMIN-PARITY-SERVERS | Positive | MCP | Validates that the manage_servers tool provides comprehensive administrative capabilities including listing, retrieving, creating, updating, toggling, deleting, and reconnecting servers. | AdminToolsParityTests.cs:L234 | Backend xUnit |
MCP-ADMIN-PARITY-SETTINGS | Positive | MCP | manage_settings supports full parity for get and update global router configurations. | AdminToolsParityTests.cs:L667 | Backend xUnit |
MCP-ADMIN-PARITY-SYSTEM | Positive | MCP | manage_system supports full parity for diagnostics, get_logs, clear_logs, and query_audit actions. | AdminToolsParityTests.cs:L816 | Backend xUnit |
MCP-ADMIN-PARITY-TEST-TOOL-CALL | Positive | MCP | test_tool_call executes test bench backend tool calls and formats responses. | AdminToolsParityTests.cs:L846 | Backend xUnit |
MCP-ADMIN-PARITY-TOOLS-COVERAGE | Positive | MCP | Ensures every UI management workflow is backed by a verified, equivalent action within the consolidated Admin MCP tools. | AdminToolsParityTests.cs:L191 | Backend xUnit |
MCP-ADMIN-RECONNECT-ALL-PROPAGATION | Positive | MCP | AdminMcpServer manage_servers reconnect_all triggers StartInitializationForBackend across active sessions. | AdminMcpServerTests.cs:L730 | Backend xUnit |
MCP-ADMIN-REQUEST-WITHOUT-ID-NOT-DROPPED | Positive | MCP | Admin endpoint executes requests without an ID and does not drop them as notifications. | AdminEndpointsTests.cs:L550 | Backend xUnit |
MCP-ADMIN-REVERSE-PROXY-X-FORWARDED-HOST | Positive | MCP | Admin SSE endpoint prioritizes X-Forwarded-Host header over Request.Host in endpoint URI advertising. | AdminEndpointsTests.cs:L514 | Backend xUnit |
MCP-ADMIN-SKILL-E2E-PROVISIONING | Positive | MCP | Admin automation templates and JSON-RPC tool calls successfully provision a blank-slate gateway instance end-to-end via HTTP /admin/message. | AdminAutomationSkillTests.cs:L176 | Backend xUnit |
MCP-ADMIN-SKILL-FRONTMATTER | Positive | MCP | mcg-admin skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 characters | AdminAutomationSkillTests.cs:L21 | Backend xUnit |
MCP-ADMIN-SKILL-MIRROR | Positive | MCP | mcg-admin skill files and templates are identically mirrored between skills/ and .agents/skills/ directories | AdminAutomationSkillTests.cs:L147 | Backend xUnit |
MCP-ADMIN-SKILL-TEMPLATES | Positive | MCP | All mcg-admin scaffold templates exist, are non-empty, and contain valid JSON or scripts for Authentik, Keycloak, Entra, ActiveDirectory, Cloudflare, Vault, Embeddings, Docker, and shell automation | AdminAutomationSkillTests.cs:L103 | Backend xUnit |
MCP-ADMIN-SKILL-WORKFLOW | Positive | MCP | mcg-admin skill contains all 7 administration phases including diagnostics, secrets, auth providers, RBAC/group mappings, settings/embeddings, servers/clients, and live tool verification | AdminAutomationSkillTests.cs:L47 | Backend xUnit |
MCP-ADMIN-SSE-ZOD-COMPLIANT | Positive | MCP | Admin endpoint direct POST response does not serialize null error or _meta fields. | AdminEndpointsTests.cs:L487 | Backend xUnit |
MCP-ADMIN-TOOL-AUDIT-LOG | Positive | MCP | AdminMcpServer tool calls record audit log entries with caller and tool name. | AdminMcpServerTests.cs:L270 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-APPKEYS | Positive | MCP | AdminMcpServer executes manage_appkeys create, list, limits, and revoke actions. | AdminMcpServerTests.cs:L287 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-CLIENTS | Positive | MCP | AdminMcpServer executes manage_clients register, list, and delete actions. | AdminMcpServerTests.cs:L334 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-CUSTOM-FILES | Positive | MCP | AdminMcpServer executes manage_custom_files save, get, list, and delete actions. | AdminMcpServerTests.cs:L508 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-GROUP-MAPPINGS | Positive | MCP | AdminMcpServer executes manage_group_mappings save, list, and delete actions. | AdminMcpServerTests.cs:L406 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-POLICIES | Positive | MCP | AdminMcpServer executes manage_policies save, list, and delete actions. | AdminMcpServerTests.cs:L372 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-PROVIDERS | Positive | MCP | AdminMcpServer executes manage_providers list, save_secret, and save_auth actions. | AdminMcpServerTests.cs:L439 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-SERVERS | Positive | MCP | AdminMcpServer executes manage_servers list, get, create, update, toggle, and delete actions. | AdminMcpServerTests.cs:L218 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-SETTINGS | Positive | MCP | AdminMcpServer executes manage_settings get and update actions. | AdminMcpServerTests.cs:L482 | Backend xUnit |
MCP-ADMIN-TOOL-MANAGE-SYSTEM | Positive | MCP | AdminMcpServer executes manage_system diagnostics, get_logs, clear_logs, and query_audit actions. | AdminMcpServerTests.cs:L562 | Backend xUnit |
MCP-ADMIN-TOOLS-LIST-COUNT | Positive | MCP | AdminMcpServer tools/list returns all 10 consolidated tools with complete JSON schemas. | AdminMcpServerTests.cs:L151 | Backend xUnit |
MCP-ADMIN-ZOD-STRICT-RESPONSE | Positive | MCP | JsonRpcResponse serialization omits null result, error, and _meta fields completely to satisfy Zod strict validation. | AdminEndpointsTests.cs:L452 | Backend xUnit |
MCP-COLDSTART-01 | Positive | MCP | Full cold-start cycle: SessionManager cache seeded -> search_tools -> execute_tool dispatches to downstream mock server and returns output. | DownstreamSessionIntegrationTests.cs:L130 | Backend xUnit |
MCP-DOWNSTREAM-INIT-DIAGNOSTICS | Positive | MCP | Initializes downstream MCP backends with detailed diagnostic logging. | McpIntegrationTests.cs:L317 | Backend xUnit |
MCP-ERROR-ACTIONABLE-SUGGESTION-CATEGORIES | Positive | MCP | ToolErrorFormatter categorizes error messages and produces domain-specific remediation guidance. | ToolErrorFormatterTests.cs:L42 | Backend xUnit |
MCP-ERROR-FORMAT-JSONRPC-REMEDIATION | Positive | MCP | ToolErrorFormatter attaches actionable suggestions and remediation resource URIs to JSON-RPC error payloads. | ToolErrorFormatterTests.cs:L7 | Backend xUnit |
MCP-ERROR-FORMAT-UNHANDLED-EXCEPTION | Positive | MCP | ToolErrorFormatter converts unhandled exceptions to standardized JSON-RPC error format with suggestions. | ToolErrorFormatterTests.cs:L27 | Backend xUnit |
MCP-EXEC-TOOL-ENFORCE-AUTH-POLICIES | Positive | MCP | Meta-mode execute_tool strictly enforces target tool authorization policies | PairwiseIntegrationMatrixTests.cs:L567 | Backend xUnit |
MCP-EXEC-TOOL-ENFORCE-CATEGORY-SCOPES | Positive | MCP | Router meta-mode execute_tool validates and enforces category scopes on target tool calls | CategoryScopedAppKeysTests.cs:L428 | Backend xUnit |
MCP-FILES-DIR-HELPER-INIT | Positive | MCP | CustomFilesDirectoryHelper initializes and creates required directories on startup. | McpIntegrationTests.cs:L1069 | Backend xUnit |
MCP-JSON-REWRITE-ADVERSARIAL-EDGE-CASES | Positive | MCP | JsonNode request rewrite handles adversarial mixed arrays, block comments, and malformed JSON. | ChallengerTests.cs:L590 | Backend xUnit |
MCP-JSON-REWRITE-BATCH-COMMENTS-COMMAS | Positive | MCP | RewriteRequestJson accurately parses JSON batches, comments, and trailing commas using System.Text.Json JsonNode. | ChallengerTests.cs:L191 | Backend xUnit |
MCP-JSON-REWRITE-META-IN-PARAMS | Positive | MCP | RewriteRequestJson strips _meta from root and embeds it into params to comply with MCP JSON-RPC 2.0 Zod schema. | ChallengerTests.cs:L216 | Backend xUnit |
MCP-JSONRPC-CONVERTER-MINIMAL-VARIANTS | Positive | MCP | JsonRpcMessageConverter deserializes edge-case minimal/null JSON-RPC variants without stack overflows. | ChallengerTests.cs:L702 | Backend xUnit |
MCP-JSONRPC-CONVERTER-PRIORITIZE-RESPONSE | Positive | MCP | JsonRpcMessageConverter prioritizes result/error properties over method property in polymorphic response parsing. | ChallengerTests.cs:L354 | Backend xUnit |
MCP-JSONRPC-DESERIALIZE-PLAIN-NO-OVERFLOW | Positive | MCP | Deserializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow. | McpIntegrationTests.cs:L287 | Backend xUnit |
MCP-JSONRPC-POLYMORPHIC-DESERIALIZATION | Positive | MCP | Polymorphic JSON-RPC message deserializer accurately instantiates request, response, and notification subclasses. | McpIntegrationTests.cs:L259 | Backend xUnit |
MCP-JSONRPC-SERIALIZE-PLAIN-NO-OVERFLOW | Positive | MCP | Serializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow. | McpIntegrationTests.cs:L303 | Backend xUnit |
MCP-MOCK-JSONRPC-FLOW | Positive | MCP | MockDownstreamMcpServer handles initialize, initialized, tools/list, and tools/call JSON-RPC 2.0 protocol cycles. | MockDownstreamMcpServerTests.cs:L11 | Backend xUnit |
MCP-MOCK-RESOURCES-PROMPTS-SUPPORT | Positive | MCP | MockDownstreamMcpServer handles resources/list and prompts/list MCP protocol methods. | TransportResilienceTests.cs:L123 | Backend xUnit |
MCP-RESILIENT-01 | Positive | MCP | Prefix-based resilient routing: execute_tool called with unregistered but prefixed tool name dynamically resolves server and executes. | DownstreamSessionIntegrationTests.cs:L294 | Backend xUnit |
MCP-SESSION-BUILTIN-PROMPTS | Positive | MCP | ClientSession lists built-in diagnostic and routing prompts. | ClientSessionTests.cs:L115 | Backend xUnit |
MCP-SESSION-BUILTIN-RESOURCES | Positive | MCP | ClientSession lists built-in resources including router://status. | ClientSessionTests.cs:L99 | Backend xUnit |
MCP-SESSION-CALL-SEARCH-TOOLS | Positive | MCP | ClientSession calls built-in search_tools and returns structured search results. | ClientSessionTests.cs:L132 | Backend xUnit |
MCP-SESSION-ERROR-TRANSFORM-CANCEL-SAMPLING | Positive | MCP | Translates backend error codes, handles cancellation tokens, and executes sampling requests. | McpIntegrationTests.cs:L880 | Backend xUnit |
MCP-SESSION-GET-PROMPT-DIAGNOSE | Positive | MCP | ClientSession gets router__diagnose_failure prompt and returns diagnostic prompt instructions. | ClientSessionTests.cs:L176 | Backend xUnit |
MCP-SESSION-MANAGER-PER-SERVER-CACHE | Positive | MCP | SessionManager caches and isolates connections per downstream backend server. | McpIntegrationTests.cs:L1084 | Backend xUnit |
MCP-SESSION-METAMODE-TOOLS | Positive | MCP | ClientSession exposes meta-mode tools search_tools and execute_tool in meta mode. | ClientSessionTests.cs:L80 | Backend xUnit |
MCP-SESSION-READ-ROUTER-STATUS | Positive | MCP | ClientSession reads router://status resource and returns online gateway metadata. | ClientSessionTests.cs:L153 | Backend xUnit |
MCP-SESSION-REQUEST-CANCELLATION | Positive | MCP | ClientSession registers and triggers request cancellation for active cancellation tokens. | ClientSessionTests.cs:L198 | Backend xUnit |
MCP-SESSION-UNREGISTERED-RESPONSE | Positive | MCP | ClientSession returns false when handling client response for unregistered request ID. | ClientSessionTests.cs:L214 | Backend xUnit |
MCP-WIRE-JSONRPC-SPEC | Positive | MCP | MockDownstreamMcpServer treats messages with omitted id as notifications returning 202 Accepted with empty body. | MockDownstreamMcpServerTests.cs:L98 | Backend xUnit |
MCP-WIRE-PROTOCOL-MATRIX | Positive | MCP | MockDownstreamMcpServer dynamically negotiates requested protocol version. | MockDownstreamMcpServerTests.cs:L80 | Backend xUnit |
UI-104 | Positive | MCP | renders resource tester with servers and resources | ResourceTesterCard.test.tsx:L1 | Frontend Vitest |
UI-106 | Positive | MCP | renders connected server details with badges and triggers actions | ServerCard.test.tsx:L1 | Frontend Vitest |
UI-107 | Positive | MCP | renders prompt dropdown and filters by selected server | PromptTesterCard.test.tsx:L1 | Frontend Vitest |
UI-112 | Positive | MCP | renders nothing when isAddEditOpen is false | ServerModal.test.tsx:L1 | Frontend Vitest |
UI-121 | Positive | MCP | should open Add Server modal and switch secret provider types | server-management.spec.ts:L1 | Playwright E2E |
UI-SERVERS-ALIAS-MANAGEMENT | Positive | MCP | renders server alias badge alongside server id when configured | ServerCard.test.tsx:L145 | Frontend Vitest |
API-PIPELINE-GET-AUDIT | Positive | SEC | GET /api/audit returns audit log records with 200 OK. | PipelineIntegrationTests.cs:L394 | Backend xUnit |
API-PIPELINE-GET-LOGS | Positive | SEC | GET /api/logs returns system log records with 200 OK. | PipelineIntegrationTests.cs:L421 | Backend xUnit |
AUTH-106 | Guardrail | SEC | Exchange throws InvalidOperationException when request is null. | AuthorizationControllerTests.cs:L19 | Backend xUnit |
AUTH-107 | Positive | SEC | RegisterClient successfully handles DCR requests when open DCR is enabled. | AuthorizationControllerTests.cs:L36 | Backend xUnit |
AUTH-108 | Guardrail | SEC | Authorize throws InvalidOperationException when OIDC request is null. | AuthorizationControllerTests.cs:L77 | Backend xUnit |
AUTH-109 | Positive | SEC | RegisterClient uses IOAuthClientRepository when IOpenIddictApplicationManager is null. | AuthorizationControllerTests.cs:L94 | Backend xUnit |
AUTH-111 | Guardrail | SEC | Pipeline exposes RFC 9728 OAuth Protected Resource discovery endpoints with dynamic resource identifiers. | PipelineIntegrationTests.cs:L63 | Backend xUnit |
AUTH-112 | Guardrail | SEC | Authorize resolves client application from IOAuthClientRepository and redirects to consent. | AuthorizationControllerTests.cs:L297 | Backend xUnit |
AUTH-113 | Positive | SEC | RegisterClient supports public clients with PKCE (token_endpoint_auth_method: none) and omits client secret. | AuthorizationControllerTests.cs:L351 | Backend xUnit |
AUTH-114 | Guardrail | SEC | RegisterClient rejects invalid or non-absolute redirect URIs with standard RFC 7591 invalid_redirect_uri error. | AuthorizationControllerTests.cs:L400 | Backend xUnit |
AUTH-115 | Positive | SEC | RegisterClient dynamically binds requested scopes to OpenIddict application descriptor permissions. | AuthorizationControllerTests.cs:L435 | Backend xUnit |
AUTH-116 | Guardrail | SEC | Exchange rejects client_credentials grant attempts by public clients with UnauthorizedClient error. | AuthorizationControllerTests.cs:L475 | Backend xUnit |
AUTH-117 | Guardrail | SEC | RegisterClient returns 403 Forbidden with access_denied when open client registration is disabled and caller is unauthorized. | AuthorizationControllerTests.cs:L516 | Backend xUnit |
MCP-ADMIN-TEST-TOOL-CALL-SECRET-RESOLUTION | Positive | SEC | AdminMcpServer test_tool_call resolves server secrets via injected ISecretRetriever. | AdminMcpServerTests.cs:L765 | Backend xUnit |
MCP-ADMIN-TEST-TOOL-CALL-USER-SECRET-STORE | Positive | SEC | AdminMcpServer test_tool_call resolves user credentials via injected IUserSecretStore and caller context. | AdminMcpServerTests.cs:L856 | Backend xUnit |
SEC-01 | Guardrail | SEC | SQLite database is encrypted at rest using SQLCipher with DB_ENCRYPTION_KEY. | DatabaseEncryptionTests.cs:L8 | Backend xUnit |
SEC-02 | Positive | SEC | VaultSecretRetriever dynamically loads, applies, and reloads Vault configurations from database repository. | ProviderSettingsEncryptionTests.cs:L294 | Backend xUnit |
SEC-03 | Positive | SEC | EnvironmentSecretRetriever retrieves configured environment variable value. | SecretRetrieverTests.cs:L5 | Backend xUnit |
SEC-04 | Positive | SEC | WindowsRegistrySecretRetriever handles non-Windows platforms gracefully and returns null. | SecretRetrieverTests.cs:L34 | Backend xUnit |
SEC-05 | Positive | SEC | renders RPC message stream with formatted JSON | LogsTerminalCard.test.tsx:L61 | Frontend Vitest |
SEC-30 | Positive | SEC | Renders User Secret Storage options and toggles Vault with warning when disabled. | SecretProvidersTab.test.tsx:L136 | Frontend Vitest |
SEC-ADMIN-AUDIT-REDACTION | Positive | SEC | AdminMcpServer redacts sensitive secrets from argument payloads before recording audit logs. | AdminMcpServerTests.cs:L613 | Backend xUnit |
SEC-APPKEY-SANITIZE-METADATA-GET | Positive | SEC | AppKeys API returns sanitized key metadata without leaking plaintext tokens. | AppKeysControllerTests.cs:L259 | Backend xUnit |
SEC-AUDIT-LOG-ADMIN-ACTION-RECORD | Positive | SEC | AuditLogger records administrative configuration changes and security events to AdminAuditLogs table. | AuditLoggerTests.cs:L75 | Backend xUnit |
SEC-AUDIT-LOG-INVOCATION-RECORD | Positive | SEC | AuditLogger writes tool invocation audit records with actor attribution and duration to AuditLogs table. | AuditLoggerTests.cs:L60 | Backend xUnit |
SEC-AUDIT-LOGGER-ADMIN-PERSIST | Positive | SEC | AuditLogger persists administrative actions directly into AdminAuditLogs database table. | AuditQueryApiTests.cs:L150 | Backend xUnit |
SEC-AUDIT-MAPPING-SAVE-ACTION | Positive | SEC | PermissionsController records audit action when group mapping is saved. | AuditQueryApiTests.cs:L117 | Backend xUnit |
SEC-AUDIT-PER-REQUEST-ACTOR-ATTRIBUTION | Positive | SEC | Audit logger attributes per-request actor credentials accurately across stateless calls. | McpIntegrationTests.cs:L128 | Backend xUnit |
SEC-AUDIT-POLICY-SAVE-ACTION | Positive | SEC | PermissionsController records audit action when access policy is saved. | AuditQueryApiTests.cs:L83 | Backend xUnit |
SEC-AUDIT-QUERY-FILTERED-ROWS | Positive | SEC | Audit queries support filtering by user, server, and pagination while recording query access in audit log. | AuditQueryApiTests.cs:L60 | Backend xUnit |
SEC-GATEWAY-ZERO-CONFIG-BOOT | Positive | SEC | Gateway boots from a blank slate with zero master key environment variables, auto-generates .master.key, and serves health and admin endpoints. | AdminAutomationSkillTests.cs:L352 | Backend xUnit |
SEC-HTTP-SECRET-URL-FALLBACK | Positive | SEC | HttpTransport falls back to URL and SecretItemKey when specific secret paths are unconfigured. | TransportsAuthShapeTests.cs:L160 | Backend xUnit |
SEC-KEY-PROVIDER-AUTOGEN | Positive | SEC | EncryptionKeyProvider delegates to DbKeyHelper to auto-generate master key when unconfigured. | EncryptionKeyProviderTests.cs:L42 | Backend xUnit |
SEC-KEY-PROVIDER-CONFIG | Positive | SEC | EncryptionKeyProvider returns configured DB_ENCRYPTION_KEY or MCG_SECRET. | EncryptionKeyProviderTests.cs:L28 | Backend xUnit |
SEC-KEY-PROVIDER-FALLBACK | Positive | SEC | EncryptionKeyProvider falls back to DB_ENCRYPTION_KEY when MCG_SECRET is unconfigured. | EncryptionKeyProviderTests.cs:L70 | Backend xUnit |
SEC-KEY-PROVIDER-SECRET | Positive | SEC | EncryptionKeyProvider returns configured MCG_SECRET. | EncryptionKeyProviderTests.cs:L56 | Backend xUnit |
SEC-KEYFILE-AUTOGEN | Positive | SEC | Blank-slate initialization auto-generates a 256-bit base64 master key and persists it to .master.key. | DbKeyHelperTests.cs:L63 | Backend xUnit |
SEC-KEYFILE-ENV-PRECEDENCE | Positive | SEC | Explicit environment variables MCG_MASTER_KEY or MCG_SECRET take precedence over keyfiles. | DbKeyHelperTests.cs:L28 | Backend xUnit |
SEC-KEYFILE-FILE-OVER-KEYFILE | Positive | SEC | Explicit file secrets take precedence over persistent .master.key files. | DbKeyHelperTests.cs:L123 | Backend xUnit |
SEC-KEYFILE-FILE-SECRET | Positive | SEC | File-based secrets configured via MCG_MASTER_KEY_FILE or standard Docker secrets paths are resolved. | DbKeyHelperTests.cs:L45 | Backend xUnit |
SEC-KEYFILE-HIERARCHY-PRECEDENCE | Positive | SEC | Explicit environment variables take precedence over file secrets and keyfiles. | DbKeyHelperTests.cs:L101 | Backend xUnit |
SEC-KEYFILE-RELOAD | Positive | SEC | Existing .master.key file is loaded across gateway restarts without key mutation. | DbKeyHelperTests.cs:L83 | Backend xUnit |
SEC-KEYSOURCE-DETECTION | Positive | SEC | Correctly identifies KeySource origin for environment, file, and auto-generated keys. | DbKeyHelperTests.cs:L144 | Backend xUnit |
SEC-KEYSOURCE-SETCACHEDKEY | Positive | SEC | SetCachedKey sets in-memory encryption key and updates ActiveKeySource. | DbKeyHelperTests.cs:L314 | Backend xUnit |
SEC-LOG-PROVIDER-PRESERVE-PLAIN | Positive | SEC | SanitizingLoggerProvider preserves non-sensitive log statements intact. | SanitizingLoggerProviderTests.cs:L43 | Backend xUnit |
SEC-LOG-PROVIDER-REDACT-EXCEPTIONS | Positive | SEC | SanitizingLoggerProvider sanitizes exception messages and stack traces to prevent credential leaks in error logs. | SanitizingLoggerProviderTests.cs:L76 | Backend xUnit |
SEC-LOG-PROVIDER-REDACT-SECRETS | Positive | SEC | SanitizingLoggerProvider automatically redacts Bearer tokens, API keys, and credentials in log message strings. | SanitizingLoggerProviderTests.cs:L8 | Backend xUnit |
SEC-MASTERKEY-ATOMIC-REENCRYPTION | Positive | SEC | Atomically re-encrypts database credentials when setting a custom master key. | MasterKeyReEncryptionTests.cs:L142 | Backend xUnit |
SEC-MASTERKEY-CONFIGURED-STATUS-BADGE | Positive | SEC | Displays configured badge and rotate button when custom master key is configured. | GeneralTab.test.tsx:L192 | Frontend Vitest |
SEC-MASTERKEY-CUSTOM-MODAL-REENCRYPTION | Positive | SEC | Validates master key inputs (length, match) and triggers atomic re-encryption. | MasterKeyModal.test.tsx:L6 | Frontend Vitest |
SEC-MASTERKEY-EXTERNAL-LOCKED-BADGE | Positive | SEC | Displays locked badge when master key is externally managed via Vault or Environment. | GeneralTab.test.tsx:L149 | Frontend Vitest |
SEC-MASTERKEY-UI-STATUS-BANNER | Positive | SEC | Displays warning banner when keySource is AutoGenerated and opens custom master key modal. | GeneralTab.test.tsx:L115 | Frontend Vitest |
SEC-PII-BASIC-COOKIE-QUERY-USERINFO | Positive | SEC | PiiSanitizer redacts Basic auth credentials, session cookies, query access tokens, and URL userinfo credentials. | PiiSanitizerTests.cs:L53 | Backend xUnit |
SEC-PII-BEARER-TOKEN | Positive | SEC | PiiSanitizer redacts Bearer authentication tokens from payload strings. | PiiSanitizerTests.cs:L5 | Backend xUnit |
SEC-PII-CONNECTION-STRING-PASSWORD | Positive | SEC | PiiSanitizer redacts database connection string passwords. | PiiSanitizerTests.cs:L29 | Backend xUnit |
SEC-PII-JSON-APIKEY-PASSWORD | Positive | SEC | PiiSanitizer redacts apiKey, password, and secret properties in JSON payloads. | PiiSanitizerTests.cs:L16 | Backend xUnit |
SEC-PII-LOGBUFFER-IN-MEMORY | Positive | SEC | LogBuffer sanitizes PII and credentials prior to buffering in memory. | PiiSanitizerTests.cs:L40 | Backend xUnit |
SEC-PROVIDER-GUARD-CORRUPT-ENCRYPTED-FIELD | Guardrail | SEC | Router must not overwrite corrupt encrypted database fields if an update occurs without user reset. | ProviderSettingsEncryptionTests.cs:L388 | Backend xUnit |
SEC-PROVIDER-MASK-SECRETS-GET | Positive | SEC | ProvidersController GET endpoints mask sensitive tokens and passwords as asterisks. | ProviderSettingsEncryptionTests.cs:L130 | Backend xUnit |
SEC-PROVIDER-REDACT-AUDIT-PAYLOADS | Positive | SEC | ProvidersController redacts sensitive secrets in administrative audit logs. | ProviderSettingsEncryptionTests.cs:L185 | Backend xUnit |
SEC-SESSIONID-OPAQUE-NOT-BEARER | Positive | SEC | Mcp-Session-Id header generates opaque UUIDs without leaking bearer tokens. | McpIntegrationTests.cs:L1119 | Backend xUnit |
SEC-VAULT-BOOTSTRAPPING | Positive | SEC | Bootstraps master encryption key directly from HashiCorp Vault when VAULT_ADDR is configured. | DbKeyHelperTests.cs:L191 | Backend xUnit |
SEC-VAULT-CUSTOM-MOUNT-PATH | Positive | SEC | SseTransport resolves dynamic secrets from Vault using custom mounts, paths, and secret fields. | TransportsAuthShapeTests.cs:L134 | Backend xUnit |
SEC-VAULT-CUSTOM-PATH | Positive | SEC | Bootstraps master key from Vault using custom mount path and secret key name. | DbKeyHelperTests.cs:L236 | Backend xUnit |
UI-105 | Positive | SEC | renders system logs and handles level filter | LogsTerminalCard.test.tsx:L1 | Frontend Vitest |
TRANS-01 | Positive | TRANS | HttpTransport formats X-API-Key header when downstream server AuthShape is 'x-api-key'. | EnterpriseAuthAndVaultScenarioTests.cs:L258 | Backend xUnit |
TRANS-02 | Positive | TRANS | Register STDIO server with Env provider, verify connection card, and execute tool via Test Bench. | full-ui-flow-stdio-env.spec.ts:L13 | Playwright E2E |
TRANS-03 | Positive | TRANS | HttpTransport SendNotificationAsync gracefully handles 404 and 405 without throwing exceptions | TransportResilienceTests.cs:L160 | Backend xUnit |
TRANS-04 | Positive | TRANS | HTTP stateless transport correctly accumulates multi-line SSE streams and skips intermediate notification events | HttpTransportTests.cs:L72 | Backend xUnit |
TRANS-05 | Positive | TRANS | HTTP stateless transport reads entire multi-line and formatted JSON response bodies without premature truncation | HttpTransportTests.cs:L109 | Backend xUnit |
TRANS-06 | Positive | TRANS | HTTP stateless transport joins multi-line SSE data fields into complete JSON payloads | HttpTransportTests.cs:L146 | Backend xUnit |
TRANS-AUTH-SHAPES-CUSTOM-HEADER | Positive | TRANS | SseTransport applies custom header names for proprietary target backend authentication. | TransportsAuthShapeTests.cs:L45 | Backend xUnit |
TRANS-AUTH-SHAPES-HEADERS-JSON | Positive | TRANS | SseTransport parses and applies extra request headers from HeadersJson configuration. | TransportsAuthShapeTests.cs:L112 | Backend xUnit |
TRANS-AUTH-SHAPES-QUERY-PARAM | Positive | TRANS | SseTransport appends authentication tokens as URL query parameters when query auth shape is configured. | TransportsAuthShapeTests.cs:L67 | Backend xUnit |
TRANS-AUTH-SHAPES-STANDARD-HEADERS | Positive | TRANS | SseTransport formats standard authorization shapes (bearer, basic, raw, x-api-key) into HTTP headers. | TransportsAuthShapeTests.cs:L17 | Backend xUnit |
TRANS-BACKEND-MULTIPLEX-CONCURRENT-RPC | Positive | TRANS | BackendConnection multiplexes 100+ concurrent asynchronous polymorphic RPC requests without deadlocking. | ChallengerTests.cs:L512 | Backend xUnit |
TRANS-DISCONNECT-PENDING-CLEANUP | Positive | TRANS | Cleans up and cancels pending requests upon backend transport disconnect. | ConcurrentResponseIsolationTests.cs:L277 | Backend xUnit |
TRANS-EXPLICIT-NULL-ID-ISOLATION | Positive | TRANS | Handles JSON-RPC requests with explicit null IDs and multiplexes upstream calls correctly. | ConcurrentResponseIsolationTests.cs:L346 | Backend xUnit |
TRANS-HIGH-CONCURRENCY-ISOLATION | Positive | TRANS | Maintains strict response isolation under high concurrency with 100+ callers reusing identical RPC IDs. | ConcurrentResponseIsolationTests.cs:L111 | Backend xUnit |
TRANS-HTTP-AUTH-CUSTOM-HEADER | Positive | TRANS | HttpTransport formats custom header authentication for target servers. | TransportsAuthShapeTests.cs:L90 | Backend xUnit |
TRANS-HTTP-DISPOSED-GUARD | Guardrail | TRANS | HttpTransport SendRequestAsync returns -32001 Not Connected when transport has been disposed. | TransportResilienceTests.cs:L59 | Backend xUnit |
TRANS-HTTP-RESOLVE-STATIC-APIKEY | Positive | TRANS | HTTP stateless transport resolves static API keys when secret provider is None | HttpTransportTests.cs:L11 | Backend xUnit |
TRANS-ISOLATION-SAME-ID-REVERSED-ORDER | Positive | TRANS | Multiplexes concurrent client calls sharing identical JSON-RPC IDs and routes reversed responses correctly. | ConcurrentResponseIsolationTests.cs:L12 | Backend xUnit |
TRANS-MIXED-ID-TYPES-ISOLATION | Positive | TRANS | Handles mixed numeric, string, and null JSON-RPC IDs concurrently across backend transports. | ConcurrentResponseIsolationTests.cs:L614 | Backend xUnit |
TRANS-NOTIFICATION-NO-RESPONSE-LISTENER | Positive | TRANS | Handles JSON-RPC notifications without registering pending response listeners. | ConcurrentResponseIsolationTests.cs:L419 | Backend xUnit |
TRANS-SSE-CALLMETHOD-DISCONNECT-GUARD | Guardrail | TRANS | SseTransport CallMethodAsync returns -32001 Not Connected when backend is disconnected. | TransportResilienceTests.cs:L12 | Backend xUnit |
TRANS-SSE-LOG-ENDPOINT-WAIT-EXCEPTION | Positive | TRANS | SSE transport logs exceptions gracefully when waiting for endpoint URL without throwing unhandled exceptions. | SseTransportTests.cs:L76 | Backend xUnit |
TRANS-SSE-NOTIF-FORWARD-FIELDS-INTACT | Positive | TRANS | SSE backend notifications are forwarded to client sessions with all payload fields intact. | ChallengerTests.cs:L437 | Backend xUnit |
TRANS-SSE-RESOLVE-STATIC-APIKEY | Positive | TRANS | SSE transport resolves static plaintext API keys when provider is None | SseTransportTests.cs:L13 | Backend xUnit |
TRANS-SSE-SENDREQUEST-DISCONNECT-GUARD | Guardrail | TRANS | SseTransport SendRequestAsync returns -32001 Not Connected when backend is disconnected. | TransportResilienceTests.cs:L36 | Backend xUnit |
TRANS-SSE-STREAM-LIFECYCLE | Positive | TRANS | SSE transport correctly resolves relative endpoint URLs and ignores keep-alive SSE comments. | SseTransportTests.cs:L100 | Backend xUnit |
TRANS-STATELESS-CANCELLATION-ISOLATION | Positive | TRANS | Isolates cancellation tokens between concurrent stateless client requests. | ConcurrentResponseIsolationTests.cs:L482 | Backend xUnit |
TRANS-STDIO-DISPOSED-GUARD | Guardrail | TRANS | StdioTransport SendRequestAsync returns -32001 Process Not Running when transport has been disposed. | TransportResilienceTests.cs:L101 | Backend xUnit |
TRANS-STDIO-DRAIN-BUFFER-EOF | Positive | TRANS | STDIO transport drains buffered stdout/stderr streams to EOF when process exits rapidly | StdioTransportTests.cs:L472 | Backend xUnit |
TRANS-STDIO-SPAWN-TOOL-CALL | Positive | TRANS | STDIO transport spawns subprocess, handles JSON-RPC initialization and executes tool calls | StdioTransportTests.cs:L49 | Backend xUnit |
TRANS-STDIO-STREAM-STDERR-LOGS | Positive | TRANS | STDIO transport streams subprocess stderr asynchronously to structured router diagnostic logs | StdioTransportTests.cs:L170 | Backend xUnit |
TRANS-STDIO-TERMINATE-CLEANLY | Positive | TRANS | STDIO transport terminates subprocess tree cleanly upon disposal or cancellation | StdioTransportTests.cs:L242 | Backend xUnit |
TRANS-STDIO-TOKENIZE-PRESERVE-QUOTES | Positive | TRANS | STDIO command-line tokenizer preserves quoted arguments and space escaping | StdioTransportTests.cs:L327 | Backend xUnit |
TRANS-TARGETED-CANCELLATION-ISOLATION | Positive | TRANS | Targeted cancellation does not cancel concurrent client sessions reusing identical RPC IDs. | ConcurrentResponseIsolationTests.cs:L532 | Backend xUnit |
TRANS-TIMEOUT-PENDING-CLEANUP | Positive | TRANS | SendRequestAsync times out cleanly and removes pending completion handlers without leaking memory. | ChallengerTests.cs:L294 | Backend xUnit |
TRANS-VALIDATION-HTTP-ALLOWED-IPS | Positive | TRANS | ServerValidationHelper accepts valid HTTP/HTTPS endpoints allowed by IP security rules. | ServerEndpointsValidationTests.cs:L38 | Backend xUnit |
UI-01 | Positive | UI | opens confirmation modal and resolves true when confirmed | useConfirmStore.test.ts:L31 | Frontend Vitest |
UI-02 | Positive | UI | Inspect modal displays spinner loading state while querying server capabilities | ServerInspectModal.test.tsx:L61 | Frontend Vitest |
UI-03 | Positive | UI | Grouped server view renders category sections and supports collapsible groups | DashboardView.test.tsx:L63 | Frontend Vitest |
UI-04 | Positive | UI | Tool selector filters available tools by selected backend server | ToolTesterCard.test.tsx:L77 | Frontend Vitest |
UI-05 | Positive | UI | Router allows customized branding parameters (DashboardTitle, DashboardIcon) to be saved and retrieved via the API. | PipelineIntegrationTests.cs:L254 | Backend xUnit |
UI-06 | Positive | UI | Router supports uploading and retrieving custom branding logo images via dedicated endpoints. | PipelineIntegrationTests.cs:L448 | Backend xUnit |
UI-07 | Positive | UI | Audits desktop viewport layout for zero horizontal overflow and high UX score. | layout-inspector.spec.ts:L255 | Playwright E2E |
UI-102 | Positive | UI | Dashboard renders stats card, connected server list, and setup instructions | DashboardView.test.tsx:L1 | Frontend Vitest |
UI-103 | Positive | UI | Interactive tool tester renders server and tool selection dropdowns | ToolTesterCard.test.tsx:L1 | Frontend Vitest |
UI-108 | Positive | UI | renders nothing when isMappingModalOpen is false | MappingModal.test.tsx:L1 | Frontend Vitest |
UI-109 | Positive | UI | Renders ClientSetupGuide below the user credentials card. | MyMcpServers.test.tsx:L104 | Frontend Vitest |
UI-110 | Positive | UI | renders title, MCG badge, subtitle, and version badge | Header.test.tsx:L1 | Frontend Vitest |
UI-111 | Positive | UI | renders GeneralTab and triggers save | SettingsTabs.test.tsx:L1 | Frontend Vitest |
UI-113 | Positive | UI | renders tab navigation and switches active subviews | SettingsView.test.tsx:L1 | Frontend Vitest |
UI-115 | Positive | UI | renders test bench cards and switches tabs | TestBenchView.test.tsx:L1 | Frontend Vitest |
UI-116 | Positive | UI | Modal remains hidden when isInspectOpen is false | ServerInspectModal.test.tsx:L1 | Frontend Vitest |
UI-117 | Positive | UI | returns null when isOpen is false | SharedComponents.test.tsx:L1 | Frontend Vitest |
UI-119 | Positive | UI | calls server endpoints correctly | typedApi.test.ts:L1 | Frontend Vitest |
UI-122 | Positive | UI | should navigate to Settings view and configure vector embedding options | settings.spec.ts:L1 | Playwright E2E |
UI-124 | Positive | UI | Renders main dashboard navigation tabs and layout headers | dashboard.spec.ts:L1 | Playwright E2E |
UI-126 | Positive | UI | should open Server Inspect Modal and inspect capabilities tabs deterministically | server-inspector.spec.ts:L1 | Playwright E2E |
UI-128 | Positive | UI | should navigate to Test Bench view, render tester cards, and test semantic search | testbench.spec.ts:L1 | Playwright E2E |
UI-130 | Positive | UI | Renders Connect Account button for OAuth-enabled servers directing to authorization URL. | MyMcpServers.test.tsx:L121 | Frontend Vitest |
UI-131 | Positive | UI | Renders Connected (OAuth) badge and supports account disconnection. | MyMcpServers.test.tsx:L157 | Frontend Vitest |
UI-132 | Positive | UI | groups slash-namespaced tools into distinct backend servers without grouping under custom | TestBenchView.test.tsx:L198 | Frontend Vitest |
UI-133 | Positive | UI | verifies deterministic data-testid attributes and interactive flow across test bench tabs | TestBenchView.test.tsx:L473 | Frontend Vitest |
UI-134 | Positive | UI | verifies server modal exposes deterministic data-testid attributes | ServerModal.test.tsx:L225 | Frontend Vitest |
UI-135 | Positive | UI | toggles 3LO OAuth fields and submits with complete OAuth configuration | ServerModal.test.tsx:L249 | Frontend Vitest |
UI-136 | Guardrail | UI | Disables backdrop click dismissal on the key rotation modal to protect plaintext credentials. | AppKeyRotateModal.test.tsx:L67 | Frontend Vitest |
UI-137 | Positive | UI | Renders Last Used column and triggers Rotate Secret action for registered clients. | RegisteredClientsCard.test.tsx:L158 | Frontend Vitest |
UI-30 | Positive | UI | Renders client registration form with inputs for name, client type, redirect URIs, grant types, scopes, and expiration. | ClientModal.test.tsx:L27 | Frontend Vitest |
UI-31 | Guardrail | UI | Fetches registered OAuth clients and updates store state. | useClientStore.test.ts:L37 | Frontend Vitest |
UI-32 | Positive | UI | Registers OAuth client with extended metadata (redirect URIs, grant types, client type, expiration) and captures one-time credentials. | useClientStore.test.ts:L76 | Frontend Vitest |
UI-CONFIRM-MODAL | Guardrail | UI | Centralized promise-based confirmation store resolves true on confirmation and false on cancellation. | useConfirmStore.test.ts:L4 | Frontend Vitest |
UI-TOAST-TRANSITION | Guardrail | UI | Displays error toast notification when saving invalid JSON credentials for user-provided server. | MyMcpServers.test.tsx:L25 | Frontend Vitest |