diff --git a/src/dolibarr_mcp/cli.py b/src/dolibarr_mcp/cli.py new file mode 100644 index 0000000..f01806c --- /dev/null +++ b/src/dolibarr_mcp/cli.py @@ -0,0 +1,94 @@ +"""Command line interface for Dolibarr MCP Server.""" + +import asyncio +import sys +from typing import Optional + +import click + +from .config import Config +from .dolibarr_mcp_server import main as server_main + + +@click.group() +@click.version_option(version="1.0.0", prog_name="dolibarr-mcp") +def cli(): + """Dolibarr MCP Server - Professional ERP integration via Model Context Protocol.""" + pass + + +@cli.command() +@click.option("--url", help="Dolibarr API URL") +@click.option("--api-key", help="Dolibarr API key") +def test(url: Optional[str], api_key: Optional[str]): + """Test the connection to Dolibarr API.""" + + async def run_test(): + try: + # Import here to avoid circular imports + from .dolibarr_client import DolibarrClient + + # Create config with optional overrides + config = Config() + if url: + config.dolibarr_url = url + if api_key: + config.api_key = api_key + + config.validate_config() + + async with DolibarrClient(config) as client: + click.echo("๐Ÿงช Testing Dolibarr API connection...") + + # Test basic status endpoint + result = await client.get_status() + + if "success" in result: + click.echo("โœ… Connection successful!") + click.echo(f"Dolibarr Version: {result.get('success', {}).get('dolibarr_version', 'Unknown')}") + + # Test a few more endpoints + users = await client.get_users(limit=1) + customers = await client.get_customers(limit=1) + + click.echo(f"Users accessible: {len(users) if isinstance(users, list) else 'Error'}") + click.echo(f"Customers accessible: {len(customers) if isinstance(customers, list) else 'Error'}") + + else: + click.echo(f"โŒ Connection failed: {result}") + sys.exit(1) + + except Exception as e: + click.echo(f"โŒ Test failed: {e}") + sys.exit(1) + + asyncio.run(run_test()) + + +@cli.command() +@click.option("--host", default="localhost", help="Host to bind to") +@click.option("--port", default=8080, help="Port to bind to") +def serve(host: str, port: int): + """Start the Dolibarr MCP server.""" + click.echo(f"๐Ÿš€ Starting Dolibarr MCP server on {host}:{port}") + click.echo("๐Ÿ“ Use this server with MCP-compatible clients") + click.echo("๐Ÿ”ง Configure your environment variables in .env file") + + # Run the MCP server + asyncio.run(server_main()) + + +@cli.command() +def version(): + """Show version information.""" + click.echo("Dolibarr MCP Server v1.0.0") + click.echo("Professional ERP integration via Model Context Protocol") + + +def main(): + """Main entry point.""" + cli() + + +if __name__ == "__main__": + main()