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
« 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
7Services Package.
8Exposes core ContextForge plugin components:
9- Context
10- Manager
11- Payloads
12- Models
13- ExternalPluginServer
14"""
16# Standard
17from typing import Optional
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
66# Plugin manager singleton (lazy initialization)
67_plugin_manager: Optional[PluginManager] = None
70def get_plugin_manager(observability: Optional[ObservabilityProvider] = None) -> Optional[PluginManager]:
71 """Get or initialize the plugin manager singleton.
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.
76 Args:
77 observability: Optional observability provider implementing ObservabilityProvider protocol.
79 Returns:
80 PluginManager instance if plugins are enabled, None otherwise.
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
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
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
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]