SEUyishu commited on
Commit
b62550b
·
verified ·
1 Parent(s): 1742f51

Update start_mcp.py

Browse files
Files changed (1) hide show
  1. start_mcp.py +188 -166
start_mcp.py CHANGED
@@ -1,166 +1,188 @@
1
- #!/usr/bin/env python3
2
- """
3
- MaTableGPT MCP Server Launcher
4
- ==============================
5
-
6
- This script starts the MaTableGPT MCP service for extracting
7
- table data from materials science literature.
8
-
9
- Usage:
10
- python start_mcp.py [--host HOST] [--port PORT] [--mode MODE]
11
-
12
- Arguments:
13
- --host Host address (default: 0.0.0.0)
14
- --port Port number (default: 7860)
15
- --mode Run mode: 'stdio' or 'sse' (default: sse for HuggingFace Space)
16
-
17
- Environment Variables:
18
- LLM_API_KEY / OPENAI_API_KEY - API key for LLM service
19
- LLM_API_BASE / OPENAI_API_BASE - Custom API base URL (for third-party services)
20
- LLM_MODEL / OPENAI_MODEL - Model name (default: gpt-4-turbo-preview)
21
- MCP_HOST - Server host (default: 0.0.0.0)
22
- MCP_PORT - Server port (default: 7860)
23
- """
24
-
25
- import os
26
- import sys
27
- import argparse
28
- import logging
29
-
30
- # Add parent directory to path for imports
31
- sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
32
-
33
- # Configure logging
34
- logging.basicConfig(
35
- level=logging.INFO,
36
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
37
- )
38
- logger = logging.getLogger("matablgpt-mcp-launcher")
39
-
40
-
41
- def check_environment():
42
- """Check if required environment variables are set."""
43
- warnings = []
44
-
45
- # Check for API key (support both naming conventions)
46
- api_key = os.environ.get('LLM_API_KEY') or os.environ.get('OPENAI_API_KEY')
47
- if not api_key:
48
- warnings.append(
49
- "LLM_API_KEY/OPENAI_API_KEY not set. GPT extraction features will not work. "
50
- "Set it in HuggingFace Space secrets or environment variables."
51
- )
52
-
53
- # Check for API base (for third-party services)
54
- api_base = os.environ.get('LLM_API_BASE') or os.environ.get('OPENAI_API_BASE')
55
- if api_base:
56
- logger.info(f"Using custom API base: {api_base}")
57
-
58
- return warnings
59
-
60
-
61
- def check_dependencies():
62
- """Check if required packages are installed."""
63
- missing = []
64
-
65
- required = [
66
- ('mcp', 'mcp[cli]'),
67
- ('openai', 'openai'),
68
- ('bs4', 'beautifulsoup4'),
69
- ('pandas', 'pandas'),
70
- ('lxml', 'lxml')
71
- ]
72
-
73
- for module, package in required:
74
- try:
75
- __import__(module)
76
- except ImportError:
77
- missing.append(package)
78
-
79
- return missing
80
-
81
-
82
- def main():
83
- """Main entry point."""
84
- # Get default values from environment variables
85
- default_host = os.environ.get('MCP_HOST', '0.0.0.0')
86
- default_port = int(os.environ.get('MCP_PORT', '7860'))
87
-
88
- parser = argparse.ArgumentParser(
89
- description="MaTableGPT MCP Server - Table Data Extraction from Materials Science Literature"
90
- )
91
- parser.add_argument(
92
- '--host',
93
- default=default_host,
94
- help=f'Host address (default: {default_host})'
95
- )
96
- parser.add_argument(
97
- '--port',
98
- type=int,
99
- default=default_port,
100
- help=f'Port number (default: {default_port})'
101
- )
102
- parser.add_argument(
103
- '--mode',
104
- choices=['stdio', 'sse'],
105
- default='sse',
106
- help='Run mode: stdio for standard I/O, sse for Server-Sent Events (default: sse)'
107
- )
108
- parser.add_argument(
109
- '--debug',
110
- action='store_true',
111
- help='Enable debug logging'
112
- )
113
-
114
- args = parser.parse_args()
115
-
116
- if args.debug:
117
- logging.getLogger().setLevel(logging.DEBUG)
118
-
119
- # Check dependencies
120
- missing = check_dependencies()
121
- if missing:
122
- logger.error(f"Missing required packages: {', '.join(missing)}")
123
- logger.error(f"Install with: pip install {' '.join(missing)}")
124
- sys.exit(1)
125
-
126
- # Check environment
127
- warnings = check_environment()
128
- for warning in warnings:
129
- logger.warning(warning)
130
-
131
- # Display startup info
132
- logger.info("=" * 60)
133
- logger.info("MaTableGPT MCP Server")
134
- logger.info("=" * 60)
135
- logger.info(f"Mode: {args.mode}")
136
- if args.mode == 'sse':
137
- logger.info(f"Host: {args.host}")
138
- logger.info(f"Port: {args.port}")
139
- logger.info(f"SSE Endpoint: http://{args.host}:{args.port}/sse")
140
- logger.info("=" * 60)
141
-
142
- # Import and run MCP service
143
- try:
144
- from mcp_service import mcp
145
-
146
- if args.mode == 'stdio':
147
- logger.info("Starting MCP server in stdio mode...")
148
- mcp.run()
149
- else:
150
- logger.info(f"Starting MCP server in SSE mode on {args.host}:{args.port}...")
151
- logger.info("MCP SSE service is ready to accept connections!")
152
- mcp.run(transport='sse', host=args.host, port=args.port)
153
-
154
- except ImportError as e:
155
- logger.error(f"Failed to import MCP service: {e}")
156
- logger.error("Make sure mcp_service.py is in the same directory")
157
- sys.exit(1)
158
- except Exception as e:
159
- logger.error(f"Error starting MCP server: {e}")
160
- import traceback
161
- traceback.print_exc()
162
- sys.exit(1)
163
-
164
-
165
- if __name__ == "__main__":
166
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ MaTableGPT MCP Server Launcher
4
+ ==============================
5
+
6
+ This script starts the MaTableGPT MCP service for extracting
7
+ table data from materials science literature.
8
+
9
+ Usage:
10
+ python start_mcp.py [--host HOST] [--port PORT] [--mode MODE]
11
+
12
+ Arguments:
13
+ --host Host address (default: 0.0.0.0)
14
+ --port Port number (default: 7860)
15
+ --mode Run mode: 'stdio' or 'sse' (default: sse for HuggingFace Space)
16
+
17
+ Environment Variables:
18
+ LLM_API_KEY / OPENAI_API_KEY - API key for LLM service
19
+ LLM_API_BASE / OPENAI_API_BASE - Custom API base URL (for third-party services)
20
+ LLM_MODEL / OPENAI_MODEL - Model name (default: gpt-4-turbo-preview)
21
+ MCP_HOST - Server host (default: 0.0.0.0)
22
+ MCP_PORT - Server port (default: 7860)
23
+ """
24
+
25
+ import os
26
+ import sys
27
+ import argparse
28
+ import logging
29
+
30
+ # Add current directory to path for imports
31
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
32
+
33
+ # Configure logging
34
+ logging.basicConfig(
35
+ level=logging.INFO,
36
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
37
+ )
38
+ logger = logging.getLogger("matablgpt-mcp-launcher")
39
+
40
+
41
+ def check_environment():
42
+ """Check if required environment variables are set."""
43
+ warnings = []
44
+
45
+ # Check for API key (support both naming conventions)
46
+ api_key = os.environ.get('LLM_API_KEY') or os.environ.get('OPENAI_API_KEY')
47
+ if not api_key:
48
+ warnings.append(
49
+ "LLM_API_KEY/OPENAI_API_KEY not set. GPT extraction features will not work. "
50
+ "Set it in HuggingFace Space secrets or environment variables."
51
+ )
52
+
53
+ # Check for API base (for third-party services)
54
+ api_base = os.environ.get('LLM_API_BASE') or os.environ.get('OPENAI_API_BASE')
55
+ if api_base:
56
+ logger.info(f"Using custom API base: {api_base}")
57
+
58
+ return warnings
59
+
60
+
61
+ def check_dependencies():
62
+ """Check if required packages are installed."""
63
+ missing = []
64
+
65
+ required = [
66
+ ('mcp', 'mcp[cli]'),
67
+ ('openai', 'openai'),
68
+ ('bs4', 'beautifulsoup4'),
69
+ ('pandas', 'pandas'),
70
+ ('lxml', 'lxml')
71
+ ]
72
+
73
+ for module, package in required:
74
+ try:
75
+ __import__(module)
76
+ except ImportError:
77
+ missing.append(package)
78
+
79
+ return missing
80
+
81
+
82
+ def run_sse_server(host: str, port: int):
83
+ """Run MCP server in SSE mode using uvicorn."""
84
+ import uvicorn
85
+ from mcp_service import mcp
86
+
87
+ # Get the SSE app from FastMCP
88
+ sse_app = mcp.sse_app()
89
+
90
+ logger.info(f"Starting MCP SSE server on {host}:{port}")
91
+ logger.info(f"SSE Endpoint: http://{host}:{port}/sse")
92
+
93
+ # Run with uvicorn
94
+ uvicorn.run(
95
+ sse_app,
96
+ host=host,
97
+ port=port,
98
+ log_level="info"
99
+ )
100
+
101
+
102
+ def run_stdio_server():
103
+ """Run MCP server in stdio mode."""
104
+ from mcp_service import mcp
105
+ logger.info("Starting MCP server in stdio mode...")
106
+ mcp.run()
107
+
108
+
109
+ def main():
110
+ """Main entry point."""
111
+ # Get default values from environment variables
112
+ default_host = os.environ.get('MCP_HOST', '0.0.0.0')
113
+ default_port = int(os.environ.get('MCP_PORT', '7860'))
114
+
115
+ parser = argparse.ArgumentParser(
116
+ description="MaTableGPT MCP Server - Table Data Extraction from Materials Science Literature"
117
+ )
118
+ parser.add_argument(
119
+ '--host',
120
+ default=default_host,
121
+ help=f'Host address (default: {default_host})'
122
+ )
123
+ parser.add_argument(
124
+ '--port',
125
+ type=int,
126
+ default=default_port,
127
+ help=f'Port number (default: {default_port})'
128
+ )
129
+ parser.add_argument(
130
+ '--mode',
131
+ choices=['stdio', 'sse'],
132
+ default='sse',
133
+ help='Run mode: stdio for standard I/O, sse for Server-Sent Events (default: sse)'
134
+ )
135
+ parser.add_argument(
136
+ '--debug',
137
+ action='store_true',
138
+ help='Enable debug logging'
139
+ )
140
+
141
+ args = parser.parse_args()
142
+
143
+ if args.debug:
144
+ logging.getLogger().setLevel(logging.DEBUG)
145
+
146
+ # Check dependencies
147
+ missing = check_dependencies()
148
+ if missing:
149
+ logger.error(f"Missing required packages: {', '.join(missing)}")
150
+ logger.error(f"Install with: pip install {' '.join(missing)}")
151
+ sys.exit(1)
152
+
153
+ # Check environment
154
+ warnings = check_environment()
155
+ for warning in warnings:
156
+ logger.warning(warning)
157
+
158
+ # Display startup info
159
+ logger.info("=" * 60)
160
+ logger.info("MaTableGPT MCP Server")
161
+ logger.info("=" * 60)
162
+ logger.info(f"Mode: {args.mode}")
163
+ if args.mode == 'sse':
164
+ logger.info(f"Host: {args.host}")
165
+ logger.info(f"Port: {args.port}")
166
+ logger.info(f"SSE Endpoint: http://{args.host}:{args.port}/sse")
167
+ logger.info("=" * 60)
168
+
169
+ # Run the server
170
+ try:
171
+ if args.mode == 'stdio':
172
+ run_stdio_server()
173
+ else:
174
+ run_sse_server(args.host, args.port)
175
+
176
+ except ImportError as e:
177
+ logger.error(f"Failed to import required module: {e}")
178
+ logger.error("Make sure all dependencies are installed: pip install -r requirements.txt")
179
+ sys.exit(1)
180
+ except Exception as e:
181
+ logger.error(f"Error starting MCP server: {e}")
182
+ import traceback
183
+ traceback.print_exc()
184
+ sys.exit(1)
185
+
186
+
187
+ if __name__ == "__main__":
188
+ main()