44Odoo MCP server via uvx or direct execution.
55"""
66
7+ import argparse
78import asyncio
89import logging
10+ import os
911import sys
1012from typing import Optional
1113
@@ -19,7 +21,7 @@ def main(argv: Optional[list[str]] = None) -> int:
1921 """Main entry point for the MCP server.
2022
2123 This function handles command-line arguments, loads configuration,
22- and runs the MCP server with stdio transport.
24+ and runs the MCP server with the specified transport.
2325
2426 Args:
2527 argv: Command line arguments (defaults to sys.argv[1:])
@@ -30,48 +32,79 @@ def main(argv: Optional[list[str]] = None) -> int:
3032 # Load environment variables from .env file
3133 load_dotenv ()
3234
33- # Parse command line arguments
34- if argv is None :
35- argv = sys .argv [1 :]
36-
37- # Handle help flag
38- if "--help" in argv or "-h" in argv :
39- print ("Odoo MCP Server - Model Context Protocol server for Odoo ERP" , file = sys .stderr )
40- print ("\n Usage: mcp-server-odoo [options]" , file = sys .stderr )
41- print ("\n Options:" , file = sys .stderr )
42- print (" -h, --help Show this help message and exit" , file = sys .stderr )
43- print (" --version Show version information" , file = sys .stderr )
44- print ("\n Environment variables:" , file = sys .stderr )
45- print (" ODOO_URL Odoo server URL (required)" , file = sys .stderr )
46- print (" ODOO_API_KEY Odoo API key (preferred authentication)" , file = sys .stderr )
47- print (" ODOO_USER Odoo username (fallback if no API key)" , file = sys .stderr )
48- print (" ODOO_PASSWORD Odoo password (required with username)" , file = sys .stderr )
49- print (" ODOO_DB Odoo database name (auto-detected if not set)" , file = sys .stderr )
50- print ("\n Optional environment variables:" , file = sys .stderr )
51- print (" ODOO_MCP_LOG_LEVEL Log level (DEBUG, INFO, WARNING, ERROR)" , file = sys .stderr )
52- print (" ODOO_MCP_DEFAULT_LIMIT Default record limit (default: 10)" , file = sys .stderr )
53- print (" ODOO_MCP_MAX_LIMIT Maximum record limit (default: 100)" , file = sys .stderr )
54- print (
55- "\n For more information, visit: https://github.com/ivnvxd/mcp-server-odoo" ,
56- file = sys .stderr ,
57- )
58- return 0
59-
60- # Handle version flag
61- if "--version" in argv :
62- print (f"odoo-mcp-server v{ SERVER_VERSION } " , file = sys .stderr )
63- return 0
35+ # Create argument parser
36+ parser = argparse .ArgumentParser (
37+ description = "Odoo MCP Server - Model Context Protocol server for Odoo ERP" ,
38+ formatter_class = argparse .RawDescriptionHelpFormatter ,
39+ epilog = """Environment variables:
40+ ODOO_URL Odoo server URL (required)
41+ ODOO_API_KEY Odoo API key (preferred authentication)
42+ ODOO_USER Odoo username (fallback if no API key)
43+ ODOO_PASSWORD Odoo password (required with username)
44+ ODOO_DB Odoo database name (auto-detected if not set)
45+
46+ Optional environment variables:
47+ ODOO_MCP_LOG_LEVEL Log level (DEBUG, INFO, WARNING, ERROR)
48+ ODOO_MCP_DEFAULT_LIMIT Default record limit (default: 10)
49+ ODOO_MCP_MAX_LIMIT Maximum record limit (default: 100)
50+ ODOO_MCP_TRANSPORT Transport type: stdio or streamable-http (default: stdio)
51+ ODOO_MCP_HOST Server host for HTTP transports (default: localhost)
52+ ODOO_MCP_PORT Server port for HTTP transports (default: 8000)
53+
54+ For more information, visit: https://github.com/ivnvxd/mcp-server-odoo""" ,
55+ )
56+
57+ parser .add_argument (
58+ "--version" ,
59+ action = "version" ,
60+ version = f"odoo-mcp-server v{ SERVER_VERSION } " ,
61+ )
62+
63+ parser .add_argument (
64+ "--transport" ,
65+ choices = ["stdio" , "streamable-http" ],
66+ default = os .getenv ("ODOO_MCP_TRANSPORT" , "stdio" ),
67+ help = "Transport type to use (default: stdio)" ,
68+ )
69+
70+ parser .add_argument (
71+ "--host" ,
72+ default = os .getenv ("ODOO_MCP_HOST" , "localhost" ),
73+ help = "Server host for HTTP transports (default: localhost)" ,
74+ )
75+
76+ parser .add_argument (
77+ "--port" ,
78+ type = int ,
79+ default = int (os .getenv ("ODOO_MCP_PORT" , "8000" )),
80+ help = "Server port for HTTP transports (default: 8000)" ,
81+ )
82+
83+ # Parse arguments
84+ args = parser .parse_args (argv )
6485
6586 try :
87+ # Override environment variables with CLI arguments
88+ if args .transport :
89+ os .environ ["ODOO_MCP_TRANSPORT" ] = args .transport
90+ if args .host :
91+ os .environ ["ODOO_MCP_HOST" ] = args .host
92+ if args .port :
93+ os .environ ["ODOO_MCP_PORT" ] = str (args .port )
94+
6695 # Load configuration from environment
6796 config = load_config ()
6897
6998 # Create server instance
7099 server = OdooMCPServer (config )
71100
72- # Run the server with stdio transport
73- # This is the standard way to run MCP servers with uvx
74- asyncio .run (server .run_stdio ())
101+ # Run the server with the specified transport
102+ if config .transport == "stdio" :
103+ asyncio .run (server .run_stdio ())
104+ elif config .transport == "streamable-http" :
105+ asyncio .run (server .run_http (host = config .host , port = config .port ))
106+ else :
107+ raise ValueError (f"Unsupported transport: { config .transport } " )
75108
76109 return 0
77110
0 commit comments