Skip to content

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 ​

CategoryDomainTotal RequirementsPositive FeaturesGuardrails / Fail-ClosedVerification Proofs
APIAPI2202 proofs
AUTHAuthentication, RBAC & Identity100964233 proofs
CORECORE87114 proofs
DBMulti-Database Persistence & Migrations2322135 proofs
DOCDOC4404 proofs
GUARDUniversal Safety & Fail-Closed Guardrails66363138 proofs
MCPModel Context Protocol Engine & Tool Routing1171107251 proofs
SECSecrets Providers & Encryption65569138 proofs
TRANSTransports (SSE, HTTP, STDIO, Proxy)3632442 proofs
UIDashboard, Test Bench & Settings UI35314184 proofs

2. Functional Requirements ("What the Application DOES") ​

[API-GET-SERVERS-FLEET-REPOSITORY] Retrieves configured MCP server fleet from the database repository. ​

[API-SERVER-CRUD-LIFECYCLE] Supports full CRUD lifecycle (create, read, update, delete) for downstream MCP server definitions. ​

[AUTH-001] Verify DatabaseUserSecretStore encrypts and decrypts secret correctly. ​

[AUTH-002] Verify UserCredentialsController returns configured server IDs. ​

[AUTH-02] AppKey scopes restrict access precisely across all MCP capabilities and backend targets ​

[AUTH-03] Auth middleware allows bypass routes and extracts SSO headers in a case-insensitive manner. ​

[AUTH-04] ActiveDirectoryIdentityProvider extracts Windows caller SIDs and security groups via IWindowsIdentityAccessor and augments with LDAP ​

[AUTH-05] McpServer supports AllowPassThroughAuth flag ​

[AUTH-06] Transports use passThroughToken when AllowPassThroughAuth is true ​

[AUTH-101] HTTP transport injects X-Forwarded-User header based on connected user identity. ​

[AUTH-110] CreateAppKey allows creating unlimited AppKeys when UserMaxKeys is set to 0. ​

[AUTH-118] AppKey table contains LastUsedAt column and repository updates and queries it accurately. ​

[AUTH-119] OAuthClients table contains LastUsedAt column and repository updates and queries it accurately. ​

[AUTH-120] ActivityTracker throttles database updates to at most once per 60 seconds per key. ​

[AUTH-121] ActivityTracker throttles OAuth client updates to at most once per 60 seconds per client. ​

[AUTH-122] RotateAppKey issues new plaintext key, updates database, resets LastUsedAt, and audits action. ​

[AUTH-130] Renders In-House IdP / External JWT Bearer card, toggles enable, fills authority, and saves configuration. ​

[AUTH-131] RFC 9728 Protected Resource Metadata endpoint exposes discovery document with canonical resource URI, authorization servers, scopes, and documentation. ​

[AUTH-132] Unauthenticated client requests to /sse endpoint return 401 Unauthorized with RFC 9728 WWW-Authenticate header containing realm and resource_metadata. ​

[AUTH-133] Verify initiating OAuth 3LO egress flow generates secure state and authorization redirect URL. ​

[AUTH-134] Verify OAuth egress callback exchanges authorization code and stores credentials in user secret store. ​

[AUTH-135] Verify upstream dispatch automatically refreshes expired OAuth egress token and updates user secret store. ​

[AUTH-136] Verify disconnect endpoint deletes stored user OAuth credentials. ​

[AUTH-137] Verify GetOAuthServers returns servers with correct isConnected status. ​

[AUTH-14] Tool execution catches 401 Unauthorized from downstream target servers and returns interactive auth remediation. ​

[AUTH-15] OpenIddict initializes ephemeral development signing certificates in Development environment. ​

[AUTH-35] Single-user homelab startup initializes SQLite, auto-generates Admin and Client AppKeys without PFX certificate requirements ​

[AUTH-36] Pre-configured MCG_CLIENT_APP_KEYS seeds functional individualized client keys with custom scopes ​

[AUTH-37] AppKeys with server and category scopes enforce precise tool execution boundaries ​

[AUTH-38] LAN CIDR network configuration allows standalone web dashboard access from local subnet ​

[AUTH-39] Zero-config startup defaults enterprise auth providers and secret providers to disabled ​

[AUTH-ADMIN-FULL-ACCESS] Administrator identities bypass granular capability policies and have full access to all MCP methods. ​

[AUTH-ADMIN-POLICY-ALLOW-GROUPNAME] AdminPolicy allows principal with configured Admin Group Name (e.g., full_admin) ​

[AUTH-ADMIN-POLICY-ALLOW-GROUPS-ARRAY] AdminPolicy allows principal with configured Admin Groups array ​

[AUTH-ADMIN-POLICY-ALLOW-SID] AdminPolicy allows principal with configured Admin SID ​

[AUTH-ADMIN-VALIDATE-GROUPNAME] SecurityValidationHelper authorizes principals via Admin Group Name ​

[AUTH-ADMIN-VALIDATE-GROUPS-ARRAY] SecurityValidationHelper authorizes principals via custom configured Admin:Groups array ​

[AUTH-ADMIN-VALIDATE-MAPPED-GROUPS] SecurityValidationHelper authorizes principals via mappedGroups database resolution ​

[AUTH-ADMIN-VALIDATE-SID] SecurityValidationHelper authorizes principals via Admin Group SID ​

[AUTH-APPKEY-ADMIN-FUTURE-CATEGORY] Admin callers can create forward-looking AppKeys for unconfigured categories ​

[AUTH-APPKEY-ADMIN-QUOTA] Administrator can create, update, and delete custom user quota overrides. ​

[AUTH-APPKEY-ADMIN-SCOPE-ALLOW] AppKeys with admin scope grant Administrator role and pass AdminPolicy. ​

[AUTH-APPKEY-ITEMS-SCOPE-ALLOW] SecurityValidationHelper recognizes admin scopes in HttpContext.Items. ​

[AUTH-APPKEY-KEYTYPE-PERSISTENCE-FILTER] IAppKeyRepository persists KeyType and filters keys by personal vs system ​

[AUTH-APPKEY-WILDCARD-SCOPE-ALLOW] AppKeys with wildcard scope '*' grant Administrator role and pass AdminPolicy. ​

[AUTH-COMPACT-APPKEY-TAXONOMY] Generates compact ~32-character Base62 AppKeys with semantic prefixes. ​

[AUTH-CUSTOM-ADMIN-KEY-SEEDING] Seeds custom MCG_ADMIN_AUTH_KEY when provided in configuration. ​

[AUTH-MOCK-SIMULATE-UNAUTHORIZED] MockDownstreamMcpServer simulates 401 Unauthorized status code for authentication testing. ​

[AUTH-OIDC-PRESERVE-GROUP-NAMES] OidcIdentityProvider preserves group names without synthesizing Windows SIDs ​

[AUTH-PERM-GET-MAPPINGS] PermissionsController returns group mappings list with 200 OK. ​

[AUTH-PERM-POLICY-LIST] PermissionsController returns access policies list with 200 OK. ​

[AUTH-PERM-POLICY-REMOVE] PermissionsController removes access policies. ​

[AUTH-PERSONAL-APPKEY-LIST] Non-admin users can view their personal App Keys ​

[AUTH-PERSONAL-APPKEY-QUOTA-OVERRIDE] Custom user quotas override default limit ​

[AUTH-PIPELINE-ADMIN-DASHBOARD] Dashboard management API suite executes for authorized administrators. ​

[AUTH-PIPELINE-GET-CLIENTS] GET /api/clients returns active client sessions with 200 OK. ​

[AUTH-PIPELINE-GET-POLICIES] GET /api/permissions/policies returns access policies with 200 OK. ​

[AUTH-PIPELINE-PERM-CRUD] Permissions policy and group mapping CRUD endpoints manage RBAC rules. ​

[AUTH-PREFIX-EXTRACTION] ExtractKeyPrefix parses semantic prefixes, Base62 selectors, and legacy tokens accurately. ​

[AUTH-QUERY-TOKEN-EXTRACTION] Query string token middleware extracts access_token or token query parameter to Authorization header. ​

[AUTH-RBAC-GROUP-ALLOW] RBAC grants access when user claims match the required policy security group. ​

[AUTH-RBAC-PROMPT-FILTER] prompts/list filters exposed prompts according to caller permissions. ​

[AUTH-RBAC-RESOURCE-FILTER] resources/list filters exposed resources according to caller permissions. ​

[AUTH-RBAC-TEMPLATE-FILTER] resources/templates/list filters exposed resource templates according to caller permissions. ​

[AUTH-RBAC-TOOL-FILTER] tools/list filters exposed backend tools according to caller permissions. ​

[AUTH-RBAC-TOOLS-FILTER] tools/list filters exposed backend tools according to caller role and RBAC policy permissions. ​

[AUTH-SERVER-LEVEL-POLICY] Server-level access policies authorize all child tools, prompts, and resources under that server. ​

[AUTH-SSE-PER-MESSAGE-IDENTITY] SSE streams re-validate caller identity and permissions per message payload. ​

[AUTH-STANDALONE-ADMINPOLICY-LOOPBACK-ALLOW] AdminPolicy succeeds in standalone mode for unauthenticated loopback requests. ​

[AUTH-STANDALONE-CUSTOM-CIDR-ALLOW] Standalone mode grants admin access to client IPs matching Admin:StandaloneAllowedNetworks CIDR ranges. ​

[AUTH-STANDALONE-LOOPBACK-ALLOW] Standalone mode without external IDP grants admin access to loopback IP addresses. ​

[AUTH-STORE-MAPPING-FETCH] fetches group mappings and updates store ​

[AUTH-STORE-MAPPING-MODAL-TOGGLE] handles mapping modal open and close ​

[AUTH-STORE-MAPPING-SAVE] saves a group mapping and closes mapping modal ​

[AUTH-STORE-POLICY-CREATE] creates/saves a policy (ALLOW rule) and closes modal ​

[AUTH-STORE-POLICY-FETCH] fetches access policies and updates store ​

[AUTH-STORE-POLICY-INIT] initializes with empty policies and mappings ​

[AUTH-STORE-POLICY-MODAL-TOGGLE] handles policy modal open and close ​

[AUTH-SYSTEM-APPKEY-SEPARATION] System keys are distinct and require admin permissions ​

[UI-100] initializes with empty providers ​

[UI-101] should initialize with default values ​

[UI-114] renders nothing when isPolicyModalOpen is false ​

[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):

[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):

[UI-125] Admin role renders full administrative dashboard and server management controls ​

  • Category: AUTH (Authentication, RBAC & Identity)
  • Type: Positive Feature Capability
  • Verification Proofs (1):

[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):

[UI-129] should create client application and generate AppKey with scope constraints ​

[UI-AUTH-TAB-AD-TOGGLE] Renders Active Directory disabled initially, toggles on and exposes fields. ​

[UI-AUTH-TAB-LDAP-TEST] Fills LDAP parameters and executes test connection. ​

[UI-POLICY-MODAL-CANCEL-DISMISS] closes modal on cancel click ​

[UI-POLICY-MODAL-CREATE-DEFAULTS] renders create policy form with default inputs ​

[UI-POLICY-MODAL-EDIT-PREFILL] renders edit policy form pre-filled with policy data ​

[UI-USER-STORE-ERROR-FALLBACK] handles error response gracefully and sets unauthenticated user state ​

[UI-USER-STORE-HEALTH-VERSION] successfully updates version and service from /health endpoint ​

[UI-USER-STORE-LOAD-PROFILE] successfully loads user profile from /api/me ​

[UI-USER-STORE-NETWORK-FAILURE] handles network failure gracefully ​

[UI-USER-STORE-ROLE-EXTRACTION] correctly handles non-admin user role extraction ​

[UI-USER-STORE-VERSION-FALLBACK] keeps existing fallback version on error ​

[CORE-101] Auto-added requirement tracking ​

[CORE-GATEWAY-METADATA-BUILD-INIT-REQUEST] BuildInitializeRequest formats standard JSON-RPC 2.0 initialize request with dynamic protocol version. ​

[CORE-GATEWAY-METADATA-CONSTANTS] Metadata constants and assembly version return consistent non-empty identifiers. ​

[CORE-GATEWAY-METADATA-EXTRACTION-JSONELEMENT] ExtractRequestedProtocolVersion parses protocolVersion from JsonElement params object. ​

[CORE-GATEWAY-METADATA-EXTRACTION-STRING] ExtractRequestedProtocolVersion parses protocolVersion from initialize request payload or isolated params. ​

[CORE-GATEWAY-METADATA-SUPPORTED-VERSIONS] IsSupportedProtocolVersion validates supported protocol versions case-insensitively with whitespace trimming. ​

[CORE-GATEWAY-METADATA-VERSION-NEGOTIATION] NegotiateProtocolVersion canonicalizes casing for known protocol versions. ​

[DB-02] MSSQL stored procedure scripts declare all required procedures and parameter contracts correctly ​

[DB-07] SQLite upgrade migration automatically provisions OAuthClients table on legacy database ​

[DB-FACTORY-MSSQL-CONFIGURED] DbConnectionFactory initializes MS SQL Server database connection using Microsoft.Data.SqlClient. ​

[DB-FACTORY-MYSQL-CONFIGURED] DbConnectionFactory initializes MySQL database connection using MySqlConnector. ​

[DB-FACTORY-SQLITE-DEFAULT] DbConnectionFactory initializes SQLite database connection with SQLCipher encryption. ​

[DB-INITIALIZER-CRUD-CONTRACT] DatabaseInitializer baseline schema supports CRUD operations across core domain tables. ​

[DB-INITIALIZER-ENSURE-ALIAS] EnsureAliasColumn safely adds Alias column if missing and is idempotent. ​

[DB-INITIALIZER-IDEMPOTENCY] DatabaseInitializer is idempotent and succeeds without error when executed multiple times. ​

[DB-INITIALIZER-SCHEMA-BASELINE] DatabaseInitializer creates all 12 canonical tables on a fresh SQLite database. ​

[DB-MAPPING-SAVE-SQLITE] PermissionsController persists group mappings to SQLite database. ​

[DB-POLICY-SAVE-MYSQL] PermissionsController persists access policy to MySQL database repository. ​

[DB-POLICY-SAVE-SQLITE] PermissionsController persists access policy to SQLite database repository. ​

[DB-PROVIDER-INSTANTIATION-DIALECTS] DbConnectionFactory instantiates valid IDbConnection instances across sqlite, mysql, and mssql dialects. ​

[DB-QUOTA-REPO-DELETE] IUserQuotaRepository DeleteUserQuotaAsync removes user quota record ​

[DB-QUOTA-REPO-DI-REGISTRATION] IUserQuotaRepository is registered in dependency injection and resolvable ​

[DB-QUOTA-REPO-GET-ALL] IUserQuotaRepository GetAllUserQuotasAsync retrieves all quotas ordered by username ​

[DB-QUOTA-REPO-SET-GET] IUserQuotaRepository persists user quota overrides and retrieves them correctly ​

[DB-QUOTA-REPO-UPDATE-CONFLICT] IUserQuotaRepository SetUserQuotaAsync updates existing quota on conflict ​

[DB-SEEDER-INIT-SETTINGS-PROVIDERS] DatabaseSeederService initializes default router settings, provider configs, and schema. ​

[DB-SEEDER-ROUTER-DEFAULT-DATA] DatabaseSeeder initializes default router tables, settings, and seed servers. ​

[DB-SQLITE-LEGACY-UPGRADE-MIGRATION] SQLite auto-migration seamlessly upgrades legacy schema, encrypts plaintext secrets, and preserves data ​

[DB-TYPEHANDLER-JSON-LIST-SERIALIZATION] JsonListTypeHandler serializes and deserializes string collections to JSON text across database providers. ​

[DOC-SETUP-SKILL-FRONTMATTER] mcg-setup skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 characters ​

[DOC-SETUP-SKILL-MIRROR] The mcg-setup skill and templates are mirrored 1:1 in .agents/skills/mcg-setup/ ​

[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 ​

[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 ​

[GUARD-DISPOSED-01] Stateless HTTP POST lifecycle: HTTP response completes, HttpContext is marked disposed, background backend initialization completes successfully without ObjectDisposedException. ​

[GUARD-LDAP-FILTER-ESCAPE] EscapeLdapFilter sanitizes and escapes special LDAP filter characters to prevent LDAP injection. ​

[GUARD-SECURITY-IDENTIFIER-VALIDATION] SecurityValidationHelper validates tool and prompt names against namespaced server identifiers. ​

[API-PIPELINE-GET-HEALTH] GET /health returns gateway health status with 200 OK. ​

[API-PIPELINE-GET-SERVERS] GET /api/servers returns backend servers list with 200 OK. ​

[API-PIPELINE-GET-STATS] GET /api/stats returns server statistics with 200 OK. ​

[API-PIPELINE-GET-VERSION] GET /api/version returns version information with 200 OK. ​

[API-PIPELINE-POST-MESSAGE-PROTOCOL] Full end-to-end JSON-RPC session message suite executes over HTTP POST. ​

[API-PIPELINE-POST-SSE-PROTOCOL] Full end-to-end JSON-RPC protocol suite executes across SSE pipeline. ​

[API-PIPELINE-SERVER-CRUD] Backend server CRUD pipeline endpoints persist and manage downstream servers. ​

[HEALTH-PROBE-ALL-ENABLED-FLEET] BackendHealthCheckService probes all enabled backend servers in the fleet. ​

[HEALTH-PROBE-CUSTOM-SERVER-CONNECTED] BackendHealthCheckService marks registered custom servers as Connected. ​

[HEALTH-PROBE-DISABLED-SERVER] BackendHealthCheckService marks disabled servers as Disabled. ​

[HEALTH-PROBE-HTTP-CONNECTED-200] BackendHealthCheckService marks server as Connected when downstream HTTP/SSE endpoint returns 200 OK. ​

[HEALTH-PROBE-HTTP-FAILED-EXCEPTION] BackendHealthCheckService marks server as Failed when downstream HTTP connection fails. ​

[HEALTH-PROBE-STDIO-VALID-CONNECTED] BackendHealthCheckService sets valid STDIO servers to Connected without making network HTTP probes. ​

[MCP-01] initializes with default state ​

[MCP-02] All MCP protocol capabilities enforce caller role authorizations consistently ​

[MCP-05] ResourceRoutingManager returns all registered resources when search query is empty. ​

[MCP-06] prompts/list aggregates, namespaces, and routes prompts to target backends. ​

[MCP-08] completion/complete forwards prompt completions to backend when caller is authorized. ​

[MCP-10] DockerAutoDiscoveryService handles missing Docker socket gracefully without throwing unhandled exceptions. ​

[MCP-15] All JSON-RPC results return a resultType discriminator (complete or input_required) per MCP 2026-07-28 spec. ​

[MCP-21] Admin endpoint handles direct Streamable HTTP POST tools/list request returning JSON even with Accept text/event-stream header. ​

[MCP-23] AdminMcpServer HandleInitializeAsync includes subscriptions capability in capabilities object. ​

[MCP-24] McpSpecMiddleware extracts OpenTelemetry W3C traceparent, tracestate, and baggage from headers and _meta. ​

[MCP-25] ToolRoutingManager falls back to SessionManager global server tools cache during cold-start search_tools execution ​

[MCP-26] ToolRoutingManager dynamically registers prefix routes for tools with slash, colon, and double underscore delimiters ​

[MCP-27] McpServer supports Alias property ​

[MCP-30] IsUserAuthorizedAsync matches granular tool policies across /, :, and __ delimiters. ​

[MCP-33] OpenAiEmbeddingProvider generates embeddings via OpenAI and Ollama compatible endpoints. ​

[MCP-35] Test call and prompt endpoints resolve server and strip prefix across slash, dunder, and colon delimiters. ​

[MCP-36] PromptRoutingManager resolves prompt directly on cold-start without requiring prior prompts/list call. ​

[MCP-37] ResourceRoutingManager resolves mcp:// URIs directly on cold-start without prior resources/list. ​

[MCP-38] PromptRoutingManager supports slash, colon, and double-underscore delimiters for prompts/get. ​

[MCP-39] CapabilityEndpoints test bench APIs return 404 Not Found gracefully when target server is missing. ​

[MCP-ADMIN-ENDPOINT-CALL-TOOL] Admin endpoint /admin/message executes tools/call for manage_system diagnostics. ​

[MCP-ADMIN-ENDPOINT-HEAD-REQUEST] Admin endpoint /admin handles HEAD request returning text/event-stream headers. ​

[MCP-ADMIN-ENDPOINT-LIST-TOOLS] Admin endpoint /admin/message executes tools/list over active SSE session and returns 10 admin tools. ​

[MCP-ADMIN-ENDPOINT-ROUTER-ADMIN-TARGET] Target proxy endpoint /router-admin routes directly to the Admin MCP server. ​

[MCP-ADMIN-ENDPOINT-SSE-HANDSHAKE] Admin endpoint /admin/sse performs initialize handshake with 2026-07-28 protocol version. ​

[MCP-ADMIN-INITIALIZE-HANDSHAKE] AdminMcpServer initialize handles protocol negotiation for 2026-07-28 and 2024-11-05. ​

[MCP-ADMIN-PARITY-APPKEYS] manage_appkeys supports full parity for list, get_limits, create, and revoke actions. ​

[MCP-ADMIN-PARITY-CLIENTS] manage_clients supports full parity for register, list, and delete actions. ​

[MCP-ADMIN-PARITY-CUSTOM-FILES] manage_custom_files supports full parity for list, get, save, and delete prompt and resource files. ​

[MCP-ADMIN-PARITY-GROUP-MAPPINGS] manage_group_mappings supports full parity for list, save, and delete external-to-internal group mappings. ​

[MCP-ADMIN-PARITY-JSONRPC-DISPATCH] AdminMcpServer processes standard JSON-RPC 2.0 requests (tools/list, tools/call, ping). ​

[MCP-ADMIN-PARITY-POLICIES] manage_policies supports full parity for list, save, and delete access control policies. ​

[MCP-ADMIN-PARITY-PROVIDERS] manage_providers supports full parity for list, save_secret, test_vault, save_auth, and test_ldap actions. ​

[MCP-ADMIN-PARITY-SERVER-ALIAS] AdminMcpServer manage_servers supports server alias for add, update, and list actions with collision validation. ​

[MCP-ADMIN-PARITY-SERVERS] Validates that the manage_servers tool provides comprehensive administrative capabilities including listing, retrieving, creating, updating, toggling, deleting, and reconnecting servers. ​

[MCP-ADMIN-PARITY-SETTINGS] manage_settings supports full parity for get and update global router configurations. ​

[MCP-ADMIN-PARITY-SYSTEM] manage_system supports full parity for diagnostics, get_logs, clear_logs, and query_audit actions. ​

[MCP-ADMIN-PARITY-TEST-TOOL-CALL] test_tool_call executes test bench backend tool calls and formats responses. ​

[MCP-ADMIN-PARITY-TOOLS-COVERAGE] Ensures every UI management workflow is backed by a verified, equivalent action within the consolidated Admin MCP tools. ​

[MCP-ADMIN-RECONNECT-ALL-PROPAGATION] AdminMcpServer manage_servers reconnect_all triggers StartInitializationForBackend across active sessions. ​

[MCP-ADMIN-REQUEST-WITHOUT-ID-NOT-DROPPED] Admin endpoint executes requests without an ID and does not drop them as notifications. ​

[MCP-ADMIN-REVERSE-PROXY-X-FORWARDED-HOST] Admin SSE endpoint prioritizes X-Forwarded-Host header over Request.Host in endpoint URI advertising. ​

[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. ​

[MCP-ADMIN-SKILL-FRONTMATTER] mcg-admin skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 characters ​

[MCP-ADMIN-SKILL-MIRROR] mcg-admin skill files and templates are identically mirrored between skills/ and .agents/skills/ directories ​

[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 ​

[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 ​

[MCP-ADMIN-SSE-ZOD-COMPLIANT] Admin endpoint direct POST response does not serialize null error or _meta fields. ​

[MCP-ADMIN-TOOL-AUDIT-LOG] AdminMcpServer tool calls record audit log entries with caller and tool name. ​

[MCP-ADMIN-TOOL-MANAGE-APPKEYS] AdminMcpServer executes manage_appkeys create, list, limits, and revoke actions. ​

[MCP-ADMIN-TOOL-MANAGE-CLIENTS] AdminMcpServer executes manage_clients register, list, and delete actions. ​

[MCP-ADMIN-TOOL-MANAGE-CUSTOM-FILES] AdminMcpServer executes manage_custom_files save, get, list, and delete actions. ​

[MCP-ADMIN-TOOL-MANAGE-GROUP-MAPPINGS] AdminMcpServer executes manage_group_mappings save, list, and delete actions. ​

[MCP-ADMIN-TOOL-MANAGE-POLICIES] AdminMcpServer executes manage_policies save, list, and delete actions. ​

[MCP-ADMIN-TOOL-MANAGE-PROVIDERS] AdminMcpServer executes manage_providers list, save_secret, and save_auth actions. ​

[MCP-ADMIN-TOOL-MANAGE-SERVERS] AdminMcpServer executes manage_servers list, get, create, update, toggle, and delete actions. ​

[MCP-ADMIN-TOOL-MANAGE-SETTINGS] AdminMcpServer executes manage_settings get and update actions. ​

[MCP-ADMIN-TOOL-MANAGE-SYSTEM] AdminMcpServer executes manage_system diagnostics, get_logs, clear_logs, and query_audit actions. ​

[MCP-ADMIN-TOOLS-LIST-COUNT] AdminMcpServer tools/list returns all 10 consolidated tools with complete JSON schemas. ​

[MCP-ADMIN-ZOD-STRICT-RESPONSE] JsonRpcResponse serialization omits null result, error, and _meta fields completely to satisfy Zod strict validation. ​

[MCP-COLDSTART-01] Full cold-start cycle: SessionManager cache seeded -> search_tools -> execute_tool dispatches to downstream mock server and returns output. ​

[MCP-DOWNSTREAM-INIT-DIAGNOSTICS] Initializes downstream MCP backends with detailed diagnostic logging. ​

[MCP-ERROR-ACTIONABLE-SUGGESTION-CATEGORIES] ToolErrorFormatter categorizes error messages and produces domain-specific remediation guidance. ​

[MCP-ERROR-FORMAT-JSONRPC-REMEDIATION] ToolErrorFormatter attaches actionable suggestions and remediation resource URIs to JSON-RPC error payloads. ​

[MCP-ERROR-FORMAT-UNHANDLED-EXCEPTION] ToolErrorFormatter converts unhandled exceptions to standardized JSON-RPC error format with suggestions. ​

[MCP-EXEC-TOOL-ENFORCE-AUTH-POLICIES] Meta-mode execute_tool strictly enforces target tool authorization policies ​

[MCP-EXEC-TOOL-ENFORCE-CATEGORY-SCOPES] Router meta-mode execute_tool validates and enforces category scopes on target tool calls ​

[MCP-FILES-DIR-HELPER-INIT] CustomFilesDirectoryHelper initializes and creates required directories on startup. ​

[MCP-JSON-REWRITE-ADVERSARIAL-EDGE-CASES] JsonNode request rewrite handles adversarial mixed arrays, block comments, and malformed JSON. ​

[MCP-JSON-REWRITE-BATCH-COMMENTS-COMMAS] RewriteRequestJson accurately parses JSON batches, comments, and trailing commas using System.Text.Json JsonNode. ​

[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. ​

[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):

[MCP-JSONRPC-CONVERTER-PRIORITIZE-RESPONSE] JsonRpcMessageConverter prioritizes result/error properties over method property in polymorphic response parsing. ​

[MCP-JSONRPC-DESERIALIZE-PLAIN-NO-OVERFLOW] Deserializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow. ​

[MCP-JSONRPC-POLYMORPHIC-DESERIALIZATION] Polymorphic JSON-RPC message deserializer accurately instantiates request, response, and notification subclasses. ​

[MCP-JSONRPC-SERIALIZE-PLAIN-NO-OVERFLOW] Serializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow. ​

[MCP-MOCK-JSONRPC-FLOW] MockDownstreamMcpServer handles initialize, initialized, tools/list, and tools/call JSON-RPC 2.0 protocol cycles. ​

[MCP-MOCK-RESOURCES-PROMPTS-SUPPORT] MockDownstreamMcpServer handles resources/list and prompts/list MCP protocol methods. ​

[MCP-RESILIENT-01] Prefix-based resilient routing: execute_tool called with unregistered but prefixed tool name dynamically resolves server and executes. ​

[MCP-SESSION-BUILTIN-PROMPTS] ClientSession lists built-in diagnostic and routing prompts. ​

[MCP-SESSION-BUILTIN-RESOURCES] ClientSession lists built-in resources including router://status. ​

[MCP-SESSION-CALL-SEARCH-TOOLS] ClientSession calls built-in search_tools and returns structured search results. ​

[MCP-SESSION-ERROR-TRANSFORM-CANCEL-SAMPLING] Translates backend error codes, handles cancellation tokens, and executes sampling requests. ​

[MCP-SESSION-GET-PROMPT-DIAGNOSE] ClientSession gets router__diagnose_failure prompt and returns diagnostic prompt instructions. ​

[MCP-SESSION-MANAGER-PER-SERVER-CACHE] SessionManager caches and isolates connections per downstream backend server. ​

[MCP-SESSION-METAMODE-TOOLS] ClientSession exposes meta-mode tools search_tools and execute_tool in meta mode. ​

[MCP-SESSION-READ-ROUTER-STATUS] ClientSession reads router://status resource and returns online gateway metadata. ​

[MCP-SESSION-REQUEST-CANCELLATION] ClientSession registers and triggers request cancellation for active cancellation tokens. ​

[MCP-SESSION-UNREGISTERED-RESPONSE] ClientSession returns false when handling client response for unregistered request ID. ​

[MCP-WIRE-JSONRPC-SPEC] MockDownstreamMcpServer treats messages with omitted id as notifications returning 202 Accepted with empty body. ​

[MCP-WIRE-PROTOCOL-MATRIX] MockDownstreamMcpServer dynamically negotiates requested protocol version. ​

[UI-104] renders resource tester with servers and resources ​

[UI-106] renders connected server details with badges and triggers actions ​

[UI-107] renders prompt dropdown and filters by selected server ​

[UI-112] renders nothing when isAddEditOpen is false ​

[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):

[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):

[API-PIPELINE-GET-AUDIT] GET /api/audit returns audit log records with 200 OK. ​

[API-PIPELINE-GET-LOGS] GET /api/logs returns system log records with 200 OK. ​

[AUTH-107] RegisterClient successfully handles DCR requests when open DCR is enabled. ​

[AUTH-109] RegisterClient uses IOAuthClientRepository when IOpenIddictApplicationManager is null. ​

[AUTH-113] RegisterClient supports public clients with PKCE (token_endpoint_auth_method: none) and omits client secret. ​

[AUTH-115] RegisterClient dynamically binds requested scopes to OpenIddict application descriptor permissions. ​

[MCP-ADMIN-TEST-TOOL-CALL-SECRET-RESOLUTION] AdminMcpServer test_tool_call resolves server secrets via injected ISecretRetriever. ​

[MCP-ADMIN-TEST-TOOL-CALL-USER-SECRET-STORE] AdminMcpServer test_tool_call resolves user credentials via injected IUserSecretStore and caller context. ​

[SEC-02] VaultSecretRetriever dynamically loads, applies, and reloads Vault configurations from database repository. ​

[SEC-03] EnvironmentSecretRetriever retrieves configured environment variable value. ​

[SEC-04] WindowsRegistrySecretRetriever handles non-Windows platforms gracefully and returns null. ​

[SEC-05] renders RPC message stream with formatted JSON ​

[SEC-30] Renders User Secret Storage options and toggles Vault with warning when disabled. ​

[SEC-ADMIN-AUDIT-REDACTION] AdminMcpServer redacts sensitive secrets from argument payloads before recording audit logs. ​

[SEC-APPKEY-SANITIZE-METADATA-GET] AppKeys API returns sanitized key metadata without leaking plaintext tokens. ​

[SEC-AUDIT-LOG-ADMIN-ACTION-RECORD] AuditLogger records administrative configuration changes and security events to AdminAuditLogs table. ​

[SEC-AUDIT-LOG-INVOCATION-RECORD] AuditLogger writes tool invocation audit records with actor attribution and duration to AuditLogs table. ​

[SEC-AUDIT-LOGGER-ADMIN-PERSIST] AuditLogger persists administrative actions directly into AdminAuditLogs database table. ​

[SEC-AUDIT-MAPPING-SAVE-ACTION] PermissionsController records audit action when group mapping is saved. ​

[SEC-AUDIT-PER-REQUEST-ACTOR-ATTRIBUTION] Audit logger attributes per-request actor credentials accurately across stateless calls. ​

[SEC-AUDIT-POLICY-SAVE-ACTION] PermissionsController records audit action when access policy is saved. ​

[SEC-AUDIT-QUERY-FILTERED-ROWS] Audit queries support filtering by user, server, and pagination while recording query access in audit log. ​

[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. ​

[SEC-HTTP-SECRET-URL-FALLBACK] HttpTransport falls back to URL and SecretItemKey when specific secret paths are unconfigured. ​

[SEC-KEY-PROVIDER-AUTOGEN] EncryptionKeyProvider delegates to DbKeyHelper to auto-generate master key when unconfigured. ​

[SEC-KEY-PROVIDER-CONFIG] EncryptionKeyProvider returns configured DB_ENCRYPTION_KEY or MCG_SECRET. ​

[SEC-KEY-PROVIDER-FALLBACK] EncryptionKeyProvider falls back to DB_ENCRYPTION_KEY when MCG_SECRET is unconfigured. ​

[SEC-KEY-PROVIDER-SECRET] EncryptionKeyProvider returns configured MCG_SECRET. ​

[SEC-KEYFILE-AUTOGEN] Blank-slate initialization auto-generates a 256-bit base64 master key and persists it to .master.key. ​

[SEC-KEYFILE-ENV-PRECEDENCE] Explicit environment variables MCG_MASTER_KEY or MCG_SECRET take precedence over keyfiles. ​

[SEC-KEYFILE-FILE-OVER-KEYFILE] Explicit file secrets take precedence over persistent .master.key files. ​

[SEC-KEYFILE-FILE-SECRET] File-based secrets configured via MCG_MASTER_KEY_FILE or standard Docker secrets paths are resolved. ​

[SEC-KEYFILE-HIERARCHY-PRECEDENCE] Explicit environment variables take precedence over file secrets and keyfiles. ​

[SEC-KEYFILE-RELOAD] Existing .master.key file is loaded across gateway restarts without key mutation. ​

[SEC-KEYSOURCE-DETECTION] Correctly identifies KeySource origin for environment, file, and auto-generated keys. ​

[SEC-KEYSOURCE-SETCACHEDKEY] SetCachedKey sets in-memory encryption key and updates ActiveKeySource. ​

[SEC-LOG-PROVIDER-PRESERVE-PLAIN] SanitizingLoggerProvider preserves non-sensitive log statements intact. ​

[SEC-LOG-PROVIDER-REDACT-EXCEPTIONS] SanitizingLoggerProvider sanitizes exception messages and stack traces to prevent credential leaks in error logs. ​

[SEC-LOG-PROVIDER-REDACT-SECRETS] SanitizingLoggerProvider automatically redacts Bearer tokens, API keys, and credentials in log message strings. ​

[SEC-MASTERKEY-ATOMIC-REENCRYPTION] Atomically re-encrypts database credentials when setting a custom master key. ​

[SEC-MASTERKEY-CONFIGURED-STATUS-BADGE] Displays configured badge and rotate button when custom master key is configured. ​

[SEC-MASTERKEY-CUSTOM-MODAL-REENCRYPTION] Validates master key inputs (length, match) and triggers atomic re-encryption. ​

[SEC-MASTERKEY-EXTERNAL-LOCKED-BADGE] Displays locked badge when master key is externally managed via Vault or Environment. ​

[SEC-MASTERKEY-UI-STATUS-BANNER] Displays warning banner when keySource is AutoGenerated and opens custom master key modal. ​

[SEC-PII-BEARER-TOKEN] PiiSanitizer redacts Bearer authentication tokens from payload strings. ​

[SEC-PII-CONNECTION-STRING-PASSWORD] PiiSanitizer redacts database connection string passwords. ​

[SEC-PII-JSON-APIKEY-PASSWORD] PiiSanitizer redacts apiKey, password, and secret properties in JSON payloads. ​

[SEC-PII-LOGBUFFER-IN-MEMORY] LogBuffer sanitizes PII and credentials prior to buffering in memory. ​

[SEC-PROVIDER-MASK-SECRETS-GET] ProvidersController GET endpoints mask sensitive tokens and passwords as asterisks. ​

[SEC-PROVIDER-REDACT-AUDIT-PAYLOADS] ProvidersController redacts sensitive secrets in administrative audit logs. ​

[SEC-SESSIONID-OPAQUE-NOT-BEARER] Mcp-Session-Id header generates opaque UUIDs without leaking bearer tokens. ​

[SEC-VAULT-BOOTSTRAPPING] Bootstraps master encryption key directly from HashiCorp Vault when VAULT_ADDR is configured. ​

[SEC-VAULT-CUSTOM-MOUNT-PATH] SseTransport resolves dynamic secrets from Vault using custom mounts, paths, and secret fields. ​

[SEC-VAULT-CUSTOM-PATH] Bootstraps master key from Vault using custom mount path and secret key name. ​

[UI-105] renders system logs and handles level filter ​

[TRANS-01] HttpTransport formats X-API-Key header when downstream server AuthShape is 'x-api-key'. ​

[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):

[TRANS-03] HttpTransport SendNotificationAsync gracefully handles 404 and 405 without throwing exceptions ​

[TRANS-04] HTTP stateless transport correctly accumulates multi-line SSE streams and skips intermediate notification events ​

[TRANS-05] HTTP stateless transport reads entire multi-line and formatted JSON response bodies without premature truncation ​

[TRANS-06] HTTP stateless transport joins multi-line SSE data fields into complete JSON payloads ​

[TRANS-AUTH-SHAPES-CUSTOM-HEADER] SseTransport applies custom header names for proprietary target backend authentication. ​

[TRANS-AUTH-SHAPES-HEADERS-JSON] SseTransport parses and applies extra request headers from HeadersJson configuration. ​

[TRANS-AUTH-SHAPES-QUERY-PARAM] SseTransport appends authentication tokens as URL query parameters when query auth shape is configured. ​

[TRANS-AUTH-SHAPES-STANDARD-HEADERS] SseTransport formats standard authorization shapes (bearer, basic, raw, x-api-key) into HTTP headers. ​

[TRANS-BACKEND-MULTIPLEX-CONCURRENT-RPC] BackendConnection multiplexes 100+ concurrent asynchronous polymorphic RPC requests without deadlocking. ​

[TRANS-DISCONNECT-PENDING-CLEANUP] Cleans up and cancels pending requests upon backend transport disconnect. ​

[TRANS-EXPLICIT-NULL-ID-ISOLATION] Handles JSON-RPC requests with explicit null IDs and multiplexes upstream calls correctly. ​

[TRANS-HIGH-CONCURRENCY-ISOLATION] Maintains strict response isolation under high concurrency with 100+ callers reusing identical RPC IDs. ​

[TRANS-HTTP-AUTH-CUSTOM-HEADER] HttpTransport formats custom header authentication for target servers. ​

[TRANS-HTTP-RESOLVE-STATIC-APIKEY] HTTP stateless transport resolves static API keys when secret provider is None ​

[TRANS-ISOLATION-SAME-ID-REVERSED-ORDER] Multiplexes concurrent client calls sharing identical JSON-RPC IDs and routes reversed responses correctly. ​

[TRANS-MIXED-ID-TYPES-ISOLATION] Handles mixed numeric, string, and null JSON-RPC IDs concurrently across backend transports. ​

[TRANS-NOTIFICATION-NO-RESPONSE-LISTENER] Handles JSON-RPC notifications without registering pending response listeners. ​

[TRANS-SSE-LOG-ENDPOINT-WAIT-EXCEPTION] SSE transport logs exceptions gracefully when waiting for endpoint URL without throwing unhandled exceptions. ​

[TRANS-SSE-NOTIF-FORWARD-FIELDS-INTACT] SSE backend notifications are forwarded to client sessions with all payload fields intact. ​

[TRANS-SSE-RESOLVE-STATIC-APIKEY] SSE transport resolves static plaintext API keys when provider is None ​

[TRANS-SSE-STREAM-LIFECYCLE] SSE transport correctly resolves relative endpoint URLs and ignores keep-alive SSE comments. ​

[TRANS-STATELESS-CANCELLATION-ISOLATION] Isolates cancellation tokens between concurrent stateless client requests. ​

[TRANS-STDIO-DRAIN-BUFFER-EOF] STDIO transport drains buffered stdout/stderr streams to EOF when process exits rapidly ​

[TRANS-STDIO-SPAWN-TOOL-CALL] STDIO transport spawns subprocess, handles JSON-RPC initialization and executes tool calls ​

[TRANS-STDIO-STREAM-STDERR-LOGS] STDIO transport streams subprocess stderr asynchronously to structured router diagnostic logs ​

[TRANS-STDIO-TERMINATE-CLEANLY] STDIO transport terminates subprocess tree cleanly upon disposal or cancellation ​

[TRANS-STDIO-TOKENIZE-PRESERVE-QUOTES] STDIO command-line tokenizer preserves quoted arguments and space escaping ​

[TRANS-TARGETED-CANCELLATION-ISOLATION] Targeted cancellation does not cancel concurrent client sessions reusing identical RPC IDs. ​

[TRANS-TIMEOUT-PENDING-CLEANUP] SendRequestAsync times out cleanly and removes pending completion handlers without leaking memory. ​

[TRANS-VALIDATION-HTTP-ALLOWED-IPS] ServerValidationHelper accepts valid HTTP/HTTPS endpoints allowed by IP security rules. ​

[UI-01] opens confirmation modal and resolves true when confirmed ​

[UI-02] Inspect modal displays spinner loading state while querying server capabilities ​

[UI-03] Grouped server view renders category sections and supports collapsible groups ​

[UI-04] Tool selector filters available tools by selected backend server ​

[UI-05] Router allows customized branding parameters (DashboardTitle, DashboardIcon) to be saved and retrieved via the API. ​

[UI-06] Router supports uploading and retrieving custom branding logo images via dedicated endpoints. ​

[UI-07] Audits desktop viewport layout for zero horizontal overflow and high UX score. ​

[UI-102] Dashboard renders stats card, connected server list, and setup instructions ​

[UI-103] Interactive tool tester renders server and tool selection dropdowns ​

[UI-108] renders nothing when isMappingModalOpen is false ​

[UI-109] Renders ClientSetupGuide below the user credentials card. ​

[UI-110] renders title, MCG badge, subtitle, and version badge ​

[UI-111] renders GeneralTab and triggers save ​

[UI-113] renders tab navigation and switches active subviews ​

[UI-115] renders test bench cards and switches tabs ​

[UI-116] Modal remains hidden when isInspectOpen is false ​

[UI-117] returns null when isOpen is false ​

[UI-119] calls server endpoints correctly ​

[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):

[UI-124] Renders main dashboard navigation tabs and layout headers ​

  • Category: UI (Dashboard, Test Bench & Settings UI)
  • Type: Positive Feature Capability
  • Verification Proofs (1):

[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):
  • Category: UI (Dashboard, Test Bench & Settings UI)
  • Type: Positive Feature Capability
  • Verification Proofs (1):

[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):

[UI-131] Renders Connected (OAuth) badge and supports account disconnection. ​

[UI-132] groups slash-namespaced tools into distinct backend servers without grouping under custom ​

[UI-133] verifies deterministic data-testid attributes and interactive flow across test bench tabs ​

[UI-134] verifies server modal exposes deterministic data-testid attributes ​

[UI-135] toggles 3LO OAuth fields and submits with complete OAuth configuration ​

[UI-137] Renders Last Used column and triggers Rotate Secret action for registered clients. ​

[UI-30] Renders client registration form with inputs for name, client type, redirect URIs, grant types, scopes, and expiration. ​

[UI-32] Registers OAuth client with extended metadata (redirect URIs, grant types, client type, expiration) and captures one-time credentials. ​


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 ​

[AUTH-ADMIN-REJECT-NONADMIN] SecurityValidationHelper rejects non-admin groups and guest identities ​

[AUTH-PERSONAL-APPKEY-CREATE] Non-admin users can create personal App Keys up to quota ​

[GUARD-LDAP-FAIL-CLOSED] LdapActiveDirectoryService fails closed with SecurityException when LDAP connection throws an exception. ​

[CORE-GATEWAY-METADATA-UNSUPPORTED-VERSIONS] IsSupportedProtocolVersion rejects unrecognized protocol versions. ​

[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):

[AUTH-123] RotateAppKey forbids non-owner non-admin user from rotating another user's key. ​

[AUTH-EXTERNAL-IDP-DENIES-ANONYMOUS-LOOPBACK] When an external IDP is configured, anonymous loopback requests do not bypass authentication. ​

[AUTH-STANDALONE-ADMINPOLICY-EXTERNAL-DENY] AdminPolicy rejects unauthenticated requests from non-whitelisted external IPs in standalone mode. ​

[AUTH-STANDALONE-EXTERNAL-DENY] Standalone mode denies admin access to non-whitelisted external IPs without an Admin AppKey. ​

[GUARD-01] handles policy save failure with error toast ​

[GUARD-02] SSE transport fails closed with SecurityException when secret provider resolution fails ​

[GUARD-03] CompositeSecretRetriever throws InvalidOperationException when an unregistered secret provider is requested. ​

[GUARD-04] Malformed completion payloads or unmapped backends must fail closed safely ​

[GUARD-05] Socket-level SSRF protection blocks private and loopback IP connections unless explicitly allowlisted. ​

[GUARD-06] Auth middleware enforces case-insensitive route matching preventing path bypass. ​

[GUARD-07] Custom files endpoint validates file path ensuring sibling directory traversal and parent traversal fail closed. ​

[GUARD-ADMIN-CUSTOM-FILES-VALIDATION] manage_custom_files rejects invalid prompt JSON syntax and unsupported file categories. ​

[GUARD-ADMIN-ENDPOINT-UNAUTHORIZED] Unauthenticated / non-admin client request to /admin receives 403 Forbidden. ​

[GUARD-ADMIN-POLICIES-WILDCARD-DENY] manage_policies rejects wildcard deny policies to prevent global lockout. ​

[GUARD-ADMIN-PROVIDERS-LDAP-PLAINTEXT] manage_providers rejects unencrypted LDAP connections on port 389. ​

[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. ​

[GUARD-ADMIN-UNKNOWN-TOOL] AdminMcpServer returns an error response for unknown tool or action invocations. ​

[GUARD-APPKEY-EMPTY-CATEGORY] AppKey creation with empty or whitespace category must fail closed with BadRequest ​

[GUARD-APPKEY-MALFORMED-SCOPES] Corrupted AppKey scopes JSON must fail closed and reject execution ​

[GUARD-APPKEY-MISSING-NAME] Rejects AppKey creation with BadRequest when name is missing. ​

[GUARD-APPKEY-QUOTA-INVALID-PARAM] Returns BadRequest on invalid quota override input parameters. ​

[GUARD-APPKEY-REVOKE-FORBID] Returns Forbid when non-owner/non-admin attempts to revoke an AppKey. ​

[GUARD-APPKEY-REVOKE-NOTFOUND] Returns NotFound when revoking non-existent AppKey ID. ​

[GUARD-APPKEY-UNKNOWN-CATEGORY] Non-admin callers cannot create AppKeys with unconfigured categories ​

[GUARD-APPKEY-USER-QUOTA] Enforces user AppKey limit and returns BadRequest when quota is exceeded. ​

[GUARD-AUTH-MIDDLEWARE-UNAUTHORIZED] Auth middleware blocks unauthorized requests with HTTP 401 Unauthorized. ​

[GUARD-AUTH-NULL-TARGET] Null or empty capability targets must immediately fail closed and return unauthorized ​

[GUARD-CLIENT-CLEANUP-REPO-ERR] CleanupClients returns 500 when repository throws. ​

[GUARD-CLIENT-CREATE-REPO-ERR] CreateClient returns 500 when repository throws ​

[GUARD-CLIENT-DELETE-REPO-ERR] DeleteClient returns 500 when repository throws ​

[GUARD-CLIENT-EMPTY-CATEGORY] Client creation with empty category scope must fail closed with BadRequest ​

[GUARD-CLIENT-EMPTY-SCOPE] CreateClient fails closed when category scope is empty ​

[GUARD-CLIENT-MISSING-NAME] CreateClient fails closed when DisplayName is missing ​

[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):

[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):

[GUARD-MAPPING-GET-DB-ERROR] PermissionsController returns 500 on database error during mapping retrieval. ​

[GUARD-MAPPING-MISSING-EXT-ID] PermissionsController rejects mapping save missing external ID with BadRequest. ​

[GUARD-MAPPING-MISSING-GROUP] PermissionsController rejects mapping save missing internal group with BadRequest. ​

[GUARD-MAPPING-SAVE-DB-ERROR] PermissionsController returns 500 when saving mapping encounters DB error. ​

[GUARD-MAPPING-UNMAPPED-DENY] Fails closed and denies access when no valid group mapping exists for a restricted target. ​

[GUARD-POLICY-DELETE-DB-ERROR] PermissionsController fails closed with 500 when database delete fails. ​

[GUARD-POLICY-MISSING-GROUP] PermissionsController rejects policy saves missing requiredGroup with BadRequest. ​

[GUARD-POLICY-MISSING-TARGET] PermissionsController rejects policy saves missing targetId with BadRequest. ​

[GUARD-PROVIDER-MISSING-AUTH-NAME] ProvidersController rejects saving auth provider without providerName with BadRequest. ​

[GUARD-PROVIDER-MISSING-SECRET-NAME] ProvidersController rejects saving secret provider without providerName with BadRequest. ​

[GUARD-RBAC-COMPLETION-PROMPT] completion/complete throws UnauthorizedAccessException when caller lacks prompt permissions. ​

[GUARD-RBAC-COMPLETION-TEMPLATE] completion/complete throws UnauthorizedAccessException when caller lacks resource template permissions. ​

[GUARD-RBAC-COMPLETION-UNRESOLVED] completion/complete fails closed on unknown or unresolved completion references. ​

[GUARD-RBAC-DEFAULT-DENY] RBAC defaults to deny when no matching access policies are configured. ​

[GUARD-RBAC-EXPLICIT-DENY] RBAC enforces explicit policy denials to reject unauthorized callers. ​

[GUARD-RBAC-MISSING-GROUP] RBAC denies access when user does not possess the required security group. ​

[GUARD-RBAC-NULL-TARGET] IsUserAuthorizedAsync fails closed on null, empty, or whitespace target identifiers. ​

[GUARD-RBAC-PROMPT-UNAUTHORIZED] GetPromptAsync throws UnauthorizedAccessException when user lacks permissions for target prompt. ​

[GUARD-RBAC-RESOURCE-UNAUTHORIZED] ReadResourceAsync throws UnauthorizedAccessException when user lacks permissions for target resource. ​

[GUARD-RBAC-TOOL-UNAUTHORIZED] CallToolAsync returns a formatted security error when user is unauthorized. ​

[GUARD-ROUTING-UNKNOWN-TOOL] ToolRoutingManager throws KeyNotFoundException when calling a tool not registered in the routing table. ​

[GUARD-ROUTING-UNREGISTERED-RESOURCE] ResourceRoutingManager throws KeyNotFoundException when reading an unregistered resource URI. ​

[GUARD-STATE-DISCONNECT-CANCELLATION] JsonRpcStateManager rejects registration and cancels pending completions upon disconnect. ​

[GUARD-TOOL-CANCELLATION] ToolRoutingManager propagates task cancellation gracefully with a standardized JSON-RPC error response. ​

[GUARD-TOOL-MANDATORY-PARAMS] ToolRoutingManager returns an error when execute_tool is invoked without the mandatory tool name parameter. ​

[GUARD-UNSUPPORTED-DB-PROVIDER] DbConnectionFactory fails closed and throws InvalidOperationException when configured with unsupported database provider. ​

[GUARD-VALIDATION-STDIO-SHELL-OPERATORS] ServerValidationHelper validates stdio commands against unsafe shell operators, piping, and command injection. ​

[MCP-ADMIN-TOOL-TEST-CALL-ERROR] AdminMcpServer test_tool_call propagates downstream backend errors with visibility. ​

[MCP-12] DynamicEmbeddingService retrieves and persists embedding provider configurations in Settings table. ​

[MCP-22] AdminMcpServer ProcessRequestAsync handles server/discover request returning supported versions and subscriptions capability. ​

[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):

[MCP-29] ServerValidationHelper rejects invalid characters in Alias. ​

[MCP-31] DockerAutoDiscoveryService parses mcp.alias from Docker container labels ​

[MCP-32] InMemorySimdToolVectorStore scores tool embeddings using .NET 10 hardware SIMD TensorPrimitives. ​

[MCP-34] ToolRoutingManager gracefully falls back to keyword matching when NoOpEmbeddingProvider is active. ​

[AUTH-106] Exchange throws InvalidOperationException when request is null. ​

[AUTH-108] Authorize throws InvalidOperationException when OIDC request is null. ​

[AUTH-111] Pipeline exposes RFC 9728 OAuth Protected Resource discovery endpoints with dynamic resource identifiers. ​

[AUTH-114] RegisterClient rejects invalid or non-absolute redirect URIs with standard RFC 7591 invalid_redirect_uri error. ​

[AUTH-116] Exchange rejects client_credentials grant attempts by public clients with UnauthorizedClient error. ​

[AUTH-117] RegisterClient returns 403 Forbidden with access_denied when open client registration is disabled and caller is unauthorized. ​

[SEC-01] SQLite database is encrypted at rest using SQLCipher with DB_ENCRYPTION_KEY. ​

[SEC-PROVIDER-GUARD-CORRUPT-ENCRYPTED-FIELD] Router must not overwrite corrupt encrypted database fields if an update occurs without user reset. ​

[TRANS-HTTP-DISPOSED-GUARD] HttpTransport SendRequestAsync returns -32001 Not Connected when transport has been disposed. ​

[TRANS-SSE-CALLMETHOD-DISCONNECT-GUARD] SseTransport CallMethodAsync returns -32001 Not Connected when backend is disconnected. ​

[TRANS-SSE-SENDREQUEST-DISCONNECT-GUARD] SseTransport SendRequestAsync returns -32001 Not Connected when backend is disconnected. ​

[TRANS-STDIO-DISPOSED-GUARD] StdioTransport SendRequestAsync returns -32001 Process Not Running when transport has been disposed. ​

[UI-136] Disables backdrop click dismissal on the key rotation modal to protect plaintext credentials. ​

[UI-31] Fetches registered OAuth clients and updates store state. ​

[UI-CONFIRM-MODAL] Centralized promise-based confirmation store resolves true on confirmation and false on cancellation. ​

[UI-TOAST-TRANSITION] Displays error toast notification when saving invalid JSON credentials for user-provided server. ​


4. Complete Verification Traceability Matrix ​

Requirement IDTypeCategoryDescriptionPrimary ProofSuite
API-GET-SERVERS-FLEET-REPOSITORYPositiveAPIRetrieves configured MCP server fleet from the database repository.MinimalApiEndpointsTests.cs:L42Backend xUnit
API-SERVER-CRUD-LIFECYCLEPositiveAPISupports full CRUD lifecycle (create, read, update, delete) for downstream MCP server definitions.MinimalApiEndpointsTests.cs:L55Backend xUnit
AUTH-001PositiveAUTHVerify DatabaseUserSecretStore encrypts and decrypts secret correctly.UserSecretStoreTests.cs:L8Backend xUnit
AUTH-002PositiveAUTHVerify UserCredentialsController returns configured server IDs.UserCredentialsControllerTests.cs:L11Backend xUnit
AUTH-02PositiveAUTHAppKey scopes restrict access precisely across all MCP capabilities and backend targetsPairwiseIntegrationMatrixTests.cs:L242Backend xUnit
AUTH-03PositiveAUTHAuth middleware allows bypass routes and extracts SSO headers in a case-insensitive manner.ChallengerTests.cs:L621Backend xUnit
AUTH-04PositiveAUTHActiveDirectoryIdentityProvider extracts Windows caller SIDs and security groups via IWindowsIdentityAccessor and augments with LDAPActiveDirectoryWindowsIdentityTests.cs:L12Backend xUnit
AUTH-05PositiveAUTHMcpServer supports AllowPassThroughAuth flagMcpServerTests.cs:L5Backend xUnit
AUTH-06PositiveAUTHTransports use passThroughToken when AllowPassThroughAuth is trueTransportsAuthShapeTests.cs:L208Backend xUnit
AUTH-101PositiveAUTHHTTP transport injects X-Forwarded-User header based on connected user identity.IdentityHeaderTests.cs:L9Backend xUnit
AUTH-110PositiveAUTHCreateAppKey allows creating unlimited AppKeys when UserMaxKeys is set to 0.AppKeysControllerTests.cs:L343Backend xUnit
AUTH-118PositiveAUTHAppKey table contains LastUsedAt column and repository updates and queries it accurately.AppKeyLastUsedPersistenceTests.cs:L41Backend xUnit
AUTH-119PositiveAUTHOAuthClients table contains LastUsedAt column and repository updates and queries it accurately.AppKeyLastUsedPersistenceTests.cs:L69Backend xUnit
AUTH-120PositiveAUTHActivityTracker throttles database updates to at most once per 60 seconds per key.ActivityTrackerTests.cs:L9Backend xUnit
AUTH-121PositiveAUTHActivityTracker throttles OAuth client updates to at most once per 60 seconds per client.ActivityTrackerTests.cs:L35Backend xUnit
AUTH-122PositiveAUTHRotateAppKey issues new plaintext key, updates database, resets LastUsedAt, and audits action.AppKeyRotationControllerTests.cs:L12Backend xUnit
AUTH-130PositiveAUTHRenders In-House IdP / External JWT Bearer card, toggles enable, fills authority, and saves configuration.IdentityAuthTab.test.tsx:L167Frontend Vitest
AUTH-131PositiveAUTHRFC 9728 Protected Resource Metadata endpoint exposes discovery document with canonical resource URI, authorization servers, scopes, and documentation.Rfc9728ProtectedResourceDiscoveryTests.cs:L37Backend xUnit
AUTH-132PositiveAUTHUnauthenticated client requests to /sse endpoint return 401 Unauthorized with RFC 9728 WWW-Authenticate header containing realm and resource_metadata.Rfc9728ProtectedResourceDiscoveryTests.cs:L115Backend xUnit
AUTH-133PositiveAUTHVerify initiating OAuth 3LO egress flow generates secure state and authorization redirect URL.EgressOAuthTests.cs:L72Backend xUnit
AUTH-134PositiveAUTHVerify OAuth egress callback exchanges authorization code and stores credentials in user secret store.EgressOAuthTests.cs:L146Backend xUnit
AUTH-135PositiveAUTHVerify upstream dispatch automatically refreshes expired OAuth egress token and updates user secret store.EgressOAuthTests.cs:L260Backend xUnit
AUTH-136PositiveAUTHVerify disconnect endpoint deletes stored user OAuth credentials.EgressOAuthTests.cs:L361Backend xUnit
AUTH-137PositiveAUTHVerify GetOAuthServers returns servers with correct isConnected status.EgressOAuthTests.cs:L406Backend xUnit
AUTH-14PositiveAUTHTool execution catches 401 Unauthorized from downstream target servers and returns interactive auth remediation.ToolRoutingManagerTests.cs:L211Backend xUnit
AUTH-15PositiveAUTHOpenIddict initializes ephemeral development signing certificates in Development environment.OpenIddictProductionTests.cs:L30Backend xUnit
AUTH-35PositiveAUTHSingle-user homelab startup initializes SQLite, auto-generates Admin and Client AppKeys without PFX certificate requirementsSingleUserHomelabTests.cs:L30Backend xUnit
AUTH-36PositiveAUTHPre-configured MCG_CLIENT_APP_KEYS seeds functional individualized client keys with custom scopesSingleUserHomelabTests.cs:L98Backend xUnit
AUTH-37PositiveAUTHAppKeys with server and category scopes enforce precise tool execution boundariesSingleUserHomelabTests.cs:L168Backend xUnit
AUTH-38PositiveAUTHLAN CIDR network configuration allows standalone web dashboard access from local subnetSingleUserHomelabTests.cs:L183Backend xUnit
AUTH-39PositiveAUTHZero-config startup defaults enterprise auth providers and secret providers to disabledSingleUserHomelabTests.cs:L211Backend xUnit
AUTH-ADMIN-FULL-ACCESSPositiveAUTHAdministrator identities bypass granular capability policies and have full access to all MCP methods.UnifiedMcpAuthorizationTests.cs:L154Backend xUnit
AUTH-ADMIN-POLICY-ALLOW-GROUPNAMEPositiveAUTHAdminPolicy allows principal with configured Admin Group Name (e.g., full_admin)AdminPolicyHybridAuthTests.cs:L13Backend xUnit
AUTH-ADMIN-POLICY-ALLOW-GROUPS-ARRAYPositiveAUTHAdminPolicy allows principal with configured Admin Groups arrayAdminPolicyHybridAuthTests.cs:L81Backend xUnit
AUTH-ADMIN-POLICY-ALLOW-SIDPositiveAUTHAdminPolicy allows principal with configured Admin SIDAdminPolicyHybridAuthTests.cs:L47Backend xUnit
AUTH-ADMIN-POLICY-REJECT-REGULARGuardrailAUTHAdminPolicy rejects principal with unconfigured regular role without Admin SID or Admin GroupAdminPolicyHybridAuthTests.cs:L116Backend xUnit
AUTH-ADMIN-REJECT-NONADMINGuardrailAUTHSecurityValidationHelper rejects non-admin groups and guest identitiesIdentityProviderTests.cs:L260Backend xUnit
AUTH-ADMIN-VALIDATE-GROUPNAMEPositiveAUTHSecurityValidationHelper authorizes principals via Admin Group NameIdentityProviderTests.cs:L246Backend xUnit
AUTH-ADMIN-VALIDATE-GROUPS-ARRAYPositiveAUTHSecurityValidationHelper authorizes principals via custom configured Admin:Groups arrayIdentityProviderTests.cs:L277Backend xUnit
AUTH-ADMIN-VALIDATE-MAPPED-GROUPSPositiveAUTHSecurityValidationHelper authorizes principals via mappedGroups database resolutionIdentityProviderTests.cs:L292Backend xUnit
AUTH-ADMIN-VALIDATE-SIDPositiveAUTHSecurityValidationHelper authorizes principals via Admin Group SIDIdentityProviderTests.cs:L228Backend xUnit
AUTH-APPKEY-ADMIN-FUTURE-CATEGORYPositiveAUTHAdmin callers can create forward-looking AppKeys for unconfigured categoriesCategoryScopedAppKeysTests.cs:L258Backend xUnit
AUTH-APPKEY-ADMIN-QUOTAPositiveAUTHAdministrator can create, update, and delete custom user quota overrides.AppKeysControllerTests.cs:L403Backend xUnit
AUTH-APPKEY-ADMIN-SCOPE-ALLOWPositiveAUTHAppKeys with admin scope grant Administrator role and pass AdminPolicy.StandaloneAdminAuthTests.cs:L79Backend xUnit
AUTH-APPKEY-ITEMS-SCOPE-ALLOWPositiveAUTHSecurityValidationHelper recognizes admin scopes in HttpContext.Items.StandaloneAdminAuthTests.cs:L255Backend xUnit
AUTH-APPKEY-KEYTYPE-PERSISTENCE-FILTERPositiveAUTHIAppKeyRepository persists KeyType and filters keys by personal vs systemUserQuotaAndAppKeyRepositoryTests.cs:L146Backend xUnit
AUTH-APPKEY-WILDCARD-SCOPE-ALLOWPositiveAUTHAppKeys with wildcard scope '*' grant Administrator role and pass AdminPolicy.StandaloneAdminAuthTests.cs:L140Backend xUnit
AUTH-COMPACT-APPKEY-TAXONOMYPositiveAUTHGenerates compact ~32-character Base62 AppKeys with semantic prefixes.AppKeyAuthenticationTests.cs:L417Backend xUnit
AUTH-CUSTOM-ADMIN-KEY-SEEDINGPositiveAUTHSeeds custom MCG_ADMIN_AUTH_KEY when provided in configuration.DatabaseSeederServiceTests.cs:L189Backend xUnit
AUTH-MOCK-SIMULATE-UNAUTHORIZEDPositiveAUTHMockDownstreamMcpServer simulates 401 Unauthorized status code for authentication testing.MockDownstreamMcpServerTests.cs:L62Backend xUnit
AUTH-OIDC-PRESERVE-GROUP-NAMESPositiveAUTHOidcIdentityProvider preserves group names without synthesizing Windows SIDsIdentityProviderTests.cs:L307Backend xUnit
AUTH-PERM-GET-MAPPINGSPositiveAUTHPermissionsController returns group mappings list with 200 OK.PermissionsControllerTests.cs:L137Backend xUnit
AUTH-PERM-POLICY-LISTPositiveAUTHPermissionsController returns access policies list with 200 OK.PermissionsControllerTests.cs:L48Backend xUnit
AUTH-PERM-POLICY-REMOVEPositiveAUTHPermissionsController removes access policies.PermissionsControllerTests.cs:L114Backend xUnit
AUTH-PERSONAL-APPKEY-CREATEGuardrailAUTHNon-admin users can create personal App Keys up to quotaAppKeysControllerTests.cs:L191Backend xUnit
AUTH-PERSONAL-APPKEY-LISTPositiveAUTHNon-admin users can view their personal App KeysAppKeysControllerTests.cs:L125Backend xUnit
AUTH-PERSONAL-APPKEY-QUOTA-OVERRIDEPositiveAUTHCustom user quotas override default limitAppKeysControllerTests.cs:L223Backend xUnit
AUTH-PIPELINE-ADMIN-DASHBOARDPositiveAUTHDashboard management API suite executes for authorized administrators.PipelineIntegrationTests.cs:L171Backend xUnit
AUTH-PIPELINE-GET-CLIENTSPositiveAUTHGET /api/clients returns active client sessions with 200 OK.PipelineIntegrationTests.cs:L349Backend xUnit
AUTH-PIPELINE-GET-POLICIESPositiveAUTHGET /api/permissions/policies returns access policies with 200 OK.PipelineIntegrationTests.cs:L358Backend xUnit
AUTH-PIPELINE-PERM-CRUDPositiveAUTHPermissions policy and group mapping CRUD endpoints manage RBAC rules.PipelineIntegrationTests.cs:L305Backend xUnit
AUTH-PREFIX-EXTRACTIONPositiveAUTHExtractKeyPrefix parses semantic prefixes, Base62 selectors, and legacy tokens accurately.AppKeyAuthenticationTests.cs:L451Backend xUnit
AUTH-QUERY-TOKEN-EXTRACTIONPositiveAUTHQuery string token middleware extracts access_token or token query parameter to Authorization header.EndpointAuthorizationTests.cs:L7Backend xUnit
AUTH-RBAC-GROUP-ALLOWPositiveAUTHRBAC grants access when user claims match the required policy security group.FineGrainedRbacTests.cs:L94Backend xUnit
AUTH-RBAC-PROMPT-FILTERPositiveAUTHprompts/list filters exposed prompts according to caller permissions.UnifiedMcpAuthorizationTests.cs:L362Backend xUnit
AUTH-RBAC-RESOURCE-FILTERPositiveAUTHresources/list filters exposed resources according to caller permissions.UnifiedMcpAuthorizationTests.cs:L405Backend xUnit
AUTH-RBAC-TEMPLATE-FILTERPositiveAUTHresources/templates/list filters exposed resource templates according to caller permissions.UnifiedMcpAuthorizationTests.cs:L448Backend xUnit
AUTH-RBAC-TOOL-FILTERPositiveAUTHtools/list filters exposed backend tools according to caller permissions.UnifiedMcpAuthorizationTests.cs:L317Backend xUnit
AUTH-RBAC-TOOLS-FILTERPositiveAUTHtools/list filters exposed backend tools according to caller role and RBAC policy permissions.FineGrainedRbacTests.cs:L200Backend xUnit
AUTH-SERVER-LEVEL-POLICYPositiveAUTHServer-level access policies authorize all child tools, prompts, and resources under that server.UnifiedMcpAuthorizationTests.cs:L212Backend xUnit
AUTH-SSE-PER-MESSAGE-IDENTITYPositiveAUTHSSE streams re-validate caller identity and permissions per message payload.IdentityProviderTests.cs:L121Backend xUnit
AUTH-STANDALONE-ADMINPOLICY-LOOPBACK-ALLOWPositiveAUTHAdminPolicy succeeds in standalone mode for unauthenticated loopback requests.StandaloneAdminAuthTests.cs:L176Backend xUnit
AUTH-STANDALONE-CUSTOM-CIDR-ALLOWPositiveAUTHStandalone mode grants admin access to client IPs matching Admin:StandaloneAllowedNetworks CIDR ranges.StandaloneAdminAuthTests.cs:L35Backend xUnit
AUTH-STANDALONE-LOOPBACK-ALLOWPositiveAUTHStandalone mode without external IDP grants admin access to loopback IP addresses.StandaloneAdminAuthTests.cs:L14Backend xUnit
AUTH-STORE-MAPPING-FETCHPositiveAUTHfetches group mappings and updates storeusePolicyStore.test.ts:L156Frontend Vitest
AUTH-STORE-MAPPING-MODAL-TOGGLEPositiveAUTHhandles mapping modal open and closeusePolicyStore.test.ts:L330Frontend Vitest
AUTH-STORE-MAPPING-SAVEPositiveAUTHsaves a group mapping and closes mapping modalusePolicyStore.test.ts:L171Frontend Vitest
AUTH-STORE-POLICY-CREATEPositiveAUTHcreates/saves a policy (ALLOW rule) and closes modalusePolicyStore.test.ts:L53Frontend Vitest
AUTH-STORE-POLICY-FETCHPositiveAUTHfetches access policies and updates storeusePolicyStore.test.ts:L38Frontend Vitest
AUTH-STORE-POLICY-INITPositiveAUTHinitializes with empty policies and mappingsusePolicyStore.test.ts:L21Frontend Vitest
AUTH-STORE-POLICY-MODAL-TOGGLEPositiveAUTHhandles policy modal open and closeusePolicyStore.test.ts:L314Frontend Vitest
AUTH-SYSTEM-APPKEY-SEPARATIONPositiveAUTHSystem keys are distinct and require admin permissionsAppKeysControllerTests.cs:L151Backend xUnit
GUARD-LDAP-FAIL-CLOSEDGuardrailAUTHLdapActiveDirectoryService fails closed with SecurityException when LDAP connection throws an exception.LdapActiveDirectoryServiceTests.cs:L132Backend xUnit
UI-100PositiveAUTHinitializes with empty providersuseProviderStore.test.ts:L1Frontend Vitest
UI-101PositiveAUTHshould initialize with default valuesuseUserStore.test.ts:L1Frontend Vitest
UI-114PositiveAUTHrenders nothing when isPolicyModalOpen is falsePolicyModal.test.tsx:L1Frontend Vitest
UI-120PositiveAUTHRBAC and SID mapping administration UI allows configuring role policies and SID associationsrbac-enforcement-flow.spec.ts:L1Playwright E2E
UI-123PositiveAUTHshould open App Keys & Security view and display client setup controlsclient-setup-and-appkeys.spec.ts:L1Playwright E2E
UI-125PositiveAUTHAdmin role renders full administrative dashboard and server management controlsmulti-user-matrix.spec.ts:L1Playwright E2E
UI-127PositiveAUTHshould navigate to settings permissions tab and open policy configuration modalrbac-and-permissions.spec.ts:L1Playwright E2E
UI-129PositiveAUTHshould create client application and generate AppKey with scope constraintsappkey-and-client-lifecycle.spec.ts:L1Playwright E2E
UI-AUTH-TAB-AD-TOGGLEPositiveAUTHRenders Active Directory disabled initially, toggles on and exposes fields.IdentityAuthTab.test.tsx:L12Frontend Vitest
UI-AUTH-TAB-LDAP-TESTPositiveAUTHFills LDAP parameters and executes test connection.IdentityAuthTab.test.tsx:L46Frontend Vitest
UI-POLICY-MODAL-CANCEL-DISMISSPositiveAUTHcloses modal on cancel clickPolicyModal.test.tsx:L87Frontend Vitest
UI-POLICY-MODAL-CREATE-DEFAULTSPositiveAUTHrenders create policy form with default inputsPolicyModal.test.tsx:L28Frontend Vitest
UI-POLICY-MODAL-EDIT-PREFILLPositiveAUTHrenders edit policy form pre-filled with policy dataPolicyModal.test.tsx:L44Frontend Vitest
UI-USER-STORE-ERROR-FALLBACKPositiveAUTHhandles error response gracefully and sets unauthenticated user stateuseUserStore.test.ts:L50Frontend Vitest
UI-USER-STORE-HEALTH-VERSIONPositiveAUTHsuccessfully updates version and service from /health endpointuseUserStore.test.ts:L113Frontend Vitest
UI-USER-STORE-LOAD-PROFILEPositiveAUTHsuccessfully loads user profile from /api/meuseUserStore.test.ts:L23Frontend Vitest
UI-USER-STORE-NETWORK-FAILUREPositiveAUTHhandles network failure gracefullyuseUserStore.test.ts:L69Frontend Vitest
UI-USER-STORE-ROLE-EXTRACTIONPositiveAUTHcorrectly handles non-admin user role extractionuseUserStore.test.ts:L89Frontend Vitest
UI-USER-STORE-VERSION-FALLBACKPositiveAUTHkeeps existing fallback version on erroruseUserStore.test.ts:L128Frontend Vitest
CORE-101PositiveCOREAuto-added requirement trackingSessionManagerTests.cs:L9Backend xUnit
CORE-GATEWAY-METADATA-BUILD-INIT-REQUESTPositiveCOREBuildInitializeRequest formats standard JSON-RPC 2.0 initialize request with dynamic protocol version.GatewayMetadataTests.cs:L116Backend xUnit
CORE-GATEWAY-METADATA-CONSTANTSPositiveCOREMetadata constants and assembly version return consistent non-empty identifiers.GatewayMetadataTests.cs:L133Backend xUnit
CORE-GATEWAY-METADATA-EXTRACTION-JSONELEMENTPositiveCOREExtractRequestedProtocolVersion parses protocolVersion from JsonElement params object.GatewayMetadataTests.cs:L96Backend xUnit
CORE-GATEWAY-METADATA-EXTRACTION-STRINGPositiveCOREExtractRequestedProtocolVersion parses protocolVersion from initialize request payload or isolated params.GatewayMetadataTests.cs:L68Backend xUnit
CORE-GATEWAY-METADATA-SUPPORTED-VERSIONSPositiveCOREIsSupportedProtocolVersion validates supported protocol versions case-insensitively with whitespace trimming.GatewayMetadataTests.cs:L8Backend xUnit
CORE-GATEWAY-METADATA-UNSUPPORTED-VERSIONSGuardrailCOREIsSupportedProtocolVersion rejects unrecognized protocol versions.GatewayMetadataTests.cs:L32Backend xUnit
CORE-GATEWAY-METADATA-VERSION-NEGOTIATIONPositiveCORENegotiateProtocolVersion canonicalizes casing for known protocol versions.GatewayMetadataTests.cs:L41Backend xUnit
DB-02PositiveDBMSSQL stored procedure scripts declare all required procedures and parameter contracts correctlyDatabaseSchemaUpgradeAndContractTests.cs:L311Backend xUnit
DB-07PositiveDBSQLite upgrade migration automatically provisions OAuthClients table on legacy databaseDatabaseSchemaUpgradeAndContractTests.cs:L433Backend xUnit
DB-FACTORY-MSSQL-CONFIGUREDPositiveDBDbConnectionFactory initializes MS SQL Server database connection using Microsoft.Data.SqlClient.DbConnectionFactoryTests.cs:L46Backend xUnit
DB-FACTORY-MYSQL-CONFIGUREDPositiveDBDbConnectionFactory initializes MySQL database connection using MySqlConnector.DbConnectionFactoryTests.cs:L28Backend xUnit
DB-FACTORY-SQLITE-DEFAULTPositiveDBDbConnectionFactory initializes SQLite database connection with SQLCipher encryption.DbConnectionFactoryTests.cs:L10Backend xUnit
DB-INITIALIZER-CRUD-CONTRACTPositiveDBDatabaseInitializer baseline schema supports CRUD operations across core domain tables.DatabaseInitializerTests.cs:L71Backend xUnit
DB-INITIALIZER-ENSURE-ALIASPositiveDBEnsureAliasColumn safely adds Alias column if missing and is idempotent.DatabaseInitializerTests.cs:L54Backend xUnit
DB-INITIALIZER-IDEMPOTENCYPositiveDBDatabaseInitializer is idempotent and succeeds without error when executed multiple times.DatabaseInitializerTests.cs:L40Backend xUnit
DB-INITIALIZER-SCHEMA-BASELINEPositiveDBDatabaseInitializer creates all 12 canonical tables on a fresh SQLite database.DatabaseInitializerTests.cs:L10Backend xUnit
DB-MAPPING-SAVE-SQLITEPositiveDBPermissionsController persists group mappings to SQLite database.PermissionsControllerTests.cs:L182Backend xUnit
DB-POLICY-SAVE-MYSQLPositiveDBPermissionsController persists access policy to MySQL database repository.PermissionsControllerTests.cs:L91Backend xUnit
DB-POLICY-SAVE-SQLITEPositiveDBPermissionsController persists access policy to SQLite database repository.PermissionsControllerTests.cs:L80Backend xUnit
DB-PROVIDER-INSTANTIATION-DIALECTSPositiveDBDbConnectionFactory instantiates valid IDbConnection instances across sqlite, mysql, and mssql dialects.MultiDatabaseProviderIntegrationTests.cs:L9Backend xUnit
DB-QUOTA-REPO-DELETEPositiveDBIUserQuotaRepository DeleteUserQuotaAsync removes user quota recordUserQuotaAndAppKeyRepositoryTests.cs:L132Backend xUnit
DB-QUOTA-REPO-DI-REGISTRATIONPositiveDBIUserQuotaRepository is registered in dependency injection and resolvableUserQuotaAndAppKeyRepositoryTests.cs:L199Backend xUnit
DB-QUOTA-REPO-GET-ALLPositiveDBIUserQuotaRepository GetAllUserQuotasAsync retrieves all quotas ordered by usernameUserQuotaAndAppKeyRepositoryTests.cs:L98Backend xUnit
DB-QUOTA-REPO-SET-GETPositiveDBIUserQuotaRepository persists user quota overrides and retrieves them correctlyUserQuotaAndAppKeyRepositoryTests.cs:L85Backend xUnit
DB-QUOTA-REPO-UPDATE-CONFLICTPositiveDBIUserQuotaRepository SetUserQuotaAsync updates existing quota on conflictUserQuotaAndAppKeyRepositoryTests.cs:L117Backend xUnit
DB-SEEDER-INIT-SETTINGS-PROVIDERSPositiveDBDatabaseSeederService initializes default router settings, provider configs, and schema.DatabaseSeederServiceTests.cs:L30Backend xUnit
DB-SEEDER-ROUTER-DEFAULT-DATAPositiveDBDatabaseSeeder initializes default router tables, settings, and seed servers.SeederAndDiscoveryTests.cs:L53Backend xUnit
DB-SQLITE-LEGACY-UPGRADE-MIGRATIONPositiveDBSQLite auto-migration seamlessly upgrades legacy schema, encrypts plaintext secrets, and preserves dataDatabaseSchemaUpgradeAndContractTests.cs:L29Backend xUnit
DB-TYPEHANDLER-JSON-LIST-SERIALIZATIONPositiveDBJsonListTypeHandler serializes and deserializes string collections to JSON text across database providers.MultiDatabaseProviderIntegrationTests.cs:L42Backend xUnit
SEC-DB-ENCRYPTION-KEY-AUTOGEN-FAILGuardrailDBResolveDbEncryptionKey wraps file persistence errors in InvalidOperationExceptionDbKeyHelperTests.cs:L334Backend xUnit
DOC-SETUP-SKILL-FRONTMATTERPositiveDOCmcg-setup skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 charactersSetupSkillTests.cs:L18Backend xUnit
DOC-SETUP-SKILL-MIRRORPositiveDOCThe mcg-setup skill and templates are mirrored 1:1 in .agents/skills/mcg-setup/SetupSkillTests.cs:L152Backend xUnit
DOC-SETUP-SKILL-TEMPLATESPositiveDOCAll scaffold templates exist, are non-empty, and contain required directives such as responseBufferLimit, MCG_MASTER_KEY, and ghcr.io/spelech/model-context-gatewaySetupSkillTests.cs:L98Backend xUnit
DOC-SETUP-SKILL-WORKFLOWPositiveDOCmcg-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 configurationSetupSkillTests.cs:L44Backend xUnit
AUTH-123GuardrailGUARDRotateAppKey forbids non-owner non-admin user from rotating another user's key.AppKeyRotationControllerTests.cs:L81Backend xUnit
AUTH-EXTERNAL-IDP-DENIES-ANONYMOUS-LOOPBACKGuardrailGUARDWhen an external IDP is configured, anonymous loopback requests do not bypass authentication.StandaloneAdminAuthTests.cs:L224Backend xUnit
AUTH-STANDALONE-ADMINPOLICY-EXTERNAL-DENYGuardrailGUARDAdminPolicy rejects unauthenticated requests from non-whitelisted external IPs in standalone mode.StandaloneAdminAuthTests.cs:L200Backend xUnit
AUTH-STANDALONE-EXTERNAL-DENYGuardrailGUARDStandalone mode denies admin access to non-whitelisted external IPs without an Admin AppKey.StandaloneAdminAuthTests.cs:L57Backend xUnit
GUARD-01GuardrailGUARDhandles policy save failure with error toastusePolicyStore.test.ts:L86Frontend Vitest
GUARD-02GuardrailGUARDSSE transport fails closed with SecurityException when secret provider resolution failsSseTransportTests.cs:L34Backend xUnit
GUARD-03GuardrailGUARDCompositeSecretRetriever throws InvalidOperationException when an unregistered secret provider is requested.CompositeSecretRetrieverTests.cs:L17Backend xUnit
GUARD-04GuardrailGUARDMalformed completion payloads or unmapped backends must fail closed safelyPairwiseIntegrationMatrixTests.cs:L508Backend xUnit
GUARD-05GuardrailGUARDSocket-level SSRF protection blocks private and loopback IP connections unless explicitly allowlisted.ChallengerTests.cs:L730Backend xUnit
GUARD-06GuardrailGUARDAuth middleware enforces case-insensitive route matching preventing path bypass.ChallengerTests.cs:L234Backend xUnit
GUARD-07GuardrailGUARDCustom files endpoint validates file path ensuring sibling directory traversal and parent traversal fail closed.CustomFilesSecurityTests.cs:L8Backend xUnit
GUARD-ADMIN-CUSTOM-FILES-VALIDATIONGuardrailGUARDmanage_custom_files rejects invalid prompt JSON syntax and unsupported file categories.AdminToolsParityTests.cs:L779Backend xUnit
GUARD-ADMIN-ENDPOINT-UNAUTHORIZEDGuardrailGUARDUnauthenticated / non-admin client request to /admin receives 403 Forbidden.AdminEndpointsTests.cs:L193Backend xUnit
GUARD-ADMIN-POLICIES-WILDCARD-DENYGuardrailGUARDmanage_policies rejects wildcard deny policies to prevent global lockout.AdminToolsParityTests.cs:L513Backend xUnit
GUARD-ADMIN-PROVIDERS-LDAP-PLAINTEXTGuardrailGUARDmanage_providers rejects unencrypted LDAP connections on port 389.AdminToolsParityTests.cs:L650Backend xUnit
GUARD-ADMIN-SERVERS-VALIDATIONGuardrailGUARDVerifies that the manage_servers tool accurately enforces validation by rejecting malformed transport types, missing required parameters, and requests for non-existent servers.AdminToolsParityTests.cs:L324Backend xUnit
GUARD-ADMIN-UNKNOWN-TOOLGuardrailGUARDAdminMcpServer returns an error response for unknown tool or action invocations.AdminMcpServerTests.cs:L596Backend xUnit
GUARD-APPKEY-EMPTY-CATEGORYGuardrailGUARDAppKey creation with empty or whitespace category must fail closed with BadRequestCategoryScopedAppKeysTests.cs:L239Backend xUnit
GUARD-APPKEY-MALFORMED-SCOPESGuardrailGUARDCorrupted AppKey scopes JSON must fail closed and reject executionPairwiseIntegrationMatrixTests.cs:L490Backend xUnit
GUARD-APPKEY-MISSING-NAMEGuardrailGUARDRejects AppKey creation with BadRequest when name is missing.AppKeysControllerTests.cs:L312Backend xUnit
GUARD-APPKEY-QUOTA-INVALID-PARAMGuardrailGUARDReturns BadRequest on invalid quota override input parameters.AppKeysControllerTests.cs:L433Backend xUnit
GUARD-APPKEY-REVOKE-FORBIDGuardrailGUARDReturns Forbid when non-owner/non-admin attempts to revoke an AppKey.AppKeysControllerTests.cs:L378Backend xUnit
GUARD-APPKEY-REVOKE-NOTFOUNDGuardrailGUARDReturns NotFound when revoking non-existent AppKey ID.AppKeysControllerTests.cs:L369Backend xUnit
GUARD-APPKEY-UNKNOWN-CATEGORYGuardrailGUARDNon-admin callers cannot create AppKeys with unconfigured categoriesCategoryScopedAppKeysTests.cs:L220Backend xUnit
GUARD-APPKEY-USER-QUOTAGuardrailGUARDEnforces user AppKey limit and returns BadRequest when quota is exceeded.AppKeysControllerTests.cs:L324Backend xUnit
GUARD-AUTH-MIDDLEWARE-UNAUTHORIZEDGuardrailGUARDAuth middleware blocks unauthorized requests with HTTP 401 Unauthorized.McpIntegrationTests.cs:L591Backend xUnit
GUARD-AUTH-NULL-TARGETGuardrailGUARDNull or empty capability targets must immediately fail closed and return unauthorizedPairwiseIntegrationMatrixTests.cs:L468Backend xUnit
GUARD-CLIENT-CLEANUP-REPO-ERRGuardrailGUARDCleanupClients returns 500 when repository throws.ClientsControllerTests.cs:L352Backend xUnit
GUARD-CLIENT-CREATE-REPO-ERRGuardrailGUARDCreateClient returns 500 when repository throwsClientsControllerTests.cs:L300Backend xUnit
GUARD-CLIENT-DELETE-REPO-ERRGuardrailGUARDDeleteClient returns 500 when repository throwsClientsControllerTests.cs:L317Backend xUnit
GUARD-CLIENT-EMPTY-CATEGORYGuardrailGUARDClient creation with empty category scope must fail closed with BadRequestCategoryScopedAppKeysTests.cs:L304Backend xUnit
GUARD-CLIENT-EMPTY-SCOPEGuardrailGUARDCreateClient fails closed when category scope is emptyClientsControllerTests.cs:L283Backend xUnit
GUARD-CLIENT-MISSING-NAMEGuardrailGUARDCreateClient fails closed when DisplayName is missingClientsControllerTests.cs:L270Backend xUnit
GUARD-DISPOSED-01PositiveGUARDStateless HTTP POST lifecycle: HTTP response completes, HttpContext is marked disposed, background backend initialization completes successfully without ObjectDisposedException.DownstreamSessionIntegrationTests.cs:L225Backend xUnit
GUARD-HTTP-NO-SECRET-RETRIEVERGuardrailGUARDHTTP stateless transport fails closed with InvalidOperationException when no secret retriever is configuredHttpTransportTests.cs:L54Backend xUnit
GUARD-HTTP-SECRET-RETRIEVAL-FAIL-CLOSEDGuardrailGUARDHTTP stateless transport fails closed with SecurityException when secret resolution failsHttpTransportTests.cs:L31Backend xUnit
GUARD-LDAP-FILTER-ESCAPEPositiveGUARDEscapeLdapFilter sanitizes and escapes special LDAP filter characters to prevent LDAP injection.LdapActiveDirectoryServiceTests.cs:L10Backend xUnit
GUARD-MAPPING-GET-DB-ERRORGuardrailGUARDPermissionsController returns 500 on database error during mapping retrieval.PermissionsControllerTests.cs:L147Backend xUnit
GUARD-MAPPING-MISSING-EXT-IDGuardrailGUARDPermissionsController rejects mapping save missing external ID with BadRequest.PermissionsControllerTests.cs:L160Backend xUnit
GUARD-MAPPING-MISSING-GROUPGuardrailGUARDPermissionsController rejects mapping save missing internal group with BadRequest.PermissionsControllerTests.cs:L171Backend xUnit
GUARD-MAPPING-SAVE-DB-ERRORGuardrailGUARDPermissionsController returns 500 when saving mapping encounters DB error.PermissionsControllerTests.cs:L193Backend xUnit
GUARD-MAPPING-UNMAPPED-DENYGuardrailGUARDFails closed and denies access when no valid group mapping exists for a restricted target.GroupMappingsAndSpecAuthTests.cs:L125Backend xUnit
GUARD-POLICY-DELETE-DB-ERRORGuardrailGUARDPermissionsController fails closed with 500 when database delete fails.PermissionsControllerTests.cs:L124Backend xUnit
GUARD-POLICY-MISSING-GROUPGuardrailGUARDPermissionsController rejects policy saves missing requiredGroup with BadRequest.PermissionsControllerTests.cs:L69Backend xUnit
GUARD-POLICY-MISSING-TARGETGuardrailGUARDPermissionsController rejects policy saves missing targetId with BadRequest.PermissionsControllerTests.cs:L58Backend xUnit
GUARD-PROVIDER-MISSING-AUTH-NAMEGuardrailGUARDProvidersController rejects saving auth provider without providerName with BadRequest.ProvidersControllerTests.cs:L172Backend xUnit
GUARD-PROVIDER-MISSING-SECRET-NAMEGuardrailGUARDProvidersController rejects saving secret provider without providerName with BadRequest.ProvidersControllerTests.cs:L90Backend xUnit
GUARD-RBAC-COMPLETION-PROMPTGuardrailGUARDcompletion/complete throws UnauthorizedAccessException when caller lacks prompt permissions.UnifiedMcpAuthorizationTests.cs:L613Backend xUnit
GUARD-RBAC-COMPLETION-TEMPLATEGuardrailGUARDcompletion/complete throws UnauthorizedAccessException when caller lacks resource template permissions.UnifiedMcpAuthorizationTests.cs:L645Backend xUnit
GUARD-RBAC-COMPLETION-UNRESOLVEDGuardrailGUARDcompletion/complete fails closed on unknown or unresolved completion references.UnifiedMcpAuthorizationTests.cs:L677Backend xUnit
GUARD-RBAC-DEFAULT-DENYGuardrailGUARDRBAC defaults to deny when no matching access policies are configured.FineGrainedRbacTests.cs:L84Backend xUnit
GUARD-RBAC-EXPLICIT-DENYGuardrailGUARDRBAC enforces explicit policy denials to reject unauthorized callers.FineGrainedRbacTests.cs:L118Backend xUnit
GUARD-RBAC-MISSING-GROUPGuardrailGUARDRBAC denies access when user does not possess the required security group.FineGrainedRbacTests.cs:L106Backend xUnit
GUARD-RBAC-NULL-TARGETGuardrailGUARDIsUserAuthorizedAsync fails closed on null, empty, or whitespace target identifiers.UnifiedMcpAuthorizationTests.cs:L198Backend xUnit
GUARD-RBAC-PROMPT-UNAUTHORIZEDGuardrailGUARDGetPromptAsync throws UnauthorizedAccessException when user lacks permissions for target prompt.FineGrainedRbacTests.cs:L145Backend xUnit
GUARD-RBAC-RESOURCE-UNAUTHORIZEDGuardrailGUARDReadResourceAsync throws UnauthorizedAccessException when user lacks permissions for target resource.FineGrainedRbacTests.cs:L159Backend xUnit
GUARD-RBAC-TOOL-UNAUTHORIZEDGuardrailGUARDCallToolAsync returns a formatted security error when user is unauthorized.FineGrainedRbacTests.cs:L130Backend xUnit
GUARD-ROUTING-UNKNOWN-TOOLGuardrailGUARDToolRoutingManager throws KeyNotFoundException when calling a tool not registered in the routing table.ToolRoutingManagerTests.cs:L187Backend xUnit
GUARD-ROUTING-UNREGISTERED-RESOURCEGuardrailGUARDResourceRoutingManager throws KeyNotFoundException when reading an unregistered resource URI.ResourceRoutingManagerTests.cs:L67Backend xUnit
GUARD-SECURITY-IDENTIFIER-VALIDATIONPositiveGUARDSecurityValidationHelper validates tool and prompt names against namespaced server identifiers.SecurityValidationHelperTests.cs:L44Backend xUnit
GUARD-STATE-DISCONNECT-CANCELLATIONGuardrailGUARDJsonRpcStateManager rejects registration and cancels pending completions upon disconnect.ConcurrentResponseIsolationTests.cs:L578Backend xUnit
GUARD-TOOL-CANCELLATIONGuardrailGUARDToolRoutingManager propagates task cancellation gracefully with a standardized JSON-RPC error response.ToolRoutingManagerTests.cs:L155Backend xUnit
GUARD-TOOL-MANDATORY-PARAMSGuardrailGUARDToolRoutingManager returns an error when execute_tool is invoked without the mandatory tool name parameter.ToolRoutingManagerTests.cs:L125Backend xUnit
GUARD-UNSUPPORTED-DB-PROVIDERGuardrailGUARDDbConnectionFactory fails closed and throws InvalidOperationException when configured with unsupported database provider.MultiDatabaseProviderIntegrationTests.cs:L29Backend xUnit
GUARD-VALIDATION-STDIO-SHELL-OPERATORSGuardrailGUARDServerValidationHelper validates stdio commands against unsafe shell operators, piping, and command injection.ServerEndpointsValidationTests.cs:L7Backend xUnit
MCP-ADMIN-TOOL-TEST-CALL-ERRORGuardrailGUARDAdminMcpServer test_tool_call propagates downstream backend errors with visibility.AdminMcpServerTests.cs:L637Backend xUnit
API-PIPELINE-GET-HEALTHPositiveMCPGET /health returns gateway health status with 200 OK.PipelineIntegrationTests.cs:L439Backend xUnit
API-PIPELINE-GET-SERVERSPositiveMCPGET /api/servers returns backend servers list with 200 OK.PipelineIntegrationTests.cs:L340Backend xUnit
API-PIPELINE-GET-STATSPositiveMCPGET /api/stats returns server statistics with 200 OK.PipelineIntegrationTests.cs:L430Backend xUnit
API-PIPELINE-GET-VERSIONPositiveMCPGET /api/version returns version information with 200 OK.PipelineIntegrationTests.cs:L331Backend xUnit
API-PIPELINE-POST-MESSAGE-PROTOCOLPositiveMCPFull end-to-end JSON-RPC session message suite executes over HTTP POST.PipelineIntegrationTests.cs:L143Backend xUnit
API-PIPELINE-POST-SSE-PROTOCOLPositiveMCPFull end-to-end JSON-RPC protocol suite executes across SSE pipeline.PipelineIntegrationTests.cs:L86Backend xUnit
API-PIPELINE-SERVER-CRUDPositiveMCPBackend server CRUD pipeline endpoints persist and manage downstream servers.PipelineIntegrationTests.cs:L277Backend xUnit
HEALTH-PROBE-ALL-ENABLED-FLEETPositiveMCPBackendHealthCheckService probes all enabled backend servers in the fleet.BackendHealthCheckServiceTests.cs:L161Backend xUnit
HEALTH-PROBE-CUSTOM-SERVER-CONNECTEDPositiveMCPBackendHealthCheckService marks registered custom servers as Connected.BackendHealthCheckServiceTests.cs:L264Backend xUnit
HEALTH-PROBE-DISABLED-SERVERPositiveMCPBackendHealthCheckService marks disabled servers as Disabled.BackendHealthCheckServiceTests.cs:L132Backend xUnit
HEALTH-PROBE-HTTP-CONNECTED-200PositiveMCPBackendHealthCheckService marks server as Connected when downstream HTTP/SSE endpoint returns 200 OK.BackendHealthCheckServiceTests.cs:L57Backend xUnit
HEALTH-PROBE-HTTP-FAILED-EXCEPTIONPositiveMCPBackendHealthCheckService marks server as Failed when downstream HTTP connection fails.BackendHealthCheckServiceTests.cs:L97Backend xUnit
HEALTH-PROBE-STDIO-VALID-CONNECTEDPositiveMCPBackendHealthCheckService sets valid STDIO servers to Connected without making network HTTP probes.BackendHealthCheckServiceTests.cs:L190Backend xUnit
MCP-01PositiveMCPinitializes with default stateuseServerStore.test.ts:L24Frontend Vitest
MCP-02PositiveMCPAll MCP protocol capabilities enforce caller role authorizations consistentlyPairwiseIntegrationMatrixTests.cs:L385Backend xUnit
MCP-05PositiveMCPResourceRoutingManager returns all registered resources when search query is empty.ResourceRoutingManagerTests.cs:L8Backend xUnit
MCP-06PositiveMCPprompts/list aggregates, namespaces, and routes prompts to target backends.McpIntegrationTests.cs:L499Backend xUnit
MCP-08PositiveMCPcompletion/complete forwards prompt completions to backend when caller is authorized.UnifiedMcpAuthorizationTests.cs:L473Backend xUnit
MCP-10PositiveMCPDockerAutoDiscoveryService handles missing Docker socket gracefully without throwing unhandled exceptions.SeederAndDiscoveryTests.cs:L83Backend xUnit
MCP-12GuardrailMCPDynamicEmbeddingService retrieves and persists embedding provider configurations in Settings table.DynamicEmbeddingServiceTests.cs:L62Backend xUnit
MCP-15PositiveMCPAll JSON-RPC results return a resultType discriminator (complete or input_required) per MCP 2026-07-28 spec.ProtocolResultTypeTests.cs:L7Backend xUnit
MCP-21PositiveMCPAdmin endpoint handles direct Streamable HTTP POST tools/list request returning JSON even with Accept text/event-stream header.AdminEndpointsTests.cs:L370Backend xUnit
MCP-22GuardrailMCPAdminMcpServer ProcessRequestAsync handles server/discover request returning supported versions and subscriptions capability.AdminMcpServerTests.cs:L686Backend xUnit
MCP-23PositiveMCPAdminMcpServer HandleInitializeAsync includes subscriptions capability in capabilities object.AdminMcpServerTests.cs:L655Backend xUnit
MCP-24PositiveMCPMcpSpecMiddleware extracts OpenTelemetry W3C traceparent, tracestate, and baggage from headers and _meta.McpSpecMiddlewareTests.cs:L219Backend xUnit
MCP-25PositiveMCPToolRoutingManager falls back to SessionManager global server tools cache during cold-start search_tools executionToolRoutingManagerTests.cs:L264Backend xUnit
MCP-26PositiveMCPToolRoutingManager dynamically registers prefix routes for tools with slash, colon, and double underscore delimitersToolRoutingManagerTests.cs:L434Backend xUnit
MCP-27PositiveMCPMcpServer supports Alias propertyMcpServerTests.cs:L15Backend xUnit
MCP-28GuardrailMCPToolRoutingManager rejects ambiguous bare tool calls when duplicate tool names exist across distinct servers, listing candidates with namespaces.ToolRoutingManagerTests.cs:L647Backend xUnit
MCP-29GuardrailMCPServerValidationHelper rejects invalid characters in Alias.ServerEndpointsValidationTests.cs:L72Backend xUnit
MCP-30PositiveMCPIsUserAuthorizedAsync matches granular tool policies across /, :, and __ delimiters.UnifiedMcpAuthorizationTests.cs:L284Backend xUnit
MCP-31GuardrailMCPDockerAutoDiscoveryService parses mcp.alias from Docker container labelsDockerAutoDiscoveryServiceTests.cs:L188Backend xUnit
MCP-32GuardrailMCPInMemorySimdToolVectorStore scores tool embeddings using .NET 10 hardware SIMD TensorPrimitives.InMemorySimdToolVectorStoreTests.cs:L8Backend xUnit
MCP-33PositiveMCPOpenAiEmbeddingProvider generates embeddings via OpenAI and Ollama compatible endpoints.OpenAiEmbeddingProviderTests.cs:L26Backend xUnit
MCP-34GuardrailMCPToolRoutingManager gracefully falls back to keyword matching when NoOpEmbeddingProvider is active.ToolRoutingManagerFallbackTests.cs:L26Backend xUnit
MCP-35PositiveMCPTest call and prompt endpoints resolve server and strip prefix across slash, dunder, and colon delimiters.PipelineIntegrationTests.cs:L500Backend xUnit
MCP-36PositiveMCPPromptRoutingManager resolves prompt directly on cold-start without requiring prior prompts/list call.PromptAndResourceResilienceTests.cs:L11Backend xUnit
MCP-37PositiveMCPResourceRoutingManager resolves mcp:// URIs directly on cold-start without prior resources/list.PromptAndResourceResilienceTests.cs:L120Backend xUnit
MCP-38PositiveMCPPromptRoutingManager supports slash, colon, and double-underscore delimiters for prompts/get.PromptAndResourceResilienceTests.cs:L56Backend xUnit
MCP-39PositiveMCPCapabilityEndpoints test bench APIs return 404 Not Found gracefully when target server is missing.PromptAndResourceResilienceTests.cs:L165Backend xUnit
MCP-ADMIN-ENDPOINT-CALL-TOOLPositiveMCPAdmin endpoint /admin/message executes tools/call for manage_system diagnostics.AdminEndpointsTests.cs:L294Backend xUnit
MCP-ADMIN-ENDPOINT-HEAD-REQUESTPositiveMCPAdmin endpoint /admin handles HEAD request returning text/event-stream headers.AdminEndpointsTests.cs:L212Backend xUnit
MCP-ADMIN-ENDPOINT-LIST-TOOLSPositiveMCPAdmin endpoint /admin/message executes tools/list over active SSE session and returns 10 admin tools.AdminEndpointsTests.cs:L224Backend xUnit
MCP-ADMIN-ENDPOINT-ROUTER-ADMIN-TARGETPositiveMCPTarget proxy endpoint /router-admin routes directly to the Admin MCP server.AdminEndpointsTests.cs:L149Backend xUnit
MCP-ADMIN-ENDPOINT-SSE-HANDSHAKEPositiveMCPAdmin endpoint /admin/sse performs initialize handshake with 2026-07-28 protocol version.AdminEndpointsTests.cs:L62Backend xUnit
MCP-ADMIN-INITIALIZE-HANDSHAKEPositiveMCPAdminMcpServer initialize handles protocol negotiation for 2026-07-28 and 2024-11-05.AdminMcpServerTests.cs:L199Backend xUnit
MCP-ADMIN-PARITY-APPKEYSPositiveMCPmanage_appkeys supports full parity for list, get_limits, create, and revoke actions.AdminToolsParityTests.cs:L370Backend xUnit
MCP-ADMIN-PARITY-CLIENTSPositiveMCPmanage_clients supports full parity for register, list, and delete actions.AdminToolsParityTests.cs:L423Backend xUnit
MCP-ADMIN-PARITY-CUSTOM-FILESPositiveMCPmanage_custom_files supports full parity for list, get, save, and delete prompt and resource files.AdminToolsParityTests.cs:L716Backend xUnit
MCP-ADMIN-PARITY-GROUP-MAPPINGSPositiveMCPmanage_group_mappings supports full parity for list, save, and delete external-to-internal group mappings.AdminToolsParityTests.cs:L530Backend xUnit
MCP-ADMIN-PARITY-JSONRPC-DISPATCHPositiveMCPAdminMcpServer processes standard JSON-RPC 2.0 requests (tools/list, tools/call, ping).AdminToolsParityTests.cs:L873Backend xUnit
MCP-ADMIN-PARITY-POLICIESPositiveMCPmanage_policies supports full parity for list, save, and delete access control policies.AdminToolsParityTests.cs:L464Backend xUnit
MCP-ADMIN-PARITY-PROVIDERSPositiveMCPmanage_providers supports full parity for list, save_secret, test_vault, save_auth, and test_ldap actions.AdminToolsParityTests.cs:L577Backend xUnit
MCP-ADMIN-PARITY-SERVER-ALIASPositiveMCPAdminMcpServer manage_servers supports server alias for add, update, and list actions with collision validation.AdminMcpServerTests.cs:L948Backend xUnit
MCP-ADMIN-PARITY-SERVERSPositiveMCPValidates that the manage_servers tool provides comprehensive administrative capabilities including listing, retrieving, creating, updating, toggling, deleting, and reconnecting servers.AdminToolsParityTests.cs:L234Backend xUnit
MCP-ADMIN-PARITY-SETTINGSPositiveMCPmanage_settings supports full parity for get and update global router configurations.AdminToolsParityTests.cs:L667Backend xUnit
MCP-ADMIN-PARITY-SYSTEMPositiveMCPmanage_system supports full parity for diagnostics, get_logs, clear_logs, and query_audit actions.AdminToolsParityTests.cs:L816Backend xUnit
MCP-ADMIN-PARITY-TEST-TOOL-CALLPositiveMCPtest_tool_call executes test bench backend tool calls and formats responses.AdminToolsParityTests.cs:L846Backend xUnit
MCP-ADMIN-PARITY-TOOLS-COVERAGEPositiveMCPEnsures every UI management workflow is backed by a verified, equivalent action within the consolidated Admin MCP tools.AdminToolsParityTests.cs:L191Backend xUnit
MCP-ADMIN-RECONNECT-ALL-PROPAGATIONPositiveMCPAdminMcpServer manage_servers reconnect_all triggers StartInitializationForBackend across active sessions.AdminMcpServerTests.cs:L730Backend xUnit
MCP-ADMIN-REQUEST-WITHOUT-ID-NOT-DROPPEDPositiveMCPAdmin endpoint executes requests without an ID and does not drop them as notifications.AdminEndpointsTests.cs:L550Backend xUnit
MCP-ADMIN-REVERSE-PROXY-X-FORWARDED-HOSTPositiveMCPAdmin SSE endpoint prioritizes X-Forwarded-Host header over Request.Host in endpoint URI advertising.AdminEndpointsTests.cs:L514Backend xUnit
MCP-ADMIN-SKILL-E2E-PROVISIONINGPositiveMCPAdmin automation templates and JSON-RPC tool calls successfully provision a blank-slate gateway instance end-to-end via HTTP /admin/message.AdminAutomationSkillTests.cs:L176Backend xUnit
MCP-ADMIN-SKILL-FRONTMATTERPositiveMCPmcg-admin skill frontmatter is valid YAML, specifies name, description starting with 'Use when...', and length is under 1024 charactersAdminAutomationSkillTests.cs:L21Backend xUnit
MCP-ADMIN-SKILL-MIRRORPositiveMCPmcg-admin skill files and templates are identically mirrored between skills/ and .agents/skills/ directoriesAdminAutomationSkillTests.cs:L147Backend xUnit
MCP-ADMIN-SKILL-TEMPLATESPositiveMCPAll 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 automationAdminAutomationSkillTests.cs:L103Backend xUnit
MCP-ADMIN-SKILL-WORKFLOWPositiveMCPmcg-admin skill contains all 7 administration phases including diagnostics, secrets, auth providers, RBAC/group mappings, settings/embeddings, servers/clients, and live tool verificationAdminAutomationSkillTests.cs:L47Backend xUnit
MCP-ADMIN-SSE-ZOD-COMPLIANTPositiveMCPAdmin endpoint direct POST response does not serialize null error or _meta fields.AdminEndpointsTests.cs:L487Backend xUnit
MCP-ADMIN-TOOL-AUDIT-LOGPositiveMCPAdminMcpServer tool calls record audit log entries with caller and tool name.AdminMcpServerTests.cs:L270Backend xUnit
MCP-ADMIN-TOOL-MANAGE-APPKEYSPositiveMCPAdminMcpServer executes manage_appkeys create, list, limits, and revoke actions.AdminMcpServerTests.cs:L287Backend xUnit
MCP-ADMIN-TOOL-MANAGE-CLIENTSPositiveMCPAdminMcpServer executes manage_clients register, list, and delete actions.AdminMcpServerTests.cs:L334Backend xUnit
MCP-ADMIN-TOOL-MANAGE-CUSTOM-FILESPositiveMCPAdminMcpServer executes manage_custom_files save, get, list, and delete actions.AdminMcpServerTests.cs:L508Backend xUnit
MCP-ADMIN-TOOL-MANAGE-GROUP-MAPPINGSPositiveMCPAdminMcpServer executes manage_group_mappings save, list, and delete actions.AdminMcpServerTests.cs:L406Backend xUnit
MCP-ADMIN-TOOL-MANAGE-POLICIESPositiveMCPAdminMcpServer executes manage_policies save, list, and delete actions.AdminMcpServerTests.cs:L372Backend xUnit
MCP-ADMIN-TOOL-MANAGE-PROVIDERSPositiveMCPAdminMcpServer executes manage_providers list, save_secret, and save_auth actions.AdminMcpServerTests.cs:L439Backend xUnit
MCP-ADMIN-TOOL-MANAGE-SERVERSPositiveMCPAdminMcpServer executes manage_servers list, get, create, update, toggle, and delete actions.AdminMcpServerTests.cs:L218Backend xUnit
MCP-ADMIN-TOOL-MANAGE-SETTINGSPositiveMCPAdminMcpServer executes manage_settings get and update actions.AdminMcpServerTests.cs:L482Backend xUnit
MCP-ADMIN-TOOL-MANAGE-SYSTEMPositiveMCPAdminMcpServer executes manage_system diagnostics, get_logs, clear_logs, and query_audit actions.AdminMcpServerTests.cs:L562Backend xUnit
MCP-ADMIN-TOOLS-LIST-COUNTPositiveMCPAdminMcpServer tools/list returns all 10 consolidated tools with complete JSON schemas.AdminMcpServerTests.cs:L151Backend xUnit
MCP-ADMIN-ZOD-STRICT-RESPONSEPositiveMCPJsonRpcResponse serialization omits null result, error, and _meta fields completely to satisfy Zod strict validation.AdminEndpointsTests.cs:L452Backend xUnit
MCP-COLDSTART-01PositiveMCPFull cold-start cycle: SessionManager cache seeded -> search_tools -> execute_tool dispatches to downstream mock server and returns output.DownstreamSessionIntegrationTests.cs:L130Backend xUnit
MCP-DOWNSTREAM-INIT-DIAGNOSTICSPositiveMCPInitializes downstream MCP backends with detailed diagnostic logging.McpIntegrationTests.cs:L317Backend xUnit
MCP-ERROR-ACTIONABLE-SUGGESTION-CATEGORIESPositiveMCPToolErrorFormatter categorizes error messages and produces domain-specific remediation guidance.ToolErrorFormatterTests.cs:L42Backend xUnit
MCP-ERROR-FORMAT-JSONRPC-REMEDIATIONPositiveMCPToolErrorFormatter attaches actionable suggestions and remediation resource URIs to JSON-RPC error payloads.ToolErrorFormatterTests.cs:L7Backend xUnit
MCP-ERROR-FORMAT-UNHANDLED-EXCEPTIONPositiveMCPToolErrorFormatter converts unhandled exceptions to standardized JSON-RPC error format with suggestions.ToolErrorFormatterTests.cs:L27Backend xUnit
MCP-EXEC-TOOL-ENFORCE-AUTH-POLICIESPositiveMCPMeta-mode execute_tool strictly enforces target tool authorization policiesPairwiseIntegrationMatrixTests.cs:L567Backend xUnit
MCP-EXEC-TOOL-ENFORCE-CATEGORY-SCOPESPositiveMCPRouter meta-mode execute_tool validates and enforces category scopes on target tool callsCategoryScopedAppKeysTests.cs:L428Backend xUnit
MCP-FILES-DIR-HELPER-INITPositiveMCPCustomFilesDirectoryHelper initializes and creates required directories on startup.McpIntegrationTests.cs:L1069Backend xUnit
MCP-JSON-REWRITE-ADVERSARIAL-EDGE-CASESPositiveMCPJsonNode request rewrite handles adversarial mixed arrays, block comments, and malformed JSON.ChallengerTests.cs:L590Backend xUnit
MCP-JSON-REWRITE-BATCH-COMMENTS-COMMASPositiveMCPRewriteRequestJson accurately parses JSON batches, comments, and trailing commas using System.Text.Json JsonNode.ChallengerTests.cs:L191Backend xUnit
MCP-JSON-REWRITE-META-IN-PARAMSPositiveMCPRewriteRequestJson strips _meta from root and embeds it into params to comply with MCP JSON-RPC 2.0 Zod schema.ChallengerTests.cs:L216Backend xUnit
MCP-JSONRPC-CONVERTER-MINIMAL-VARIANTSPositiveMCPJsonRpcMessageConverter deserializes edge-case minimal/null JSON-RPC variants without stack overflows.ChallengerTests.cs:L702Backend xUnit
MCP-JSONRPC-CONVERTER-PRIORITIZE-RESPONSEPositiveMCPJsonRpcMessageConverter prioritizes result/error properties over method property in polymorphic response parsing.ChallengerTests.cs:L354Backend xUnit
MCP-JSONRPC-DESERIALIZE-PLAIN-NO-OVERFLOWPositiveMCPDeserializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow.McpIntegrationTests.cs:L287Backend xUnit
MCP-JSONRPC-POLYMORPHIC-DESERIALIZATIONPositiveMCPPolymorphic JSON-RPC message deserializer accurately instantiates request, response, and notification subclasses.McpIntegrationTests.cs:L259Backend xUnit
MCP-JSONRPC-SERIALIZE-PLAIN-NO-OVERFLOWPositiveMCPSerializing plain JsonRpcMessage does not cause recursive converter invocation or stack overflow.McpIntegrationTests.cs:L303Backend xUnit
MCP-MOCK-JSONRPC-FLOWPositiveMCPMockDownstreamMcpServer handles initialize, initialized, tools/list, and tools/call JSON-RPC 2.0 protocol cycles.MockDownstreamMcpServerTests.cs:L11Backend xUnit
MCP-MOCK-RESOURCES-PROMPTS-SUPPORTPositiveMCPMockDownstreamMcpServer handles resources/list and prompts/list MCP protocol methods.TransportResilienceTests.cs:L123Backend xUnit
MCP-RESILIENT-01PositiveMCPPrefix-based resilient routing: execute_tool called with unregistered but prefixed tool name dynamically resolves server and executes.DownstreamSessionIntegrationTests.cs:L294Backend xUnit
MCP-SESSION-BUILTIN-PROMPTSPositiveMCPClientSession lists built-in diagnostic and routing prompts.ClientSessionTests.cs:L115Backend xUnit
MCP-SESSION-BUILTIN-RESOURCESPositiveMCPClientSession lists built-in resources including router://status.ClientSessionTests.cs:L99Backend xUnit
MCP-SESSION-CALL-SEARCH-TOOLSPositiveMCPClientSession calls built-in search_tools and returns structured search results.ClientSessionTests.cs:L132Backend xUnit
MCP-SESSION-ERROR-TRANSFORM-CANCEL-SAMPLINGPositiveMCPTranslates backend error codes, handles cancellation tokens, and executes sampling requests.McpIntegrationTests.cs:L880Backend xUnit
MCP-SESSION-GET-PROMPT-DIAGNOSEPositiveMCPClientSession gets router__diagnose_failure prompt and returns diagnostic prompt instructions.ClientSessionTests.cs:L176Backend xUnit
MCP-SESSION-MANAGER-PER-SERVER-CACHEPositiveMCPSessionManager caches and isolates connections per downstream backend server.McpIntegrationTests.cs:L1084Backend xUnit
MCP-SESSION-METAMODE-TOOLSPositiveMCPClientSession exposes meta-mode tools search_tools and execute_tool in meta mode.ClientSessionTests.cs:L80Backend xUnit
MCP-SESSION-READ-ROUTER-STATUSPositiveMCPClientSession reads router://status resource and returns online gateway metadata.ClientSessionTests.cs:L153Backend xUnit
MCP-SESSION-REQUEST-CANCELLATIONPositiveMCPClientSession registers and triggers request cancellation for active cancellation tokens.ClientSessionTests.cs:L198Backend xUnit
MCP-SESSION-UNREGISTERED-RESPONSEPositiveMCPClientSession returns false when handling client response for unregistered request ID.ClientSessionTests.cs:L214Backend xUnit
MCP-WIRE-JSONRPC-SPECPositiveMCPMockDownstreamMcpServer treats messages with omitted id as notifications returning 202 Accepted with empty body.MockDownstreamMcpServerTests.cs:L98Backend xUnit
MCP-WIRE-PROTOCOL-MATRIXPositiveMCPMockDownstreamMcpServer dynamically negotiates requested protocol version.MockDownstreamMcpServerTests.cs:L80Backend xUnit
UI-104PositiveMCPrenders resource tester with servers and resourcesResourceTesterCard.test.tsx:L1Frontend Vitest
UI-106PositiveMCPrenders connected server details with badges and triggers actionsServerCard.test.tsx:L1Frontend Vitest
UI-107PositiveMCPrenders prompt dropdown and filters by selected serverPromptTesterCard.test.tsx:L1Frontend Vitest
UI-112PositiveMCPrenders nothing when isAddEditOpen is falseServerModal.test.tsx:L1Frontend Vitest
UI-121PositiveMCPshould open Add Server modal and switch secret provider typesserver-management.spec.ts:L1Playwright E2E
UI-SERVERS-ALIAS-MANAGEMENTPositiveMCPrenders server alias badge alongside server id when configuredServerCard.test.tsx:L145Frontend Vitest
API-PIPELINE-GET-AUDITPositiveSECGET /api/audit returns audit log records with 200 OK.PipelineIntegrationTests.cs:L394Backend xUnit
API-PIPELINE-GET-LOGSPositiveSECGET /api/logs returns system log records with 200 OK.PipelineIntegrationTests.cs:L421Backend xUnit
AUTH-106GuardrailSECExchange throws InvalidOperationException when request is null.AuthorizationControllerTests.cs:L19Backend xUnit
AUTH-107PositiveSECRegisterClient successfully handles DCR requests when open DCR is enabled.AuthorizationControllerTests.cs:L36Backend xUnit
AUTH-108GuardrailSECAuthorize throws InvalidOperationException when OIDC request is null.AuthorizationControllerTests.cs:L77Backend xUnit
AUTH-109PositiveSECRegisterClient uses IOAuthClientRepository when IOpenIddictApplicationManager is null.AuthorizationControllerTests.cs:L94Backend xUnit
AUTH-111GuardrailSECPipeline exposes RFC 9728 OAuth Protected Resource discovery endpoints with dynamic resource identifiers.PipelineIntegrationTests.cs:L63Backend xUnit
AUTH-112GuardrailSECAuthorize resolves client application from IOAuthClientRepository and redirects to consent.AuthorizationControllerTests.cs:L297Backend xUnit
AUTH-113PositiveSECRegisterClient supports public clients with PKCE (token_endpoint_auth_method: none) and omits client secret.AuthorizationControllerTests.cs:L351Backend xUnit
AUTH-114GuardrailSECRegisterClient rejects invalid or non-absolute redirect URIs with standard RFC 7591 invalid_redirect_uri error.AuthorizationControllerTests.cs:L400Backend xUnit
AUTH-115PositiveSECRegisterClient dynamically binds requested scopes to OpenIddict application descriptor permissions.AuthorizationControllerTests.cs:L435Backend xUnit
AUTH-116GuardrailSECExchange rejects client_credentials grant attempts by public clients with UnauthorizedClient error.AuthorizationControllerTests.cs:L475Backend xUnit
AUTH-117GuardrailSECRegisterClient returns 403 Forbidden with access_denied when open client registration is disabled and caller is unauthorized.AuthorizationControllerTests.cs:L516Backend xUnit
MCP-ADMIN-TEST-TOOL-CALL-SECRET-RESOLUTIONPositiveSECAdminMcpServer test_tool_call resolves server secrets via injected ISecretRetriever.AdminMcpServerTests.cs:L765Backend xUnit
MCP-ADMIN-TEST-TOOL-CALL-USER-SECRET-STOREPositiveSECAdminMcpServer test_tool_call resolves user credentials via injected IUserSecretStore and caller context.AdminMcpServerTests.cs:L856Backend xUnit
SEC-01GuardrailSECSQLite database is encrypted at rest using SQLCipher with DB_ENCRYPTION_KEY.DatabaseEncryptionTests.cs:L8Backend xUnit
SEC-02PositiveSECVaultSecretRetriever dynamically loads, applies, and reloads Vault configurations from database repository.ProviderSettingsEncryptionTests.cs:L294Backend xUnit
SEC-03PositiveSECEnvironmentSecretRetriever retrieves configured environment variable value.SecretRetrieverTests.cs:L5Backend xUnit
SEC-04PositiveSECWindowsRegistrySecretRetriever handles non-Windows platforms gracefully and returns null.SecretRetrieverTests.cs:L34Backend xUnit
SEC-05PositiveSECrenders RPC message stream with formatted JSONLogsTerminalCard.test.tsx:L61Frontend Vitest
SEC-30PositiveSECRenders User Secret Storage options and toggles Vault with warning when disabled.SecretProvidersTab.test.tsx:L136Frontend Vitest
SEC-ADMIN-AUDIT-REDACTIONPositiveSECAdminMcpServer redacts sensitive secrets from argument payloads before recording audit logs.AdminMcpServerTests.cs:L613Backend xUnit
SEC-APPKEY-SANITIZE-METADATA-GETPositiveSECAppKeys API returns sanitized key metadata without leaking plaintext tokens.AppKeysControllerTests.cs:L259Backend xUnit
SEC-AUDIT-LOG-ADMIN-ACTION-RECORDPositiveSECAuditLogger records administrative configuration changes and security events to AdminAuditLogs table.AuditLoggerTests.cs:L75Backend xUnit
SEC-AUDIT-LOG-INVOCATION-RECORDPositiveSECAuditLogger writes tool invocation audit records with actor attribution and duration to AuditLogs table.AuditLoggerTests.cs:L60Backend xUnit
SEC-AUDIT-LOGGER-ADMIN-PERSISTPositiveSECAuditLogger persists administrative actions directly into AdminAuditLogs database table.AuditQueryApiTests.cs:L150Backend xUnit
SEC-AUDIT-MAPPING-SAVE-ACTIONPositiveSECPermissionsController records audit action when group mapping is saved.AuditQueryApiTests.cs:L117Backend xUnit
SEC-AUDIT-PER-REQUEST-ACTOR-ATTRIBUTIONPositiveSECAudit logger attributes per-request actor credentials accurately across stateless calls.McpIntegrationTests.cs:L128Backend xUnit
SEC-AUDIT-POLICY-SAVE-ACTIONPositiveSECPermissionsController records audit action when access policy is saved.AuditQueryApiTests.cs:L83Backend xUnit
SEC-AUDIT-QUERY-FILTERED-ROWSPositiveSECAudit queries support filtering by user, server, and pagination while recording query access in audit log.AuditQueryApiTests.cs:L60Backend xUnit
SEC-GATEWAY-ZERO-CONFIG-BOOTPositiveSECGateway boots from a blank slate with zero master key environment variables, auto-generates .master.key, and serves health and admin endpoints.AdminAutomationSkillTests.cs:L352Backend xUnit
SEC-HTTP-SECRET-URL-FALLBACKPositiveSECHttpTransport falls back to URL and SecretItemKey when specific secret paths are unconfigured.TransportsAuthShapeTests.cs:L160Backend xUnit
SEC-KEY-PROVIDER-AUTOGENPositiveSECEncryptionKeyProvider delegates to DbKeyHelper to auto-generate master key when unconfigured.EncryptionKeyProviderTests.cs:L42Backend xUnit
SEC-KEY-PROVIDER-CONFIGPositiveSECEncryptionKeyProvider returns configured DB_ENCRYPTION_KEY or MCG_SECRET.EncryptionKeyProviderTests.cs:L28Backend xUnit
SEC-KEY-PROVIDER-FALLBACKPositiveSECEncryptionKeyProvider falls back to DB_ENCRYPTION_KEY when MCG_SECRET is unconfigured.EncryptionKeyProviderTests.cs:L70Backend xUnit
SEC-KEY-PROVIDER-SECRETPositiveSECEncryptionKeyProvider returns configured MCG_SECRET.EncryptionKeyProviderTests.cs:L56Backend xUnit
SEC-KEYFILE-AUTOGENPositiveSECBlank-slate initialization auto-generates a 256-bit base64 master key and persists it to .master.key.DbKeyHelperTests.cs:L63Backend xUnit
SEC-KEYFILE-ENV-PRECEDENCEPositiveSECExplicit environment variables MCG_MASTER_KEY or MCG_SECRET take precedence over keyfiles.DbKeyHelperTests.cs:L28Backend xUnit
SEC-KEYFILE-FILE-OVER-KEYFILEPositiveSECExplicit file secrets take precedence over persistent .master.key files.DbKeyHelperTests.cs:L123Backend xUnit
SEC-KEYFILE-FILE-SECRETPositiveSECFile-based secrets configured via MCG_MASTER_KEY_FILE or standard Docker secrets paths are resolved.DbKeyHelperTests.cs:L45Backend xUnit
SEC-KEYFILE-HIERARCHY-PRECEDENCEPositiveSECExplicit environment variables take precedence over file secrets and keyfiles.DbKeyHelperTests.cs:L101Backend xUnit
SEC-KEYFILE-RELOADPositiveSECExisting .master.key file is loaded across gateway restarts without key mutation.DbKeyHelperTests.cs:L83Backend xUnit
SEC-KEYSOURCE-DETECTIONPositiveSECCorrectly identifies KeySource origin for environment, file, and auto-generated keys.DbKeyHelperTests.cs:L144Backend xUnit
SEC-KEYSOURCE-SETCACHEDKEYPositiveSECSetCachedKey sets in-memory encryption key and updates ActiveKeySource.DbKeyHelperTests.cs:L314Backend xUnit
SEC-LOG-PROVIDER-PRESERVE-PLAINPositiveSECSanitizingLoggerProvider preserves non-sensitive log statements intact.SanitizingLoggerProviderTests.cs:L43Backend xUnit
SEC-LOG-PROVIDER-REDACT-EXCEPTIONSPositiveSECSanitizingLoggerProvider sanitizes exception messages and stack traces to prevent credential leaks in error logs.SanitizingLoggerProviderTests.cs:L76Backend xUnit
SEC-LOG-PROVIDER-REDACT-SECRETSPositiveSECSanitizingLoggerProvider automatically redacts Bearer tokens, API keys, and credentials in log message strings.SanitizingLoggerProviderTests.cs:L8Backend xUnit
SEC-MASTERKEY-ATOMIC-REENCRYPTIONPositiveSECAtomically re-encrypts database credentials when setting a custom master key.MasterKeyReEncryptionTests.cs:L142Backend xUnit
SEC-MASTERKEY-CONFIGURED-STATUS-BADGEPositiveSECDisplays configured badge and rotate button when custom master key is configured.GeneralTab.test.tsx:L192Frontend Vitest
SEC-MASTERKEY-CUSTOM-MODAL-REENCRYPTIONPositiveSECValidates master key inputs (length, match) and triggers atomic re-encryption.MasterKeyModal.test.tsx:L6Frontend Vitest
SEC-MASTERKEY-EXTERNAL-LOCKED-BADGEPositiveSECDisplays locked badge when master key is externally managed via Vault or Environment.GeneralTab.test.tsx:L149Frontend Vitest
SEC-MASTERKEY-UI-STATUS-BANNERPositiveSECDisplays warning banner when keySource is AutoGenerated and opens custom master key modal.GeneralTab.test.tsx:L115Frontend Vitest
SEC-PII-BASIC-COOKIE-QUERY-USERINFOPositiveSECPiiSanitizer redacts Basic auth credentials, session cookies, query access tokens, and URL userinfo credentials.PiiSanitizerTests.cs:L53Backend xUnit
SEC-PII-BEARER-TOKENPositiveSECPiiSanitizer redacts Bearer authentication tokens from payload strings.PiiSanitizerTests.cs:L5Backend xUnit
SEC-PII-CONNECTION-STRING-PASSWORDPositiveSECPiiSanitizer redacts database connection string passwords.PiiSanitizerTests.cs:L29Backend xUnit
SEC-PII-JSON-APIKEY-PASSWORDPositiveSECPiiSanitizer redacts apiKey, password, and secret properties in JSON payloads.PiiSanitizerTests.cs:L16Backend xUnit
SEC-PII-LOGBUFFER-IN-MEMORYPositiveSECLogBuffer sanitizes PII and credentials prior to buffering in memory.PiiSanitizerTests.cs:L40Backend xUnit
SEC-PROVIDER-GUARD-CORRUPT-ENCRYPTED-FIELDGuardrailSECRouter must not overwrite corrupt encrypted database fields if an update occurs without user reset.ProviderSettingsEncryptionTests.cs:L388Backend xUnit
SEC-PROVIDER-MASK-SECRETS-GETPositiveSECProvidersController GET endpoints mask sensitive tokens and passwords as asterisks.ProviderSettingsEncryptionTests.cs:L130Backend xUnit
SEC-PROVIDER-REDACT-AUDIT-PAYLOADSPositiveSECProvidersController redacts sensitive secrets in administrative audit logs.ProviderSettingsEncryptionTests.cs:L185Backend xUnit
SEC-SESSIONID-OPAQUE-NOT-BEARERPositiveSECMcp-Session-Id header generates opaque UUIDs without leaking bearer tokens.McpIntegrationTests.cs:L1119Backend xUnit
SEC-VAULT-BOOTSTRAPPINGPositiveSECBootstraps master encryption key directly from HashiCorp Vault when VAULT_ADDR is configured.DbKeyHelperTests.cs:L191Backend xUnit
SEC-VAULT-CUSTOM-MOUNT-PATHPositiveSECSseTransport resolves dynamic secrets from Vault using custom mounts, paths, and secret fields.TransportsAuthShapeTests.cs:L134Backend xUnit
SEC-VAULT-CUSTOM-PATHPositiveSECBootstraps master key from Vault using custom mount path and secret key name.DbKeyHelperTests.cs:L236Backend xUnit
UI-105PositiveSECrenders system logs and handles level filterLogsTerminalCard.test.tsx:L1Frontend Vitest
TRANS-01PositiveTRANSHttpTransport formats X-API-Key header when downstream server AuthShape is 'x-api-key'.EnterpriseAuthAndVaultScenarioTests.cs:L258Backend xUnit
TRANS-02PositiveTRANSRegister STDIO server with Env provider, verify connection card, and execute tool via Test Bench.full-ui-flow-stdio-env.spec.ts:L13Playwright E2E
TRANS-03PositiveTRANSHttpTransport SendNotificationAsync gracefully handles 404 and 405 without throwing exceptionsTransportResilienceTests.cs:L160Backend xUnit
TRANS-04PositiveTRANSHTTP stateless transport correctly accumulates multi-line SSE streams and skips intermediate notification eventsHttpTransportTests.cs:L72Backend xUnit
TRANS-05PositiveTRANSHTTP stateless transport reads entire multi-line and formatted JSON response bodies without premature truncationHttpTransportTests.cs:L109Backend xUnit
TRANS-06PositiveTRANSHTTP stateless transport joins multi-line SSE data fields into complete JSON payloadsHttpTransportTests.cs:L146Backend xUnit
TRANS-AUTH-SHAPES-CUSTOM-HEADERPositiveTRANSSseTransport applies custom header names for proprietary target backend authentication.TransportsAuthShapeTests.cs:L45Backend xUnit
TRANS-AUTH-SHAPES-HEADERS-JSONPositiveTRANSSseTransport parses and applies extra request headers from HeadersJson configuration.TransportsAuthShapeTests.cs:L112Backend xUnit
TRANS-AUTH-SHAPES-QUERY-PARAMPositiveTRANSSseTransport appends authentication tokens as URL query parameters when query auth shape is configured.TransportsAuthShapeTests.cs:L67Backend xUnit
TRANS-AUTH-SHAPES-STANDARD-HEADERSPositiveTRANSSseTransport formats standard authorization shapes (bearer, basic, raw, x-api-key) into HTTP headers.TransportsAuthShapeTests.cs:L17Backend xUnit
TRANS-BACKEND-MULTIPLEX-CONCURRENT-RPCPositiveTRANSBackendConnection multiplexes 100+ concurrent asynchronous polymorphic RPC requests without deadlocking.ChallengerTests.cs:L512Backend xUnit
TRANS-DISCONNECT-PENDING-CLEANUPPositiveTRANSCleans up and cancels pending requests upon backend transport disconnect.ConcurrentResponseIsolationTests.cs:L277Backend xUnit
TRANS-EXPLICIT-NULL-ID-ISOLATIONPositiveTRANSHandles JSON-RPC requests with explicit null IDs and multiplexes upstream calls correctly.ConcurrentResponseIsolationTests.cs:L346Backend xUnit
TRANS-HIGH-CONCURRENCY-ISOLATIONPositiveTRANSMaintains strict response isolation under high concurrency with 100+ callers reusing identical RPC IDs.ConcurrentResponseIsolationTests.cs:L111Backend xUnit
TRANS-HTTP-AUTH-CUSTOM-HEADERPositiveTRANSHttpTransport formats custom header authentication for target servers.TransportsAuthShapeTests.cs:L90Backend xUnit
TRANS-HTTP-DISPOSED-GUARDGuardrailTRANSHttpTransport SendRequestAsync returns -32001 Not Connected when transport has been disposed.TransportResilienceTests.cs:L59Backend xUnit
TRANS-HTTP-RESOLVE-STATIC-APIKEYPositiveTRANSHTTP stateless transport resolves static API keys when secret provider is NoneHttpTransportTests.cs:L11Backend xUnit
TRANS-ISOLATION-SAME-ID-REVERSED-ORDERPositiveTRANSMultiplexes concurrent client calls sharing identical JSON-RPC IDs and routes reversed responses correctly.ConcurrentResponseIsolationTests.cs:L12Backend xUnit
TRANS-MIXED-ID-TYPES-ISOLATIONPositiveTRANSHandles mixed numeric, string, and null JSON-RPC IDs concurrently across backend transports.ConcurrentResponseIsolationTests.cs:L614Backend xUnit
TRANS-NOTIFICATION-NO-RESPONSE-LISTENERPositiveTRANSHandles JSON-RPC notifications without registering pending response listeners.ConcurrentResponseIsolationTests.cs:L419Backend xUnit
TRANS-SSE-CALLMETHOD-DISCONNECT-GUARDGuardrailTRANSSseTransport CallMethodAsync returns -32001 Not Connected when backend is disconnected.TransportResilienceTests.cs:L12Backend xUnit
TRANS-SSE-LOG-ENDPOINT-WAIT-EXCEPTIONPositiveTRANSSSE transport logs exceptions gracefully when waiting for endpoint URL without throwing unhandled exceptions.SseTransportTests.cs:L76Backend xUnit
TRANS-SSE-NOTIF-FORWARD-FIELDS-INTACTPositiveTRANSSSE backend notifications are forwarded to client sessions with all payload fields intact.ChallengerTests.cs:L437Backend xUnit
TRANS-SSE-RESOLVE-STATIC-APIKEYPositiveTRANSSSE transport resolves static plaintext API keys when provider is NoneSseTransportTests.cs:L13Backend xUnit
TRANS-SSE-SENDREQUEST-DISCONNECT-GUARDGuardrailTRANSSseTransport SendRequestAsync returns -32001 Not Connected when backend is disconnected.TransportResilienceTests.cs:L36Backend xUnit
TRANS-SSE-STREAM-LIFECYCLEPositiveTRANSSSE transport correctly resolves relative endpoint URLs and ignores keep-alive SSE comments.SseTransportTests.cs:L100Backend xUnit
TRANS-STATELESS-CANCELLATION-ISOLATIONPositiveTRANSIsolates cancellation tokens between concurrent stateless client requests.ConcurrentResponseIsolationTests.cs:L482Backend xUnit
TRANS-STDIO-DISPOSED-GUARDGuardrailTRANSStdioTransport SendRequestAsync returns -32001 Process Not Running when transport has been disposed.TransportResilienceTests.cs:L101Backend xUnit
TRANS-STDIO-DRAIN-BUFFER-EOFPositiveTRANSSTDIO transport drains buffered stdout/stderr streams to EOF when process exits rapidlyStdioTransportTests.cs:L472Backend xUnit
TRANS-STDIO-SPAWN-TOOL-CALLPositiveTRANSSTDIO transport spawns subprocess, handles JSON-RPC initialization and executes tool callsStdioTransportTests.cs:L49Backend xUnit
TRANS-STDIO-STREAM-STDERR-LOGSPositiveTRANSSTDIO transport streams subprocess stderr asynchronously to structured router diagnostic logsStdioTransportTests.cs:L170Backend xUnit
TRANS-STDIO-TERMINATE-CLEANLYPositiveTRANSSTDIO transport terminates subprocess tree cleanly upon disposal or cancellationStdioTransportTests.cs:L242Backend xUnit
TRANS-STDIO-TOKENIZE-PRESERVE-QUOTESPositiveTRANSSTDIO command-line tokenizer preserves quoted arguments and space escapingStdioTransportTests.cs:L327Backend xUnit
TRANS-TARGETED-CANCELLATION-ISOLATIONPositiveTRANSTargeted cancellation does not cancel concurrent client sessions reusing identical RPC IDs.ConcurrentResponseIsolationTests.cs:L532Backend xUnit
TRANS-TIMEOUT-PENDING-CLEANUPPositiveTRANSSendRequestAsync times out cleanly and removes pending completion handlers without leaking memory.ChallengerTests.cs:L294Backend xUnit
TRANS-VALIDATION-HTTP-ALLOWED-IPSPositiveTRANSServerValidationHelper accepts valid HTTP/HTTPS endpoints allowed by IP security rules.ServerEndpointsValidationTests.cs:L38Backend xUnit
UI-01PositiveUIopens confirmation modal and resolves true when confirmeduseConfirmStore.test.ts:L31Frontend Vitest
UI-02PositiveUIInspect modal displays spinner loading state while querying server capabilitiesServerInspectModal.test.tsx:L61Frontend Vitest
UI-03PositiveUIGrouped server view renders category sections and supports collapsible groupsDashboardView.test.tsx:L63Frontend Vitest
UI-04PositiveUITool selector filters available tools by selected backend serverToolTesterCard.test.tsx:L77Frontend Vitest
UI-05PositiveUIRouter allows customized branding parameters (DashboardTitle, DashboardIcon) to be saved and retrieved via the API.PipelineIntegrationTests.cs:L254Backend xUnit
UI-06PositiveUIRouter supports uploading and retrieving custom branding logo images via dedicated endpoints.PipelineIntegrationTests.cs:L448Backend xUnit
UI-07PositiveUIAudits desktop viewport layout for zero horizontal overflow and high UX score.layout-inspector.spec.ts:L255Playwright E2E
UI-102PositiveUIDashboard renders stats card, connected server list, and setup instructionsDashboardView.test.tsx:L1Frontend Vitest
UI-103PositiveUIInteractive tool tester renders server and tool selection dropdownsToolTesterCard.test.tsx:L1Frontend Vitest
UI-108PositiveUIrenders nothing when isMappingModalOpen is falseMappingModal.test.tsx:L1Frontend Vitest
UI-109PositiveUIRenders ClientSetupGuide below the user credentials card.MyMcpServers.test.tsx:L104Frontend Vitest
UI-110PositiveUIrenders title, MCG badge, subtitle, and version badgeHeader.test.tsx:L1Frontend Vitest
UI-111PositiveUIrenders GeneralTab and triggers saveSettingsTabs.test.tsx:L1Frontend Vitest
UI-113PositiveUIrenders tab navigation and switches active subviewsSettingsView.test.tsx:L1Frontend Vitest
UI-115PositiveUIrenders test bench cards and switches tabsTestBenchView.test.tsx:L1Frontend Vitest
UI-116PositiveUIModal remains hidden when isInspectOpen is falseServerInspectModal.test.tsx:L1Frontend Vitest
UI-117PositiveUIreturns null when isOpen is falseSharedComponents.test.tsx:L1Frontend Vitest
UI-119PositiveUIcalls server endpoints correctlytypedApi.test.ts:L1Frontend Vitest
UI-122PositiveUIshould navigate to Settings view and configure vector embedding optionssettings.spec.ts:L1Playwright E2E
UI-124PositiveUIRenders main dashboard navigation tabs and layout headersdashboard.spec.ts:L1Playwright E2E
UI-126PositiveUIshould open Server Inspect Modal and inspect capabilities tabs deterministicallyserver-inspector.spec.ts:L1Playwright E2E
UI-128PositiveUIshould navigate to Test Bench view, render tester cards, and test semantic searchtestbench.spec.ts:L1Playwright E2E
UI-130PositiveUIRenders Connect Account button for OAuth-enabled servers directing to authorization URL.MyMcpServers.test.tsx:L121Frontend Vitest
UI-131PositiveUIRenders Connected (OAuth) badge and supports account disconnection.MyMcpServers.test.tsx:L157Frontend Vitest
UI-132PositiveUIgroups slash-namespaced tools into distinct backend servers without grouping under customTestBenchView.test.tsx:L198Frontend Vitest
UI-133PositiveUIverifies deterministic data-testid attributes and interactive flow across test bench tabsTestBenchView.test.tsx:L473Frontend Vitest
UI-134PositiveUIverifies server modal exposes deterministic data-testid attributesServerModal.test.tsx:L225Frontend Vitest
UI-135PositiveUItoggles 3LO OAuth fields and submits with complete OAuth configurationServerModal.test.tsx:L249Frontend Vitest
UI-136GuardrailUIDisables backdrop click dismissal on the key rotation modal to protect plaintext credentials.AppKeyRotateModal.test.tsx:L67Frontend Vitest
UI-137PositiveUIRenders Last Used column and triggers Rotate Secret action for registered clients.RegisteredClientsCard.test.tsx:L158Frontend Vitest
UI-30PositiveUIRenders client registration form with inputs for name, client type, redirect URIs, grant types, scopes, and expiration.ClientModal.test.tsx:L27Frontend Vitest
UI-31GuardrailUIFetches registered OAuth clients and updates store state.useClientStore.test.ts:L37Frontend Vitest
UI-32PositiveUIRegisters OAuth client with extended metadata (redirect URIs, grant types, client type, expiration) and captures one-time credentials.useClientStore.test.ts:L76Frontend Vitest
UI-CONFIRM-MODALGuardrailUICentralized promise-based confirmation store resolves true on confirmation and false on cancellation.useConfirmStore.test.ts:L4Frontend Vitest
UI-TOAST-TRANSITIONGuardrailUIDisplays error toast notification when saving invalid JSON credentials for user-provided server.MyMcpServers.test.tsx:L25Frontend Vitest

Released under the Apache 2.0 License.