mcp-proxy-adapter 3.1.6__py3-none-any.whl → 4.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. mcp_proxy_adapter/api/app.py +65 -27
  2. mcp_proxy_adapter/api/handlers.py +1 -1
  3. mcp_proxy_adapter/api/middleware/error_handling.py +11 -10
  4. mcp_proxy_adapter/api/tool_integration.py +5 -2
  5. mcp_proxy_adapter/api/tools.py +3 -3
  6. mcp_proxy_adapter/commands/base.py +19 -1
  7. mcp_proxy_adapter/commands/command_registry.py +254 -8
  8. mcp_proxy_adapter/commands/hooks.py +260 -0
  9. mcp_proxy_adapter/commands/reload_command.py +211 -0
  10. mcp_proxy_adapter/commands/reload_settings_command.py +125 -0
  11. mcp_proxy_adapter/commands/settings_command.py +189 -0
  12. mcp_proxy_adapter/config.py +16 -1
  13. mcp_proxy_adapter/core/__init__.py +44 -0
  14. mcp_proxy_adapter/core/logging.py +87 -34
  15. mcp_proxy_adapter/core/settings.py +376 -0
  16. mcp_proxy_adapter/core/utils.py +2 -2
  17. mcp_proxy_adapter/custom_openapi.py +81 -2
  18. mcp_proxy_adapter/examples/README.md +124 -0
  19. mcp_proxy_adapter/examples/__init__.py +7 -0
  20. mcp_proxy_adapter/examples/basic_server/README.md +60 -0
  21. mcp_proxy_adapter/examples/basic_server/__init__.py +7 -0
  22. mcp_proxy_adapter/examples/basic_server/basic_custom_settings.json +39 -0
  23. mcp_proxy_adapter/examples/basic_server/config.json +35 -0
  24. mcp_proxy_adapter/examples/basic_server/custom_settings_example.py +238 -0
  25. mcp_proxy_adapter/examples/basic_server/server.py +98 -0
  26. mcp_proxy_adapter/examples/custom_commands/README.md +127 -0
  27. mcp_proxy_adapter/examples/custom_commands/__init__.py +27 -0
  28. mcp_proxy_adapter/examples/custom_commands/advanced_hooks.py +250 -0
  29. mcp_proxy_adapter/examples/custom_commands/auto_commands/__init__.py +6 -0
  30. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_echo_command.py +103 -0
  31. mcp_proxy_adapter/examples/custom_commands/auto_commands/auto_info_command.py +111 -0
  32. mcp_proxy_adapter/examples/custom_commands/config.json +62 -0
  33. mcp_proxy_adapter/examples/custom_commands/custom_health_command.py +169 -0
  34. mcp_proxy_adapter/examples/custom_commands/custom_help_command.py +215 -0
  35. mcp_proxy_adapter/examples/custom_commands/custom_openapi_generator.py +76 -0
  36. mcp_proxy_adapter/examples/custom_commands/custom_settings.json +96 -0
  37. mcp_proxy_adapter/examples/custom_commands/custom_settings_manager.py +241 -0
  38. mcp_proxy_adapter/examples/custom_commands/data_transform_command.py +135 -0
  39. mcp_proxy_adapter/examples/custom_commands/echo_command.py +122 -0
  40. mcp_proxy_adapter/examples/custom_commands/hooks.py +230 -0
  41. mcp_proxy_adapter/examples/custom_commands/intercept_command.py +123 -0
  42. mcp_proxy_adapter/examples/custom_commands/manual_echo_command.py +103 -0
  43. mcp_proxy_adapter/examples/custom_commands/server.py +223 -0
  44. mcp_proxy_adapter/examples/custom_commands/test_hooks.py +176 -0
  45. mcp_proxy_adapter/examples/deployment/README.md +49 -0
  46. mcp_proxy_adapter/examples/deployment/__init__.py +7 -0
  47. mcp_proxy_adapter/examples/deployment/config.development.json +8 -0
  48. {examples/basic_example → mcp_proxy_adapter/examples/deployment}/config.json +11 -7
  49. mcp_proxy_adapter/examples/deployment/config.production.json +12 -0
  50. mcp_proxy_adapter/examples/deployment/config.staging.json +11 -0
  51. mcp_proxy_adapter/examples/deployment/docker-compose.yml +31 -0
  52. mcp_proxy_adapter/examples/deployment/run.sh +43 -0
  53. mcp_proxy_adapter/examples/deployment/run_docker.sh +84 -0
  54. mcp_proxy_adapter/openapi.py +3 -2
  55. mcp_proxy_adapter/tests/api/test_custom_openapi.py +617 -0
  56. mcp_proxy_adapter/tests/api/test_handlers.py +522 -0
  57. mcp_proxy_adapter/tests/api/test_schemas.py +546 -0
  58. mcp_proxy_adapter/tests/api/test_tool_integration.py +531 -0
  59. mcp_proxy_adapter/tests/unit/test_base_command.py +391 -85
  60. mcp_proxy_adapter/version.py +1 -1
  61. {mcp_proxy_adapter-3.1.6.dist-info → mcp_proxy_adapter-4.1.0.dist-info}/METADATA +3 -3
  62. mcp_proxy_adapter-4.1.0.dist-info/RECORD +110 -0
  63. {mcp_proxy_adapter-3.1.6.dist-info → mcp_proxy_adapter-4.1.0.dist-info}/WHEEL +1 -1
  64. {mcp_proxy_adapter-3.1.6.dist-info → mcp_proxy_adapter-4.1.0.dist-info}/top_level.txt +0 -1
  65. examples/__init__.py +0 -19
  66. examples/anti_patterns/README.md +0 -51
  67. examples/anti_patterns/__init__.py +0 -9
  68. examples/anti_patterns/bad_design/README.md +0 -72
  69. examples/anti_patterns/bad_design/global_state.py +0 -170
  70. examples/anti_patterns/bad_design/monolithic_command.py +0 -272
  71. examples/basic_example/README.md +0 -245
  72. examples/basic_example/__init__.py +0 -8
  73. examples/basic_example/commands/__init__.py +0 -5
  74. examples/basic_example/commands/echo_command.py +0 -95
  75. examples/basic_example/commands/math_command.py +0 -151
  76. examples/basic_example/commands/time_command.py +0 -152
  77. examples/basic_example/docs/EN/README.md +0 -177
  78. examples/basic_example/docs/RU/README.md +0 -177
  79. examples/basic_example/server.py +0 -151
  80. examples/basic_example/tests/conftest.py +0 -243
  81. examples/check_vstl_schema.py +0 -106
  82. examples/commands/echo_command.py +0 -52
  83. examples/commands/echo_command_di.py +0 -152
  84. examples/commands/echo_result.py +0 -65
  85. examples/commands/get_date_command.py +0 -98
  86. examples/commands/new_uuid4_command.py +0 -91
  87. examples/complete_example/Dockerfile +0 -24
  88. examples/complete_example/README.md +0 -92
  89. examples/complete_example/__init__.py +0 -8
  90. examples/complete_example/commands/__init__.py +0 -5
  91. examples/complete_example/commands/system_command.py +0 -328
  92. examples/complete_example/config.json +0 -41
  93. examples/complete_example/configs/config.dev.yaml +0 -40
  94. examples/complete_example/configs/config.docker.yaml +0 -40
  95. examples/complete_example/docker-compose.yml +0 -35
  96. examples/complete_example/requirements.txt +0 -20
  97. examples/complete_example/server.py +0 -113
  98. examples/di_example/.pytest_cache/README.md +0 -8
  99. examples/di_example/server.py +0 -249
  100. examples/fix_vstl_help.py +0 -123
  101. examples/minimal_example/README.md +0 -65
  102. examples/minimal_example/__init__.py +0 -8
  103. examples/minimal_example/config.json +0 -14
  104. examples/minimal_example/main.py +0 -136
  105. examples/minimal_example/simple_server.py +0 -163
  106. examples/minimal_example/tests/conftest.py +0 -171
  107. examples/minimal_example/tests/test_hello_command.py +0 -111
  108. examples/minimal_example/tests/test_integration.py +0 -181
  109. examples/patch_vstl_service.py +0 -105
  110. examples/patch_vstl_service_mcp.py +0 -108
  111. examples/server.py +0 -69
  112. examples/simple_server.py +0 -128
  113. examples/test_package_3.1.4.py +0 -177
  114. examples/test_server.py +0 -134
  115. examples/tool_description_example.py +0 -82
  116. mcp_proxy_adapter/py.typed +0 -0
  117. mcp_proxy_adapter-3.1.6.dist-info/RECORD +0 -118
  118. {mcp_proxy_adapter-3.1.6.dist-info → mcp_proxy_adapter-4.1.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,124 @@
1
+ # MCP Proxy Adapter Examples
2
+
3
+ This directory contains examples demonstrating different usage patterns of the MCP Proxy Adapter framework.
4
+
5
+ ## Examples Overview
6
+
7
+ ### 1. Basic Server (`basic_server/`)
8
+ Minimal server example with only built-in commands. Demonstrates:
9
+ - Basic framework setup
10
+ - Built-in command discovery
11
+ - Standard JSON-RPC API
12
+ - Backward compatibility with property setting
13
+
14
+ ### 2. Custom Commands Server (`custom_commands/`)
15
+ Advanced server example with custom commands and hooks. Demonstrates:
16
+ - Custom command registration
17
+ - Basic hooks (before/after execution)
18
+ - Global hooks
19
+ - Performance and security monitoring
20
+ - Advanced hooks with data transformation and command interception
21
+
22
+ ## Setting Application Title and Description
23
+
24
+ The framework supports two ways to set application properties:
25
+
26
+ ### Method 1: During Creation (Recommended)
27
+ ```python
28
+ from mcp_proxy_adapter import create_app
29
+
30
+ app = create_app(
31
+ title="My Custom Server",
32
+ description="My custom server description",
33
+ version="2.0.0"
34
+ )
35
+ ```
36
+
37
+ ### Method 2: After Creation (Backward Compatible)
38
+ ```python
39
+ from mcp_proxy_adapter import create_app
40
+
41
+ app = create_app()
42
+
43
+ # Set properties after creation
44
+ app.set_properties(
45
+ new_title="My Custom Server",
46
+ new_description="My custom server description",
47
+ new_version="2.0.0"
48
+ )
49
+ ```
50
+
51
+ ## Running Examples
52
+
53
+ ### Basic Server
54
+ ```bash
55
+ cd mcp_proxy_adapter/examples/basic_server
56
+ python server.py
57
+ ```
58
+
59
+ ### Custom Commands Server
60
+ ```bash
61
+ cd mcp_proxy_adapter/examples/custom_commands
62
+ python server.py
63
+ ```
64
+
65
+ ## Testing Examples
66
+
67
+ ### Basic Server Commands
68
+ ```bash
69
+ # Get help
70
+ curl -X POST http://localhost:8000/cmd \
71
+ -H "Content-Type: application/json" \
72
+ -d '{"jsonrpc": "2.0", "method": "help", "id": 1}'
73
+
74
+ # Get health
75
+ curl -X POST http://localhost:8000/cmd \
76
+ -H "Content-Type: application/json" \
77
+ -d '{"jsonrpc": "2.0", "method": "health", "id": 2}'
78
+ ```
79
+
80
+ ### Custom Commands Server Commands
81
+ ```bash
82
+ # Test echo command
83
+ curl -X POST http://localhost:8000/cmd \
84
+ -H "Content-Type: application/json" \
85
+ -d '{"jsonrpc": "2.0", "method": "echo", "params": {"message": "Hello!"}, "id": 1}'
86
+
87
+ # Test data transformation
88
+ curl -X POST http://localhost:8000/cmd \
89
+ -H "Content-Type: application/json" \
90
+ -d '{"jsonrpc": "2.0", "method": "data_transform", "params": {"data": {"name": "test", "value": 123}}, "id": 2}'
91
+
92
+ # Test command interception (bypass_flag=0)
93
+ curl -X POST http://localhost:8000/cmd \
94
+ -H "Content-Type: application/json" \
95
+ -d '{"jsonrpc": "2.0", "method": "intercept", "params": {"bypass_flag": 0}, "id": 3}'
96
+
97
+ # Test command execution (bypass_flag=1)
98
+ curl -X POST http://localhost:8000/cmd \
99
+ -H "Content-Type: application/json" \
100
+ -d '{"jsonrpc": "2.0", "method": "intercept", "params": {"bypass_flag": 1}, "id": 4}'
101
+ ```
102
+
103
+ ## Features Demonstrated
104
+
105
+ ### Basic Server
106
+ - ✅ Standard JSON-RPC API
107
+ - ✅ Built-in command discovery
108
+ - ✅ Basic logging
109
+ - ✅ OpenAPI schema generation
110
+ - ✅ Backward compatibility
111
+
112
+ ### Custom Commands Server
113
+ - ✅ Custom command registration
114
+ - ✅ Command override with priority
115
+ - ✅ Basic hooks (before/after)
116
+ - ✅ Global hooks
117
+ - ✅ Performance monitoring
118
+ - ✅ Security monitoring
119
+ - ✅ Data transformation hooks
120
+ - ✅ Command interception hooks
121
+ - ✅ Conditional processing
122
+ - ✅ Smart interception
123
+ - ✅ Centralized logging
124
+ - ✅ Advanced error handling
@@ -0,0 +1,7 @@
1
+ """
2
+ MCP Proxy Adapter Examples
3
+
4
+ This package contains examples and templates for using the MCP Proxy Adapter framework.
5
+ """
6
+
7
+ __version__ = "1.0.0"
@@ -0,0 +1,60 @@
1
+ # Basic Server Example
2
+
3
+ A minimal example of MCP Proxy Adapter server without additional commands.
4
+
5
+ ## Features
6
+
7
+ This example demonstrates:
8
+ - Basic server setup
9
+ - Built-in commands only (help, health)
10
+ - Default configuration
11
+ - No custom commands
12
+
13
+ ## Available Commands
14
+
15
+ - `help` - Get information about available commands
16
+ - `health` - Get server health status
17
+
18
+ ## Usage
19
+
20
+ ### Run the server
21
+
22
+ ```bash
23
+ python server.py
24
+ ```
25
+
26
+ ### Test the server
27
+
28
+ ```bash
29
+ # Get help
30
+ curl -X POST http://localhost:8000/cmd \
31
+ -H "Content-Type: application/json" \
32
+ -d '{"command": "help"}'
33
+
34
+ # Get health status
35
+ curl -X POST http://localhost:8000/cmd \
36
+ -H "Content-Type: application/json" \
37
+ -d '{"command": "health"}'
38
+ ```
39
+
40
+ ## API Endpoints
41
+
42
+ - `POST /cmd` - Execute commands
43
+ - `GET /health` - Health check
44
+ - `GET /commands` - List available commands
45
+ - `GET /docs` - API documentation
46
+
47
+ ## Configuration
48
+
49
+ The server uses default configuration. You can customize it by:
50
+
51
+ 1. Creating a `config.json` file
52
+ 2. Setting environment variables
53
+ 3. Passing configuration to `create_app()`
54
+
55
+ ## Notes
56
+
57
+ - This is the simplest possible setup
58
+ - No custom commands are registered
59
+ - Uses framework defaults
60
+ - Good starting point for understanding the framework
@@ -0,0 +1,7 @@
1
+ """
2
+ Basic Server Example
3
+
4
+ A minimal example of MCP Proxy Adapter server without additional commands.
5
+ """
6
+
7
+ __version__ = "1.0.0"
@@ -0,0 +1,39 @@
1
+ {
2
+ "application": {
3
+ "name": "Basic MCP Proxy Server with Custom Settings",
4
+ "version": "1.1.0",
5
+ "environment": "development",
6
+ "description": "Basic server demonstrating custom settings usage"
7
+ },
8
+ "features": {
9
+ "basic_logging": true,
10
+ "simple_commands": true,
11
+ "custom_settings_demo": true,
12
+ "file_based_config": true
13
+ },
14
+ "server_info": {
15
+ "description": "Basic server with file-based custom settings",
16
+ "author": "MCP Proxy Adapter Team",
17
+ "contact": "support@example.com",
18
+ "documentation": "https://example.com/docs"
19
+ },
20
+ "demo_settings": {
21
+ "welcome_message": "Welcome to Basic MCP Proxy Server with Custom Settings!",
22
+ "max_connections": 150,
23
+ "timeout": 45,
24
+ "debug_mode": true,
25
+ "log_level": "INFO"
26
+ },
27
+ "performance": {
28
+ "enable_caching": true,
29
+ "cache_ttl": 300,
30
+ "max_cache_size": 1000
31
+ },
32
+ "security": {
33
+ "enable_rate_limiting": false,
34
+ "max_request_size": "5MB",
35
+ "allowed_origins": [
36
+ "*"
37
+ ]
38
+ }
39
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "server": {
3
+ "host": "127.0.0.1",
4
+ "port": 8000,
5
+ "debug": true,
6
+ "log_level": "DEBUG"
7
+ },
8
+ "logging": {
9
+ "level": "DEBUG",
10
+ "log_dir": "./logs/basic_server",
11
+ "log_file": "basic_server.log",
12
+ "error_log_file": "basic_server_error.log",
13
+ "access_log_file": "basic_server_access.log",
14
+ "max_file_size": "5MB",
15
+ "backup_count": 3,
16
+ "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
17
+ "date_format": "%Y-%m-%d %H:%M:%S",
18
+ "console_output": true,
19
+ "file_output": true
20
+ },
21
+ "commands": {
22
+ "auto_discovery": true,
23
+ "discovery_path": "mcp_proxy_adapter.commands",
24
+ "custom_commands_path": null
25
+ },
26
+ "custom": {
27
+ "server_name": "Basic MCP Proxy Server",
28
+ "description": "Simple example server with basic configuration",
29
+ "features": {
30
+ "hooks_enabled": false,
31
+ "custom_commands_enabled": false,
32
+ "advanced_logging": false
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,238 @@
1
+ """
2
+ Custom Settings Example for Basic Server
3
+
4
+ This example demonstrates how to use custom settings in a basic server.
5
+ """
6
+
7
+ import json
8
+ import os
9
+ from mcp_proxy_adapter.core.settings import (
10
+ add_custom_settings,
11
+ get_custom_setting_value,
12
+ set_custom_setting_value,
13
+ get_custom_settings
14
+ )
15
+ from mcp_proxy_adapter.core.logging import get_logger
16
+
17
+
18
+ def setup_basic_custom_settings():
19
+ """
20
+ Setup basic custom settings for the basic server example.
21
+
22
+ This demonstrates how to add custom settings to the framework
23
+ and access them throughout the application.
24
+ """
25
+ logger = get_logger("basic_server_custom_settings")
26
+
27
+ # Define basic custom settings
28
+ basic_settings = {
29
+ "application": {
30
+ "name": "Basic MCP Proxy Server",
31
+ "version": "1.0.0",
32
+ "environment": "development"
33
+ },
34
+ "features": {
35
+ "basic_logging": True,
36
+ "simple_commands": True,
37
+ "custom_settings_demo": True
38
+ },
39
+ "server_info": {
40
+ "description": "Basic server with custom settings example",
41
+ "author": "MCP Proxy Adapter Team",
42
+ "contact": "support@example.com"
43
+ },
44
+ "demo_settings": {
45
+ "welcome_message": "Welcome to Basic MCP Proxy Server!",
46
+ "max_connections": 100,
47
+ "timeout": 30,
48
+ "debug_mode": True
49
+ }
50
+ }
51
+
52
+ # Add settings to the framework
53
+ add_custom_settings(basic_settings)
54
+
55
+ logger.info("✅ Basic custom settings loaded")
56
+ logger.info(f"📋 Application: {basic_settings['application']['name']} v{basic_settings['application']['version']}")
57
+ logger.info(f"🔧 Features: {list(basic_settings['features'].keys())}")
58
+
59
+ return basic_settings
60
+
61
+
62
+ def demonstrate_custom_settings_usage():
63
+ """
64
+ Demonstrate how to use custom settings in the application.
65
+ """
66
+ logger = get_logger("basic_server_custom_settings")
67
+
68
+ # Get specific settings
69
+ app_name = get_custom_setting_value("application.name", "Unknown")
70
+ app_version = get_custom_setting_value("application.version", "0.0.0")
71
+ welcome_msg = get_custom_setting_value("demo_settings.welcome_message", "Hello!")
72
+ max_connections = get_custom_setting_value("demo_settings.max_connections", 50)
73
+
74
+ logger.info(f"🏷️ Application: {app_name} v{app_version}")
75
+ logger.info(f"💬 Welcome Message: {welcome_msg}")
76
+ logger.info(f"🔗 Max Connections: {max_connections}")
77
+
78
+ # Check if features are enabled
79
+ features = get_custom_setting_value("features", {})
80
+ enabled_features = [name for name, enabled in features.items() if enabled]
81
+
82
+ logger.info(f"✅ Enabled Features: {', '.join(enabled_features)}")
83
+
84
+ # Set a new custom setting
85
+ set_custom_setting_value("demo_settings.last_updated", "2025-08-08")
86
+ logger.info("🔧 Set new custom setting: demo_settings.last_updated")
87
+
88
+ # Get all custom settings
89
+ all_custom_settings = get_custom_settings()
90
+ logger.info(f"📊 Total custom settings: {len(all_custom_settings)} sections")
91
+
92
+ return {
93
+ "app_name": app_name,
94
+ "app_version": app_version,
95
+ "welcome_message": welcome_msg,
96
+ "max_connections": max_connections,
97
+ "enabled_features": enabled_features,
98
+ "total_settings_sections": len(all_custom_settings)
99
+ }
100
+
101
+
102
+ def create_custom_settings_file():
103
+ """
104
+ Create a custom settings JSON file for the basic server.
105
+ """
106
+ custom_settings = {
107
+ "application": {
108
+ "name": "Basic MCP Proxy Server with Custom Settings",
109
+ "version": "1.1.0",
110
+ "environment": "development",
111
+ "description": "Basic server demonstrating custom settings usage"
112
+ },
113
+ "features": {
114
+ "basic_logging": True,
115
+ "simple_commands": True,
116
+ "custom_settings_demo": True,
117
+ "file_based_config": True
118
+ },
119
+ "server_info": {
120
+ "description": "Basic server with file-based custom settings",
121
+ "author": "MCP Proxy Adapter Team",
122
+ "contact": "support@example.com",
123
+ "documentation": "https://example.com/docs"
124
+ },
125
+ "demo_settings": {
126
+ "welcome_message": "Welcome to Basic MCP Proxy Server with Custom Settings!",
127
+ "max_connections": 150,
128
+ "timeout": 45,
129
+ "debug_mode": True,
130
+ "log_level": "INFO"
131
+ },
132
+ "performance": {
133
+ "enable_caching": True,
134
+ "cache_ttl": 300,
135
+ "max_cache_size": 1000
136
+ },
137
+ "security": {
138
+ "enable_rate_limiting": False,
139
+ "max_request_size": "5MB",
140
+ "allowed_origins": ["*"]
141
+ }
142
+ }
143
+
144
+ # Write to file
145
+ settings_file = "basic_custom_settings.json"
146
+ with open(settings_file, 'w', encoding='utf-8') as f:
147
+ json.dump(custom_settings, f, indent=2, ensure_ascii=False)
148
+
149
+ print(f"✅ Created custom settings file: {settings_file}")
150
+ return settings_file
151
+
152
+
153
+ def load_custom_settings_from_file(file_path: str = "basic_custom_settings.json"):
154
+ """
155
+ Load custom settings from a JSON file.
156
+
157
+ Args:
158
+ file_path: Path to the custom settings JSON file
159
+ """
160
+ logger = get_logger("basic_server_custom_settings")
161
+
162
+ try:
163
+ if os.path.exists(file_path):
164
+ with open(file_path, 'r', encoding='utf-8') as f:
165
+ custom_settings = json.load(f)
166
+
167
+ # Add to framework
168
+ add_custom_settings(custom_settings)
169
+
170
+ logger.info(f"📁 Loaded custom settings from: {file_path}")
171
+ logger.info(f"📋 Application: {custom_settings.get('application', {}).get('name', 'Unknown')}")
172
+
173
+ return custom_settings
174
+ else:
175
+ logger.warning(f"⚠️ Custom settings file not found: {file_path}")
176
+ return None
177
+
178
+ except Exception as e:
179
+ logger.error(f"❌ Failed to load custom settings from {file_path}: {e}")
180
+ return None
181
+
182
+
183
+ def print_custom_settings_summary():
184
+ """
185
+ Print a summary of current custom settings.
186
+ """
187
+ logger = get_logger("basic_server_custom_settings")
188
+
189
+ all_settings = get_custom_settings()
190
+
191
+ logger.info("📊 Custom Settings Summary:")
192
+
193
+ # Application info
194
+ app_name = get_custom_setting_value("application.name", "Unknown")
195
+ app_version = get_custom_setting_value("application.version", "0.0.0")
196
+ logger.info(f" Application: {app_name} v{app_version}")
197
+
198
+ # Features
199
+ features = get_custom_setting_value("features", {})
200
+ enabled_features = [name for name, enabled in features.items() if enabled]
201
+ logger.info(f" Enabled Features: {', '.join(enabled_features) if enabled_features else 'None'}")
202
+
203
+ # Demo settings
204
+ welcome_msg = get_custom_setting_value("demo_settings.welcome_message", "Hello!")
205
+ max_connections = get_custom_setting_value("demo_settings.max_connections", 50)
206
+ logger.info(f" Welcome Message: {welcome_msg}")
207
+ logger.info(f" Max Connections: {max_connections}")
208
+
209
+ # Performance
210
+ caching_enabled = get_custom_setting_value("performance.enable_caching", False)
211
+ logger.info(f" Caching: {'Enabled' if caching_enabled else 'Disabled'}")
212
+
213
+ # Security
214
+ rate_limiting = get_custom_setting_value("security.enable_rate_limiting", False)
215
+ logger.info(f" Rate Limiting: {'Enabled' if rate_limiting else 'Disabled'}")
216
+
217
+ logger.info(f" Total Settings Sections: {len(all_settings)}")
218
+
219
+
220
+ if __name__ == "__main__":
221
+ # Setup basic custom settings
222
+ setup_basic_custom_settings()
223
+
224
+ # Demonstrate usage
225
+ demo_info = demonstrate_custom_settings_usage()
226
+
227
+ # Create custom settings file
228
+ settings_file = create_custom_settings_file()
229
+
230
+ # Load from file
231
+ load_custom_settings_from_file(settings_file)
232
+
233
+ # Print summary
234
+ print_custom_settings_summary()
235
+
236
+ print("\n🎉 Custom settings demonstration completed!")
237
+ print(f"📁 Custom settings file: {settings_file}")
238
+ print("🔧 You can now use these settings in your basic server application.")
@@ -0,0 +1,98 @@
1
+ """
2
+ Basic Server Example
3
+
4
+ This example demonstrates a minimal MCP Proxy Adapter server
5
+ without any additional custom commands.
6
+ """
7
+
8
+ import asyncio
9
+ import uvicorn
10
+ import sys
11
+ import os
12
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
13
+
14
+ from mcp_proxy_adapter import create_app
15
+ from mcp_proxy_adapter.core.logging import get_logger, setup_logging
16
+ from mcp_proxy_adapter.core.settings import (
17
+ Settings,
18
+ get_server_host,
19
+ get_server_port,
20
+ get_server_debug,
21
+ get_setting
22
+ )
23
+
24
+
25
+ def main():
26
+ """Run the basic server example."""
27
+ # Load configuration from config.json in the same directory
28
+ config_path = os.path.join(os.path.dirname(__file__), "config.json")
29
+ if os.path.exists(config_path):
30
+ from mcp_proxy_adapter.config import config
31
+ config.load_from_file(config_path)
32
+ print(f"✅ Loaded configuration from: {config_path}")
33
+ else:
34
+ print(f"⚠️ Configuration file not found: {config_path}")
35
+ print(" Using default configuration")
36
+
37
+ # Setup logging with configuration
38
+ setup_logging()
39
+ logger = get_logger("basic_server")
40
+
41
+ # Get settings from configuration
42
+ server_settings = Settings.get_server_settings()
43
+ logging_settings = Settings.get_logging_settings()
44
+ commands_settings = Settings.get_commands_settings()
45
+ custom_settings = Settings.get_custom_setting("custom", {})
46
+
47
+ # Print server header and description
48
+ print("=" * 80)
49
+ print("🔧 BASIC MCP PROXY ADAPTER SERVER")
50
+ print("=" * 80)
51
+ print("📋 Description:")
52
+ print(f" {custom_settings.get('description', 'Basic server example')}")
53
+ print()
54
+ print("⚙️ Configuration:")
55
+ print(f" • Server: {server_settings['host']}:{server_settings['port']}")
56
+ print(f" • Debug: {server_settings['debug']}")
57
+ print(f" • Log Level: {logging_settings['level']}")
58
+ print(f" • Log Directory: {logging_settings['log_dir']}")
59
+ print(f" • Auto Discovery: {commands_settings['auto_discovery']}")
60
+ print()
61
+ print("🔧 Available Commands:")
62
+ print(" • help - Built-in help command")
63
+ print(" • health - Built-in health command")
64
+ print(" • config - Built-in config command")
65
+ print(" • reload - Built-in reload command")
66
+ print()
67
+ print("🎯 Features:")
68
+ print(" • Standard JSON-RPC API")
69
+ print(" • Built-in command discovery")
70
+ print(" • Basic logging and error handling")
71
+ print(" • OpenAPI schema generation")
72
+ print(" • Configuration-driven settings")
73
+ print("=" * 80)
74
+ print()
75
+
76
+ logger.info("Starting Basic MCP Proxy Adapter Server...")
77
+ logger.info(f"Server configuration: {server_settings}")
78
+ logger.info(f"Logging configuration: {logging_settings}")
79
+ logger.info(f"Commands configuration: {commands_settings}")
80
+
81
+ # Create application with settings from configuration
82
+ app = create_app(
83
+ title=custom_settings.get('server_name', 'Basic MCP Proxy Adapter Server'),
84
+ description=custom_settings.get('description', 'Minimal server example with only built-in commands'),
85
+ version="1.0.0"
86
+ )
87
+
88
+ # Run the server with configuration settings
89
+ uvicorn.run(
90
+ app,
91
+ host=server_settings['host'],
92
+ port=server_settings['port'],
93
+ log_level=server_settings['log_level'].lower()
94
+ )
95
+
96
+
97
+ if __name__ == "__main__":
98
+ main()