MCP server for Atlassian tools (Confluence, Jira)
This report presents the forensic synthetic code analysis of sooperset/mcp-atlassian, a Python project with 5,809 GitHub stars. SynthScan v2.0 examined 127,668 lines of code across 375 source files, recording 4090 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 39.8 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 4090 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/conftest.py | 334 | def validate_test_environment(): | CODE |
| LOW | tests/README.md | 131 | def test_existing_functionality(jira_issue_data, confluence_page_data): | CODE |
| LOW | tests/README.md | 179 | def test_issue_key_validation(make_jira_issue): | CODE |
| LOW | tests/README.md | 184 | def test_issue_key_validation(complete_jira_issue_data): | CODE |
| LOW | tests/README.md | 271 | def test_real_api_integration( | CODE |
| LOW | tests/unit/test_truststore_env.py | 13 | def _should_inject_truststore(env_value: str | None, dotenv_value: str | None) -> bool: | CODE |
| LOW | tests/unit/test_truststore_env.py | 100 | def test_none_dotenv_value_does_not_crash(self) -> None: | CODE |
| LOW | tests/unit/test_truststore_env.py | 112 | def test_import_time_with_env_false(self) -> None: | CODE |
| LOW | tests/unit/test_truststore_env.py | 150 | def test_import_time_with_env_no(self) -> None: | CODE |
| LOW | tests/unit/test_truststore_env.py | 167 | def test_import_time_default_enables_truststore(self) -> None: | CODE |
| LOW | tests/unit/test_truststore_env.py | 186 | def test_import_time_dotenv_none_does_not_crash(self) -> None: | CODE |
| LOW | tests/unit/test_mcp_wire_probe.py | 41 | def test_staging_profile_rejects_invalid_rate(value: str) -> None: | CODE |
| LOW | tests/unit/test_mcp_wire_probe.py | 49 | def test_staging_profile_requires_values_without_echoing_secrets() -> None: | CODE |
| LOW | tests/unit/test_mcp_wire_probe.py | 61 | def test_staging_profile_passes_only_approved_environment() -> None: | CODE |
| LOW | tests/unit/test_mcp_wire_probe.py | 85 | def test_staging_tool_gate_requires_exact_read_allowlist() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 118 | def test_expected_protocol_version_accepts_matching_lane() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 124 | def test_expected_protocol_version_rejects_mismatch() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 130 | def test_tool_expectations_accept_matching_listing() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 139 | def test_tool_expectations_reject_missing_expected_tool() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 149 | def test_tool_expectations_reject_visible_hidden_tool() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 159 | def test_tool_expectations_reject_contradictory_configuration() -> None: | CODE |
| LOW⚡ | tests/unit/test_mcp_wire_probe.py | 169 | def test_installed_versions_are_sanitized_and_tolerate_missing_package() -> None: | CODE |
| LOW | tests/unit/test_mcp_wire_probe.py | 194 | def test_result_record_omits_response_content() -> None: | CODE |
| LOW⚡ | tests/unit/test_exceptions.py | 15 | def test_instantiation_without_message(self): | CODE |
| LOW⚡ | tests/unit/test_exceptions.py | 24 | def test_instantiation_with_message(self): | CODE |
| LOW⚡ | tests/unit/test_exceptions.py | 34 | def test_instantiation_with_multiple_args(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 46 | def test_inheritance_hierarchy(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 56 | def test_string_representation(self): | CODE |
| LOW⚡ | tests/unit/test_exceptions.py | 74 | def test_exception_raising_and_catching(self): | CODE |
| LOW⚡ | tests/unit/test_exceptions.py | 84 | def test_exception_catching_as_base_exception(self): | CODE |
| LOW⚡ | tests/unit/test_exceptions.py | 94 | def test_exception_chaining_with_cause(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 110 | def test_exception_chaining_with_context(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 125 | def test_exception_suppressed_context(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 141 | def test_serialization_with_pickle(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 156 | def test_exception_attributes_access(self): | CODE |
| LOW | tests/unit/test_exceptions.py | 184 | def test_realistic_authentication_scenarios(self): | CODE |
| LOW | tests/unit/test_docker_versioning.py | 6 | def test_dockerfile_injects_version_before_project_install() -> None: | CODE |
| LOW | tests/unit/test_docker_versioning.py | 21 | def test_docker_workflow_passes_version_and_guards_manual_tag() -> None: | CODE |
| LOW⚡ | tests/unit/test_generate_tool_docs.py | 46 | def test_escape_mdx_in_table_handles_json_braces( | CODE |
| LOW⚡ | tests/unit/test_generate_tool_docs.py | 54 | def test_upload_attachment_override_matches_tool_parameter() -> None: | CODE |
| LOW⚡ | tests/unit/test_generate_tool_docs.py | 64 | def test_tool_override_preserves_legacy_positional_fields() -> None: | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 81 | def test_attachment_and_jira_guidance_are_preserved_in_overrides() -> None: | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 97 | def _render_override_category( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 138 | def test_jira_create_metadata_guidance_survives_page_regeneration( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 157 | def test_upload_attachment_examples_survive_page_regeneration( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 229 | def test_restored_examples_survive_page_regeneration( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 261 | def test_cloud_only_guidance_survives_page_regeneration( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 307 | def test_category_template_renders_notes_and_safe_nested_json() -> None: | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 406 | def test_check_counts_rejects_valid_number_in_wrong_context( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 439 | def test_check_mode_rejects_stale_warning_core_toolset_count( | CODE |
| LOW | tests/unit/test_generate_tool_docs.py | 484 | def test_check_generated_pages_detects_stale_toolset_membership( | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 30 | def test_http_transports_use_direct_execution( | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 55 | def test_stdio_transport_uses_stdin_guard(self, mock_server, mock_asyncio_run): | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 96 | def test_stateless_rejects_non_streamable_http(self, mock_asyncio_run, transport): | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 106 | def test_cli_overrides_env_transport(self, mock_server, mock_asyncio_run): | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 122 | async def test_stdio_guard_cancels_server_when_parent_exits(self): | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 148 | def test_signal_handlers_always_setup(self, mock_server): | CODE |
| LOW | tests/unit/test_main_transport_selection.py | 164 | def test_error_handling_preserved(self, mock_server): | CODE |
| LOW | tests/unit/test_stdin_monitoring_fix.py | 15 | def test_streamable_http_starts_without_hanging(self): | CODE |
| LOW | tests/unit/test_stdin_monitoring_fix.py | 65 | def test_code_structure_validates_fix(self): | STRING |
| 2697 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | CONTRIBUTING.md | 111 | Summary of function purpose. More detailed description if needed. Args: param1 | STRING |
| HIGH | src/mcp_atlassian/utils/env.py | 144 | Parse custom headers from environment variable containing comma-separated key=value pairs. Args: env_var_na | STRING |
| HIGH | src/mcp_atlassian/utils/io.py | 27 | Validate that a path does not escape the base directory. Resolves symlinks and normalizes the path to prevent path | STRING |
| HIGH | src/mcp_atlassian/models/base.py | 32 | Convert an API response to a model instance. Args: data: The API response data | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 90 | Get a Jira issue by key. Args: issue_key: The issue key (e.g., PROJECT-123) ex | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 607 | Create a new Jira issue. Args: project_key: The key of the project summary: Th | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1152 | Update a Jira issue. Args: issue_key: The key of the issue to update fields: D | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1338 | Assign a Jira issue to a user using the dedicated assignment endpoint. Unlike update_issue (which sets | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1404 | Update an issue with a status change. Args: issue_key: The key of the issue to update | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1542 | Delete a Jira issue. Args: issue_key: The key of the issue to delete Returns: | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1563 | Move a Jira issue to a different project. Uses Jira Cloud's bulk move API. The issue can be assigned a | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1800 | Get raw transition data from the Jira API. This is an internal method that returns unprocessed transit | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1826 | Transition an issue to a new status. Args: issue_key: The key of the issue tra | STRING |
| HIGH | src/mcp_atlassian/jira/issues.py | 1853 | Create multiple Jira issues in a batch. Args: issues: List of issue dictionaries, each containing: | STRING |
| HIGH | src/mcp_atlassian/jira/metrics.py | 35 | Get raw date information for a single Jira issue. Args: issue_key: The issue key (e.g., PR | STRING |
| HIGH | src/mcp_atlassian/jira/metrics.py | 373 | Format minutes into human-readable string. Examples: - 90 -> "1h 30m" - 1500 -> "1d 1h | STRING |
| HIGH | src/mcp_atlassian/jira/sprints.py | 134 | Add issues to a sprint. Args: sprint_id: The sprint ID to add issues to. issue_keys: Li | STRING |
| HIGH | src/mcp_atlassian/jira/sprints.py | 153 | Move issues to the backlog (removes them from any sprint). Args: issue_keys: List of issue keys to | STRING |
| HIGH | src/mcp_atlassian/jira/field_options.py | 61 | Get allowed option values for a custom field. Cloud: Uses the Field Context Option API with pagination. | STRING |
| HIGH | src/mcp_atlassian/jira/field_options.py | 152 | Get field options via Server/DC createmeta. Uses the new createmeta endpoint introduced in Jira 9.x+: ` | STRING |
| HIGH | src/mcp_atlassian/jira/epics.py | 294 | Link an existing issue to an epic. Args: issue_key: The key of the issue to link (e.g. 'PR | STRING |
| HIGH | src/mcp_atlassian/jira/epics.py | 434 | Get all issues linked to a specific epic. Args: epic_key: The key of the epic (e.g. 'PROJ- | STRING |
| HIGH | src/mcp_atlassian/jira/epics.py | 854 | Update Epic-specific fields after Epic creation. This method implements the second step of the two-ste | STRING |
| HIGH | src/mcp_atlassian/jira/forms_api.py | 56 | Make a request to the Forms API. Supports all authentication types: OAuth, PAT, and Basic Auth. Args: | STRING |
| HIGH | src/mcp_atlassian/jira/forms_api.py | 170 | Get all forms associated with an issue. Args: issue_key: The issue key (e.g. 'PROJ-123') R | STRING |
| HIGH | src/mcp_atlassian/jira/forms_api.py | 215 | Get detailed information about a specific form. Args: issue_key: The issue key (e.g. 'PROJ-123') | STRING |
| HIGH | src/mcp_atlassian/jira/forms_api.py | 251 | Update form field answers directly via the Forms API. **Known Limitation - DATETIME fields:** The Jira | STRING |
| HIGH | src/mcp_atlassian/jira/forms_api.py | 331 | Add a form template to an issue. Args: issue_key: The issue key (e.g. 'PROJ-123') templ | STRING |
| HIGH | src/mcp_atlassian/jira/forms_api.py | 379 | Get attachment metadata for a form. Args: issue_key: The issue key (e.g. 'PROJ-123') fo | STRING |
| HIGH | src/mcp_atlassian/jira/worklog.py | 74 | Add a worklog entry to a Jira issue. Args: issue_key: The issue key (e.g. 'PROJ-123') | STRING |
| HIGH | src/mcp_atlassian/jira/worklog.py | 205 | Get all worklog entries for an issue. Args: issue_key: The issue key (e.g. 'PROJ-123') | STRING |
| HIGH | src/mcp_atlassian/jira/project_analysis.py | 86 | Group a project's epics under their cross-project parent issues. Fetches all epics in *project_key*, inspects t | STRING |
| HIGH | src/mcp_atlassian/jira/project_analysis.py | 167 | Find all cross-project issue links for a project. Scans issues in *project_key*, extracts every issue link whos | STRING |
| HIGH | src/mcp_atlassian/jira/users.py | 122 | Get the account ID for a username or account ID. Args: assignee: Username, display name, e | STRING |
| HIGH | src/mcp_atlassian/jira/users.py | 380 | Determines the correct API parameter and value for the jira.user() call based on the identifier and instance ty | STRING |
| HIGH | src/mcp_atlassian/jira/users.py | 482 | Search Jira users assignable in a given project or issue. Uses GET /rest/api/2/user/assignable/search | STRING |
| HIGH | src/mcp_atlassian/jira/users.py | 554 | Retrieve Jira user profile information by identifier. Args: identifier: User identifier (a | STRING |
| HIGH | src/mcp_atlassian/jira/protocols.py | 106 | Update Epic-specific fields after Epic creation. This method implements the second step of the two-ste | STRING |
| HIGH | src/mcp_atlassian/jira/protocols.py | 244 | Get the account ID for a username. Args: assignee: Username or account ID issue_key: Op | STRING |
| HIGH | src/mcp_atlassian/jira/client.py | 406 | Repeatly fetch paged data from Jira API using `nextPageToken` to paginate. Args: method: T | STRING |
| HIGH | src/mcp_atlassian/jira/watchers.py | 75 | Remove a user from watching an issue. Args: issue_key: The issue key (e.g. 'PROJ-123'). | STRING |
| HIGH | src/mcp_atlassian/jira/forms_common.py | 21 | Convert HTTPError to appropriate exception for form operations. Args: error: The HTTPError to handle | STRING |
| HIGH | src/mcp_atlassian/jira/forms_common.py | 52 | Convert ISO 8601 datetime strings to Unix timestamps in milliseconds for ProForma forms. This function automat | STRING |
| HIGH | src/mcp_atlassian/jira/links.py | 92 | Create a link between two issues. Args: data: A dictionary containing the link data with t | STRING |
| HIGH | src/mcp_atlassian/jira/links.py | 163 | Create a remote issue link (web link or Confluence link). Args: issue_key: The key of the | STRING |
| HIGH | src/mcp_atlassian/jira/links.py | 229 | Get remote links (web links, Confluence links) for an issue. Args: issue_key: The issue key (e.g., | STRING |
| HIGH | src/mcp_atlassian/jira/links.py | 264 | Remove a link between two issues. Args: link_id: The ID of the link to remove Ret | STRING |
| HIGH | src/mcp_atlassian/jira/development.py | 25 | Get development information (PRs, commits, branches) for a Jira issue. This uses the /rest/dev-status/ | STRING |
| HIGH | src/mcp_atlassian/jira/forms.py | 19 | Get all ProForma forms associated with an issue. Args: issue_key: The issue key (e.g. 'PRO | STRING |
| HIGH | src/mcp_atlassian/jira/forms.py | 67 | Get detailed information about a specific ProForma form. Args: issue_key: The issue key (e | STRING |
| HIGH | src/mcp_atlassian/jira/forms.py | 114 | Reopen a submitted ProForma form to allow editing. Args: issue_key: The issue key (e.g. 'P | STRING |
| HIGH | src/mcp_atlassian/jira/forms.py | 152 | Submit a ProForma form after making changes. Args: issue_key: The issue key (e.g. 'PROJ-12 | STRING |
| HIGH | src/mcp_atlassian/jira/forms.py | 188 | Update a field in a ProForma form by updating the associated Jira field. This method works by updating | STRING |
| HIGH | src/mcp_atlassian/jira/transitions.py | 21 | Get the available status transitions for an issue. Args: issue_key: The issue key (e.g. 'P | STRING |
| HIGH | src/mcp_atlassian/jira/transitions.py | 127 | Transition a Jira issue to a new status. Note on Jira Cloud comments: On Jira Cloud, comme | STRING |
| HIGH | src/mcp_atlassian/jira/sla.py | 52 | Calculate SLA metrics for a single Jira issue. Args: issue_key: The issue key (e.g., PROJE | STRING |
| HIGH | src/mcp_atlassian/jira/search.py | 86 | Search for issues using JQL (Jira Query Language). Args: jql: JQL query string | STRING |
| HIGH | src/mcp_atlassian/jira/search.py | 232 | Get all issues linked to a specific board. Args: board_id: The ID of the board | STRING |
| HIGH | src/mcp_atlassian/jira/search.py | 301 | Get all issues linked to a specific sprint. Args: sprint_id: The ID of the sprint | STRING |
| HIGH | src/mcp_atlassian/jira/boards.py | 25 | Get boards from Jira by name, project key, or type. Args: board_name: The name of board, s | STRING |
| 105 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/conftest.py | 39 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 41 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 101 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 103 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 140 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 142 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 214 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 216 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 247 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 249 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 276 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 278 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/conftest.py | 328 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/conftest.py | 330 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 157 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 211 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 213 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 305 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_external_auth.py | 307 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/models/conftest.py | 384 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/models/conftest.py | 386 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/models/conftest.py | 445 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/models/conftest.py | 447 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 35 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 37 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 153 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 155 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 220 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 222 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 332 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 334 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 480 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 482 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 513 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 515 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/conftest.py | 24 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/conftest.py | 26 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/conftest.py | 287 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/conftest.py | 289 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/conftest.py | 405 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/conftest.py | 407 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 65 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 67 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 111 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 113 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 135 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 137 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 233 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 235 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 371 | # ============================================================================ | COMMENT |
| MEDIUM | tests/unit/jira/conftest.py | 373 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_field_options.py | 179 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_field_options.py | 181 | # ============================================================================ | COMMENT |
| 99 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_stdin_monitoring_fix.py | 21 | # Create a test script that simulates the issue | COMMENT |
| MEDIUM | tests/unit/utils/test_ssl.py | 44 | # Create a mock for PoolManager that will be returned by constructor | COMMENT |
| MEDIUM | tests/unit/utils/test_proxy.py | 35 | # Create a proper proxies dictionary that can be updated | COMMENT |
| MEDIUM | tests/unit/utils/test_proxy.py | 66 | # Create a proper proxies dictionary that can be updated | COMMENT |
| MEDIUM | tests/unit/utils/test_proxy.py | 168 | # Create a proper proxies dictionary that can be updated | COMMENT |
| MEDIUM | tests/unit/utils/test_proxy.py | 257 | # Create a proper proxies dictionary that can be updated | COMMENT |
| MEDIUM | tests/unit/models/conftest.py | 530 | # Define the factory functions once for reuse | COMMENT |
| MEDIUM⚡ | tests/unit/models/test_base_models.py | 24 | # Create a test subclass with some fields | COMMENT |
| MEDIUM | tests/unit/jira/test_issues.py | 1436 | # Create the issue with fixVersions in additional_fields | COMMENT |
| MEDIUM | tests/unit/jira/test_issues.py | 2119 | # Create the issue with labels as a list | COMMENT |
| MEDIUM | tests/unit/jira/test_issues.py | 2153 | # Create the issue with labels as a comma-separated string | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_epics.py | 182 | # Create the fields dict and call the method | COMMENT |
| MEDIUM | tests/unit/jira/test_epics.py | 202 | # Create the fields dict and call the method with basic values | COMMENT |
| MEDIUM | tests/unit/jira/test_epics.py | 449 | # Create a fields dict and call prepare_epic_fields | COMMENT |
| MEDIUM | tests/unit/jira/test_epics.py | 632 | # Create a mock search result object with issues attribute | COMMENT |
| MEDIUM | tests/unit/jira/test_epics.py | 638 | # Create a mock object with an issues attribute | COMMENT |
| MEDIUM | tests/unit/jira/test_epics.py | 759 | # Create a mock class for SearchResult | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 85 | # Create a mock OAuth config without cloud_id | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 95 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 163 | # Create a mock BYO OAuth config | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 168 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 213 | # Create a mock BYO OAuth config with an empty cloud_id | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 218 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 233 | # Create a mock BYO OAuth config | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 238 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 265 | # Create a mock BYO OAuth config with an empty token | COMMENT |
| MEDIUM⚡ | tests/unit/jira/test_client_oauth.py | 271 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM | tests/unit/jira/test_client_oauth.py | 19 | # Create a mock OAuth config with both access and refresh tokens | COMMENT |
| MEDIUM | tests/unit/jira/test_client_oauth.py | 31 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM | tests/unit/jira/test_client_oauth.py | 110 | # Create a mock OAuth config | COMMENT |
| MEDIUM | tests/unit/jira/test_client_oauth.py | 121 | # Create a Jira config with OAuth | COMMENT |
| MEDIUM | tests/unit/jira/test_formatting.py | 15 | # Create the mixin without calling its __init__ to avoid config dependencies | COMMENT |
| MEDIUM | tests/unit/jira/test_attachments.py | 56 | # Create a mock Jira client | COMMENT |
| MEDIUM | tests/unit/jira/test_transitions.py | 25 | # Create a get_issue method to allow returning JiraIssue | COMMENT |
| MEDIUM | tests/unit/confluence/conftest.py | 377 | # Create the mock Confluence instance | COMMENT |
| MEDIUM | tests/unit/confluence/conftest.py | 398 | # Create the client with OAuth config | COMMENT |
| MEDIUM | tests/unit/confluence/conftest.py | 422 | # Create a client with a mocked configuration | COMMENT |
| MEDIUM | tests/unit/confluence/test_pages.py | 1727 | # Create a mock HTTP error response with 401 | COMMENT |
| MEDIUM | tests/unit/confluence/test_pages.py | 1750 | # Create a mock HTTP error response with 500 | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 91 | # Create a mock BYO OAuth config | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 97 | # Create a Confluence config with BYO OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 148 | # Create a mock BYO OAuth config without cloud_id | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 154 | # Create a Confluence config with BYO OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 169 | # Create a mock BYO OAuth config | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 175 | # Create a Confluence config with BYO OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 198 | # Create a mock BYO OAuth config | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 204 | # Create a Confluence config with BYO OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 230 | # Create a mock OAuth config without cloud_id | COMMENT |
| MEDIUM⚡ | tests/unit/confluence/test_client_oauth.py | 240 | # Create a Confluence config with OAuth | COMMENT |
| MEDIUM | tests/unit/confluence/test_client_oauth.py | 19 | # Create a mock OAuth config | COMMENT |
| MEDIUM | tests/unit/confluence/test_client_oauth.py | 31 | # Create a Confluence config with OAuth | COMMENT |
| MEDIUM | tests/unit/confluence/test_client_oauth.py | 255 | # Create a mock OAuth config | COMMENT |
| MEDIUM | tests/unit/confluence/test_client_oauth.py | 266 | # Create a Confluence config with OAuth | COMMENT |
| MEDIUM⚡ | tests/unit/servers/test_dependencies.py | 2464 | # Create a mock response that simulates a redirect | COMMENT |
| MEDIUM | tests/unit/servers/test_dependencies.py | 599 | # Create a special state mock that controls hasattr() behavior | COMMENT |
| MEDIUM | tests/unit/servers/test_dependencies.py | 852 | # Create a special state mock that controls hasattr() behavior | COMMENT |
| MEDIUM | tests/unit/servers/test_dependencies.py | 1267 | # Create a special state mock that controls hasattr() behavior | COMMENT |
| MEDIUM | tests/unit/servers/test_dependencies.py | 1450 | # Create a special state mock that controls hasattr() behavior | COMMENT |
| MEDIUM | tests/unit/servers/test_main_server.py | 185 | # Create a mock MCP server to avoid warnings | COMMENT |
| MEDIUM | tests/unit/servers/test_jira_server.py | 1353 | # Define the specific fields we expect for this test case | COMMENT |
| 27 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_stdin_monitoring_fix.py | 132 | except Exception as e: | CODE |
| LOW | tests/unit/models/test_confluence_real_data.py | 77 | except Exception as e: | CODE |
| LOW | tests/unit/models/test_confluence_real_data.py | 85 | except Exception as e: | CODE |
| LOW | tests/unit/models/test_jira_real_data.py | 121 | except Exception as e: | CODE |
| LOW | tests/unit/models/test_jira_real_data.py | 157 | except Exception as e: | CODE |
| LOW | tests/unit/models/test_jira_real_data.py | 215 | except Exception as e: | CODE |
| LOW | tests/unit/models/test_jira_real_data.py | 255 | except Exception as e: | CODE |
| MEDIUM | tests/unit/models/test_jira_real_data.py | 32 | def _get_client(self) -> IssuesMixin | None: | CODE |
| LOW | tests/unit/jira/test_issues.py | 280 | except Exception as e: | CODE |
| LOW | tests/integration/test_real_api.py | 141 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_real_api.py | 246 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tests/integration/test_real_api.py | 277 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tests/integration/test_real_api.py | 288 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_real_api.py | 448 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_real_api.py | 486 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_real_api.py | 492 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_real_api.py | 698 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_real_api.py | 704 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/e2e/conftest.py | 153 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/e2e/conftest.py | 159 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/e2e/conftest.py | 328 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/e2e/conftest.py | 379 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tests/e2e/conftest.py | 484 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tests/e2e/conftest.py | 489 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tests/e2e/conftest.py | 493 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/e2e/conftest.py | 642 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/e2e/conftest.py | 655 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/e2e/cloud/conftest.py | 107 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/e2e/cloud/conftest.py | 113 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/e2e/cloud/conftest.py | 273 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/e2e/cloud/conftest.py | 324 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/e2e/cloud/conftest.py | 476 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/e2e/cloud/conftest.py | 489 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | src/mcp_atlassian/__init__.py | 24 | except Exception: | CODE |
| LOW | src/mcp_atlassian/__init__.py | 473 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/media.py | 106 | except Exception: | CODE |
| LOW | src/mcp_atlassian/utils/proxy.py | 203 | except Exception as e: # pragma: no cover - defensive wrapper around pypac | CODE |
| LOW | src/mcp_atlassian/utils/http.py | 389 | except Exception: | CODE |
| LOW | src/mcp_atlassian/utils/urls.py | 106 | except Exception: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 254 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 292 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 332 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 388 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 426 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 447 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/oauth.py | 477 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/decorators.py | 106 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/utils/decorators.py | 238 | except Exception as e: # noqa: BLE001 - Intentional fallback with logging | CODE |
| LOW⚡ | src/mcp_atlassian/jira/issues.py | 744 | except Exception as e: | CODE |
| LOW⚡ | src/mcp_atlassian/jira/issues.py | 759 | except Exception as update_error: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 250 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 274 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 321 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 380 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 410 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 453 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 457 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 775 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 828 | except Exception as e: | CODE |
| LOW | src/mcp_atlassian/jira/issues.py | 872 | except Exception as e: | CODE |
| 266 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_external_auth.py | 3 | CODE | |
| LOW | tests/unit/utils/test_oauth_dcr_harness.py | 3 | CODE | |
| LOW | tests/unit/utils/test_token_verifier.py | 3 | CODE | |
| LOW | tests/unit/servers/test_oauth_proxy_dcr_e2e.py | 3 | CODE | |
| LOW | tests/unit/servers/test_dependencies.py | 3 | CODE | |
| LOW | tests/unit/servers/test_oauth_proxy_build.py | 3 | CODE | |
| LOW | tests/unit/servers/test_async_utils.py | 3 | CODE | |
| LOW | tests/unit/servers/test_client_storage.py | 3 | CODE | |
| LOW | tests/utils/oauth_dcr_harness.py | 3 | CODE | |
| LOW | tests/e2e/conftest.py | 7 | CODE | |
| LOW | tests/e2e/test_jira_dc_operations.py | 3 | CODE | |
| LOW | tests/e2e/test_images_dc.py | 7 | CODE | |
| LOW | tests/e2e/test_confluence_auth_matrix.py | 3 | CODE | |
| LOW | tests/e2e/test_mcp_tools_dc.py | 3 | CODE | |
| LOW | tests/e2e/test_confluence_dc_operations.py | 3 | CODE | |
| LOW | tests/e2e/test_jira_auth_matrix.py | 3 | CODE | |
| LOW | tests/e2e/test_user_lookup_dc.py | 7 | CODE | |
| LOW | tests/e2e/cloud/test_mcp_tools_cloud.py | 3 | CODE | |
| LOW | tests/e2e/cloud/conftest.py | 11 | CODE | |
| LOW | tests/e2e/cloud/test_confluence_dates.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_jira_watchers.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 6 | CODE | |
| LOW | tests/e2e/cloud/test_confluence_page_metadata.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_confluence_auth_matrix.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_adf_write.py | 7 | CODE | |
| LOW | tests/e2e/cloud/test_jira_issue_include.py | 7 | CODE | |
| LOW | tests/e2e/cloud/test_images_cloud.py | 7 | CODE | |
| LOW | tests/e2e/cloud/test_jira_auth_matrix.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_jira_cloud_operations.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_confluence_cloud_operations.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_jira_user_profile_me.py | 3 | CODE | |
| LOW | tests/e2e/cloud/test_confluence_space_search.py | 3 | CODE | |
| LOW | scripts/mcp_wire_probe.py | 4 | CODE | |
| LOW | src/mcp_atlassian/utils/proxy.py | 3 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 6 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 7 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 7 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 10 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 10 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 14 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 15 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 15 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 15 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 22 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 22 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 23 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 23 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 23 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 23 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 29 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 29 | CODE | |
| LOW | src/mcp_atlassian/utils/__init__.py | 29 | CODE | |
| LOW | src/mcp_atlassian/utils/token_verifier.py | 9 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 10 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 10 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 13 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 13 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 13 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 13 | CODE | |
| LOW | src/mcp_atlassian/models/__init__.py | 13 | CODE | |
| 111 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_stdio_lifecycle.py | 29 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW⚡ | tests/unit/auth/test_authentication.py | 486 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW⚡ | tests/unit/auth/test_authentication.py | 501 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 250 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 281 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 459 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 473 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 514 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 630 | "JIRA_USERNAME": "user@example.com", | CODE |
| LOW | tests/unit/auth/test_authentication.py | 645 | username="user@example.com", | CODE |
| LOW⚡ | tests/unit/models/test_confluence_common_models.py | 377 | assert comment.author.display_name == "John Doe" | CODE |
| LOW | tests/unit/models/test_confluence_common_models.py | 52 | "by": {"accountId": "user123", "displayName": "John Doe"}, | CODE |
| LOW | tests/unit/models/test_confluence_common_models.py | 69 | assert attachment.author_display_name == "John Doe" | CODE |
| LOW | tests/unit/models/test_confluence_common_models.py | 157 | author_display_name="John Doe", | CODE |
| LOW | tests/unit/models/test_confluence_common_models.py | 168 | assert simplified["author_display_name"] == "John Doe" | CODE |
| LOW | tests/unit/models/test_jira_worklog_model.py | 88 | "displayName": "John Doe", | CODE |
| LOW | tests/unit/models/test_jira_worklog_model.py | 101 | assert worklog.author.display_name == "John Doe" | CODE |
| LOW | tests/unit/models/test_jira_worklog_model.py | 127 | "displayName": "John Doe", | CODE |
| LOW | tests/unit/models/test_jira_worklog_model.py | 142 | assert simplified["author"]["display_name"] == "John Doe" | CODE |
| LOW | tests/unit/models/test_jira_project_model.py | 27 | "displayName": "John Doe", | CODE |
| LOW | tests/unit/models/test_jira_project_model.py | 47 | assert project.lead.display_name == "John Doe" | CODE |
| LOW | tests/unit/models/test_jira_project_model.py | 76 | "displayName": "John Doe", | CODE |
| LOW | tests/unit/models/test_jira_project_model.py | 90 | assert simplified["lead"]["display_name"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 93 | display_name="John Doe", | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 108 | "displayName": "John Doe", | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 116 | assert user.display_name == "John Doe" | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 122 | "displayName": "John Doe", | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 129 | assert user.display_name == "John Doe" | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 136 | "displayName": "John Doe", | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 142 | assert user.display_name == "John Doe" | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 147 | display_name="John Doe", | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 154 | assert simplified["display_name"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 161 | display_name="John Doe", | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 165 | assert simplified["name"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/models/test_jira_common_models.py | 166 | assert simplified["display_name"] == "John Doe" | CODE |
| LOW | tests/unit/jira/test_development.py | 42 | "author": {"name": "John Doe"}, | CODE |
| LOW | tests/unit/jira/test_development.py | 81 | "author": {"name": "John Doe"}, | CODE |
| LOW | tests/unit/jira/test_development.py | 116 | assert result["pullRequests"][0]["author"] == "John Doe" | CODE |
| LOW | tests/unit/jira/test_development.py | 141 | assert result["commits"][0]["author"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/jira/test_issues.py | 116 | "author": {"displayName": "John Doe"}, | CODE |
| LOW⚡ | tests/unit/jira/test_issues.py | 123 | "author": {"displayName": "Jane Doe"}, | CODE |
| LOW⚡ | tests/unit/jira/test_issues.py | 1095 | issue_key="TEST-123", assignee="user@example.com" | CODE |
| LOW⚡ | tests/unit/jira/test_issues.py | 1099 | "user@example.com", issue_key="TEST-123" | CODE |
| LOW | tests/unit/jira/test_issues.py | 73 | "author": {"displayName": "John Doe"}, | CODE |
| LOW | tests/unit/jira/test_issues.py | 160 | "author": {"displayName": "Jane Doe"}, | CODE |
| LOW | tests/unit/jira/test_issues.py | 1183 | issues_mixin.assign_issue(issue_key="TEST-123", assignee="user@example.com") | CODE |
| LOW | tests/unit/jira/test_formatting.py | 176 | "assignee": {"displayName": "John Doe", "name": "jdoe"}, | CODE |
| LOW | tests/unit/jira/test_formatting.py | 190 | assert result["assignee"] == "John Doe" | CODE |
| LOW | tests/unit/jira/test_users.py | 822 | "emailAddress": "user@example.com", | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 55 | assert result[0]["author"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 66 | "author": {"displayName": "John Doe"}, | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 235 | assert result["author"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 244 | "author": {"displayName": "John Doe"}, | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 397 | assert result["author"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 406 | "author": {"displayName": "John Doe"}, | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 475 | assert result["author"] == "John Doe" | CODE |
| LOW⚡ | tests/unit/jira/test_comments.py | 673 | "author": {"displayName": "John Doe"}, | CODE |
| LOW | tests/unit/jira/test_comments.py | 41 | "author": {"displayName": "John Doe"}, | CODE |
| LOW | tests/unit/jira/test_comments.py | 184 | "author": {"displayName": "John Doe"}, | CODE |
| LOW | tests/unit/jira/test_comments.py | 215 | "author": {"displayName": "John Doe"}, | CODE |
| 63 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 299 | CODE | |
| LOW | tests/unit/test_main_transport_selection.py | 30 | CODE | |
| LOW | tests/unit/test_main_transport_selection.py | 55 | CODE | |
| LOW | tests/unit/test_main_transport_selection.py | 70 | CODE | |
| LOW | tests/unit/test_main_transport_selection.py | 106 | CODE | |
| LOW | tests/unit/test_main_transport_selection.py | 148 | CODE | |
| LOW | tests/unit/test_main_transport_selection.py | 164 | CODE | |
| LOW | tests/unit/auth/test_authentication.py | 162 | CODE | |
| LOW | tests/unit/auth/test_authentication.py | 263 | CODE | |
| LOW | tests/unit/utils/test_oauth_setup.py | 245 | CODE | |
| LOW | tests/unit/utils/test_environment.py | 118 | CODE | |
| LOW | tests/unit/servers/test_dependencies.py | 1182 | CODE | |
| LOW | tests/unit/servers/test_dependencies.py | 1722 | CODE | |
| LOW | tests/unit/servers/test_transport_lifecycle.py | 27 | CODE | |
| LOW | tests/unit/servers/test_transport_lifecycle.py | 124 | CODE | |
| LOW | tests/unit/servers/test_transport_lifecycle.py | 196 | CODE | |
| LOW | tests/unit/servers/test_transport_lifecycle.py | 256 | CODE | |
| LOW | scripts/generate_tool_docs.py | 539 | CODE | |
| LOW | scripts/generate_tool_docs.py | 550 | CODE | |
| LOW | scripts/mcp_wire_probe.py | 189 | CODE | |
| LOW | src/mcp_atlassian/__init__.py | 235 | CODE | |
| LOW | src/mcp_atlassian/utils/logging.py | 71 | CODE | |
| LOW | src/mcp_atlassian/utils/toolsets.py | 172 | CODE | |
| LOW | src/mcp_atlassian/utils/ssrf_adapter.py | 51 | CODE | |
| LOW | src/mcp_atlassian/models/jira/search.py | 30 | CODE | |
| LOW | src/mcp_atlassian/models/jira/issue.py | 138 | CODE | |
| LOW | src/mcp_atlassian/models/jira/issue.py | 522 | CODE | |
| LOW | src/mcp_atlassian/models/jira/issue.py | 725 | CODE | |
| LOW | src/mcp_atlassian/models/jira/adf.py | 69 | CODE | |
| LOW | src/mcp_atlassian/models/jira/adf.py | 242 | CODE | |
| LOW | src/mcp_atlassian/models/jira/adf.py | 551 | CODE | |
| LOW | src/mcp_atlassian/models/confluence/comment.py | 40 | CODE | |
| LOW | src/mcp_atlassian/models/confluence/page.py | 119 | CODE | |
| LOW | src/mcp_atlassian/models/confluence/search.py | 90 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 81 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 385 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 462 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 597 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1001 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1145 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1333 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1398 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1562 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1767 | CODE | |
| LOW | src/mcp_atlassian/jira/issues.py | 1848 | CODE | |
| LOW | src/mcp_atlassian/jira/metrics.py | 25 | CODE | |
| LOW | src/mcp_atlassian/jira/metrics.py | 199 | CODE | |
| LOW | src/mcp_atlassian/jira/field_options.py | 86 | CODE | |
| LOW | src/mcp_atlassian/jira/field_options.py | 146 | CODE | |
| LOW | src/mcp_atlassian/jira/queues.py | 27 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 27 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 113 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 293 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 431 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 655 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 799 | CODE | |
| LOW | src/mcp_atlassian/jira/epics.py | 853 | CODE | |
| LOW | src/mcp_atlassian/jira/forms_api.py | 50 | CODE | |
| LOW | src/mcp_atlassian/jira/config.py | 234 | CODE | |
| LOW | src/mcp_atlassian/jira/config.py | 387 | CODE | |
| 61 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/e2e/test_images_dc.py | 0 | environment variables for configuring mcp server against dc. | STRING |
| HIGH | tests/e2e/test_mcp_tools_dc.py | 0 | environment variables for configuring mcp server against dc. | STRING |
| HIGH | tests/e2e/test_user_lookup_dc.py | 0 | environment variables for configuring mcp server against dc. | STRING |
| HIGH | tests/e2e/test_images_dc.py | 0 | mcp client connected to the server configured for dc. | STRING |
| HIGH | tests/e2e/test_mcp_tools_dc.py | 0 | mcp client connected to the server configured for dc. | STRING |
| HIGH | tests/e2e/test_user_lookup_dc.py | 0 | mcp client connected to the server configured for dc. | STRING |
| HIGH | tests/e2e/cloud/test_mcp_tools_cloud.py | 0 | environment variables for configuring mcp server against cloud. | STRING |
| HIGH | tests/e2e/cloud/test_adf_write.py | 0 | environment variables for configuring mcp server against cloud. | STRING |
| HIGH | tests/e2e/cloud/test_jira_issue_include.py | 0 | environment variables for configuring mcp server against cloud. | STRING |
| HIGH | tests/e2e/cloud/test_images_cloud.py | 0 | environment variables for configuring mcp server against cloud. | STRING |
| HIGH | tests/e2e/cloud/test_mcp_tools_cloud.py | 0 | mcp client connected to the server configured for cloud. | STRING |
| HIGH | tests/e2e/cloud/test_adf_write.py | 0 | mcp client connected to the server configured for cloud. | STRING |
| HIGH | tests/e2e/cloud/test_jira_issue_include.py | 0 | mcp client connected to the server configured for cloud. | STRING |
| HIGH | tests/e2e/cloud/test_images_cloud.py | 0 | mcp client connected to the server configured for cloud. | STRING |
| HIGH | src/mcp_atlassian/jira/attachments.py | 0 | download a confluence attachment to the specified path. args: url: the url of the attachment to download target_path: th | STRING |
| HIGH | src/mcp_atlassian/confluence/protocols.py | 0 | download a confluence attachment to the specified path. args: url: the url of the attachment to download target_path: th | STRING |
| HIGH | src/mcp_atlassian/confluence/attachments.py | 0 | download a confluence attachment to the specified path. args: url: the url of the attachment to download target_path: th | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 345 | # Check if modules can be imported | COMMENT |
| LOW | tests/unit/jira/conftest.py | 390 | # Check if integration test environment variables are set | COMMENT |
| LOW | tests/unit/jira/test_protocols.py | 169 | # Check if instance has all required methods | COMMENT |
| LOW | tests/unit/confluence/conftest.py | 610 | # Check if integration test environment variables are set | COMMENT |
| LOW | tests/e2e/docker/setup-test-data.sh | 57 | # Check if any issue exists in E2E project | COMMENT |
| LOW | scripts/test_with_real_data.sh | 74 | # Check if .env file exists | COMMENT |
| LOW | src/mcp_atlassian/utils/ssl.py | 77 | # Check if we should bypass proxies for this URL. Prefer the value | COMMENT |
| LOW | src/mcp_atlassian/utils/urls.py | 128 | # Check if hostname is an IP address | COMMENT |
| LOW | src/mcp_atlassian/utils/date.py | 34 | # Check if timestamp is within valid range to avoid OSError | COMMENT |
| LOW | src/mcp_atlassian/utils/oauth.py | 76 | # Check if base_url is a Cloud URL — if so, cloud_id takes precedence | COMMENT |
| LOW | src/mcp_atlassian/utils/oauth.py | 192 | # Check if required tokens are present | COMMENT |
| LOW | src/mcp_atlassian/utils/oauth.py | 497 | # Check if OAuth is explicitly enabled (allows minimal config) | COMMENT |
| LOW | src/mcp_atlassian/models/jira/issue.py | 166 | # Check if fields has a names fields | COMMENT |
| LOW | src/mcp_atlassian/models/jira/issue.py | 776 | # Check if fields has a names() method (some implementations have this) | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 579 | # Check if this is a text node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 583 | # Check if this is a hardBreak node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 587 | # Check if this is a mention node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 592 | # Check if this is an emoji node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 597 | # Check if this is a date node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 609 | # Check if this is a status node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 614 | # Check if this is an inlineCard node | COMMENT |
| LOW⚡ | src/mcp_atlassian/models/jira/adf.py | 623 | # Check if this is a codeBlock node | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/issues.py | 751 | # Check if we have any stored Epic fields to update | COMMENT |
| LOW | src/mcp_atlassian/jira/issues.py | 414 | # Check if this is an epic | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 153 | # Check if this field is required | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 178 | # Check if this field is required | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 199 | # Check if this field is required | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 325 | # Check if the epic key corresponds to an actual epic | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 460 | # Check if the issue is an Epic | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 464 | # Check if it's an Epic by looking for "epic" in the name (case-insensitive) | COMMENT |
| LOW | src/mcp_atlassian/jira/epics.py | 702 | # Check if any of these known fields exist in our field IDs values | COMMENT |
| LOW | src/mcp_atlassian/jira/fields.py | 284 | if not fields: # Check if get_fields failed or returned empty | CODE |
| LOW | src/mcp_atlassian/jira/client.py | 448 | # Check if this is the last page | COMMENT |
| LOW | src/mcp_atlassian/jira/formatting.py | 210 | # Check if the issue has fields | STRING |
| LOW | src/mcp_atlassian/jira/attachments.py | 65 | # Write the file to disk | COMMENT |
| LOW | src/mcp_atlassian/jira/attachments.py | 389 | # Check if file exists | COMMENT |
| LOW | src/mcp_atlassian/jira/transitions.py | 178 | # Check if normalized_transition_id is valid | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/transitions.py | 356 | # Check if _get_account_id is available (from UsersMixin) | COMMENT |
| LOW | src/mcp_atlassian/jira/sla.py | 664 | # Check if it's a working day (isoweekday: 1=Mon, 7=Sun) | COMMENT |
| LOW | src/mcp_atlassian/jira/projects.py | 648 | # Check if user has browse permission for this project | COMMENT |
| LOW | src/mcp_atlassian/confluence/attachments.py | 154 | # Check if file exists | COMMENT |
| LOW | src/mcp_atlassian/confluence/attachments.py | 399 | # Write the file to disk | COMMENT |
| LOW⚡ | src/mcp_atlassian/confluence/pages.py | 402 | # Check if the property already exists (need version for update) | COMMENT |
| LOW | src/mcp_atlassian/confluence/pages.py | 224 | # Check if API returned an error string | COMMENT |
| LOW | src/mcp_atlassian/confluence/pages.py | 1381 | # Check if we got a response object | COMMENT |
| LOW | src/mcp_atlassian/confluence/pages.py | 1383 | # Check if status code indicates success (2xx) | COMMENT |
| LOW | src/mcp_atlassian/confluence/v2_adapter.py | 480 | # Check if status code indicates success (204 No Content is typical for deletes) | COMMENT |
| LOW | src/mcp_atlassian/confluence/v2_adapter.py | 1077 | # Check if the property already exists | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 189 | # Check if it's a Confluence wiki link | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/base.py | 419 | # Check if this references a different page | COMMENT |
| LOW | src/mcp_atlassian/servers/confluence.py | 252 | # Check if the query is a simple search term or already a CQL query | COMMENT |
| LOW | src/mcp_atlassian/servers/dependencies.py | 646 | # Check if global config has OAuth set up | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/servers/test_oauth_proxy_build.py | 12 | def _set_required_oauth_env(monkeypatch, *, redirect_uri: str) -> None: | CODE |
| LOW | tests/unit/servers/test_jira_server.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit/servers/test_mcp_protocol.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit/servers/test_confluence_server.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/utils/oauth_dcr_harness.py | 461 | __all__ = [ | CODE |
| LOW | tests/e2e/conftest.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/e2e/cloud/conftest.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/__init__.py | 480 | __all__ = ["main", "__version__"] | CODE |
| LOW | src/mcp_atlassian/utils/media.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/utils/tools.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/utils/toolsets.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/utils/__init__.py | 32 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/utils/decorators.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/__init__.py | 62 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/models/jira/link.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/agile.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/comment.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/worklog.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/__init__.py | 66 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/models/jira/forms.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/common.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/search.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/workflow.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/issue.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/jira/project.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/user_search.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/comment.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/__init__.py | 24 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/models/confluence/page.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/common.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/label.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/search.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/models/confluence/space.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/jira/__init__.py | 93 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/jira/utils.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/confluence/__init__.py | 56 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/confluence/utils.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/preprocessing/__init__.py | 10 | __all__ = [ | CODE |
| LOW | src/mcp_atlassian/servers/confluence.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/servers/__init__.py | 5 | __all__ = ["main_mcp"] | CODE |
| LOW | src/mcp_atlassian/servers/jira.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/servers/helpers.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/mcp_atlassian/servers/oauth_proxy.py | 131 | __all__ = ["HardenedOAuthProxy", "parse_env_list"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 75 | # Step 1: Discover issue types | COMMENT |
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 79 | # Step 2: Pick Task | COMMENT |
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 82 | # Step 3: Discover fields | COMMENT |
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 91 | # Step 4: Create issue using discovered metadata | COMMENT |
| LOW | src/mcp_atlassian/jira/field_options.py | 178 | # Step 1: Resolve issue type name to ID | COMMENT |
| LOW | src/mcp_atlassian/jira/field_options.py | 199 | # Step 2: Paginate through createmeta fields | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 99 | # Step 1: Update original estimate if provided (separate API call) | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 114 | # Step 2: Prepare worklog data | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 121 | # Step 3: Prepare query parameters for remaining estimate | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 129 | # Step 4: Add the worklog with remaining estimate adjustment | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/fields.py | 225 | # Step 2: Call the correct API method to get field metadata | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/fields.py | 231 | # Step 3: Parse the response and extract required fields | COMMENT |
| LOW | src/mcp_atlassian/jira/fields.py | 205 | # Step 1: Get the ID for the given issue type name within the project | COMMENT |
| LOW | src/mcp_atlassian/confluence/v2_adapter.py | 1236 | # Step 1: Get all versions to find the version ID | COMMENT |
| LOW | src/mcp_atlassian/confluence/v2_adapter.py | 1249 | # Step 2: Fetch the specific version using its version ID | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 30 | # Step 1: Valid JIRA languages (official list) | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 91 | # Step 2: Mapping for unsupported languages to closest valid JIRA alternative | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/jira.py | 413 | # Step 1: Check if already valid JIRA language | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/jira.py | 417 | # Step 2: Check language mapping | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/jira.py | 421 | # Step 3: Default - unmapped language returns None for plain {code} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 75 | # Step 1: Discover issue types | COMMENT |
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 79 | # Step 2: Pick Task | COMMENT |
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 82 | # Step 3: Discover fields | COMMENT |
| LOW⚡ | tests/e2e/cloud/test_jira_issue_creation_workflow.py | 91 | # Step 4: Create issue using discovered metadata | COMMENT |
| LOW | src/mcp_atlassian/jira/field_options.py | 178 | # Step 1: Resolve issue type name to ID | COMMENT |
| LOW | src/mcp_atlassian/jira/field_options.py | 199 | # Step 2: Paginate through createmeta fields | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 99 | # Step 1: Update original estimate if provided (separate API call) | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 114 | # Step 2: Prepare worklog data | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 121 | # Step 3: Prepare query parameters for remaining estimate | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/worklog.py | 129 | # Step 4: Add the worklog with remaining estimate adjustment | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/fields.py | 225 | # Step 2: Call the correct API method to get field metadata | COMMENT |
| LOW⚡ | src/mcp_atlassian/jira/fields.py | 231 | # Step 3: Parse the response and extract required fields | COMMENT |
| LOW | src/mcp_atlassian/jira/fields.py | 205 | # Step 1: Get the ID for the given issue type name within the project | COMMENT |
| LOW | src/mcp_atlassian/confluence/v2_adapter.py | 1236 | # Step 1: Get all versions to find the version ID | COMMENT |
| LOW | src/mcp_atlassian/confluence/v2_adapter.py | 1249 | # Step 2: Fetch the specific version using its version ID | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 30 | # Step 1: Valid JIRA languages (official list) | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 91 | # Step 2: Mapping for unsupported languages to closest valid JIRA alternative | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/jira.py | 413 | # Step 1: Check if already valid JIRA language | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/jira.py | 417 | # Step 2: Check language mapping | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/jira.py | 421 | # Step 3: Default - unmapped language returns None for plain {code} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/jira/test_format_conversion.py | 39 | "description": "h2. Summary\n\nThis is *bold* text.\n\n|| Header 1 || Header 2 ||\n| Cell 1 | Cell 2 |", | CODE |
| HIGH | tests/unit/preprocessing/test_content_processing.py | 259 | if (x > 0 && y < 10) { | CODE |
| HIGH | tests/unit/preprocessing/test_content_processing.py | 277 | assert "x > 0 && y < 10" in jira_result | CODE |
| HIGH⚡ | src/mcp_atlassian/jira/comments.py | 295 | # internal. Treat missing, null, string, and numeric values as | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit/jira/test_search.py | 1289 | sent_jql = search_mixin.jira.get_issues_for_board.call_args.kwargs.get( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/jira/test_attachments.py | 21 | # | COMMENT |
| LOW | tests/unit/confluence/test_attachments.py | 21 | # - Error cases: | COMMENT |
| LOW | tests/unit/confluence/test_attachments.py | 41 | # - File not created after write operation | COMMENT |
| LOW | helm/values.yaml | 261 | # mountPath: /etc/secrets | COMMENT |
| LOW | src/mcp_atlassian/jira/client.py | 181 | client_key=self.config.client_key, | COMMENT |
| LOW | src/mcp_atlassian/jira/constants.py | 201 | "where", | COMMENT |
| LOW | src/mcp_atlassian/jira/constants.py | 221 | # ───────────────────────────── ───────────────────────────── | COMMENT |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 221 | if not input_text: | COMMENT |
| LOW | src/mcp_atlassian/servers/dependencies.py | 61 | validate_fn: Callable[[Any], Any] # fetcher → validation data | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mcp_atlassian/models/confluence/label.py | 62 | CODE | |
| LOW | src/mcp_atlassian/confluence/pages.py | 707 | CODE | |
| LOW | src/mcp_atlassian/confluence/pages.py | 828 | CODE | |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 394 | CODE | |
| LOW | src/mcp_atlassian/preprocessing/jira.py | 664 | CODE | |
| LOW | src/mcp_atlassian/servers/confluence.py | 692 | CODE | |
| LOW | src/mcp_atlassian/servers/confluence.py | 879 | CODE | |
| LOW | src/mcp_atlassian/servers/jira.py | 1995 | CODE | |
| LOW | src/mcp_atlassian/servers/main.py | 406 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/jira/test_issues.py | 251 | # Call the method - just use get_issue without the include_epic_info parameter | COMMENT |
| LOW⚡ | tests/unit/jira/test_format_conversion.py | 22 | # JiraFetcher already has a real preprocessor, so we just return it | COMMENT |
| LOW⚡ | src/mcp_atlassian/preprocessing/base.py | 314 | # Fallback: just use the account ID | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mcp_atlassian/jira/development.py | 150 | # TODO: Consider caching results to reduce API calls (up to 12 per issue) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/preprocessing/test_content_processing.py | 96 | def process_data(items): | CODE |
| LOW | tests/unit/preprocessing/test_content_processing.py | 155 | assert "def process_data(items):" in jira_result | CODE |