Coverage for mcpgateway / plugins / framework / __init__.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-09 03:05 +0000

1# -*- coding: utf-8 -*- 

2"""Location: ./mcpgateway/plugins/framework/__init__.py 

3Copyright 2025 

4SPDX-License-Identifier: Apache-2.0 

5Authors: Fred Araujo 

6 

7Services Package. 

8Exposes core ContextForge plugin components: 

9- Context 

10- Manager 

11- Payloads 

12- Models 

13- ExternalPluginServer 

14""" 

15 

16# Standard 

17from typing import Optional 

18 

19# First-Party 

20from mcpgateway.plugins.framework.base import Plugin 

21from mcpgateway.plugins.framework.errors import PluginError, PluginViolationError 

22from mcpgateway.plugins.framework.external.mcp.server import ExternalPluginServer 

23from mcpgateway.plugins.framework.hooks.registry import HookRegistry, get_hook_registry 

24from mcpgateway.plugins.framework.loader.config import ConfigLoader 

25from mcpgateway.plugins.framework.loader.plugin import PluginLoader 

26from mcpgateway.plugins.framework.manager import PluginManager 

27from mcpgateway.plugins.framework.observability import ObservabilityProvider 

28from mcpgateway.plugins.framework.hooks.http import ( 

29 HttpAuthCheckPermissionPayload, 

30 HttpAuthCheckPermissionResult, 

31 HttpAuthCheckPermissionResultPayload, 

32 HttpAuthResolveUserPayload, 

33 HttpAuthResolveUserResult, 

34 HttpHeaderPayload, 

35 HttpHookType, 

36 HttpPostRequestPayload, 

37 HttpPostRequestResult, 

38 HttpPreRequestPayload, 

39 HttpPreRequestResult, 

40) 

41from mcpgateway.plugins.framework.hooks.agents import AgentHookType, AgentPostInvokePayload, AgentPostInvokeResult, AgentPreInvokePayload, AgentPreInvokeResult 

42from mcpgateway.plugins.framework.hooks.resources import ResourceHookType, ResourcePostFetchPayload, ResourcePostFetchResult, ResourcePreFetchPayload, ResourcePreFetchResult 

43from mcpgateway.plugins.framework.hooks.prompts import ( 

44 PromptHookType, 

45 PromptPosthookPayload, 

46 PromptPosthookResult, 

47 PromptPrehookPayload, 

48 PromptPrehookResult, 

49) 

50from mcpgateway.plugins.framework.hooks.tools import ToolHookType, ToolPostInvokePayload, ToolPostInvokeResult, ToolPreInvokeResult, ToolPreInvokePayload 

51from mcpgateway.plugins.framework.models import ( 

52 GlobalContext, 

53 MCPServerConfig, 

54 PluginCondition, 

55 PluginConfig, 

56 PluginContext, 

57 PluginContextTable, 

58 PluginErrorModel, 

59 PluginMode, 

60 PluginPayload, 

61 PluginResult, 

62 PluginViolation, 

63) 

64from mcpgateway.plugins.framework.utils import get_attr 

65 

66# Plugin manager singleton (lazy initialization) 

67_plugin_manager: Optional[PluginManager] = None 

68 

69 

70def get_plugin_manager(observability: Optional[ObservabilityProvider] = None) -> Optional[PluginManager]: 

71 """Get or initialize the plugin manager singleton. 

72 

73 This is the public API for accessing the plugin manager from anywhere in the application. 

74 The plugin manager is lazily initialized on first access if plugins are enabled. 

75 

76 Args: 

77 observability: Optional observability provider implementing ObservabilityProvider protocol. 

78 

79 Returns: 

80 PluginManager instance if plugins are enabled, None otherwise. 

81 

82 Examples: 

83 >>> from mcpgateway.plugins.framework import get_plugin_manager 

84 >>> pm = get_plugin_manager() 

85 >>> # Returns PluginManager if plugins are enabled, None otherwise 

86 >>> pm is None or isinstance(pm, PluginManager) 

87 True 

88 """ 

89 global _plugin_manager # pylint: disable=global-statement 

90 if _plugin_manager is None: 

91 # Use plugin framework's own settings instead of mcpgateway.config 

92 from mcpgateway.plugins.framework.settings import settings # pylint: disable=import-outside-toplevel 

93 

94 if settings.enabled: 

95 # Import concrete policies from the gateway side 

96 from mcpgateway.plugins.policy import HOOK_PAYLOAD_POLICIES # pylint: disable=import-outside-toplevel 

97 

98 _plugin_manager = PluginManager( 

99 settings.config_file, 

100 timeout=settings.plugin_timeout, 

101 observability=observability, 

102 hook_policies=HOOK_PAYLOAD_POLICIES, 

103 ) 

104 return _plugin_manager 

105 

106 

107__all__ = [ 

108 "AgentHookType", 

109 "AgentPostInvokePayload", 

110 "AgentPostInvokeResult", 

111 "AgentPreInvokePayload", 

112 "AgentPreInvokeResult", 

113 "ConfigLoader", 

114 "ExternalPluginServer", 

115 "get_attr", 

116 "get_hook_registry", 

117 "get_plugin_manager", 

118 "GlobalContext", 

119 "HookRegistry", 

120 "HttpAuthCheckPermissionPayload", 

121 "HttpAuthCheckPermissionResult", 

122 "HttpAuthCheckPermissionResultPayload", 

123 "HttpAuthResolveUserPayload", 

124 "HttpAuthResolveUserResult", 

125 "HttpHeaderPayload", 

126 "HttpHookType", 

127 "HttpPostRequestPayload", 

128 "HttpPostRequestResult", 

129 "HttpPreRequestPayload", 

130 "HttpPreRequestResult", 

131 "MCPServerConfig", 

132 "ObservabilityProvider", 

133 "Plugin", 

134 "PluginCondition", 

135 "PluginConfig", 

136 "PluginContext", 

137 "PluginContextTable", 

138 "PluginError", 

139 "PluginErrorModel", 

140 "PluginLoader", 

141 "PluginManager", 

142 "PluginMode", 

143 "PluginPayload", 

144 "PluginResult", 

145 "PluginViolation", 

146 "PluginViolationError", 

147 "PromptHookType", 

148 "PromptPosthookPayload", 

149 "PromptPosthookResult", 

150 "PromptPrehookPayload", 

151 "PromptPrehookResult", 

152 "ResourceHookType", 

153 "ResourcePostFetchPayload", 

154 "ResourcePostFetchResult", 

155 "ResourcePreFetchPayload", 

156 "ResourcePreFetchResult", 

157 "ToolHookType", 

158 "ToolPostInvokePayload", 

159 "ToolPostInvokeResult", 

160 "ToolPreInvokeResult", 

161 "ToolPreInvokePayload", 

162]