Skip to content

Unittest

JavaScript Unit TestingΒΆ

MCP Gateway uses Vitest for JavaScript unit testing, providing fast and modern testing capabilities for browser-based code. Tests cover pure/near-pure utility functions in admin.js (validation, formatting, parsing, error handling, display, and config).

Configuration FilesΒΆ

  • vitest.config.js - Main Vitest configuration (Istanbul coverage, JSDOM environment)
  • tests/js/helpers/admin-env.js - Shared JSDOM + Istanbul instrumentation helper

Running JavaScript TestsΒΆ

# Run all tests
npm test
# or: make test-js

# Run with coverage report
npm run test:coverage
# or: make test-js-coverage

# Watch mode (auto-rerun on changes)
npm run test:watch

# Interactive UI mode
npm run test:ui

Test StructureΒΆ

JavaScript tests are located in the tests/js/ directory, organized by category:

tests/
└── js/
    β”œβ”€β”€ helpers/
    β”‚   └── admin-env.js               # Shared JSDOM + Istanbul setup
    β”œβ”€β”€ admin.test.js                   # escapeHtml (13 tests)
    β”œβ”€β”€ admin-validation.test.js        # Input/URL/JSON/IP/cert validators (92 tests)
    β”œβ”€β”€ admin-formatting.test.js        # formatValue/Number/Date/FileSize/etc. (46 tests)
    β”œβ”€β”€ admin-parsing.test.js           # parseUriTemplate/ThinkTags/CertInfo/KPI (47 tests)
    β”œβ”€β”€ admin-display.test.js           # Log/severity classes, status badges (39 tests)
    β”œβ”€β”€ admin-config.test.js            # isAdminUser, getRootPath, aggregation (27 tests)
    └── admin-errors.test.js            # handleFetchError (7 tests)

Total: 271 tests across 7 test files.

Writing TestsΒΆ

Tests use Vitest's Jest-compatible API with the shared helper for JSDOM setup:

import { describe, test, expect, beforeAll, afterAll } from 'vitest';
import { loadAdminJs, cleanupAdminJs } from './helpers/admin-env.js';

let win;

beforeAll(() => {
  win = loadAdminJs();
});

afterAll(() => {
  cleanupAdminJs();
});

describe('myFunction', () => {
  test('should do something', () => {
    expect(win.myFunction('input')).toBe('expected output');
  });
});

CoverageΒΆ

admin.js is a ~31K-line non-modular browser script. Tests cover all pure/near-pure utility functions:

Metric Coverage
Statements 6.29%
Branches 4.51%
Functions 8.93%
Lines 6.32%

The remaining ~93% is DOM manipulation, fetch calls, Chart.js rendering, and HTMX event handlers that require full browser mocking or integration tests.


Python Unit TestingΒΆ

filepath passed skipped SUBTOTAL
tests/differential/test_pii_filter_differential.py 0 32 32
tests/e2e/test_admin_apis.py 32 1 33
tests/e2e/test_main_apis.py 110 1 111
tests/e2e/test_translate_dynamic_env_e2e.py 1 14 15
tests/integration/test_a2a_sdk_integration.py 0 23 23
tests/integration/test_concurrency_row_locking.py 0 41 41
tests/integration/test_cross_hook_context_sharing.py 0 6 6
tests/integration/test_dcr_flow_integration.py 0 8 8
tests/integration/test_integration.py 0 5 5
tests/integration/test_llmchat_endpoints.py 0 14 14
tests/integration/test_mcp_session_pool_integration.py 0 12 12
tests/integration/test_metadata_integration.py 0 8 8
tests/integration/test_rbac_ownership_http.py 0 10 10
tests/integration/test_resource_plugin_integration.py 0 5 5
tests/integration/test_session_registry_redis_integration.py 0 1 1
tests/integration/test_streamable_http_redis.py 0 7 7
tests/integration/test_tag_endpoints.py 0 21 21
tests/integration/test_tool_cancel_integration.py 0 13 13
tests/integration/test_tools_pagination.py 0 6 6
tests/integration/test_translate_dynamic_env.py 0 16 16
tests/integration/test_translate_echo.py 0 13 13
tests/security/test_input_validation.py 66 2 68
tests/security/test_rpc_api.py 0 1 1
tests/security/test_validation.py 25 1 26
tests/unit/mcpgateway/cache/test_session_registry_extended.py 27 3 30
tests/unit/mcpgateway/middleware/test_http_auth_integration.py 18 6 24
tests/unit/mcpgateway/middleware/test_rbac.py 77 9 86
tests/unit/mcpgateway/plugins/plugins/altk_json_processor/test_json_processor.py 0 1 1
tests/unit/mcpgateway/plugins/plugins/sparc_static_validator/test_sparc_static_validator.py 4 32 36
tests/unit/mcpgateway/plugins/test_pii_filter_rust.py 1 44 45
tests/unit/mcpgateway/plugins/tools/test_cli.py 8 1 9
tests/unit/mcpgateway/routers/test_reverse_proxy.py 65 1 66
tests/unit/mcpgateway/routers/test_teams.py 39 5 44
tests/unit/mcpgateway/services/test_email_auth_basic.py 103 3 106
tests/unit/mcpgateway/services/test_event_service.py 22 5 27
tests/unit/mcpgateway/services/test_gateway_service.py 271 1 272
tests/unit/mcpgateway/services/test_gateway_service_extended.py 37 1 38
tests/unit/mcpgateway/services/test_mcp_client_chat_service_extended.py 101 1 102
tests/unit/mcpgateway/services/test_row_level_locking.py 16 2 18
tests/unit/mcpgateway/services/test_team_invitation_service.py 37 4 41
tests/unit/mcpgateway/test_observability.py 31 1 32
tests/unit/mcpgateway/test_postgresql_schema_config.py 14 2 16
tests/unit/mcpgateway/test_ui_version.py 0 1 1
tests/unit/mcpgateway/tools/builder/test_dagger_deploy.py 0 20 20
tests/unit/mcpgateway/validation/test_validators_advanced.py 102 3 105
tests/async/test_async_safety.py 3 0 3
tests/e2e/test_admin_mcp_pool_metrics.py 14 0 14
tests/e2e/test_oauth_protected_resource.py 17 0 17
tests/e2e/test_session_pool_e2e.py 34 0 34
tests/security/test_configurable_headers.py 6 0 6
tests/security/test_rpc_input_validation.py 14 0 14
tests/security/test_security_cookies.py 19 0 19
tests/security/test_rpc_endpoint_validation.py 5 0 5
tests/security/test_security_headers.py 21 0 21
tests/security/test_security_middleware_comprehensive.py 49 0 49
tests/security/test_security_performance_compatibility.py 29 0 29
tests/security/test_standalone_middleware.py 4 0 4
tests/test_readme.py 1 0 1
tests/unit/mcpgateway/cache/test_admin_stats_cache.py 17 0 17
tests/unit/mcpgateway/cache/test_auth_cache_l1_l2.py 63 0 63
tests/unit/mcpgateway/cache/test_cache_invalidation_subscriber.py 20 0 20
tests/unit/mcpgateway/cache/test_registry_cache.py 35 0 35
tests/unit/mcpgateway/cache/test_resource_cache.py 12 0 12
tests/unit/mcpgateway/cache/test_session_registry.py 68 0 68
tests/unit/mcpgateway/cache/test_session_registry_coverage.py 63 0 63
tests/unit/mcpgateway/cache/test_tool_lookup_cache.py 19 0 19
tests/unit/mcpgateway/db/test_observability_migrations.py 39 0 39
tests/unit/mcpgateway/handlers/test_sampling.py 27 0 27
tests/unit/mcpgateway/instrumentation/test_sqlalchemy.py 14 0 14
tests/unit/mcpgateway/middleware/test_auth_method_propagation.py 2 0 2
tests/unit/mcpgateway/middleware/test_auth_middleware.py 11 0 11
tests/unit/mcpgateway/middleware/test_compression.py 4 0 4
tests/unit/mcpgateway/middleware/test_correlation_id.py 10 0 10
tests/unit/mcpgateway/middleware/test_db_query_logging.py 12 0 12
tests/unit/mcpgateway/middleware/test_http_auth_headers.py 25 0 25
tests/unit/mcpgateway/middleware/test_observability_middleware.py 6 0 6
tests/unit/mcpgateway/middleware/test_path_filter.py 85 0 85
tests/unit/mcpgateway/middleware/test_protocol_version.py 3 0 3
tests/unit/mcpgateway/middleware/test_request_logging_middleware.py 51 0 51
tests/unit/mcpgateway/middleware/test_request_context.py 1 0 1
tests/unit/mcpgateway/middleware/test_security_headers_middleware.py 16 0 16
tests/unit/mcpgateway/middleware/test_token_scoping.py 35 0 35
tests/unit/mcpgateway/middleware/test_token_scoping_extra.py 40 0 40
tests/unit/mcpgateway/middleware/test_validation_middleware.py 20 0 20
tests/unit/mcpgateway/plugins/agent/test_agent_plugins.py 8 0 8
tests/unit/mcpgateway/plugins/framework/external/grpc/proto/test_plugin_service_pb2_grpc.py 9 0 9
tests/unit/mcpgateway/plugins/framework/external/grpc/server/test_runtime.py 22 0 22
tests/unit/mcpgateway/plugins/framework/external/grpc/server/test_server.py 20 0 20
tests/unit/mcpgateway/plugins/framework/external/grpc/test_client.py 25 0 25
tests/unit/mcpgateway/plugins/framework/external/grpc/test_client_integration.py 7 0 7
tests/unit/mcpgateway/plugins/framework/external/grpc/test_grpc_models.py 42 0 42
tests/unit/mcpgateway/plugins/framework/external/grpc/test_tls_utils.py 24 0 24
tests/unit/mcpgateway/plugins/framework/external/mcp/server/test_runtime.py 16 0 16
tests/unit/mcpgateway/plugins/framework/external/mcp/server/test_runtime_coverage.py 10 0 10
tests/unit/mcpgateway/plugins/framework/external/mcp/server/test_server.py 32 0 32
tests/unit/mcpgateway/plugins/framework/external/mcp/test_client_certificate_validation.py 8 0 8
tests/unit/mcpgateway/plugins/framework/external/mcp/test_client_config.py 16 0 16
tests/unit/mcpgateway/plugins/framework/external/mcp/test_client_coverage.py 22 0 22
tests/unit/mcpgateway/plugins/framework/external/mcp/test_tls_utils.py 27 0 27
tests/unit/mcpgateway/plugins/framework/external/mcp/test_client_stdio.py 7 0 7
tests/unit/mcpgateway/plugins/framework/external/test_proto_convert.py 46 0 46
tests/unit/mcpgateway/plugins/framework/external/mcp/test_client_streamable_http.py 4 0 4
tests/unit/mcpgateway/plugins/framework/external/unix/test_client.py 30 0 30
tests/unit/mcpgateway/plugins/framework/external/unix/test_protocol.py 17 0 17
tests/unit/mcpgateway/plugins/framework/external/unix/test_runtime.py 5 0 5
tests/unit/mcpgateway/plugins/framework/external/unix/test_server.py 28 0 28
tests/unit/mcpgateway/plugins/framework/hooks/test_hook_patterns.py 5 0 5
tests/unit/mcpgateway/plugins/framework/hooks/test_hook_registry.py 12 0 12
tests/unit/mcpgateway/plugins/framework/hooks/test_http.py 42 0 42
tests/unit/mcpgateway/plugins/framework/external/unix/test_client_integration.py 8 0 8
tests/unit/mcpgateway/plugins/framework/loader/test_plugin_loader.py 9 0 9
tests/unit/mcpgateway/plugins/framework/test_context.py 2 0 2
tests/unit/mcpgateway/plugins/framework/test_errors.py 3 0 3
tests/unit/mcpgateway/plugins/framework/test_manager.py 12 0 12
tests/unit/mcpgateway/plugins/framework/test_manager_coverage.py 11 0 11
tests/unit/mcpgateway/plugins/framework/test_manager_extended.py 16 0 16
tests/unit/mcpgateway/plugins/framework/test_memory.py 80 0 80
tests/unit/mcpgateway/plugins/framework/test_models_tls.py 6 0 6
tests/unit/mcpgateway/plugins/framework/test_plugin_base.py 6 0 6
tests/unit/mcpgateway/plugins/framework/test_plugin_base_coverage.py 22 0 22
tests/unit/mcpgateway/plugins/framework/test_plugin_models.py 25 0 25
tests/unit/mcpgateway/plugins/framework/test_plugin_models_coverage.py 27 0 27
tests/unit/mcpgateway/plugins/framework/test_registry.py 9 0 9
tests/unit/mcpgateway/plugins/framework/test_resource_hooks.py 13 0 13
tests/unit/mcpgateway/plugins/framework/test_utils.py 11 0 11
tests/unit/mcpgateway/plugins/plugins/argument_normalizer/test_argument_normalizer.py 4 0 4
tests/unit/mcpgateway/plugins/plugins/cached_tool_result/test_cached_tool_result.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/code_safety_linter/test_code_safety_linter.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/content_moderation/test_content_moderation.py 17 0 17
tests/unit/mcpgateway/plugins/plugins/content_moderation/test_content_moderation_integration.py 5 0 5
tests/unit/mcpgateway/plugins/plugins/external_clamav/test_clamav_remote.py 6 0 6
tests/unit/mcpgateway/plugins/plugins/html_to_markdown/test_html_to_markdown.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/file_type_allowlist/test_file_type_allowlist.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/markdown_cleaner/test_markdown_cleaner.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/json_repair/test_json_repair.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/output_length_guard/test_output_length_guard.py 5 0 5
tests/unit/mcpgateway/plugins/plugins/pii_filter/test_pii_filter.py 18 0 18
tests/unit/mcpgateway/plugins/plugins/resource_filter/test_resource_filter.py 15 0 15
tests/unit/mcpgateway/plugins/plugins/rate_limiter/test_rate_limiter.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/response_cache_by_prompt/test_response_cache_by_prompt.py 19 0 19
tests/unit/mcpgateway/plugins/plugins/schema_guard/test_schema_guard.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/test_init_hooks_plugins.py 107 0 107
tests/unit/mcpgateway/plugins/plugins/url_reputation/test_url_reputation.py 1 0 1
tests/unit/mcpgateway/plugins/plugins/vault/test_vault_plugin.py 9 0 9
tests/unit/mcpgateway/plugins/plugins/vault/test_vault_plugin_smoke.py 3 0 3
tests/unit/mcpgateway/plugins/plugins/virus_total_checker/test_virus_total_checker.py 8 0 8
tests/unit/mcpgateway/plugins/plugins/webhook_notification/test_webhook_integration.py 4 0 4
tests/unit/mcpgateway/plugins/plugins/webhook_notification/test_webhook_notification.py 14 0 14
tests/unit/mcpgateway/routers/test_auth.py 15 0 15
tests/unit/mcpgateway/routers/test_cancellation_router.py 13 0 13
tests/unit/mcpgateway/routers/test_email_auth_helpers.py 8 0 8
tests/unit/mcpgateway/routers/test_email_auth_router.py 62 0 62
tests/unit/mcpgateway/routers/test_llm_admin_router.py 38 0 38
tests/unit/mcpgateway/routers/test_llm_config_router.py 32 0 32
tests/unit/mcpgateway/routers/test_llm_proxy_router.py 10 0 10
tests/unit/mcpgateway/routers/test_llmchat_router.py 68 0 68
tests/unit/mcpgateway/routers/test_log_search.py 12 0 12
tests/unit/mcpgateway/routers/test_log_search_helpers.py 4 0 4
tests/unit/mcpgateway/routers/test_oauth_router.py 59 0 59
tests/unit/mcpgateway/routers/test_observability_sql.py 19 0 19
tests/unit/mcpgateway/routers/test_metrics_maintenance.py 10 0 10
tests/unit/mcpgateway/routers/test_rbac_router.py 18 0 18
tests/unit/mcpgateway/routers/test_sso_router.py 33 0 33
tests/unit/mcpgateway/routers/test_teams_coverage.py 42 0 42
tests/unit/mcpgateway/routers/test_teams_v2.py 10 0 10
tests/unit/mcpgateway/routers/test_tokens.py 38 0 38
tests/unit/mcpgateway/routers/test_well_known.py 37 0 37
tests/unit/mcpgateway/services/test_a2a_query_param_auth.py 9 0 9
tests/unit/mcpgateway/services/test_a2a_service.py 92 0 92
tests/unit/mcpgateway/services/test_argon2_service.py 61 0 61
tests/unit/mcpgateway/services/test_async_crypto_wrappers.py 13 0 13
tests/unit/mcpgateway/services/test_audit_trail_service.py 6 0 6
tests/unit/mcpgateway/services/test_authorization_access.py 34 0 34
tests/unit/mcpgateway/services/test_cancellation_service.py 10 0 10
tests/unit/mcpgateway/services/test_catalog_service.py 44 0 44
tests/unit/mcpgateway/services/test_completion_service.py 10 0 10
tests/unit/mcpgateway/services/test_correlation_id_json_formatter.py 11 0 11
tests/unit/mcpgateway/services/test_dcr_service.py 30 0 30
tests/unit/mcpgateway/services/test_elicitation_service.py 10 0 10
tests/unit/mcpgateway/services/test_encryption_service.py 22 0 22
tests/unit/mcpgateway/services/test_export_service.py 35 0 35
tests/unit/mcpgateway/services/test_gateway_auto_refresh.py 9 0 9
tests/unit/mcpgateway/services/test_gateway_explicit_health_rpc.py 6 0 6
tests/unit/mcpgateway/services/test_gateway_query_param_auth.py 11 0 11
tests/unit/mcpgateway/services/test_gateway_resources_prompts.py 8 0 8
tests/unit/mcpgateway/services/test_gateway_service_health_oauth.py 11 0 11
tests/unit/mcpgateway/services/test_gateway_service_helpers.py 8 0 8
tests/unit/mcpgateway/services/test_gateway_service_oauth_comprehensive.py 30 0 30
tests/unit/mcpgateway/services/test_grpc_service.py 17 0 17
tests/unit/mcpgateway/services/test_gateway_validation_redirects.py 2 0 2
tests/unit/mcpgateway/services/test_grpc_service_no_grpc.py 27 0 27
tests/unit/mcpgateway/services/test_http_client_service.py 20 0 20
tests/unit/mcpgateway/services/test_import_service.py 146 0 146
tests/unit/mcpgateway/services/test_llm_provider_service.py 41 0 41
tests/unit/mcpgateway/services/test_llm_proxy_service.py 61 0 61
tests/unit/mcpgateway/services/test_log_aggregator.py 52 0 52
tests/unit/mcpgateway/services/test_log_aggregator_helpers.py 2 0 2
tests/unit/mcpgateway/services/test_log_storage_service.py 28 0 28
tests/unit/mcpgateway/services/test_logging_service.py 7 0 7
tests/unit/mcpgateway/services/test_logging_service_comprehensive.py 35 0 35
tests/unit/mcpgateway/services/test_mcp_chat_history_extra.py 3 0 3
tests/unit/mcpgateway/services/test_mcp_client_chat_service.py 56 0 56
tests/unit/mcpgateway/services/test_mcp_session_pool.py 69 0 69
tests/unit/mcpgateway/services/test_mcp_session_pool_coverage.py 131 0 131
tests/unit/mcpgateway/services/test_metrics.py 13 0 13
tests/unit/mcpgateway/services/test_metrics_buffer_service.py 44 0 44
tests/unit/mcpgateway/services/test_metrics_cleanup_service.py 17 0 17
tests/unit/mcpgateway/services/test_metrics_query_service.py 39 0 39
tests/unit/mcpgateway/services/test_metrics_rollup_service.py 34 0 34
tests/unit/mcpgateway/services/test_notification_service.py 38 0 38
tests/unit/mcpgateway/services/test_oauth_manager.py 50 0 50
tests/unit/mcpgateway/services/test_oauth_manager_pkce.py 115 0 115
tests/unit/mcpgateway/services/test_observability_service.py 59 0 59
tests/unit/mcpgateway/services/test_performance_service.py 44 0 44
tests/unit/mcpgateway/services/test_performance_tracker.py 25 0 25
tests/unit/mcpgateway/services/test_permission_fallback.py 15 0 15
tests/unit/mcpgateway/services/test_permission_service.py 57 0 57
tests/unit/mcpgateway/services/test_permission_service_comprehensive.py 35 0 35
tests/unit/mcpgateway/services/test_personal_team_service.py 27 0 27
tests/unit/mcpgateway/services/test_plugin_service.py 11 0 11
tests/unit/mcpgateway/services/test_prompt_service.py 97 0 97
tests/unit/mcpgateway/services/test_prompt_service_extended.py 24 0 24
tests/unit/mcpgateway/services/test_resource_ownership.py 16 0 16
tests/unit/mcpgateway/services/test_resource_service.py 140 0 140
tests/unit/mcpgateway/services/test_resource_service_plugins.py 13 0 13
tests/unit/mcpgateway/services/test_role_service.py 66 0 66
tests/unit/mcpgateway/services/test_root_service.py 11 0 11
tests/unit/mcpgateway/services/test_security_logger.py 33 0 33
tests/unit/mcpgateway/services/test_server_service.py 78 0 78
tests/unit/mcpgateway/services/test_sso_admin_assignment.py 6 0 6
tests/unit/mcpgateway/services/test_sso_approval_workflow.py 4 0 4
tests/unit/mcpgateway/services/test_sso_entra_role_mapping.py 35 0 35
tests/unit/mcpgateway/services/test_sso_service.py 74 0 74
tests/unit/mcpgateway/services/test_sso_user_normalization.py 25 0 25
tests/unit/mcpgateway/services/test_structured_logger.py 48 0 48
tests/unit/mcpgateway/services/test_support_bundle_service.py 15 0 15
tests/unit/mcpgateway/services/test_system_stats_service.py 13 0 13
tests/unit/mcpgateway/services/test_tag_service.py 26 0 26
tests/unit/mcpgateway/services/test_team_invitation_service_coverage.py 8 0 8
tests/unit/mcpgateway/services/test_team_management_service.py 105 0 105
tests/unit/mcpgateway/services/test_team_management_service_coverage.py 62 0 62
tests/unit/mcpgateway/services/test_token_catalog_service.py 75 0 75
tests/unit/mcpgateway/services/test_token_storage_service.py 40 0 40
tests/unit/mcpgateway/services/test_tool_service.py 174 0 174
tests/unit/mcpgateway/services/test_tool_service_coverage.py 235 0 235
tests/unit/mcpgateway/services/test_tool_service_helpers.py 3 0 3
tests/unit/mcpgateway/test_admin.py 737 0 737
tests/unit/mcpgateway/test_admin_error_handlers.py 9 0 9
tests/unit/mcpgateway/test_admin_catalog_htmx.py 7 0 7
tests/unit/mcpgateway/test_admin_import_export.py 7 0 7
tests/unit/mcpgateway/test_admin_metrics_helpers.py 7 0 7
tests/unit/mcpgateway/test_admin_module.py 38 0 38
tests/unit/mcpgateway/test_admin_observability_sql.py 27 0 27
tests/unit/mcpgateway/test_auth.py 81 0 81
tests/unit/mcpgateway/test_auth_helpers.py 13 0 13
tests/unit/mcpgateway/test_bootstrap_db.py 35 0 35
tests/unit/mcpgateway/test_cli.py 9 0 9
tests/unit/mcpgateway/test_cli_config_schema.py 14 0 14
tests/unit/mcpgateway/test_cli_export_import_coverage.py 32 0 32
tests/unit/mcpgateway/test_config.py 80 0 80
tests/unit/mcpgateway/test_coverage_push.py 13 0 13
tests/unit/mcpgateway/test_db.py 149 0 149
tests/unit/mcpgateway/test_db_isready.py 10 0 10
tests/unit/mcpgateway/test_display_name_uuid_features.py 28 0 28
tests/unit/mcpgateway/test_final_coverage_push.py 24 0 24
tests/unit/mcpgateway/test_issue_840_a2a_agent.py 10 0 10
tests/unit/mcpgateway/test_llm_schemas.py 40 0 40
tests/unit/mcpgateway/test_main.py 204 0 204
tests/unit/mcpgateway/test_main_error_handlers.py 29 0 29
tests/unit/mcpgateway/test_main_extended.py 213 0 213
tests/unit/mcpgateway/test_main_helpers.py 12 0 12
tests/unit/mcpgateway/test_main_helpers_extra.py 6 0 6
tests/unit/mcpgateway/test_main_pool_init.py 5 0 5
tests/unit/mcpgateway/test_metrics.py 4 0 4
tests/unit/mcpgateway/test_models.py 25 0 25
tests/unit/mcpgateway/test_multi_auth_headers.py 22 0 22
tests/unit/mcpgateway/test_oauth_manager.py 117 0 117
tests/unit/mcpgateway/test_performance_schemas.py 24 0 24
tests/unit/mcpgateway/test_reverse_proxy.py 67 0 67
tests/unit/mcpgateway/test_rpc_backward_compatibility.py 4 0 4
tests/unit/mcpgateway/test_rpc_tool_invocation.py 12 0 12
tests/unit/mcpgateway/test_schemas.py 60 0 60
tests/unit/mcpgateway/test_schemas_auth_validation.py 27 0 27
tests/unit/mcpgateway/test_schemas_validators_extra.py 40 0 40
tests/unit/mcpgateway/test_settings_fields.py 32 0 32
tests/unit/mcpgateway/test_simple_coverage_boost.py 7 0 7
tests/unit/mcpgateway/test_streamable_closedresource_filter.py 1 0 1
tests/unit/mcpgateway/test_toolops_altk_service.py 10 0 10
tests/unit/mcpgateway/test_toolops_utils.py 12 0 12
tests/unit/mcpgateway/test_translate.py 149 0 149
tests/unit/mcpgateway/test_translate_grpc.py 39 0 39
tests/unit/mcpgateway/test_translate_grpc_helpers.py 4 0 4
tests/unit/mcpgateway/test_translate_header_utils.py 4 0 4
tests/unit/mcpgateway/test_translate_helpers.py 5 0 5
tests/unit/mcpgateway/test_translate_stdio_endpoint.py 21 0 21
tests/unit/mcpgateway/test_version.py 21 0 21
tests/unit/mcpgateway/test_validate_env.py 2 0 2
tests/unit/mcpgateway/test_well_known.py 35 0 35
tests/unit/mcpgateway/test_wrapper.py 50 0 50
tests/unit/mcpgateway/tools/builder/test_cli.py 37 0 37
tests/unit/mcpgateway/tools/builder/test_common.py 38 0 38
tests/unit/mcpgateway/tools/builder/test_python_deploy.py 15 0 15
tests/unit/mcpgateway/tools/builder/test_schema.py 29 0 29
tests/unit/mcpgateway/transports/test_redis_event_store.py 10 0 10
tests/unit/mcpgateway/transports/test_sse_transport.py 23 0 23
tests/unit/mcpgateway/transports/test_stdio_transport.py 11 0 11
tests/unit/mcpgateway/transports/test_streamablehttp_transport.py 170 0 170
tests/unit/mcpgateway/transports/test_websocket_transport.py 15 0 15
tests/unit/mcpgateway/utils/test_analyze_query_log.py 9 0 9
tests/unit/mcpgateway/utils/test_correlation_id.py 18 0 18
tests/unit/mcpgateway/utils/test_create_jwt_token.py 22 0 22
tests/unit/mcpgateway/utils/test_db_isready.py 10 0 10
tests/unit/mcpgateway/utils/test_error_formatter.py 23 0 23
tests/unit/mcpgateway/utils/test_generate_keys.py 4 0 4
tests/unit/mcpgateway/utils/test_jwt_config_helper.py 21 0 21
tests/unit/mcpgateway/utils/test_keycloak_discovery.py 8 0 8
tests/unit/mcpgateway/utils/test_metadata_capture.py 32 0 32
tests/unit/mcpgateway/utils/test_orjson_response.py 29 0 29
tests/unit/mcpgateway/utils/test_metrics_common.py 2 0 2
tests/unit/mcpgateway/utils/test_pagination.py 53 0 53
tests/unit/mcpgateway/utils/test_passthrough_headers.py 20 0 20
tests/unit/mcpgateway/utils/test_passthrough_headers_fixed.py 29 0 29
tests/unit/mcpgateway/utils/test_passthrough_headers_security.py 18 0 18
tests/unit/mcpgateway/utils/test_passthrough_headers_source.py 8 0 8
tests/unit/mcpgateway/utils/test_proxy_auth.py 23 0 23
tests/unit/mcpgateway/utils/test_psycopg3_optimizations.py 17 0 17
tests/unit/mcpgateway/utils/test_redis_client.py 25 0 25
tests/unit/mcpgateway/utils/test_redis_isready.py 12 0 12
tests/unit/mcpgateway/utils/test_retry_manager.py 48 0 48
tests/unit/mcpgateway/utils/test_security_cookies.py 4 0 4
tests/unit/mcpgateway/utils/test_services_auth.py 8 0 8
tests/unit/mcpgateway/utils/test_small_utils.py 4 0 4
tests/unit/mcpgateway/utils/test_sqlalchemy_modifier.py 32 0 32
tests/unit/mcpgateway/utils/test_ssl_context_cache.py 4 0 4
tests/unit/mcpgateway/utils/test_ssl_key_manager.py 10 0 10
tests/unit/mcpgateway/utils/test_sso_bootstrap.py 13 0 13
tests/unit/mcpgateway/utils/test_token_scoping_utils.py 7 0 7
tests/unit/mcpgateway/utils/test_url_auth.py 30 0 30
tests/unit/mcpgateway/utils/test_validate_signature.py 18 0 18
tests/unit/mcpgateway/utils/test_verify_credentials.py 59 0 59
tests/unit/mcpgateway/validation/test_jsonrpc.py 7 0 7
tests/unit/mcpgateway/validation/test_tags.py 16 0 16
tests/unit/mcpgateway/validation/test_validators.py 31 0 31
tests/unit/plugins/test_circuit_breaker.py 20 0 20
tests/unit/plugins/test_secrets_detection.py 8 0 8
tests/unit/plugins/test_unified_pdp.py 46 0 46
tests/unit/plugins/test_unified_pdp_plugin.py 14 0 14
tests/unit/plugins/toon_encoder/test_toon.py 102 0 102
tests/unit/plugins/toon_encoder/test_toon_encoder.py 21 0 21
tests/unit/test_session_registry_redis_broadcast.py 1 0 1
TOTAL 10719 407 11126

Coverage reportΒΆ

Name Stmts Miss Branch BrPart Cover Missing
mcpgateway/admin.py 5687 0 1560 104 99% 225->231, 1320->1326, 1579->1581, 1800->1803, 1803->1814, 1974->1977, 1977->1988, 2625->2620, 3006->3013, 3016->3027, 3334->3345, 3685->3688, 3841->3844, 3877->3881, 3964->3967, 4105->4107, 4578->4596, 4792->4771, 5089->5093, 5708->5702, 6007->6014, 6096->6102, 6102->6108, 6108->6114, 6114->6120, 6242->6246, 6254->6257, 6603->6618, 6646->6650, 6798->6811, 6811->6814, 6828->6830, 6913->6918, 6920->6936, 7010->7024, 7024->7030, 7142->7155, 7179->7181, 7216->7221, 7360->7362, 7481->7487, 7552->7558, 7641->7647, 7714->7720, 7829->7845, 7869->7871, 7906->7911, 8010->8023, 8023->8029, 8092->8105, 8105->8111, 8183->8196, 8196->8202, 8289->8302, 8302->8308, 8445->8447, 8457->8459, 8482->8487, 8582->8588, 8605->8607, 8653->8659, 8676->8678, 8987->8990, 8990->8992, 9538->9540, 10627->10630, 11311->11322, 11668->11678, 11670->11678, 11766->11806, 11919->11940, 12463->12465, 12659->12666, 12685->12693, 12709->12711, 12711->12713, 12713->12715, 12715->12717, 12717->12719, 12719->12721, 12721->12727, 12727->12729, 12729->12733, 12733->12738, 12735->12738, 13146->13150, 13275->13279, 13330->13334, 13388->13392, 13441->13445, 13569->13573, 13639->13643, 13702->13706, 14678->14680, 14680->14682, 14682->14684, 14684->14687, 14951->14948, 15094->15083, 15201->15198, 15798->15797, 16333->16335, 16335->16337, 16338->16337
mcpgateway/auth.py 448 54 184 7 89% 160-173, 210-246, 262-289, 671, 795->798, 889-890, 954-959, 996, 1084-1085, 1092
mcpgateway/bootstrap_db.py 259 35 76 7 86% 118-124, 127-136, 189->191, 193-194, 198->201, 272->276, 302-303, 347-348, 352-355, 442-444, 503-507, 517-518, 543-546
mcpgateway/cache/a2a_stats_cache.py 40 2 4 1 93% 155-156
mcpgateway/cache/admin_stats_cache.py 370 0 98 1 99% 182->186
mcpgateway/cache/auth_cache.py 441 0 118 0 100%
mcpgateway/cache/global_config_cache.py 58 2 12 1 96% 147-148
mcpgateway/cache/metrics_cache.py 67 4 8 0 95% 227-228, 243-244
mcpgateway/cache/registry_cache.py 308 20 68 9 92% 242->246, 600->exit, 608-609, 627->630, 630->638, 634-635, 638->657, 642-645, 649-654, 665, 671->663, 673->675, 675->663, 679-683
mcpgateway/cache/resource_cache.py 94 2 18 1 97% 272, 332
mcpgateway/cache/session_registry.py 758 84 232 13 89% 356-357, 496->511, 506->511, 541->549, 558->566, 575->584, 744->746, 780->782, 968->exit, 1185-1251, 1253->exit, 1305-1325, 1349-1358, 1426-1427, 1441, 1446->1462, 1463-1467, 1474-1476, 1966-1967
mcpgateway/cache/tool_lookup_cache.py 168 4 42 5 96% 154->157, 159->162, 275->exit, 279-280, 332->334, 335-336, 372->375
mcpgateway/cli.py 105 10 34 5 88% 120->123, 295->347, 299-301, 304-306, 331-335
mcpgateway/cli_export_import.py 178 16 62 4 90% 90-112, 207->206, 248->251, 312->316
mcpgateway/common/models.py 344 1 2 1 99% 925
mcpgateway/common/validators.py 351 12 210 11 96% 406, 488, 597, 815, 1019, 1037, 1041->1051, 1047->1051, 1064, 1069-1070, 1153-1154, 1165, 1188->1168
mcpgateway/config.py 839 10 128 8 98% 648->654, 691, 726, 767, 769, 1699, 2074, 2124-2128
mcpgateway/db.py 2164 1 378 22 99% 55, 98->102, 107->119, 642->646, 685->674, 689->693, 730->720, 734->737, 1003->1000, 1238->1237, 1968->1971, 3118->3120, 3121->3111, 3490->3492, 3493->3483, 3901->3903, 3904->3894, 4206->4208, 4209->4199, 5237->5241, 6230->6235, 6286->6291
mcpgateway/handlers/sampling.py 88 1 44 2 98% 214, 514->518
mcpgateway/instrumentation/sqlalchemy.py 95 4 22 5 92% 81->85, 115-116, 140->145, 216->222, 218-219, 313->exit, 316->exit
mcpgateway/llm_provider_configs.py 60 0 0 0 100%
mcpgateway/llm_schemas.py 228 0 6 0 100%
mcpgateway/main.py 2845 0 838 43 99% 329->324, 429->435, 614->619, 685->693, 1003->1006, 1009->1015, 1016->1018, 1018->1021, 1030->exit, 1050->exit, 1089->1092, 1260->1262, 1264->1266, 1318->1325, 1323->1325, 1450->1452, 1518->1543, 1529->1543, 1546->1550, 1827->1834, 1875->1877, 1952->1972, 2297->2299, 2426->2428, 2758->2762, 2840->2859, 2843->2859, 3099->3101, 3565->3567, 4578->4580, 5069->5071, 5623->5643, 5648->5653, 5943->exit, 6046->6048, 6260->6264, 6384->6388, 6520->6524, 6553->6570, 6679->6682, 6840->6843, 6918->6922, 7109->7117
mcpgateway/middleware/auth_middleware.py 64 0 14 0 100%
mcpgateway/middleware/compression.py 22 0 4 0 100%
mcpgateway/middleware/correlation_id.py 28 0 6 0 100%
mcpgateway/middleware/db_query_logging.py 183 27 60 13 80% 99, 160, 162, 170->180, 186->192, 187->186, 193, 199->201, 252-278, 294, 341, 361->365, 426, 427->431, 446-447
mcpgateway/middleware/http_auth_middleware.py 58 0 22 2 98% 90->95, 118->122
mcpgateway/middleware/observability_middleware.py 94 13 22 8 82% 89->93, 96->102, 149-153, 163->175, 171-172, 175->188, 185-186, 192->211, 207-208, 211->218, 214-215, 224->226
mcpgateway/middleware/path_filter.py 61 4 10 0 94% 137-138, 153-154
mcpgateway/middleware/protocol_version.py 29 0 10 0 100%
mcpgateway/middleware/rbac.py 299 10 132 2 95% 353-355, 543->550, 808-820
mcpgateway/middleware/request_context.py 7 0 2 0 100%
mcpgateway/middleware/request_logging_middleware.py 227 11 82 4 95% 342->350, 386-387, 394->416, 413-414, 458->477, 475-476, 499-500, 570, 584->604, 601-602
mcpgateway/middleware/security_headers.py 61 0 40 0 100%
mcpgateway/middleware/token_scoping.py 382 26 192 16 93% 160, 233->224, 382, 414-415, 427->429, 440->443, 513, 553, 673-674, 712-713, 736-737, 765-766, 778-779, 786-787, 796-799, 866-870, 880, 926->931
mcpgateway/middleware/validation_middleware.py 100 11 52 7 87% 93-98, 118->123, 120, 130->exit, 196, 211, 213, 229->233, 238-239
mcpgateway/observability.py 238 18 98 16 90% 23-28, 68->97, 92-94, 163-164, 170-171, 185->184, 232->231, 245, 269->268, 281-282, 289-290, 297-298, 308->323, 450->453, 453->455, 455->462, 494->498, 514->516, 519->522
mcpgateway/plugins/framework/base.py 153 0 42 2 99% 532->541, 555->exit
mcpgateway/plugins/framework/constants.py 26 0 0 0 100%
mcpgateway/plugins/framework/decorator.py 21 0 0 0 100%
mcpgateway/plugins/framework/errors.py 12 0 0 0 100%
mcpgateway/plugins/framework/external/grpc/client.py 108 0 26 0 100%
mcpgateway/plugins/framework/external/grpc/proto/plugin_service_pb2.py 11 0 0 0 100%
mcpgateway/plugins/framework/external/grpc/proto/plugin_service_pb2_grpc.py 58 0 0 0 100%
mcpgateway/plugins/framework/external/grpc/server/runtime.py 99 0 20 0 100%
mcpgateway/plugins/framework/external/grpc/server/server.py 88 0 16 0 100%
mcpgateway/plugins/framework/external/grpc/tls_utils.py 44 0 10 0 100%
mcpgateway/plugins/framework/external/mcp/client.py 286 35 98 22 85% 81, 83->88, 85, 104-105, 108-114, 140, 149-151, 195->198, 200, 203->206, 206->exit, 222->224, 224->226, 238-240, 283, 286, 302-305, 311->exit, 371, 383->369, 389-391, 404, 409, 414-416, 423->425, 436->439, 439->441, 463-464
mcpgateway/plugins/framework/external/mcp/server/runtime.py 152 11 42 6 91% 133, 254->257, 259->262, 265->267, 309, 318-319, 327, 381, 392-393, 401, 493, 533
mcpgateway/plugins/framework/external/mcp/server/server.py 55 1 14 1 97% 223
mcpgateway/plugins/framework/external/mcp/tls_utils.py 27 0 8 0 100%
mcpgateway/plugins/framework/external/proto_convert.py 70 0 36 1 99% 48->52
mcpgateway/plugins/framework/external/unix/client.py 138 1 28 1 99% 201
mcpgateway/plugins/framework/external/unix/protocol.py 28 0 10 0 100%
mcpgateway/plugins/framework/external/unix/server/runtime.py 22 0 0 0 100%
mcpgateway/plugins/framework/external/unix/server/server.py 179 6 36 5 95% 124->151, 155-156, 192->198, 246->248, 344->347, 359-360, 404-405
mcpgateway/plugins/framework/hooks/agents.py 30 0 2 1 97% 138->exit
mcpgateway/plugins/framework/hooks/http.py 57 0 2 1 98% 205->exit
mcpgateway/plugins/framework/hooks/prompts.py 23 0 2 1 96% 121->exit
mcpgateway/plugins/framework/hooks/registry.py 38 0 10 0 100%
mcpgateway/plugins/framework/hooks/resources.py 22 0 2 1 96% 111->exit
mcpgateway/plugins/framework/hooks/tools.py 24 0 2 1 96% 114->exit
mcpgateway/plugins/framework/loader/config.py 18 0 2 0 100%
mcpgateway/plugins/framework/loader/plugin.py 53 2 18 3 93% 74->exit, 77, 123
mcpgateway/plugins/framework/manager.py 218 7 78 6 96% 152, 257, 264->270, 285->293, 535-536, 585-586, 640
mcpgateway/plugins/framework/memory.py 90 0 40 0 100%
mcpgateway/plugins/framework/models.py 572 34 228 28 92% 371, 373, 382, 417, 423, 438-439, 476-478, 509->512, 558, 574->583, 579, 581->583, 622, 627, 629, 647, 668, 674, 689-690, 884, 886, 890, 904-905, 981, 983, 987, 1001-1002, 1057->1060, 1103, 1105, 1199, 1232
mcpgateway/plugins/framework/registry.py 66 0 18 1 99% 151->155
mcpgateway/plugins/framework/utils.py 52 1 30 2 96% 138, 239->249
mcpgateway/plugins/tools/cli.py 51 3 2 0 94% 168-169, 224
mcpgateway/plugins/tools/models.py 7 0 0 0 100%
mcpgateway/reverse_proxy.py 333 21 94 16 91% 52-53, 58-59, 65-66, 179->185, 226, 236, 247-250, 322, 352, 355->359, 360->362, 470->474, 472->474, 477, 548->559, 559->563, 573, 579, 712, 723, 767-768
mcpgateway/routers/auth.py 58 0 8 0 100%
mcpgateway/routers/cancellation_router.py 45 3 6 1 92% 96-98, 126
mcpgateway/routers/email_auth.py 253 0 40 0 100%
mcpgateway/routers/llm_admin_router.py 226 0 42 3 99% 576->579, 722->725, 748->769
mcpgateway/routers/llm_config_router.py 184 0 2 0 100%
mcpgateway/routers/llm_proxy_router.py 46 0 6 0 100%
mcpgateway/routers/llmchat_router.py 337 5 106 7 97% 36-37, 571, 737->746, 740->738, 828->819, 920, 1022, 1151->1155
mcpgateway/routers/log_search.py 327 32 104 29 84% 74, 82->77, 98->100, 127-136, 139-141, 144->147, 153, 155, 169-174, 178->exit, 379, 395, 470->490, 473->490, 482->490, 539-541, 580->582, 582->584, 584->586, 586->588, 588->591, 591->594, 615-617, 658->660, 660->662, 662->664, 664->666, 666->668, 668->671, 671->674, 696-698, 732->746, 780-782
mcpgateway/routers/metrics_maintenance.py 93 0 10 0 100%
mcpgateway/routers/oauth_router.py 236 0 66 4 99% 127->131, 198->205, 369->377, 585->588
mcpgateway/routers/observability.py 148 7 32 4 94% 52-53, 564, 568, 622->exit, 648-649, 821
mcpgateway/routers/rbac.py 212 34 8 1 84% 61, 63-70, 121-123, 195-197, 201-203, 245-247, 285-287, 329-331, 367-370, 422-424
mcpgateway/routers/reverse_proxy.py 203 11 48 2 94% 211, 484-504
mcpgateway/routers/server_well_known.py 39 0 10 0 100%
mcpgateway/routers/sso.py 247 5 56 3 97% 187->191, 191->208, 341-346, 616-618
mcpgateway/routers/teams.py 411 0 84 0 100%
mcpgateway/routers/tokens.py 180 5 44 5 96% 74, 98, 351, 633, 638
mcpgateway/routers/toolops_router.py 50 2 0 0 96% 138-139
mcpgateway/routers/well_known.py 108 1 50 2 98% 184->187, 188
mcpgateway/schemas.py 2747 2 624 23 99% 576->580, 841->845, 1064->1073, 1153->1155, 1155->1157, 1262->1266, 3254->3273, 3258->3273, 3266->3265, 3269->3272, 3382->3392, 3888, 4553->4563, 4999->5018, 5003->5018, 5005->5018, 5011->5010, 5014->5017, 5123->5129, 5714->5718, 5809->5815, 5811->5815, 6888
mcpgateway/scripts/validate_env.py 68 6 36 2 88% 144, 243-249
mcpgateway/services/a2a_service.py 618 21 242 29 93% 287->289, 355->361, 358->361, 409->422, 414, 648, 786, 994->997, 1013, 1070->1074, 1074->1083, 1091, 1093->1125, 1102-1105, 1111-1122, 1125->1130, 1218->1221, 1279->1282, 1399->1398, 1403-1404, 1405->1409, 1415-1416, 1417->1424, 1560->1566, 1585->1591, 1618->1621, 1658->1660, 1705->1713, 1707->1711
mcpgateway/services/argon2_service.py 91 0 20 2 98% 253->247, 257->260
mcpgateway/services/audit_trail_service.py 124 14 48 16 81% 134->138, 190->192, 215, 222, 264->273, 275, 276->280, 282, 284, 371-375, 406->410, 413->415, 416, 418, 420, 422, 424
mcpgateway/services/cancellation_service.py 150 17 34 7 87% 59, 69-70, 78-79, 93, 113, 132->105, 140-141, 144->exit, 149-152, 167, 169, 177->184, 180, 272
mcpgateway/services/catalog_service.py 265 13 106 11 94% 67->73, 78-85, 102-103, 138->166, 199->203, 245->244, 368-370, 397->400, 426->432, 438->441, 488->487, 521-523, 554
mcpgateway/services/completion_service.py 71 2 26 1 97% 123, 127
mcpgateway/services/dcr_service.py 158 21 44 9 85% 51, 91->96, 115, 129, 139, 213, 228, 314, 317, 344-347, 363-364, 367-368, 383-387
mcpgateway/services/elicitation_service.py 133 4 44 7 94% 87->exit, 93->101, 103->102, 227, 231-232, 241->239, 243->239, 249->exit, 286
mcpgateway/services/email_auth_service.py 463 67 136 11 84% 252, 390-391, 414, 528, 552-553, 572-575, 579-582, 626-627, 741, 750->763, 763->765, 769, 792-793, 804, 841-935, 966->974, 1065-1066, 1074->1078, 1250-1251
mcpgateway/services/encryption_service.py 66 0 8 0 100%
mcpgateway/services/event_service.py 99 11 22 3 88% 215, 233-235, 251-252, 254-255, 261-262, 264-265, 269->exit, 297->exit
mcpgateway/services/export_service.py 340 35 136 27 84% 170, 191, 212, 233, 254, 349->352, 352->355, 368->372, 439->452, 442->452, 444->452, 498->508, 500->508, 576->586, 650->649, 760->749, 764->768, 789, 797-825, 842, 849-870, 888, 896-910, 927, 935-951, 968, 975-985
mcpgateway/services/gateway_service.py 2210 184 910 119 89% 77-79, 514->exit, 565->570, 629->620, 647->620, 654->620, 739->750, 746->750, 760->764, 793->823, 911->908, 916-919, 998->995, 1003-1005, 1581-1585, 1597, 1650, 1715, 1798->1801, 1834-1840, 1859-1862, 1870->1892, 1883, 1953-1954, 1958, 1964, 2020->2038, 2026->2034, 2029->2034, 2034->2038, 2044-2050, 2076-2078, 2092->2094, 2095, 2097, 2117-2122, 2128-2132, 2156, 2158, 2171-2174, 2176-2179, 2479->2483, 2504->2503, 2528->2530, 2531, 2533, 2553-2558, 2564-2568, 2592, 2594, 2607-2610, 2612-2615, 2883, 3053, 3066->3108, 3117->3124, 3125-3127, 3131, 3136-3137, 3189->3191, 3223-3225, 3252->3279, 3262-3267, 3276, 3281, 3299->3306, 3302-3303, 3364-3367, 3516->3515, 3520-3521, 3522->3526, 3543-3547, 3549, 3568, 3605->3608, 3616->3619, 3623->3626, 3634->3637, 3655->3698, 3659-3695, 3707->3714, 3710-3711, 3718->3736, 3723, 3727->3730, 3751-3752, 3842->3839, 3978->3988, 4065->4067, 4068, 4103, 4138-4147, 4153->4158, 4155-4156, 4168-4170, 4180->4133, 4184-4185, 4188-4189, 4450, 4484->4486, 4486->4456, 4537, 4556->4565, 4565->4543, 4613, 4632->4639, 4639->4619, 4814->4813, 4818-4819, 4820->4824, 4866-4868, 4905->4917, 4908-4914, 4918->4929, 4921-4926, 4982->4984, 5230->5282, 5240->5242, 5268->5272, 5272->5275, 5278-5279, 5284->5308, 5291->5293, 5392->5446, 5404->5406, 5432->5436, 5436->5439, 5442-5443, 5447->5473, 5521, 5549->5553, 5554->5608, 5563->5566, 5566->5568, 5583-5584, 5594->5598, 5598->5601, 5604-5605, 5609->5625, 5619, 5622-5623
mcpgateway/services/grpc_service.py 229 8 80 7 95% 26-31, 214->217, 257->261, 305, 438-439, 465->464, 486->485, 494->493, 600->604
mcpgateway/services/http_client_service.py 79 1 18 3 96% 55, 93->95, 95->97
mcpgateway/services/import_service.py 800 0 336 38 97% 296->exit, 634->exit, 701->exit, 763->exit, 825->exit, 874->exit, 923->exit, 1216->1257, 1230->1257, 1236->1257, 1243->1257, 1245->1257, 1285->1321, 1298->1321, 1303->1321, 1309->1321, 1311->1321, 1391->1393, 1415->1422, 1444->1451, 1526->1525, 1569->1573, 1573->1577, 1652->1651, 1655->1653, 1659->1646, 1686->1682, 1709->1723, 1716->1714, 1719->1723, 1723->1741, 1730->1728, 1733->1741, 1783->1786, 1786->1791, 1791->1795, 1795->1798, 1840->1835
mcpgateway/services/llm_provider_service.py 276 0 100 15 96% 92->exit, 98->exit, 284->286, 507->509, 509->511, 511->513, 513->515, 515->517, 517->519, 519->521, 521->523, 523->525, 525->527, 527->529, 529->532
mcpgateway/services/llm_proxy_service.py 280 0 140 0 100%
mcpgateway/services/log_aggregator.py 355 14 136 23 92% 64, 66, 71->75, 78, 83, 118->120, 124->126, 256->223, 374->335, 383->385, 405, 408->412, 434->431, 437->439, 442->444, 466->470, 483->485, 488->490, 549->525, 566-569, 596->600, 612->614, 616->618, 620-623, 871
mcpgateway/services/log_storage_service.py 154 1 44 5 97% 216->218, 245->254, 248->254, 257->exit, 346
mcpgateway/services/logging_service.py 238 8 56 3 96% 124->exit, 131-133, 158->178, 261-263, 463-465, 472-473, 677->682
mcpgateway/services/mcp_client_chat_service.py 848 1 300 33 97% 665->668, 806->818, 905->921, 914->916, 997->1025, 1017->1020, 1116->1141, 1127->1136, 1233->1269, 1254->1264, 1365->1401, 1375->1377, 1377->1379, 1388->1397, 1559, 1660->1663, 2094->2088, 2192->2197, 2194->2197, 2239->2243, 2560->2554, 2626->2622, 2628->2622, 2630->2622, 2635->2639, 2762->2765, 2857->2747, 2863->2747, 2865->2747, 2867->2747, 2887->2889, 2899->2907, 3017->3021
mcpgateway/services/mcp_session_pool.py 842 0 234 0 100%
mcpgateway/services/metrics.py 50 0 14 1 98% 121->130
mcpgateway/services/metrics_buffer_service.py 256 20 48 11 90% 147->exit, 160->168, 293-303, 364-375, 385->exit, 394, 397-399, 404-407, 426, 473->489, 489->505, 506, 522, 538, 737-738
mcpgateway/services/metrics_cleanup_service.py 185 31 40 9 80% 198->exit, 211->218, 231->exit, 240, 243-251, 256-259, 285, 302->321, 308, 368-379, 384-387, 392, 431-441
mcpgateway/services/metrics_query_service.py 172 18 42 10 86% 195->202, 236, 308, 339, 365, 457, 563-580, 586, 589, 597-615
mcpgateway/services/metrics_rollup_service.py 345 22 86 15 90% 188->190, 217->exit, 230->237, 269, 275-276, 284, 290, 307-310, 479->518, 512->518, 514->518, 596->601, 640, 683, 688->694, 706-714, 730-732, 928
mcpgateway/services/notification_service.py 187 8 38 4 95% 59, 215, 481-487, 520->540, 529, 537-538
mcpgateway/services/oauth_manager.py 583 0 218 0 100%
mcpgateway/services/observability_service.py 340 10 172 51 87% 249->253, 254->257, 317->320, 486, 676->679, 684->688, 688->692, 694->710, 837->841, 939->955, 1149->1151, 1151->1155, 1155->1157, 1157->1161, 1161->1163, 1163->1165, 1165->1169, 1169->1171, 1171->1175, 1175->1177, 1177->1181, 1181->1183, 1183->1187, 1187->1191, 1191->1198, 1198->1206, 1202->1206, 1206->1214, 1215, 1217, 1220-1221, 1323->1325, 1325->1329, 1329->1331, 1331->1335, 1335->1337, 1337->1341, 1341->1345, 1345->1347, 1347->1351, 1351->1353, 1353->1355, 1355->1359, 1359->1361, 1361->1365, 1365->1367, 1367->1371, 1371->1376, 1376->1381, 1382, 1384, 1387-1388, 1411
mcpgateway/services/performance_service.py 344 35 104 23 86% 60->65, 74-76, 84-86, 94-96, 162, 205-206, 264-265, 269-271, 293-294, 300-301, 351-352, 361-362, 388->387, 395, 399, 402->387, 405->385, 412->409, 415->385, 426->436, 429, 455->463, 483, 500->508, 504-506, 568, 570-571, 604->607, 645, 709->711, 711->713, 713->715, 715->699
mcpgateway/services/performance_tracker.py 124 15 38 9 84% 86->exit, 117-119, 134-146, 174, 260-261, 278, 282, 301->304, 335, 339, 349
mcpgateway/services/permission_service.py 168 1 68 2 99% 353->358, 456
mcpgateway/services/personal_team_service.py 71 0 8 0 100%
mcpgateway/services/plugin_service.py 107 3 54 10 92% 34->39, 105->109, 113, 119->144, 121->120, 138->142, 182->185, 189->208, 192, 231
mcpgateway/services/prompt_service.py 860 71 316 42 89% 208-209, 479->481, 530, 534-535, 780->782, 811->813, 813->815, 852->855, 857->764, 886-887, 1057, 1067-1073, 1087, 1209, 1295->1300, 1304-1309, 1421->1434, 1426-1428, 1500-1517, 1540-1554, 1557-1568, 1592, 1599-1606, 1626-1627, 1631-1639, 1680-1683, 1707-1708, 1712-1722, 1803->1813, 1805->1813, 1809->1813, 1825-1827, 1848->1850, 1873, 2059->2103, 2066->2070, 2172, 2356->exit, 2464->2471, 2475, 2485->2492, 2623->2630, 2626, 2636->2639
mcpgateway/services/resource_service.py 1154 142 440 55 85% 81-82, 342->344, 449, 747->689, 823-828, 904->920, 910-914, 1000-1001, 1024, 1032-1041, 1057, 1119-1120, 1190->1193, 1212, 1305-1329, 1337->1341, 1348-1349, 1531->1534, 1616-1617, 1674-1684, 1698-1731, 1736, 1782, 1788-1793, 1796-1806, 1864, 1870-1875, 1878-1888, 1899-1900, 1920-1923, 1937-1938, 2120, 2125, 2129-2134, 2161-2162, 2174, 2198->2206, 2200->2202, 2208, 2215, 2218-2219, 2223, 2232, 2239-2246, 2250-2253, 2296->2321, 2307->2321, 2311, 2316, 2346-2347, 2430->2435, 2659->2670, 2666->2670, 2720, 3075->3082, 3180->exit, 3227, 3236, 3245-3246, 3251, 3465, 3468, 3509->3516, 3512, 3532->3535
mcpgateway/services/role_service.py 174 1 78 2 99% 428, 447->460
mcpgateway/services/root_service.py 96 2 20 1 97% 81-82, 275->279
mcpgateway/services/security_logger.py 144 0 40 1 99% 596->598
mcpgateway/services/server_service.py 605 28 258 22 94% 178, 182-183, 553, 559, 572, 577, 589, 598-602, 773-774, 807->809, 812, 840, 895, 963, 1161->1170, 1167, 1183->1187, 1191, 1206, 1216, 1235, 1302, 1328, 1484, 1494->1536, 1567
mcpgateway/services/sso_service.py 403 2 208 18 97% 268->267, 558->587, 589->596, 592->591, 682->685, 717->721, 723->726, 780->796, 800->809, 809->893, 821->825, 835->856, 877, 879->885, 882, 887->893, 1027->1014, 1036->1040
mcpgateway/services/structured_logger.py 161 1 34 3 98% 35, 135->141, 144->151, 311->315
mcpgateway/services/support_bundle_service.py 117 15 28 3 85% 257-258, 305->307, 307->310, 336-354
mcpgateway/services/system_stats_service.py 100 0 4 0 100%
mcpgateway/services/tag_service.py 143 9 72 5 92% 157, 208-211, 317, 416, 423-426
mcpgateway/services/team_invitation_service.py 190 0 56 0 100%
mcpgateway/services/team_management_service.py 679 0 182 0 100%
mcpgateway/services/token_catalog_service.py 253 28 86 10 87% 334, 338, 342, 346, 354-359, 561, 566->569, 709-710, 735-756, 850->854, 874, 965->964
mcpgateway/services/token_storage_service.py 183 2 56 2 98% 232, 261
mcpgateway/services/tool_service.py 1611 155 626 45 89% 972-973, 1461->1437, 1607->1611, 1810, 1824->1826, 1847, 1912-1913, 2002, 2012->2014, 2014->2016, 2110->2113, 2140, 2679->2683, 2737->2736, 2755->2762, 2758-2760, 2779, 2818->2821, 2821->2830, 2923->2925, 2936->2940, 2990-2991, 2999-3005, 3054-3074, 3080-3082, 3098-3102, 3115, 3136-3155, 3210-3215, 3219-3227, 3250-3312, 3355-3360, 3365-3374, 3378, 3397-3459, 3466->3468, 3468->3470, 3477->3484, 3481->3484, 3498, 3508-3522, 3547-3548, 3554, 3558->3557, 3562-3563, 3564->3568, 3589-3590, 3594-3600, 3650, 3656->3659, 3670-3671, 3711-3712, 4371, 4463, 4465, 4626-4628, 4655->4654, 4659-4660, 4661->4667
mcpgateway/toolops/toolops_altk_service.py 135 18 32 11 83% 32-37, 66, 117, 120, 123, 126, 157->188, 169->188, 170->188, 173->188, 177-179, 249-250, 255->268, 265-266
mcpgateway/toolops/utils/db_util.py 34 0 4 1 97% 78->exit
mcpgateway/toolops/utils/format_conversion.py 23 0 6 0 100%
mcpgateway/toolops/utils/llm_util.py 85 10 14 2 88% 176-182, 203-207
mcpgateway/tools/builder/cli.py 114 1 14 2 98% 105, 151->exit
mcpgateway/tools/builder/factory.py 31 1 8 2 92% 119->122, 134
mcpgateway/tools/builder/pipeline.py 39 2 6 2 91% 184, 205
mcpgateway/tools/builder/schema.py 85 0 6 0 100%
mcpgateway/tools/cli.py 8 1 0 0 88% 53
mcpgateway/translate.py 806 4 292 0 99% 1542-1545
mcpgateway/translate_grpc.py 224 13 68 4 94% 27-36, 133->132, 166->165, 175-177, 181->180, 430, 442
mcpgateway/translate_header_utils.py 76 6 26 4 90% 65, 159, 165, 341-343
mcpgateway/transports/base.py 13 0 0 0 100%
mcpgateway/transports/redis_event_store.py 78 13 18 7 79% 26, 179, 219-220, 228-229, 234, 242->250, 245-246, 248, 255, 258-259
mcpgateway/transports/sse_transport.py 252 26 68 12 87% 103->105, 124, 167-169, 256->260, 262->exit, 594->600, 735, 741->750, 745->750, 753->816, 771, 780->753, 783-787, 806-814, 820->exit, 828-836
mcpgateway/transports/stdio_transport.py 56 0 8 0 100%
mcpgateway/transports/streamablehttp_transport.py 745 12 256 25 96% 298->300, 518->525, 564->573, 568->573, 577->625, 593, 607, 609, 612-613, 906->912, 1030->1036, 1209->1213, 1374-1375, 1400->1396, 1402->1396, 1431, 1445->1448, 1487->1483, 1489->1483, 1529->1613, 1540->1536, 1542-1543, 1572, 1636->1638, 1638->1640, 1640->1635, 1673, 1867->1913
mcpgateway/transports/websocket_transport.py 81 3 18 2 95% 113->116, 143-145, 149
mcpgateway/utils/analyze_query_log.py 97 0 36 0 100%
mcpgateway/utils/base_models.py 8 0 0 0 100%
mcpgateway/utils/correlation_id.py 38 0 14 0 100%
mcpgateway/utils/create_jwt_token.py 84 0 26 0 100%
mcpgateway/utils/create_slug.py 13 0 2 0 100%
mcpgateway/utils/db_isready.py 93 0 20 0 100%
mcpgateway/utils/display_name.py 9 0 4 0 100%
mcpgateway/utils/error_formatter.py 54 0 32 0 100%
mcpgateway/utils/generate_keys.py 31 0 0 0 100%
mcpgateway/utils/jwt_config_helper.py 67 0 24 0 100%
mcpgateway/utils/keycloak_discovery.py 46 0 4 0 100%
mcpgateway/utils/metadata_capture.py 55 0 24 0 100%
mcpgateway/utils/metrics_common.py 4 0 0 0 100%
mcpgateway/utils/orjson_response.py 7 0 0 0 100%
mcpgateway/utils/pagination.py 174 0 70 0 100%
mcpgateway/utils/passthrough_headers.py 158 0 72 0 100%
mcpgateway/utils/psycopg3_optimizations.py 100 0 34 0 100%
mcpgateway/utils/redis_client.py 79 0 18 0 100%
mcpgateway/utils/redis_isready.py 52 0 10 0 100%
mcpgateway/utils/retry_manager.py 124 0 40 0 100%
mcpgateway/utils/security_cookies.py 46 5 8 2 87% 110-111, 114-115, 118
mcpgateway/utils/services_auth.py 56 0 12 0 100%
mcpgateway/utils/sqlalchemy_modifier.py 120 0 50 0 100%
mcpgateway/utils/ssl_context_cache.py 20 0 8 0 100%
mcpgateway/utils/ssl_key_manager.py 46 0 6 0 100%
mcpgateway/utils/sso_bootstrap.py 68 0 28 0 100%
mcpgateway/utils/token_scoping.py 30 0 10 0 100%
mcpgateway/utils/url_auth.py 45 0 16 0 100%
mcpgateway/utils/validate_signature.py 71 0 20 0 100%
mcpgateway/utils/verify_credentials.py 186 0 96 0 100%
mcpgateway/validation/jsonrpc.py 58 0 34 0 100%
mcpgateway/validation/tags.py 72 3 38 3 95% 167, 257, 265
mcpgateway/version.py 137 16 24 3 87% 84-85, 89-96, 835-840, 845-853
mcpgateway/wrapper.py 307 0 134 0 100%
TOTAL 51431 1792 15600 1308 95%