SYMBOL INDEX (399 symbols across 58 files) FILE: src/imagesorcery_mcp/config.py class DetectionConfig (line 17) | class DetectionConfig(BaseModel): class FindConfig (line 23) | class FindConfig(BaseModel): class BlurConfig (line 29) | class BlurConfig(BaseModel): method strength_must_be_odd (line 35) | def strength_must_be_odd(cls, v): class TextConfig (line 41) | class TextConfig(BaseModel): class DrawingConfig (line 46) | class DrawingConfig(BaseModel): method color_values_valid (line 53) | def color_values_valid(cls, v): class OCRConfig (line 60) | class OCRConfig(BaseModel): class ResizeConfig (line 65) | class ResizeConfig(BaseModel): class TelemetryConfig (line 70) | class TelemetryConfig(BaseModel): class ImageSorceryConfig (line 75) | class ImageSorceryConfig(BaseModel): class ConfigManager (line 87) | class ConfigManager: method __init__ (line 90) | def __init__(self): method _ensure_config_file_exists (line 98) | def _ensure_config_file_exists(self): method _load_config (line 108) | def _load_config(self): method _apply_runtime_overrides (line 128) | def _apply_runtime_overrides(self, config_data: Dict[str, Any]): method _save_config_to_file (line 146) | def _save_config_to_file(self, config_data: Dict[str, Any]): method config (line 157) | def config(self) -> ImageSorceryConfig: method get_config_dict (line 163) | def get_config_dict(self) -> Dict[str, Any]: method update_config (line 170) | def update_config(self, updates: Dict[str, Any], persist: bool = False... method reset_runtime_overrides (line 225) | def reset_runtime_overrides(self): method get_runtime_overrides (line 231) | def get_runtime_overrides(self) -> Dict[str, Any]: function get_config_manager (line 241) | def get_config_manager() -> ConfigManager: function get_config (line 254) | def get_config() -> ImageSorceryConfig: function get_config_schema_info (line 262) | def get_config_schema_info() -> Dict[str, Any]: function get_available_config_keys (line 325) | def get_available_config_keys() -> List[str]: function generate_config_documentation (line 331) | def generate_config_documentation() -> str: FILE: src/imagesorcery_mcp/logging_config.py function setup_logging (line 8) | def setup_logging(): FILE: src/imagesorcery_mcp/middlewares/path_access.py class PathAccessMiddleware (line 13) | class PathAccessMiddleware(Middleware): method __init__ (line 16) | def __init__(self, logger: logging.Logger | None = None): method on_call_tool (line 19) | async def on_call_tool( function get_allowed_directories (line 43) | def get_allowed_directories() -> list[Path]: function split_paths (line 56) | def split_paths(raw_paths: str) -> list[str]: function iter_path_arguments (line 61) | def iter_path_arguments(value: Any, prefix: str = "") -> Iterator[tuple[... function is_path_argument (line 75) | def is_path_argument(name: str) -> bool: function resolve_path (line 79) | def resolve_path(path: str) -> Path: function is_path_allowed (line 83) | def is_path_allowed(path: Path, allowed_dirs: list[Path]) -> bool: FILE: src/imagesorcery_mcp/middlewares/telemetry.py class TelemetryMiddleware (line 14) | class TelemetryMiddleware(Middleware): method __init__ (line 17) | def __init__(self, logger: logging.Logger | None = None): method _get_user_id (line 26) | def _get_user_id(self) -> str: method _get_version (line 42) | def _get_version(self) -> str: method _handle_action (line 60) | async def _handle_action(self, action_type: str, identifier: str, cont... method on_call_tool (line 92) | async def on_call_tool(self, context: MiddlewareContext, call_next: Ca... method on_read_resource (line 96) | async def on_read_resource(self, context: MiddlewareContext, call_next... method on_get_prompt (line 100) | async def on_get_prompt(self, context: MiddlewareContext, call_next: C... FILE: src/imagesorcery_mcp/middlewares/validation.py class ImprovedValidationMiddleware (line 10) | class ImprovedValidationMiddleware(Middleware): method __init__ (line 13) | def __init__(self, logger: logging.Logger | None = None): method on_message (line 16) | async def on_message(self, context: MiddlewareContext, call_next: Call... FILE: src/imagesorcery_mcp/prompts/remove_background.py function register_prompt (line 10) | def register_prompt(mcp: FastMCP): FILE: src/imagesorcery_mcp/resources/models.py function get_model_description (line 10) | def get_model_description(model_name: str) -> str: function register_resource (line 50) | def register_resource(mcp: FastMCP): FILE: src/imagesorcery_mcp/scripts/clear_telemetry_keys.py function write_empty_telemetry_keys (line 15) | def write_empty_telemetry_keys() -> bool: function main (line 34) | def main(): FILE: src/imagesorcery_mcp/scripts/create_model_descriptions.py function create_model_descriptions (line 15) | def create_model_descriptions(): function main (line 159) | def main(): FILE: src/imagesorcery_mcp/scripts/download_clip.py function get_models_dir (line 17) | def get_models_dir(): function download_file (line 25) | def download_file(url, output_path): function download_clip_model (line 53) | def download_clip_model(): function main (line 77) | def main(): FILE: src/imagesorcery_mcp/scripts/download_models.py function get_models_dir (line 21) | def get_models_dir(): function download_from_url (line 29) | def download_from_url(url, output_path): function download_from_huggingface (line 57) | def download_from_huggingface(model_name): function update_model_description (line 133) | def update_model_description(model_key, description): function download_ultralytics_model (line 170) | def download_ultralytics_model(model_name): function download_model (line 255) | def download_model(model_name, source=None): function main (line 270) | def main(): FILE: src/imagesorcery_mcp/scripts/populate_telemetry_keys.py function get_telemetry_keys (line 23) | def get_telemetry_keys() -> Dict[str, str]: function write_telemetry_keys_file (line 56) | def write_telemetry_keys_file(keys: Dict[str, str]) -> bool: function main (line 82) | def main(): FILE: src/imagesorcery_mcp/scripts/post_install.py function install_clip (line 29) | def install_clip(): function create_config_file (line 70) | def create_config_file(): function create_user_id_file (line 85) | def create_user_id_file(): function run_post_install (line 105) | def run_post_install(): function main (line 190) | def main(): FILE: src/imagesorcery_mcp/server.py function parse_arguments (line 105) | def parse_arguments(): function main (line 140) | def main(): FILE: src/imagesorcery_mcp/telemetry_amplitude.py class AmplitudeHandler (line 10) | class AmplitudeHandler: method __init__ (line 13) | def __init__(self, logger: logging.Logger | None = None): method _get_api_key (line 28) | def _get_api_key(self) -> str: method track_event (line 37) | def track_event(self, event_data: Dict[str, Any]): FILE: src/imagesorcery_mcp/telemetry_posthog.py class PostHogHandler (line 12) | class PostHogHandler: method __init__ (line 15) | def __init__(self, logger: logging.Logger | None = None): method _get_api_key (line 31) | def _get_api_key(self) -> str: method track_event (line 40) | def track_event(self, event_data: Dict[str, Any]): FILE: src/imagesorcery_mcp/tools/blur.py function register_tool (line 14) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/change_color.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/config.py function _generate_config_tool_docstring (line 21) | def _generate_config_tool_docstring() -> str: function register_tool (line 50) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/crop.py function register_tool (line 12) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/detect.py function get_model_path (line 15) | def get_model_path(model_name): function register_tool (line 26) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/draw_arrows.py function register_tool (line 12) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/draw_circle.py class CircleItem (line 12) | class CircleItem(BaseModel): function register_tool (line 22) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/draw_lines.py function register_tool (line 12) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/draw_rectangle.py function register_tool (line 12) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/draw_text.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/fill.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/find.py function get_model_path (line 15) | def get_model_path(model_name): function check_clip_installed (line 26) | def check_clip_installed(): function register_tool (line 46) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/metainfo.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/ocr.py function register_tool (line 12) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/overlay.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/resize.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: src/imagesorcery_mcp/tools/rotate.py function register_tool (line 13) | def register_tool(mcp: FastMCP): FILE: tests/conftest.py function pytest_configure (line 8) | def pytest_configure(config): function pytest_unconfigure (line 14) | def pytest_unconfigure(config): FILE: tests/prompts/test_remove_background.py function mcp_server (line 8) | def mcp_server(): class TestRemoveBackgroundPromptDefinition (line 13) | class TestRemoveBackgroundPromptDefinition: method test_remove_background_in_prompts_list (line 17) | async def test_remove_background_in_prompts_list(self, mcp_server: Fas... method test_remove_background_description (line 31) | async def test_remove_background_description(self, mcp_server: FastMCP): method test_remove_background_parameters (line 48) | async def test_remove_background_parameters(self, mcp_server: FastMCP): class TestRemoveBackgroundPromptExecution (line 92) | class TestRemoveBackgroundPromptExecution: method test_remove_background_prompt_execution (line 96) | async def test_remove_background_prompt_execution(self, mcp_server: Fa... method test_remove_background_default_parameters (line 123) | async def test_remove_background_default_parameters(self, mcp_server: ... method test_remove_background_custom_target (line 149) | async def test_remove_background_custom_target(self, mcp_server: FastM... FILE: tests/resources/test_models.py function mcp_server (line 12) | def mcp_server(): function test_models_dir (line 18) | def test_models_dir(tmp_path): class TestModelsResourceDefinition (line 63) | class TestModelsResourceDefinition: method test_models_in_resources_list (line 67) | async def test_models_in_resources_list(self, mcp_server: FastMCP): method test_models_resource_metadata (line 86) | async def test_models_resource_metadata(self, mcp_server: FastMCP): class TestModelsResourceExecution (line 105) | class TestModelsResourceExecution: method test_models_resource_execution (line 109) | async def test_models_resource_execution(self, mcp_server: FastMCP, te... method test_models_empty_directory (line 142) | async def test_models_empty_directory(self, mcp_server: FastMCP, tmp_p... method test_models_no_directory (line 184) | async def test_models_no_directory(self, mcp_server: FastMCP, tmp_path): method test_models_with_subdirectories (line 218) | async def test_models_with_subdirectories(self, mcp_server: FastMCP, t... method test_models_ignores_non_model_files (line 293) | async def test_models_ignores_non_model_files(self, mcp_server: FastMC... FILE: tests/test_config.py class TestImageSorceryConfig (line 20) | class TestImageSorceryConfig: method test_default_values (line 23) | def test_default_values(self): method test_validation_confidence_threshold (line 54) | def test_validation_confidence_threshold(self): method test_validation_blur_strength (line 67) | def test_validation_blur_strength(self): method test_validation_drawing_color (line 77) | def test_validation_drawing_color(self): method test_validation_interpolation (line 94) | def test_validation_interpolation(self): method test_validation_telemetry_enabled (line 105) | def test_validation_telemetry_enabled(self): class TestConfigManager (line 119) | class TestConfigManager: method setup_method (line 122) | def setup_method(self): method teardown_method (line 128) | def teardown_method(self): method test_config_file_creation (line 134) | def test_config_file_creation(self): method test_config_loading_from_file (line 148) | def test_config_loading_from_file(self): method test_runtime_updates (line 165) | def test_runtime_updates(self): method test_persistent_updates (line 187) | def test_persistent_updates(self): method test_persistent_telemetry_update (line 206) | def test_persistent_telemetry_update(self): method test_validation_in_updates (line 227) | def test_validation_in_updates(self): method test_reset_runtime_overrides (line 239) | def test_reset_runtime_overrides(self): method test_get_runtime_overrides (line 262) | def test_get_runtime_overrides(self): class TestGlobalConfigFunctions (line 278) | class TestGlobalConfigFunctions: method setup_method (line 281) | def setup_method(self): method teardown_method (line 291) | def teardown_method(self): method test_get_config_manager (line 301) | def test_get_config_manager(self): method test_get_config (line 309) | def test_get_config(self): FILE: tests/test_logging.py function temp_log_file (line 15) | def temp_log_file(): function test_log_structure_and_components (line 22) | def test_log_structure_and_components(temp_log_file): function test_different_modules_log_correctly (line 81) | def test_different_modules_log_correctly(temp_log_file): function test_different_log_levels (line 107) | def test_different_log_levels(temp_log_file): FILE: tests/test_path_access.py function mcp_server (line 16) | def mcp_server(): function test_image (line 21) | def test_image(tmp_path): function test_available_paths_empty_disables_restrictions (line 29) | def test_available_paths_empty_disables_restrictions(monkeypatch): function test_available_paths_supports_pathsep_and_comma (line 39) | def test_available_paths_supports_pathsep_and_comma(): function test_path_inside_allowed_directory_is_accepted (line 46) | async def test_path_inside_allowed_directory_is_accepted( function test_relative_traversal_outside_allowed_directory_is_rejected (line 58) | async def test_relative_traversal_outside_allowed_directory_is_rejected( function test_symlink_inside_allowed_directory_is_accepted_without_resolving_target (line 82) | async def test_symlink_inside_allowed_directory_is_accepted_without_reso... function test_output_path_outside_allowed_directory_is_rejected (line 109) | async def test_output_path_outside_allowed_directory_is_rejected( function test_nested_mask_path_outside_allowed_directory_is_rejected (line 130) | async def test_nested_mask_path_outside_allowed_directory_is_rejected( FILE: tests/test_server.py function mcp_server (line 8) | def mcp_server(): function test_list_tools (line 14) | async def test_list_tools(mcp_server: FastMCP): function test_nonexisting_tool (line 25) | async def test_nonexisting_tool(mcp_server: FastMCP): FILE: tests/test_telemetry.py function mock_call_next_func (line 18) | async def mock_call_next_func(context): class MockAmplitudeHandler (line 23) | class MockAmplitudeHandler: method __init__ (line 24) | def __init__(self): method track_event (line 27) | def track_event(self, event_data): class MockPostHogHandler (line 30) | class MockPostHogHandler: method __init__ (line 31) | def __init__(self): method track_event (line 34) | def track_event(self, event_data): class TestTelemetryMiddleware (line 38) | class TestTelemetryMiddleware: method setup_method (line 41) | def setup_method(self): method teardown_method (line 68) | def teardown_method(self): method test_middleware_initialization (line 79) | def test_middleware_initialization(self): method test_telemetry_tracking_enabled_and_disabled (line 90) | async def test_telemetry_tracking_enabled_and_disabled(self): FILE: tests/tools/test_blur.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): function test_image_for_invert_blur (line 40) | def test_image_for_invert_blur(tmp_path): class TestBlurToolDefinition (line 69) | class TestBlurToolDefinition: method test_blur_in_tools_list (line 73) | async def test_blur_in_tools_list(self, mcp_server: FastMCP): method test_blur_description (line 87) | async def test_blur_description(self, mcp_server: FastMCP): method test_blur_parameters (line 100) | async def test_blur_parameters(self, mcp_server: FastMCP): class TestBlurToolExecution (line 148) | class TestBlurToolExecution: method test_blur_tool_execution (line 152) | async def test_blur_tool_execution( method test_blur_invert_rectangle (line 184) | async def test_blur_invert_rectangle(self, mcp_server: FastMCP, test_i... method test_blur_invert_polygon (line 219) | async def test_blur_invert_polygon(self, mcp_server: FastMCP, test_ima... method test_blur_invert_multiple_areas (line 254) | async def test_blur_invert_multiple_areas(self, mcp_server: FastMCP, t... method test_blur_polygon_area (line 297) | async def test_blur_polygon_area(self, mcp_server: FastMCP, test_image... method test_blur_mixed_areas (line 346) | async def test_blur_mixed_areas(self, mcp_server: FastMCP, test_image_... method test_blur_default_output_path (line 389) | async def test_blur_default_output_path(self, mcp_server: FastMCP, tes... method test_blur_multiple_areas (line 415) | async def test_blur_multiple_areas(self, mcp_server: FastMCP, test_ima... FILE: tests/tools/test_change_color.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestChangeColorToolDefinition (line 31) | class TestChangeColorToolDefinition: method test_change_color_in_tools_list (line 35) | async def test_change_color_in_tools_list(self, mcp_server: FastMCP): method test_change_color_description (line 44) | async def test_change_color_description(self, mcp_server: FastMCP): method test_change_color_parameters (line 53) | async def test_change_color_parameters(self, mcp_server: FastMCP): class TestChangeColorToolExecution (line 77) | class TestChangeColorToolExecution: method test_change_color_grayscale (line 81) | async def test_change_color_grayscale(self, mcp_server: FastMCP, test_... method test_change_color_sepia (line 109) | async def test_change_color_sepia(self, mcp_server: FastMCP, test_imag... method test_change_color_default_output_path (line 133) | async def test_change_color_default_output_path(self, mcp_server: Fast... method test_change_color_invalid_palette (line 142) | async def test_change_color_invalid_palette(self, mcp_server: FastMCP,... FILE: tests/tools/test_config_tool.py class TestConfigToolE2E (line 17) | class TestConfigToolE2E: method setup_method (line 20) | def setup_method(self): method teardown_method (line 26) | def teardown_method(self): method test_config_tool_registration (line 37) | async def test_config_tool_registration(self): method test_config_get_all (line 55) | async def test_config_get_all(self): method test_config_get_specific_key (line 75) | async def test_config_get_specific_key(self): method test_config_set_runtime (line 93) | async def test_config_set_runtime(self): method test_config_set_persistent (line 124) | async def test_config_set_persistent(self): method test_config_set_invalid_value (line 151) | async def test_config_set_invalid_value(self): method test_config_reset (line 168) | async def test_config_reset(self): method test_config_get_nonexistent_key (line 206) | async def test_config_get_nonexistent_key(self): method test_config_invalid_action (line 222) | async def test_config_invalid_action(self): method test_config_set_missing_parameters (line 233) | async def test_config_set_missing_parameters(self): FILE: tests/tools/test_crop.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestCropToolDefinition (line 35) | class TestCropToolDefinition: method test_crop_in_tools_list (line 39) | async def test_crop_in_tools_list(self, mcp_server: FastMCP): method test_crop_description (line 53) | async def test_crop_description(self, mcp_server: FastMCP): method test_crop_parameters (line 66) | async def test_crop_parameters(self, mcp_server: FastMCP): class TestCropToolExecution (line 115) | class TestCropToolExecution: method test_crop_tool_execution (line 119) | async def test_crop_tool_execution( method test_crop_default_output_path (line 151) | async def test_crop_default_output_path(self, mcp_server: FastMCP, tes... FILE: tests/tools/test_detect.py function mcp_server (line 14) | def mcp_server(): function test_image_path (line 20) | def test_image_path(tmp_path): function test_image_negative_path (line 32) | def test_image_negative_path(tmp_path): function test_segmentation_image_path (line 43) | def test_segmentation_image_path(tmp_path): class TestDetectToolDefinition (line 53) | class TestDetectToolDefinition: method test_detect_in_tools_list (line 57) | async def test_detect_in_tools_list(self, mcp_server: FastMCP): method test_detect_description (line 71) | async def test_detect_description(self, mcp_server: FastMCP): method test_detect_parameters (line 84) | async def test_detect_parameters(self, mcp_server: FastMCP): class TestDetectToolExecution (line 153) | class TestDetectToolExecution: method test_detect_tool_execution (line 161) | async def test_detect_tool_execution(self, mcp_server: FastMCP, test_i... method test_detect_with_mask_geometry (line 222) | async def test_detect_with_mask_geometry(self, mcp_server: FastMCP, te... method test_detect_with_polygon_geometry (line 253) | async def test_detect_with_polygon_geometry(self, mcp_server: FastMCP,... method test_detect_no_geometry_by_default (line 287) | async def test_detect_no_geometry_by_default(self, mcp_server: FastMCP... method test_detect_geometry_with_non_seg_model_raises_error (line 313) | async def test_detect_geometry_with_non_seg_model_raises_error( method test_detect_negative_scenario (line 346) | async def test_detect_negative_scenario( class TestDetectGeometryValidation (line 404) | class TestDetectGeometryValidation: method test_mask_correctness (line 412) | async def test_mask_correctness(self, mcp_server: FastMCP, test_image_... method test_polygon_correctness (line 490) | async def test_polygon_correctness(self, mcp_server: FastMCP, test_ima... method test_mask_to_polygon_consistency (line 570) | async def test_mask_to_polygon_consistency(self, mcp_server: FastMCP, ... method test_detect_mask_validation_on_simple_image (line 629) | async def test_detect_mask_validation_on_simple_image( FILE: tests/tools/test_draw_arrows.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestDrawArrowsToolDefinition (line 27) | class TestDrawArrowsToolDefinition: method test_draw_arrows_in_tools_list (line 31) | async def test_draw_arrows_in_tools_list(self, mcp_server: FastMCP): method test_draw_arrows_description (line 41) | async def test_draw_arrows_description(self, mcp_server: FastMCP): method test_draw_arrows_parameters (line 51) | async def test_draw_arrows_parameters(self, mcp_server: FastMCP): class TestDrawArrowsToolExecution (line 87) | class TestDrawArrowsToolExecution: method test_draw_arrows_tool_execution (line 91) | async def test_draw_arrows_tool_execution( method test_draw_arrows_default_parameters (line 123) | async def test_draw_arrows_default_parameters( method test_draw_arrows_default_output_path (line 144) | async def test_draw_arrows_default_output_path(self, mcp_server: FastM... FILE: tests/tools/test_draw_circle.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestDrawCircleToolDefinition (line 27) | class TestDrawCircleToolDefinition: method test_draw_circles_in_tools_list (line 31) | async def test_draw_circles_in_tools_list(self, mcp_server: FastMCP): method test_draw_circles_description (line 41) | async def test_draw_circles_description(self, mcp_server: FastMCP): method test_draw_circles_parameters (line 51) | async def test_draw_circles_parameters(self, mcp_server: FastMCP): class TestDrawCircleToolExecution (line 111) | class TestDrawCircleToolExecution: method test_draw_circles_tool_execution (line 115) | async def test_draw_circles_tool_execution( method test_draw_filled_circle (line 139) | async def test_draw_filled_circle( method test_draw_circles_default_output_path (line 159) | async def test_draw_circles_default_output_path(self, mcp_server: Fast... FILE: tests/tools/test_draw_lines.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestDrawLinesToolDefinition (line 27) | class TestDrawLinesToolDefinition: method test_draw_lines_in_tools_list (line 31) | async def test_draw_lines_in_tools_list(self, mcp_server: FastMCP): method test_draw_lines_description (line 41) | async def test_draw_lines_description(self, mcp_server: FastMCP): method test_draw_lines_parameters (line 51) | async def test_draw_lines_parameters(self, mcp_server: FastMCP): class TestDrawLinesToolExecution (line 87) | class TestDrawLinesToolExecution: method test_draw_lines_tool_execution (line 91) | async def test_draw_lines_tool_execution( method test_draw_lines_default_parameters (line 123) | async def test_draw_lines_default_parameters( method test_draw_lines_default_output_path (line 144) | async def test_draw_lines_default_output_path(self, mcp_server: FastMC... FILE: tests/tools/test_draw_rectangle.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestDrawRectanglesToolDefinition (line 27) | class TestDrawRectanglesToolDefinition: method test_draw_rectangles_in_tools_list (line 31) | async def test_draw_rectangles_in_tools_list(self, mcp_server: FastMCP): method test_draw_rectangles_description (line 45) | async def test_draw_rectangles_description(self, mcp_server: FastMCP): method test_draw_rectangles_parameters (line 58) | async def test_draw_rectangles_parameters(self, mcp_server: FastMCP): class TestDrawRectanglesToolExecution (line 106) | class TestDrawRectanglesToolExecution: method test_draw_rectangles_tool_execution (line 110) | async def test_draw_rectangles_tool_execution( method test_draw_filled_rectangle (line 161) | async def test_draw_filled_rectangle( method test_draw_rectangles_default_output_path (line 200) | async def test_draw_rectangles_default_output_path(self, mcp_server: F... FILE: tests/tools/test_draw_text.py function get_ocr_reader (line 18) | def get_ocr_reader(): function mcp_server (line 27) | def mcp_server(): function test_image_path (line 33) | def test_image_path(tmp_path): class TestDrawTextsToolDefinition (line 42) | class TestDrawTextsToolDefinition: method test_draw_texts_in_tools_list (line 46) | async def test_draw_texts_in_tools_list(self, mcp_server: FastMCP): method test_draw_texts_description (line 60) | async def test_draw_texts_description(self, mcp_server: FastMCP): method test_draw_texts_parameters (line 73) | async def test_draw_texts_parameters(self, mcp_server: FastMCP): class TestDrawTextsToolExecution (line 121) | class TestDrawTextsToolExecution: method test_draw_texts_tool_execution (line 125) | async def test_draw_texts_tool_execution( method test_draw_texts_default_output_path (line 188) | async def test_draw_texts_default_output_path(self, mcp_server: FastMC... method test_draw_texts_minimal_parameters (line 229) | async def test_draw_texts_minimal_parameters(self, mcp_server: FastMCP... FILE: tests/tools/test_fill.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): function test_jpeg_image_path (line 32) | def test_jpeg_image_path(tmp_path): class TestFillToolDefinition (line 49) | class TestFillToolDefinition: method test_fill_in_tools_list (line 53) | async def test_fill_in_tools_list(self, mcp_server: FastMCP): method test_fill_description (line 62) | async def test_fill_description(self, mcp_server: FastMCP): method test_fill_parameters (line 71) | async def test_fill_parameters(self, mcp_server: FastMCP): class TestFillToolExecution (line 90) | class TestFillToolExecution: method test_fill_tool_execution (line 94) | async def test_fill_tool_execution(self, mcp_server: FastMCP, test_ima... method test_fill_polygon_area (line 114) | async def test_fill_polygon_area(self, mcp_server: FastMCP, test_image... method test_fill_default_output_path (line 129) | async def test_fill_default_output_path(self, mcp_server: FastMCP, tes... method test_fill_multiple_areas (line 138) | async def test_fill_multiple_areas(self, mcp_server: FastMCP, test_ima... method test_fill_transparent_rectangle (line 150) | async def test_fill_transparent_rectangle(self, mcp_server: FastMCP, t... method test_fill_transparent_polygon (line 186) | async def test_fill_transparent_polygon(self, mcp_server: FastMCP, tes... method test_fill_invert_rectangle (line 223) | async def test_fill_invert_rectangle(self, mcp_server: FastMCP, test_i... method test_fill_invert_polygon (line 258) | async def test_fill_invert_polygon(self, mcp_server: FastMCP, test_ima... method test_fill_invert_transparent (line 291) | async def test_fill_invert_transparent(self, mcp_server: FastMCP, test... method test_fill_invert_multiple_areas (line 331) | async def test_fill_invert_multiple_areas(self, mcp_server: FastMCP, t... method test_fill_invert_complex_polygon (line 369) | async def test_fill_invert_complex_polygon(self, mcp_server: FastMCP, ... method test_fill_invert_single_area_transparent (line 408) | async def test_fill_invert_single_area_transparent(self, mcp_server: F... method test_fill_with_mask_path (line 446) | async def test_fill_with_mask_path(self, mcp_server: FastMCP, test_ima... class TestFillToolWithJPEG (line 477) | class TestFillToolWithJPEG: method test_fill_jpeg_to_transparent_rectangle (line 481) | async def test_fill_jpeg_to_transparent_rectangle(self, mcp_server: Fa... method test_fill_jpeg_invert_transparent (line 511) | async def test_fill_jpeg_invert_transparent(self, mcp_server: FastMCP,... method test_fill_jpeg_invert_with_color (line 554) | async def test_fill_jpeg_invert_with_color(self, mcp_server: FastMCP, ... method test_fill_jpeg_multiple_transparent_areas (line 585) | async def test_fill_jpeg_multiple_transparent_areas(self, mcp_server: ... FILE: tests/tools/test_find.py function mcp_server (line 14) | def mcp_server(): function test_image_path (line 20) | def test_image_path(tmp_path): function test_segmentation_image_path (line 32) | def test_segmentation_image_path(tmp_path): class TestFindToolDefinition (line 42) | class TestFindToolDefinition: method test_find_in_tools_list (line 46) | async def test_find_in_tools_list(self, mcp_server: FastMCP): method test_find_description (line 60) | async def test_find_description(self, mcp_server: FastMCP): method test_find_parameters (line 73) | async def test_find_parameters(self, mcp_server: FastMCP): class TestFindToolExecution (line 150) | class TestFindToolExecution: method test_find_tool_execution (line 158) | async def test_find_tool_execution(self, mcp_server: FastMCP, test_ima... method test_find_single_result (line 209) | async def test_find_single_result(self, mcp_server: FastMCP, test_imag... method test_find_nonexistent_object (line 251) | async def test_find_nonexistent_object(self, mcp_server: FastMCP, test... method test_find_with_mask_geometry (line 285) | async def test_find_with_mask_geometry(self, mcp_server: FastMCP, test... method test_find_with_polygon_geometry (line 317) | async def test_find_with_polygon_geometry(self, mcp_server: FastMCP, t... method test_find_no_geometry_by_default (line 351) | async def test_find_no_geometry_by_default(self, mcp_server: FastMCP, ... method test_mask_correctness (line 378) | async def test_mask_correctness(self, mcp_server: FastMCP, test_image_... method test_polygon_correctness (line 443) | async def test_polygon_correctness(self, mcp_server: FastMCP, test_ima... method test_mask_to_polygon_consistency (line 523) | async def test_mask_to_polygon_consistency(self, mcp_server: FastMCP, ... method test_find_mask_validation_on_simple_image (line 575) | async def test_find_mask_validation_on_simple_image( FILE: tests/tools/test_metainfo.py function mcp_server (line 10) | def mcp_server(): function test_image_path (line 16) | def test_image_path(tmp_path): class TestMetainfoToolDefinition (line 30) | class TestMetainfoToolDefinition: method test_metainfo_in_tools_list (line 34) | async def test_metainfo_in_tools_list(self, mcp_server: FastMCP): method test_metainfo_description (line 48) | async def test_metainfo_description(self, mcp_server: FastMCP): method test_metainfo_parameters (line 65) | async def test_metainfo_parameters(self, mcp_server: FastMCP): class TestMetainfoToolExecution (line 96) | class TestMetainfoToolExecution: method test_metainfo_tool_execution (line 100) | async def test_metainfo_tool_execution(self, mcp_server: FastMCP, test... method test_metainfo_nonexistent_file (line 132) | async def test_metainfo_nonexistent_file(self, mcp_server: FastMCP, tm... FILE: tests/tools/test_ocr.py function mcp_server (line 14) | def mcp_server(): function test_image_path (line 20) | def test_image_path(tmp_path): class TestOcrToolDefinition (line 38) | class TestOcrToolDefinition: method test_ocr_in_tools_list (line 42) | async def test_ocr_in_tools_list(self, mcp_server: FastMCP): method test_ocr_description (line 56) | async def test_ocr_description(self, mcp_server: FastMCP): method test_ocr_parameters (line 69) | async def test_ocr_parameters(self, mcp_server: FastMCP): class TestOcrToolExecution (line 110) | class TestOcrToolExecution: method test_ocr_tool_execution (line 114) | async def test_ocr_tool_execution(self, mcp_server: FastMCP, test_imag... FILE: tests/tools/test_overlay.py function mcp_server (line 12) | def mcp_server(): function base_image_path (line 18) | def base_image_path(tmp_path): function overlay_image_path_rgb (line 28) | def overlay_image_path_rgb(tmp_path): function overlay_image_path_rgba (line 38) | def overlay_image_path_rgba(tmp_path): class TestOverlayToolDefinition (line 48) | class TestOverlayToolDefinition: method test_overlay_in_tools_list (line 52) | async def test_overlay_in_tools_list(self, mcp_server: FastMCP): method test_overlay_parameters (line 61) | async def test_overlay_parameters(self, mcp_server: FastMCP): class TestOverlayToolExecution (line 83) | class TestOverlayToolExecution: method test_overlay_rgb (line 87) | async def test_overlay_rgb(self, mcp_server: FastMCP, base_image_path,... method test_overlay_rgba (line 112) | async def test_overlay_rgba(self, mcp_server: FastMCP, base_image_path... method test_overlay_partial_offscreen (line 137) | async def test_overlay_partial_offscreen(self, mcp_server: FastMCP, ba... method test_overlay_default_output_path (line 160) | async def test_overlay_default_output_path(self, mcp_server: FastMCP, ... FILE: tests/tools/test_resize.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestResizeToolDefinition (line 58) | class TestResizeToolDefinition: method test_resize_in_tools_list (line 62) | async def test_resize_in_tools_list(self, mcp_server: FastMCP): method test_resize_description (line 76) | async def test_resize_description(self, mcp_server: FastMCP): method test_resize_parameters (line 89) | async def test_resize_parameters(self, mcp_server: FastMCP): class TestResizeToolExecution (line 176) | class TestResizeToolExecution: method test_resize_with_dimensions_smaller (line 180) | async def test_resize_with_dimensions_smaller( method test_resize_with_dimensions_larger (line 208) | async def test_resize_with_dimensions_larger( method test_resize_with_width_only_smaller (line 236) | async def test_resize_with_width_only_smaller( method test_resize_with_width_only_larger (line 267) | async def test_resize_with_width_only_larger( method test_resize_with_height_only_smaller (line 298) | async def test_resize_with_height_only_smaller( method test_resize_with_height_only_larger (line 329) | async def test_resize_with_height_only_larger( method test_resize_with_scale_factor_smaller (line 360) | async def test_resize_with_scale_factor_smaller( method test_resize_with_scale_factor_larger (line 388) | async def test_resize_with_scale_factor_larger( method test_resize_default_output_path (line 416) | async def test_resize_default_output_path( method test_resize_with_interpolation (line 437) | async def test_resize_with_interpolation( FILE: tests/tools/test_rotate.py function mcp_server (line 12) | def mcp_server(): function test_image_path (line 18) | def test_image_path(tmp_path): class TestRotateToolDefinition (line 32) | class TestRotateToolDefinition: method test_rotate_in_tools_list (line 36) | async def test_rotate_in_tools_list(self, mcp_server: FastMCP): method test_rotate_description (line 50) | async def test_rotate_description(self, mcp_server: FastMCP): method test_rotate_parameters (line 63) | async def test_rotate_parameters(self, mcp_server: FastMCP): class TestRotateToolExecution (line 105) | class TestRotateToolExecution: method test_rotate_tool_execution (line 109) | async def test_rotate_tool_execution( method test_rotate_clockwise (line 194) | async def test_rotate_clockwise( method test_rotate_default_output_path (line 240) | async def test_rotate_default_output_path(