pomera-ai-commander 0.1.0 → 1.2.1
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.
- package/LICENSE +21 -21
- package/README.md +105 -680
- package/bin/pomera-ai-commander.js +62 -62
- package/core/__init__.py +65 -65
- package/core/app_context.py +482 -482
- package/core/async_text_processor.py +421 -421
- package/core/backup_manager.py +655 -655
- package/core/backup_recovery_manager.py +1033 -1033
- package/core/content_hash_cache.py +508 -508
- package/core/context_menu.py +313 -313
- package/core/data_validator.py +1066 -1066
- package/core/database_connection_manager.py +744 -744
- package/core/database_curl_settings_manager.py +608 -608
- package/core/database_promera_ai_settings_manager.py +446 -446
- package/core/database_schema.py +411 -411
- package/core/database_schema_manager.py +395 -395
- package/core/database_settings_manager.py +1507 -1507
- package/core/database_settings_manager_interface.py +456 -456
- package/core/dialog_manager.py +734 -734
- package/core/efficient_line_numbers.py +510 -510
- package/core/error_handler.py +746 -746
- package/core/error_service.py +431 -431
- package/core/event_consolidator.py +511 -511
- package/core/mcp/__init__.py +43 -43
- package/core/mcp/protocol.py +288 -288
- package/core/mcp/schema.py +251 -251
- package/core/mcp/server_stdio.py +299 -299
- package/core/mcp/tool_registry.py +2372 -2345
- package/core/memory_efficient_text_widget.py +711 -711
- package/core/migration_manager.py +914 -914
- package/core/migration_test_suite.py +1085 -1085
- package/core/migration_validator.py +1143 -1143
- package/core/optimized_find_replace.py +714 -714
- package/core/optimized_pattern_engine.py +424 -424
- package/core/optimized_search_highlighter.py +552 -552
- package/core/performance_monitor.py +674 -674
- package/core/persistence_manager.py +712 -712
- package/core/progressive_stats_calculator.py +632 -632
- package/core/regex_pattern_cache.py +529 -529
- package/core/regex_pattern_library.py +350 -350
- package/core/search_operation_manager.py +434 -434
- package/core/settings_defaults_registry.py +1087 -1087
- package/core/settings_integrity_validator.py +1111 -1111
- package/core/settings_serializer.py +557 -557
- package/core/settings_validator.py +1823 -1823
- package/core/smart_stats_calculator.py +709 -709
- package/core/statistics_update_manager.py +619 -619
- package/core/stats_config_manager.py +858 -858
- package/core/streaming_text_handler.py +723 -723
- package/core/task_scheduler.py +596 -596
- package/core/update_pattern_library.py +168 -168
- package/core/visibility_monitor.py +596 -596
- package/core/widget_cache.py +498 -498
- package/mcp.json +51 -61
- package/package.json +61 -57
- package/pomera.py +7482 -7482
- package/pomera_mcp_server.py +183 -144
- package/requirements.txt +32 -0
- package/tools/__init__.py +4 -4
- package/tools/ai_tools.py +2891 -2891
- package/tools/ascii_art_generator.py +352 -352
- package/tools/base64_tools.py +183 -183
- package/tools/base_tool.py +511 -511
- package/tools/case_tool.py +308 -308
- package/tools/column_tools.py +395 -395
- package/tools/cron_tool.py +884 -884
- package/tools/curl_history.py +600 -600
- package/tools/curl_processor.py +1207 -1207
- package/tools/curl_settings.py +502 -502
- package/tools/curl_tool.py +5467 -5467
- package/tools/diff_viewer.py +1071 -1071
- package/tools/email_extraction_tool.py +248 -248
- package/tools/email_header_analyzer.py +425 -425
- package/tools/extraction_tools.py +250 -250
- package/tools/find_replace.py +1750 -1750
- package/tools/folder_file_reporter.py +1463 -1463
- package/tools/folder_file_reporter_adapter.py +480 -480
- package/tools/generator_tools.py +1216 -1216
- package/tools/hash_generator.py +255 -255
- package/tools/html_tool.py +656 -656
- package/tools/jsonxml_tool.py +729 -729
- package/tools/line_tools.py +419 -419
- package/tools/markdown_tools.py +561 -561
- package/tools/mcp_widget.py +1417 -1417
- package/tools/notes_widget.py +973 -973
- package/tools/number_base_converter.py +372 -372
- package/tools/regex_extractor.py +571 -571
- package/tools/slug_generator.py +310 -310
- package/tools/sorter_tools.py +458 -458
- package/tools/string_escape_tool.py +392 -392
- package/tools/text_statistics_tool.py +365 -365
- package/tools/text_wrapper.py +430 -430
- package/tools/timestamp_converter.py +421 -421
- package/tools/tool_loader.py +710 -710
- package/tools/translator_tools.py +522 -522
- package/tools/url_link_extractor.py +261 -261
- package/tools/url_parser.py +204 -204
- package/tools/whitespace_tools.py +355 -355
- package/tools/word_frequency_counter.py +146 -146
- package/core/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/__pycache__/app_context.cpython-313.pyc +0 -0
- package/core/__pycache__/async_text_processor.cpython-313.pyc +0 -0
- package/core/__pycache__/backup_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/backup_recovery_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/content_hash_cache.cpython-313.pyc +0 -0
- package/core/__pycache__/context_menu.cpython-313.pyc +0 -0
- package/core/__pycache__/data_validator.cpython-313.pyc +0 -0
- package/core/__pycache__/database_connection_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/database_curl_settings_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/database_promera_ai_settings_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/database_schema.cpython-313.pyc +0 -0
- package/core/__pycache__/database_schema_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/database_settings_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/database_settings_manager_interface.cpython-313.pyc +0 -0
- package/core/__pycache__/dialog_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/efficient_line_numbers.cpython-313.pyc +0 -0
- package/core/__pycache__/error_handler.cpython-313.pyc +0 -0
- package/core/__pycache__/error_service.cpython-313.pyc +0 -0
- package/core/__pycache__/event_consolidator.cpython-313.pyc +0 -0
- package/core/__pycache__/memory_efficient_text_widget.cpython-313.pyc +0 -0
- package/core/__pycache__/migration_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/migration_test_suite.cpython-313.pyc +0 -0
- package/core/__pycache__/migration_validator.cpython-313.pyc +0 -0
- package/core/__pycache__/optimized_find_replace.cpython-313.pyc +0 -0
- package/core/__pycache__/optimized_pattern_engine.cpython-313.pyc +0 -0
- package/core/__pycache__/optimized_search_highlighter.cpython-313.pyc +0 -0
- package/core/__pycache__/performance_monitor.cpython-313.pyc +0 -0
- package/core/__pycache__/persistence_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/progressive_stats_calculator.cpython-313.pyc +0 -0
- package/core/__pycache__/regex_pattern_cache.cpython-313.pyc +0 -0
- package/core/__pycache__/regex_pattern_library.cpython-313.pyc +0 -0
- package/core/__pycache__/search_operation_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/settings_defaults_registry.cpython-313.pyc +0 -0
- package/core/__pycache__/settings_integrity_validator.cpython-313.pyc +0 -0
- package/core/__pycache__/settings_serializer.cpython-313.pyc +0 -0
- package/core/__pycache__/settings_validator.cpython-313.pyc +0 -0
- package/core/__pycache__/smart_stats_calculator.cpython-313.pyc +0 -0
- package/core/__pycache__/statistics_update_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/stats_config_manager.cpython-313.pyc +0 -0
- package/core/__pycache__/streaming_text_handler.cpython-313.pyc +0 -0
- package/core/__pycache__/task_scheduler.cpython-313.pyc +0 -0
- package/core/__pycache__/visibility_monitor.cpython-313.pyc +0 -0
- package/core/__pycache__/widget_cache.cpython-313.pyc +0 -0
- package/core/mcp/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/mcp/__pycache__/protocol.cpython-313.pyc +0 -0
- package/core/mcp/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/mcp/__pycache__/server_stdio.cpython-313.pyc +0 -0
- package/core/mcp/__pycache__/tool_registry.cpython-313.pyc +0 -0
- package/tools/__pycache__/__init__.cpython-313.pyc +0 -0
- package/tools/__pycache__/ai_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/ascii_art_generator.cpython-313.pyc +0 -0
- package/tools/__pycache__/base64_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/base_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/case_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/column_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/cron_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/curl_history.cpython-313.pyc +0 -0
- package/tools/__pycache__/curl_processor.cpython-313.pyc +0 -0
- package/tools/__pycache__/curl_settings.cpython-313.pyc +0 -0
- package/tools/__pycache__/curl_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/diff_viewer.cpython-313.pyc +0 -0
- package/tools/__pycache__/email_extraction_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/email_header_analyzer.cpython-313.pyc +0 -0
- package/tools/__pycache__/extraction_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/find_replace.cpython-313.pyc +0 -0
- package/tools/__pycache__/folder_file_reporter.cpython-313.pyc +0 -0
- package/tools/__pycache__/folder_file_reporter_adapter.cpython-313.pyc +0 -0
- package/tools/__pycache__/generator_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/hash_generator.cpython-313.pyc +0 -0
- package/tools/__pycache__/html_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/huggingface_helper.cpython-313.pyc +0 -0
- package/tools/__pycache__/jsonxml_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/line_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/list_comparator.cpython-313.pyc +0 -0
- package/tools/__pycache__/markdown_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/mcp_widget.cpython-313.pyc +0 -0
- package/tools/__pycache__/notes_widget.cpython-313.pyc +0 -0
- package/tools/__pycache__/number_base_converter.cpython-313.pyc +0 -0
- package/tools/__pycache__/regex_extractor.cpython-313.pyc +0 -0
- package/tools/__pycache__/slug_generator.cpython-313.pyc +0 -0
- package/tools/__pycache__/sorter_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/string_escape_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/text_statistics_tool.cpython-313.pyc +0 -0
- package/tools/__pycache__/text_wrapper.cpython-313.pyc +0 -0
- package/tools/__pycache__/timestamp_converter.cpython-313.pyc +0 -0
- package/tools/__pycache__/tool_loader.cpython-313.pyc +0 -0
- package/tools/__pycache__/translator_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/url_link_extractor.cpython-313.pyc +0 -0
- package/tools/__pycache__/url_parser.cpython-313.pyc +0 -0
- package/tools/__pycache__/whitespace_tools.cpython-313.pyc +0 -0
- package/tools/__pycache__/word_frequency_counter.cpython-313.pyc +0 -0
package/pomera_mcp_server.py
CHANGED
|
@@ -1,144 +1,183 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Pomera MCP Server - Exposes Pomera text tools via Model Context Protocol
|
|
4
|
-
|
|
5
|
-
This is a standalone MCP server that exposes Pomera's text manipulation tools
|
|
6
|
-
to external AI assistants like Claude Desktop, Cursor, and other MCP clients.
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
python pomera_mcp_server.py
|
|
10
|
-
|
|
11
|
-
Configuration for Claude Desktop (claude_desktop_config.json):
|
|
12
|
-
{
|
|
13
|
-
"mcpServers": {
|
|
14
|
-
"pomera": {
|
|
15
|
-
"command": "python",
|
|
16
|
-
"args": ["C:/path/to/Pomera-AI-Commander/pomera_mcp_server.py"]
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
Configuration for Cursor (.cursor/mcp.json):
|
|
22
|
-
{
|
|
23
|
-
"mcpServers": {
|
|
24
|
-
"pomera": {
|
|
25
|
-
"command": "python",
|
|
26
|
-
"args": ["C:/path/to/Pomera-AI-Commander/pomera_mcp_server.py"]
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
Available Tools:
|
|
32
|
-
- pomera_case_transform: Transform text case (sentence, lower, upper, title)
|
|
33
|
-
- pomera_base64: Encode/decode Base64
|
|
34
|
-
- pomera_hash: Generate MD5, SHA-1, SHA-256, SHA-512, CRC32 hashes
|
|
35
|
-
|
|
36
|
-
Author: Pomera AI Commander
|
|
37
|
-
License: MIT
|
|
38
|
-
"""
|
|
39
|
-
|
|
40
|
-
import sys
|
|
41
|
-
import os
|
|
42
|
-
import
|
|
43
|
-
import
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
logging
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Pomera MCP Server - Exposes Pomera text tools via Model Context Protocol
|
|
4
|
+
|
|
5
|
+
This is a standalone MCP server that exposes Pomera's text manipulation tools
|
|
6
|
+
to external AI assistants like Claude Desktop, Cursor, and other MCP clients.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
python pomera_mcp_server.py
|
|
10
|
+
|
|
11
|
+
Configuration for Claude Desktop (claude_desktop_config.json):
|
|
12
|
+
{
|
|
13
|
+
"mcpServers": {
|
|
14
|
+
"pomera": {
|
|
15
|
+
"command": "python",
|
|
16
|
+
"args": ["C:/path/to/Pomera-AI-Commander/pomera_mcp_server.py"]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
Configuration for Cursor (.cursor/mcp.json):
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"pomera": {
|
|
25
|
+
"command": "python",
|
|
26
|
+
"args": ["C:/path/to/Pomera-AI-Commander/pomera_mcp_server.py"]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Available Tools:
|
|
32
|
+
- pomera_case_transform: Transform text case (sentence, lower, upper, title)
|
|
33
|
+
- pomera_base64: Encode/decode Base64
|
|
34
|
+
- pomera_hash: Generate MD5, SHA-1, SHA-256, SHA-512, CRC32 hashes
|
|
35
|
+
|
|
36
|
+
Author: Pomera AI Commander
|
|
37
|
+
License: MIT
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
import sys
|
|
41
|
+
import os
|
|
42
|
+
import json
|
|
43
|
+
import logging
|
|
44
|
+
import argparse
|
|
45
|
+
|
|
46
|
+
# Add project root to path for imports
|
|
47
|
+
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
|
|
48
|
+
if PROJECT_ROOT not in sys.path:
|
|
49
|
+
sys.path.insert(0, PROJECT_ROOT)
|
|
50
|
+
|
|
51
|
+
# Configure logging to stderr (stdout is used for MCP communication)
|
|
52
|
+
logging.basicConfig(
|
|
53
|
+
level=logging.INFO,
|
|
54
|
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
55
|
+
stream=sys.stderr
|
|
56
|
+
)
|
|
57
|
+
logger = logging.getLogger(__name__)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def main():
|
|
61
|
+
"""Main entry point for the Pomera MCP server."""
|
|
62
|
+
parser = argparse.ArgumentParser(
|
|
63
|
+
description="Pomera MCP Server - Expose text tools via Model Context Protocol"
|
|
64
|
+
)
|
|
65
|
+
parser.add_argument(
|
|
66
|
+
"--debug",
|
|
67
|
+
action="store_true",
|
|
68
|
+
help="Enable debug logging"
|
|
69
|
+
)
|
|
70
|
+
parser.add_argument(
|
|
71
|
+
"--version",
|
|
72
|
+
action="version",
|
|
73
|
+
version="pomera-mcp-server 1.1.1"
|
|
74
|
+
)
|
|
75
|
+
parser.add_argument(
|
|
76
|
+
"--list-tools",
|
|
77
|
+
action="store_true",
|
|
78
|
+
help="List available tools and exit"
|
|
79
|
+
)
|
|
80
|
+
parser.add_argument(
|
|
81
|
+
"--call",
|
|
82
|
+
metavar="TOOL_NAME",
|
|
83
|
+
help="Call a tool directly and exit (bypasses MCP protocol)"
|
|
84
|
+
)
|
|
85
|
+
parser.add_argument(
|
|
86
|
+
"--args",
|
|
87
|
+
metavar="JSON",
|
|
88
|
+
default="{}",
|
|
89
|
+
help="JSON arguments for --call (default: {})"
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
args = parser.parse_args()
|
|
93
|
+
|
|
94
|
+
if args.debug:
|
|
95
|
+
logging.getLogger().setLevel(logging.DEBUG)
|
|
96
|
+
logger.debug("Debug logging enabled")
|
|
97
|
+
|
|
98
|
+
# Import MCP modules
|
|
99
|
+
try:
|
|
100
|
+
from core.mcp.tool_registry import ToolRegistry
|
|
101
|
+
from core.mcp.server_stdio import StdioMCPServer
|
|
102
|
+
except ImportError as e:
|
|
103
|
+
logger.error(f"Failed to import MCP modules: {e}")
|
|
104
|
+
logger.error("Make sure you're running from the Pomera-AI-Commander directory")
|
|
105
|
+
sys.exit(1)
|
|
106
|
+
|
|
107
|
+
# Create tool registry
|
|
108
|
+
try:
|
|
109
|
+
registry = ToolRegistry()
|
|
110
|
+
logger.info(f"Loaded {len(registry)} tools")
|
|
111
|
+
except Exception as e:
|
|
112
|
+
logger.error(f"Failed to create tool registry: {e}")
|
|
113
|
+
sys.exit(1)
|
|
114
|
+
|
|
115
|
+
# List tools mode
|
|
116
|
+
if args.list_tools:
|
|
117
|
+
print("Available Pomera MCP Tools:")
|
|
118
|
+
print("-" * 60)
|
|
119
|
+
for tool in registry.list_tools():
|
|
120
|
+
print(f"\n{tool.name}")
|
|
121
|
+
print(f" {tool.description}")
|
|
122
|
+
if "properties" in tool.inputSchema:
|
|
123
|
+
print(" Parameters:")
|
|
124
|
+
for prop_name, prop_def in tool.inputSchema["properties"].items():
|
|
125
|
+
prop_type = prop_def.get("type", "any")
|
|
126
|
+
prop_desc = prop_def.get("description", "")
|
|
127
|
+
required = prop_name in tool.inputSchema.get("required", [])
|
|
128
|
+
req_marker = "*" if required else ""
|
|
129
|
+
print(f" - {prop_name}{req_marker} ({prop_type}): {prop_desc}")
|
|
130
|
+
return
|
|
131
|
+
|
|
132
|
+
# One-shot call mode
|
|
133
|
+
if args.call:
|
|
134
|
+
try:
|
|
135
|
+
tool_args = json.loads(args.args)
|
|
136
|
+
except json.JSONDecodeError as e:
|
|
137
|
+
print(f"Error: Invalid JSON in --args: {e}", file=sys.stderr)
|
|
138
|
+
sys.exit(1)
|
|
139
|
+
|
|
140
|
+
if args.call not in registry:
|
|
141
|
+
print(f"Error: Unknown tool '{args.call}'", file=sys.stderr)
|
|
142
|
+
print(f"Available tools: {', '.join(registry.get_tool_names())}", file=sys.stderr)
|
|
143
|
+
sys.exit(1)
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
result = registry.execute(args.call, tool_args)
|
|
147
|
+
output = result.to_dict()
|
|
148
|
+
# For simple text results, just print the text
|
|
149
|
+
if len(output.get('content', [])) == 1 and output['content'][0].get('type') == 'text':
|
|
150
|
+
print(output['content'][0]['text'])
|
|
151
|
+
else:
|
|
152
|
+
print(json.dumps(output, indent=2, ensure_ascii=False))
|
|
153
|
+
sys.exit(1 if result.isError else 0)
|
|
154
|
+
except Exception as e:
|
|
155
|
+
print(f"Error executing tool: {e}", file=sys.stderr)
|
|
156
|
+
sys.exit(1)
|
|
157
|
+
return
|
|
158
|
+
|
|
159
|
+
# Create and run server
|
|
160
|
+
server = StdioMCPServer(
|
|
161
|
+
tool_registry=registry,
|
|
162
|
+
server_name="pomera-mcp-server",
|
|
163
|
+
server_version="1.1.1"
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
logger.info("Starting Pomera MCP Server...")
|
|
167
|
+
logger.info(f"Available tools: {', '.join(registry.get_tool_names())}")
|
|
168
|
+
|
|
169
|
+
try:
|
|
170
|
+
# Run synchronously (simpler for stdio)
|
|
171
|
+
server.run_sync()
|
|
172
|
+
except KeyboardInterrupt:
|
|
173
|
+
logger.info("Server interrupted by user")
|
|
174
|
+
except Exception as e:
|
|
175
|
+
logger.exception(f"Server error: {e}")
|
|
176
|
+
sys.exit(1)
|
|
177
|
+
|
|
178
|
+
logger.info("Server shutdown complete")
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
if __name__ == "__main__":
|
|
182
|
+
main()
|
|
183
|
+
|
package/requirements.txt
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Core dependencies for Pomera AI Commander
|
|
2
|
+
requests>=2.25.0
|
|
3
|
+
reportlab>=3.6.0
|
|
4
|
+
python-docx>=0.8.11
|
|
5
|
+
aiohttp>=3.9.0
|
|
6
|
+
|
|
7
|
+
# AI Tools dependencies
|
|
8
|
+
huggingface-hub>=0.16.0
|
|
9
|
+
google-auth>=2.23.0
|
|
10
|
+
google-auth-oauthlib>=1.1.0
|
|
11
|
+
google-auth-httplib2>=0.1.1
|
|
12
|
+
|
|
13
|
+
# Google AI SDK (recommended for better error handling and streaming)
|
|
14
|
+
google-genai>=1.0.0
|
|
15
|
+
|
|
16
|
+
# Azure AI SDK (recommended - Microsoft recommends migrating to this)
|
|
17
|
+
azure-ai-inference>=1.0.0b1
|
|
18
|
+
azure-core>=1.30.0
|
|
19
|
+
|
|
20
|
+
# Retry logic with exponential backoff
|
|
21
|
+
tenacity>=8.2.0
|
|
22
|
+
|
|
23
|
+
# Optional audio dependencies (for advanced features)
|
|
24
|
+
# Uncomment if you need audio processing capabilities
|
|
25
|
+
# pyaudio>=0.2.11
|
|
26
|
+
# numpy>=1.21.0
|
|
27
|
+
|
|
28
|
+
# Performance monitoring (optional)
|
|
29
|
+
# psutil>=5.8.0
|
|
30
|
+
|
|
31
|
+
# Development and build tools
|
|
32
|
+
pyinstaller>=5.0.0
|
package/tools/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Tools package for Pomera AI Commander
|
|
3
|
-
|
|
4
|
-
This package contains all the tool modules for the application.
|
|
1
|
+
"""
|
|
2
|
+
Tools package for Pomera AI Commander
|
|
3
|
+
|
|
4
|
+
This package contains all the tool modules for the application.
|
|
5
5
|
"""
|