Coverage for src/mcp_atlassian/__init__.py: 44%
57 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-10 01:37 +0900
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-10 01:37 +0900
1import asyncio
2import logging
3import os
4import sys
6import click
7from dotenv import load_dotenv
9__version__ = "0.1.16"
11logger = logging.getLogger("mcp-atlassian")
14@click.command()
15@click.option(
16 "-v",
17 "--verbose",
18 count=True,
19 help="Increase verbosity (can be used multiple times)",
20)
21@click.option(
22 "--env-file", type=click.Path(exists=True, dir_okay=False), help="Path to .env file"
23)
24@click.option(
25 "--confluence-url",
26 help="Confluence URL (e.g., https://your-domain.atlassian.net/wiki)",
27)
28@click.option("--confluence-username", help="Confluence username/email")
29@click.option("--confluence-token", help="Confluence API token")
30@click.option(
31 "--jira-url",
32 help="Jira URL (e.g., https://your-domain.atlassian.net or https://jira.your-company.com)",
33)
34@click.option("--jira-username", help="Jira username/email (for Jira Cloud)")
35@click.option("--jira-token", help="Jira API token (for Jira Cloud)")
36@click.option(
37 "--jira-personal-token",
38 help="Jira Personal Access Token (for Jira Server/Data Center)",
39)
40@click.option(
41 "--jira-ssl-verify/--no-jira-ssl-verify",
42 default=True,
43 help="Verify SSL certificates for Jira Server/Data Center (default: verify)",
44)
45def main(
46 *,
47 verbose: bool = False,
48 env_file: str | None = None,
49 confluence_url: str | None = None,
50 confluence_username: str | None = None,
51 confluence_token: str | None = None,
52 jira_url: str | None = None,
53 jira_username: str | None = None,
54 jira_token: str | None = None,
55 jira_personal_token: str | None = None,
56 jira_ssl_verify: bool = True,
57) -> None:
58 """MCP Atlassian Server - Jira and Confluence functionality for MCP
60 Supports both Atlassian Cloud and Jira Server/Data Center deployments.
62 Args:
63 verbose: Enable verbose logging output
64 env_file: Path to .env file for configuration
65 confluence_url: Confluence URL
66 confluence_username: Confluence username
67 confluence_token: Confluence API token
68 jira_url: Jira URL
69 jira_username: Jira username/email (for Jira Cloud)
70 jira_token: Jira API token (for Jira Cloud)
71 jira_personal_token: Jira personal access token (for Jira Server/Data Center)
72 jira_ssl_verify: Whether to verify SSL certificates for Jira connections
73 """
74 # Set up logging based on verbosity
75 _setup_logging(verbose=verbose)
77 # Load environment variables
78 _load_environment_variables(env_file=env_file)
80 # Set environment variables from command line arguments
81 _set_environment_from_args(
82 confluence_url=confluence_url,
83 confluence_username=confluence_username,
84 confluence_token=confluence_token,
85 jira_url=jira_url,
86 jira_username=jira_username,
87 jira_token=jira_token,
88 jira_personal_token=jira_personal_token,
89 jira_ssl_verify=jira_ssl_verify,
90 )
92 # Import the server module after environment setup
93 from . import server
95 # Run the server
96 asyncio.run(server.main())
99def _setup_logging(*, verbose: int) -> None:
100 """
101 Configure logging based on verbosity level.
103 Args:
104 verbose: Verbosity level (0=INFO, 1=INFO, 2+=DEBUG)
105 """
106 logging_level = logging.INFO
107 if verbose == 1:
108 logging_level = logging.INFO
109 elif verbose >= 2:
110 logging_level = logging.DEBUG
112 logging.basicConfig(level=logging_level, stream=sys.stderr)
115def _load_environment_variables(*, env_file: str | None = None) -> None:
116 """
117 Load environment variables from file.
119 Args:
120 env_file: Optional path to .env file
121 """
122 if env_file:
123 logger.debug(f"Loading environment from file: {env_file}")
124 load_dotenv(env_file)
125 else:
126 logger.debug("Attempting to load environment from default .env file")
127 load_dotenv()
130def _set_environment_from_args(
131 *,
132 confluence_url: str | None = None,
133 confluence_username: str | None = None,
134 confluence_token: str | None = None,
135 jira_url: str | None = None,
136 jira_username: str | None = None,
137 jira_token: str | None = None,
138 jira_personal_token: str | None = None,
139 jira_ssl_verify: bool = True,
140) -> None:
141 """
142 Set environment variables from command line arguments.
144 Args:
145 confluence_url: Confluence URL
146 confluence_username: Confluence username
147 confluence_token: Confluence API token
148 jira_url: Jira URL
149 jira_username: Jira username
150 jira_token: Jira API token
151 jira_personal_token: Jira personal access token
152 jira_ssl_verify: Whether to verify SSL certificates for Jira connections
153 """
154 # Set environment variables from command line arguments if provided
155 if confluence_url:
156 os.environ["CONFLUENCE_URL"] = confluence_url
157 if confluence_username:
158 os.environ["CONFLUENCE_USERNAME"] = confluence_username
159 if confluence_token:
160 os.environ["CONFLUENCE_API_TOKEN"] = confluence_token
161 if jira_url:
162 os.environ["JIRA_URL"] = jira_url
163 if jira_username:
164 os.environ["JIRA_USERNAME"] = jira_username
165 if jira_token:
166 os.environ["JIRA_API_TOKEN"] = jira_token
167 if jira_personal_token:
168 os.environ["JIRA_PERSONAL_TOKEN"] = jira_personal_token
170 # Set SSL verification for Jira Server/Data Center
171 os.environ["JIRA_SSL_VERIFY"] = str(jira_ssl_verify).lower()
174__all__ = ["main", "server", "__version__"]
176if __name__ == "__main__":
177 main()