Skip to content

Conversation

arindamc
Copy link
Contributor

  • Clean implementation using modern @mcp.tool() decorator pattern for all 29 tools
  • Supports all Sample data sources and custom endpoint source
  • Supports adding multiple derived streams and custom endpoint destination
  • Removed deprecated tools and functions for cleaner codebase
  • Updated tool count from 21 to 17 eventstream tools through cleanup

- Clean implementation using modern @mcp.tool() decorator pattern for all 29 tools
- Auto-connection enhancement for derived streams when only one stream exists
- Removed deprecated tools and functions for cleaner codebase
- Updated tool count from 21 to 17 eventstream tools through cleanup
Copy link

Code Quality Report

❌ isort checks failed

ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_tools.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_tools.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py Imports are incorrectly sorted and/or formatted.
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py:before	2025-08-25 08:56:07.276394
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py:after	2025-08-25 08:56:28.794696
@@ -12,7 +12,7 @@
 import json
 import uuid
 from datetime import datetime
-from typing import Dict, List, Optional, Any, Union
+from typing import Any, Dict, List, Optional, Union
 
 from fabric_rti_mcp.common import logger
 
@@ -525,7 +525,7 @@
     try:
         # Import here to avoid circular imports at module level
         from fabric_rti_mcp.eventstream.eventstream_service import eventstream_create as _eventstream_create
-        
+
         # Create the eventstream using the base service
         result = _eventstream_create(
             workspace_id=workspace_id,
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_tools.py:before	2025-08-25 08:56:07.276394
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_tools.py:after	2025-08-25 08:56:28.797390
@@ -4,8 +4,8 @@
 """
 
 from fastmcp import FastMCP
-from fabric_rti_mcp.eventstream import eventstream_service
-from fabric_rti_mcp.eventstream import eventstream_builder_tools
+
+from fabric_rti_mcp.eventstream import eventstream_builder_tools, eventstream_service
 
 
 def register_tools(mcp: FastMCP) -> None:
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:before	2025-08-25 08:56:07.276394
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:after	2025-08-25 08:56:28.799450
@@ -4,6 +4,7 @@
 """
 
 from fastmcp import FastMCP
+
 from fabric_rti_mcp.eventstream import eventstream_builder_service
 
 
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py:before	2025-08-25 08:56:07.277394
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py:after	2025-08-25 08:56:28.804205
@@ -1,4 +1,5 @@
 from fastmcp import FastMCP
+
 from fabric_rti_mcp.kusto import kusto_service
 
 
Skipped 3 files

❌ Black checks failed

--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_tools.py	2025-08-25 08:56:07.276394+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_tools.py	2025-08-25 08:56:29.694012+00:00
@@ -7,65 +7,94 @@
 from fabric_rti_mcp.eventstream import eventstream_builder_service
 
 
 def register_tools(mcp: FastMCP) -> None:
     """Register all available Eventstream Builder tools with the MCP server using modern decorator pattern."""
-    
+
     # Session management tools
     @mcp.tool()
     def eventstream_start_definition(name: str, description: str = None):
         """Start a new eventstream definition builder session."""
         return eventstream_builder_service.eventstream_start_definition(name, description)
-    
+
     @mcp.tool()
     def eventstream_get_current_definition(session_id: str):
         """Get the current eventstream definition."""
         return eventstream_builder_service.eventstream_get_current_definition(session_id)
-    
+
     @mcp.tool()
     def eventstream_clear_definition(session_id: str):
         """Clear the current eventstream definition and start over."""
         return eventstream_builder_service.eventstream_clear_definition(session_id)
-    
+
     # Data source tools
     @mcp.tool()
     def eventstream_add_sample_data_source(session_id: str, sample_type: str = "Bicycles", source_name: str = None):
         """Add a sample data source to the eventstream definition."""
         return eventstream_builder_service.eventstream_add_sample_data_source(session_id, sample_type, source_name)
-    
+
     @mcp.tool()
     def eventstream_add_custom_endpoint_source(session_id: str, source_name: str = None, endpoint_url: str = None):
         """Add a custom endpoint source to the eventstream definition."""
         return eventstream_builder_service.eventstream_add_custom_endpoint_source(session_id, source_name, endpoint_url)
-    
+
     # Stream tools
     @mcp.tool()
     def eventstream_add_derived_stream(session_id: str, stream_name: str, input_nodes: list = None):
         """Add a derived stream to the eventstream definition. If input_nodes is not provided and only one stream exists, automatically connects to that stream."""
         return eventstream_builder_service.eventstream_add_derived_stream(session_id, stream_name, input_nodes)
-    
+
     # Destination tools
     @mcp.tool()
-    def eventstream_add_eventhouse_destination(session_id: str, workspace_id: str, item_id: str, database_name: str, table_name: str, input_streams: list, destination_name: str = None, data_ingestion_mode: str = "ProcessedIngestion", encoding: str = "UTF8"):
+    def eventstream_add_eventhouse_destination(
+        session_id: str,
+        workspace_id: str,
+        item_id: str,
+        database_name: str,
+        table_name: str,
+        input_streams: list,
+        destination_name: str = None,
+        data_ingestion_mode: str = "ProcessedIngestion",
+        encoding: str = "UTF8",
+    ):
         """Add an Eventhouse destination to the eventstream definition."""
-        return eventstream_builder_service.eventstream_add_eventhouse_destination(session_id, workspace_id, item_id, database_name, table_name, input_streams, destination_name, data_ingestion_mode, encoding)
-    
+        return eventstream_builder_service.eventstream_add_eventhouse_destination(
+            session_id,
+            workspace_id,
+            item_id,
+            database_name,
+            table_name,
+            input_streams,
+            destination_name,
+            data_ingestion_mode,
+            encoding,
+        )
+
     @mcp.tool()
-    def eventstream_add_custom_endpoint_destination(session_id: str, input_streams: list, destination_name: str = None, endpoint_url: str = None, method: str = "POST", headers: dict = None):
+    def eventstream_add_custom_endpoint_destination(
+        session_id: str,
+        input_streams: list,
+        destination_name: str = None,
+        endpoint_url: str = None,
+        method: str = "POST",
+        headers: dict = None,
+    ):
         """Add a custom endpoint destination to the eventstream definition."""
-        return eventstream_builder_service.eventstream_add_custom_endpoint_destination(session_id, input_streams, destination_name, endpoint_url, method, headers)
-    
+        return eventstream_builder_service.eventstream_add_custom_endpoint_destination(
+            session_id, input_streams, destination_name, endpoint_url, method, headers
+        )
+
     # Validation and creation tools
     @mcp.tool()
     def eventstream_validate_definition(session_id: str):
         """Validate the current eventstream definition."""
         return eventstream_builder_service.eventstream_validate_definition(session_id)
-    
+
     @mcp.tool()
     def eventstream_create_from_definition(session_id: str, workspace_id: str):
         """Create an eventstream in Fabric from the current definition."""
         return eventstream_builder_service.eventstream_create_from_definition(session_id, workspace_id)
-    
+
     @mcp.tool()
     def eventstream_list_available_components():
         """List available components for building eventstreams."""
         return eventstream_builder_service.eventstream_list_available_components()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_tools.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_tools.py	2025-08-25 08:56:07.276394+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_tools.py	2025-08-25 08:56:29.702702+00:00
@@ -8,40 +8,48 @@
 from fabric_rti_mcp.eventstream import eventstream_builder_tools
 
 
 def register_tools(mcp: FastMCP) -> None:
     """Register all Eventstream tools with the MCP server using modern decorator pattern."""
-    
+
     # Read-only tools (queries, list operations)
     @mcp.tool()
     def eventstream_list(workspace_id: str):
         """List all Eventstreams in your Fabric workspace."""
         return eventstream_service.eventstream_list(workspace_id)
-    
+
     @mcp.tool()
     def eventstream_get(workspace_id: str, item_id: str):
         """Get detailed information about a specific Eventstream."""
         return eventstream_service.eventstream_get(workspace_id, item_id)
-    
+
     @mcp.tool()
     def eventstream_get_definition(workspace_id: str, item_id: str):
         """Retrieve complete JSON definition of an Eventstream."""
         return eventstream_service.eventstream_get_definition(workspace_id, item_id)
-    
+
     # Destructive tools (create, update, delete operations)
     @mcp.tool()
-    def eventstream_create(workspace_id: str, eventstream_name: str = None, eventstream_id: str = None, definition: dict = None, description: str = None):
+    def eventstream_create(
+        workspace_id: str,
+        eventstream_name: str = None,
+        eventstream_id: str = None,
+        definition: dict = None,
+        description: str = None,
+    ):
         """Create new Eventstreams with custom configuration (auto-includes default stream)."""
-        return eventstream_service.eventstream_create(workspace_id, eventstream_name, eventstream_id, definition, description)
-    
+        return eventstream_service.eventstream_create(
+            workspace_id, eventstream_name, eventstream_id, definition, description
+        )
+
     @mcp.tool()
     def eventstream_update(workspace_id: str, item_id: str, definition: dict):
         """Modify existing Eventstream settings and destinations."""
         return eventstream_service.eventstream_update(workspace_id, item_id, definition)
-    
+
     @mcp.tool()
     def eventstream_delete(workspace_id: str, item_id: str):
         """Remove Eventstreams and associated resources."""
         return eventstream_service.eventstream_delete(workspace_id, item_id)
-    
+
     # Register builder tools
     eventstream_builder_tools.register_tools(mcp)
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_tools.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py	2025-08-25 08:56:07.277394+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py	2025-08-25 08:56:29.763332+00:00
@@ -2,53 +2,66 @@
 from fabric_rti_mcp.kusto import kusto_service
 
 
 def register_tools(mcp: FastMCP) -> None:
     """Register all Kusto tools with the MCP server using modern decorator pattern."""
-    
+
     @mcp.tool()
     def kusto_known_services():
         return kusto_service.kusto_known_services()
-    
+
     @mcp.tool()
     def kusto_query(query: str, cluster_uri: str, database: str = None):
         return kusto_service.kusto_query(query, cluster_uri, database)
-    
+
     @mcp.tool()
     def kusto_command(command: str, cluster_uri: str, database: str = None):
         return kusto_service.kusto_command(command, cluster_uri, database)
-    
+
     @mcp.tool()
     def kusto_list_databases(cluster_uri: str):
         return kusto_service.kusto_list_databases(cluster_uri)
-    
+
     @mcp.tool()
     def kusto_list_tables(cluster_uri: str, database: str):
         return kusto_service.kusto_list_tables(cluster_uri, database)
-    
+
     @mcp.tool()
     def kusto_get_entities_schema(cluster_uri: str, database: str = None):
         return kusto_service.kusto_get_entities_schema(cluster_uri, database)
-    
+
     @mcp.tool()
     def kusto_get_table_schema(table_name: str, cluster_uri: str, database: str = None):
         return kusto_service.kusto_get_table_schema(table_name, cluster_uri, database)
-    
+
     @mcp.tool()
     def kusto_get_function_schema(function_name: str, cluster_uri: str, database: str = None):
         return kusto_service.kusto_get_function_schema(function_name, cluster_uri, database)
-    
+
     @mcp.tool()
     def kusto_sample_table_data(table_name: str, cluster_uri: str, sample_size: int = 10, database: str = None):
         return kusto_service.kusto_sample_table_data(table_name, cluster_uri, sample_size, database)
-    
+
     @mcp.tool()
-    def kusto_sample_function_data(function_call_with_params: str, cluster_uri: str, sample_size: int = 10, database: str = None):
+    def kusto_sample_function_data(
+        function_call_with_params: str, cluster_uri: str, sample_size: int = 10, database: str = None
+    ):
         return kusto_service.kusto_sample_function_data(function_call_with_params, cluster_uri, sample_size, database)
-    
+
     @mcp.tool()
-    def kusto_ingest_inline_into_table(table_name: str, data_comma_separator: str, cluster_uri: str, database: str = None):
+    def kusto_ingest_inline_into_table(
+        table_name: str, data_comma_separator: str, cluster_uri: str, database: str = None
+    ):
         return kusto_service.kusto_ingest_inline_into_table(table_name, data_comma_separator, cluster_uri, database)
-    
+
     @mcp.tool()
-    def kusto_get_shots(prompt: str, shots_table_name: str, cluster_uri: str, sample_size: int = 3, database: str = None, embedding_endpoint: str = None):
-        return kusto_service.kusto_get_shots(prompt, shots_table_name, cluster_uri, sample_size, database, embedding_endpoint)
+    def kusto_get_shots(
+        prompt: str,
+        shots_table_name: str,
+        cluster_uri: str,
+        sample_size: int = 3,
+        database: str = None,
+        embedding_endpoint: str = None,
+    ):
+        return kusto_service.kusto_get_shots(
+            prompt, shots_table_name, cluster_uri, sample_size, database, embedding_endpoint
+        )
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py	2025-08-25 08:56:07.276394+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py	2025-08-25 08:56:29.919781+00:00
@@ -17,10 +17,11 @@
 from fabric_rti_mcp.common import logger
 
 # Global session storage
 _builder_sessions: Dict[str, Dict[str, Any]] = {}
 
+
 def _generate_session_id() -> str:
     """Generate a unique session ID."""
     return str(uuid.uuid4())
 
 
@@ -36,284 +37,253 @@
 
 
 def _generate_sequential_name(base_name: str, existing_names: List[str]) -> str:
     """
     Generate a sequential name that doesn't conflict with existing names.
-    
+
     :param base_name: The base name to use (e.g., "TestMCP80-source")
     :param existing_names: List of existing names to check against
     :return: Sequential name (base_name, base_name-2, base_name-3, etc.)
     """
     if base_name not in existing_names:
         return base_name
-    
+
     counter = 2
     while f"{base_name}-{counter}" in existing_names:
         counter += 1
-    
+
     return f"{base_name}-{counter}"
 
 
 def _create_basic_definition(name: str, description: Optional[str] = None) -> Dict[str, Any]:
     """
     Create a basic eventstream definition template for the interactive builder workflow.
     This creates a structure with a default stream that gets populated through builder methods.
     Note: name and description are NOT included here as they belong in the outer HTTP payload.
-    
+
     :param name: Name of the eventstream being built (used for default stream naming)
     :param description: Optional description of the eventstream (used for session metadata only)
     :return: Eventstream definition template with default stream ready for builder population
     """
     return {
         "sources": [],
-        "streams": [
-            {
-                "name": f"{name}-stream",
-                "type": "DefaultStream",
-                "properties": {},
-                "inputNodes": []
-            }
-        ],
+        "streams": [{"name": f"{name}-stream", "type": "DefaultStream", "properties": {}, "inputNodes": []}],
         "destinations": [],
         "operators": [],
-        "compatibilityLevel": "1.0"
+        "compatibilityLevel": "1.0",
     }
 
 
 def eventstream_start_definition(name: str, description: Optional[str] = None) -> Dict[str, Any]:
     """
     Start a new eventstream definition builder session.
-    
+
     :param name: Name of the eventstream to create
     :param description: Optional description of the eventstream
     :return: Session information and next steps
     """
     try:
         session_id = _generate_session_id()
         definition = _create_basic_definition(name, description)
-        
+
         session_data = {
             "session_id": session_id,
             "name": name,
             "description": description,
             "definition": definition,
             "created_at": datetime.now().isoformat(),
             "last_updated": datetime.now().isoformat(),
-            "status": "building"
+            "status": "building",
         }
-        
+
         _builder_sessions[session_id] = session_data
-        
+
         logger.info(f"Started eventstream builder session: {session_id}")
-        
+
         return {
             "session_id": session_id,
             "name": name,
             "description": description,
             "status": "ready",
             "next_steps": [
                 "Add sources using eventstream_add_sample_data_source or eventstream_add_custom_endpoint_source",
                 "Add derived streams using eventstream_add_derived_stream (default stream auto-created as '{name}-stream')",
                 "Add destinations using eventstream_add_eventhouse_destination or eventstream_add_custom_endpoint_destination",
                 "Validate with eventstream_validate_definition",
-                "Create with eventstream_create_from_definition"
-            ]
+                "Create with eventstream_create_from_definition",
+            ],
         }
     except Exception as e:
         logger.error(f"Error starting eventstream definition: {str(e)}")
         raise
 
 
 def eventstream_get_current_definition(session_id: str) -> Dict[str, Any]:
     """
     Get the current eventstream definition.
-    
+
     :param session_id: Builder session ID
     :return: Current definition
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     return {
         "session_id": session_id,
         "name": session["name"],
         "description": session["description"],
         "definition": session["definition"],
         "status": session["status"],
-        "last_updated": session["last_updated"]
+        "last_updated": session["last_updated"],
     }
 
 
 def eventstream_clear_definition(session_id: str) -> Dict[str, str]:
     """
     Clear the current eventstream definition and start over.
-    
+
     :param session_id: Builder session ID
     :return: Confirmation of clearing
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Reset definition while keeping session metadata
     session["definition"] = _create_basic_definition(session["name"], session["description"])
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Cleared eventstream definition for session: {session_id}")
-    
-    return {
-        "status": "cleared",
-        "message": f"Definition cleared for session {session_id}"
-    }
+
+    return {"status": "cleared", "message": f"Definition cleared for session {session_id}"}
 
 
 def eventstream_add_sample_data_source(
-    session_id: str, 
-    sample_type: str = "Bicycles",
-    source_name: Optional[str] = None
+    session_id: str, sample_type: str = "Bicycles", source_name: Optional[str] = None
 ) -> Dict[str, Any]:
     """
     Add a sample data source to the eventstream definition.
-    
+
     :param session_id: Builder session ID
     :param sample_type: Type of sample data (Bicycles, Stock, etc.)
     :param source_name: Name for the source (auto-generated if not provided)
     :return: Updated definition summary
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Auto-generate source name if not provided
     if source_name is None:
         source_name = f"{sample_type.lower()}-source"
-    
-    source_config = {
-        "name": source_name,
-        "type": "SampleData",
-        "properties": {
-            "type": sample_type
-        }
-    }
-    
+
+    source_config = {"name": source_name, "type": "SampleData", "properties": {"type": sample_type}}
+
     session["definition"]["sources"].append(source_config)
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Added sample data source '{source_name}' to session {session_id}")
 
     return {
         "session_id": session_id,
         "source_added": source_name,
         "source_type": "SampleData",
-        "sources_count": len(session["definition"]["sources"])
+        "sources_count": len(session["definition"]["sources"]),
     }
 
 
 def eventstream_add_custom_endpoint_source(
-    session_id: str,
-    source_name: Optional[str] = None,
-    endpoint_url: Optional[str] = None
+    session_id: str, source_name: Optional[str] = None, endpoint_url: Optional[str] = None
 ) -> Dict[str, Any]:
     """
     Add a custom endpoint source to the eventstream definition.
-    
+
     :param session_id: Builder session ID
     :param source_name: Name for the source (auto-generated if not provided)
     :param endpoint_url: Custom endpoint URL (deprecated - use data connections instead)
     :return: Updated definition summary
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Auto-generate source name if not provided using sequential numbering
     if source_name is None:
         base_name = f"{session['name']}-source"
         existing_source_names = [s["name"] for s in session["definition"]["sources"]]
         source_name = _generate_sequential_name(base_name, existing_source_names)
-    
-    source_config = {
-        "name": source_name,
-        "type": "CustomEndpoint",
-        "properties": {}
-    }
-    
+
+    source_config = {"name": source_name, "type": "CustomEndpoint", "properties": {}}
+
     session["definition"]["sources"].append(source_config)
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Added custom endpoint source '{source_name}' to session {session_id}")
 
     return {
         "session_id": session_id,
         "source_added": source_name,
         "source_type": "CustomEndpoint",
-        "sources_count": len(session["definition"]["sources"])
+        "sources_count": len(session["definition"]["sources"]),
     }
 
 
 def eventstream_add_derived_stream(
-    session_id: str,
-    stream_name: str,
-    input_nodes: Optional[List[str]] = None
+    session_id: str, stream_name: str, input_nodes: Optional[List[str]] = None
 ) -> Dict[str, Any]:
     """
     Add a derived stream to the eventstream definition.
-    
+
     :param session_id: Builder session ID
     :param stream_name: Name for the stream
     :param input_nodes: List of node names (sources, operators, or other streams) that feed this stream.
                        If None and only one stream exists, automatically connects to that stream.
     :return: Updated definition summary
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Get available nodes for validation and auto-connection
     source_names = [s["name"] for s in session["definition"]["sources"]]
     operator_names = [o["name"] for o in session["definition"]["operators"]]
     stream_names = [s["name"] for s in session["definition"]["streams"]]
-    
+
     # Smart default: if input_nodes not provided or empty and only one stream exists, use it
     if not input_nodes:  # This handles both None and empty list []
         # Auto-connect logic: if only one stream and no operators, connect to that stream
         if len(stream_names) == 1 and len(operator_names) == 0:
             input_nodes = stream_names.copy()  # Use copy to avoid reference issues
             logger.info(f"Auto-connecting derived stream '{stream_name}' to default stream '{stream_names[0]}'")
         else:
-            raise ValueError(f"input_nodes must be specified when multiple streams/operators exist. Available: streams={stream_names}, operators={operator_names}")
-    
+            raise ValueError(
+                f"input_nodes must be specified when multiple streams/operators exist. Available: streams={stream_names}, operators={operator_names}"
+            )
+
     # Validate that input nodes exist (can be sources, operators, or streams)
     for node in input_nodes:
         if node not in source_names and node not in operator_names and node not in stream_names:
             raise ValueError(f"Input node '{node}' not found in sources, operators, or streams")
-    
+
     stream_config = {
         "name": stream_name,
         "type": "DerivedStream",
-        "properties": {
-            "inputSerialization": {
-                "type": "Json",
-                "properties": {
-                    "encoding": "UTF8"
-                }
-            }
-        },
-        "inputNodes": [{"name": node} for node in input_nodes]
-    }
-    
+        "properties": {"inputSerialization": {"type": "Json", "properties": {"encoding": "UTF8"}}},
+        "inputNodes": [{"name": node} for node in input_nodes],
+    }
+
     session["definition"]["streams"].append(stream_config)
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Added derived stream '{stream_name}' to session {session_id}")
 
     return {
         "session_id": session_id,
         "stream_added": stream_name,
         "stream_type": "DerivedStream",
-        "streams_count": len(session["definition"]["streams"])
+        "streams_count": len(session["definition"]["streams"]),
     }
 
 
 def eventstream_add_eventhouse_destination(
     session_id: str,
@@ -322,15 +292,15 @@
     database_name: str,
     table_name: str,
     input_streams: List[str],
     destination_name: Optional[str] = None,
     data_ingestion_mode: str = "ProcessedIngestion",
-    encoding: str = "UTF8"
+    encoding: str = "UTF8",
 ) -> Dict[str, Any]:
     """
     Add an Eventhouse destination to the eventstream definition.
-    
+
     :param session_id: Builder session ID
     :param workspace_id: Fabric workspace ID
     :param item_id: Eventhouse item ID
     :param database_name: Target database name
     :param table_name: Target table name
@@ -341,64 +311,59 @@
     :return: Updated definition summary
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Auto-generate destination name if not provided
     if destination_name is None:
         destination_name = f"{session['name']}-eventhouse-destination"
-    
+
     # Validate that input streams exist
     stream_names = [s["name"] for s in session["definition"]["streams"]]
     for stream in input_streams:
         if stream not in stream_names:
             raise ValueError(f"Stream '{stream}' not found in definition")
-    
+
     destination_config = {
         "name": destination_name,
         "type": "Eventhouse",
         "properties": {
             "dataIngestionMode": data_ingestion_mode,
             "workspaceId": workspace_id,
             "itemId": item_id,
             "databaseName": database_name,
             "tableName": table_name,
-            "inputSerialization": {
-                "type": "Json",
-                "properties": {
-                    "encoding": encoding
-                }
-            }
+            "inputSerialization": {"type": "Json", "properties": {"encoding": encoding}},
         },
-        "inputNodes": [{"name": stream} for stream in input_streams]
-    }
-    
+        "inputNodes": [{"name": stream} for stream in input_streams],
+    }
+
     session["definition"]["destinations"].append(destination_config)
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Added Eventhouse destination '{destination_name}' to session {session_id}")
-    
+
     return {
         "session_id": session_id,
         "destination_added": destination_name,
         "destination_type": "Eventhouse",
-        "destinations_count": len(session["definition"]["destinations"])
+        "destinations_count": len(session["definition"]["destinations"]),
     }
 
 
 def eventstream_add_custom_endpoint_destination(
     session_id: str,
     input_streams: List[str],
     destination_name: Optional[str] = None,
     endpoint_url: Optional[str] = None,
     method: str = "POST",
-    headers: Optional[Dict[str, str]] = None
+    headers: Optional[Dict[str, str]] = None,
 ) -> Dict[str, Any]:
     """
     Add a custom endpoint destination to the eventstream definition.
-    
+
     :param session_id: Builder session ID
     :param input_streams: List of stream names that feed this destination
     :param destination_name: Name for the destination (auto-generated if not provided)
     :param endpoint_url: Custom endpoint URL (deprecated - use data connections instead)
     :param method: HTTP method (deprecated)
@@ -406,140 +371,140 @@
     :return: Updated definition summary
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Auto-generate destination name if not provided using sequential numbering
     if destination_name is None:
         base_name = f"{session['name']}-destination"
         existing_destination_names = [d["name"] for d in session["definition"]["destinations"]]
         destination_name = _generate_sequential_name(base_name, existing_destination_names)
-    
+
     # Validate that input streams exist
     stream_names = [s["name"] for s in session["definition"]["streams"]]
     for stream in input_streams:
         if stream not in stream_names:
             raise ValueError(f"Stream '{stream}' not found in definition")
-    
+
     destination_config = {
         "name": destination_name,
         "type": "CustomEndpoint",
         "properties": {},
-        "inputNodes": [{"name": stream} for stream in input_streams]
-    }
-    
+        "inputNodes": [{"name": stream} for stream in input_streams],
+    }
+
     session["definition"]["destinations"].append(destination_config)
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Added custom endpoint destination '{destination_name}' to session {session_id}")
-    
+
     return {
         "session_id": session_id,
         "destination_added": destination_name,
         "destination_type": "CustomEndpoint",
-        "destinations_count": len(session["definition"]["destinations"])
+        "destinations_count": len(session["definition"]["destinations"]),
     }
 
 
 def eventstream_validate_definition(session_id: str) -> Dict[str, Any]:
     """
     Validate the current eventstream definition.
-    
+
     :param session_id: Builder session ID
     :return: Validation results
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     definition = session["definition"]
     errors = []
     warnings = []
-    
+
     # Basic validation
     if not definition.get("sources"):
         errors.append("At least one source is required")
-    
+
     if not definition.get("streams"):
         warnings.append("No streams defined - consider adding at least one stream")
-    
+
     if not definition.get("destinations"):
         warnings.append("No destinations defined - data will not be persisted")
-    
+
     # Get name mappings for validation
     source_names = [s["name"] for s in definition.get("sources", [])]
     stream_names = [s["name"] for s in definition.get("streams", [])]
-    
+
     # Stream validation
     for stream in definition.get("streams", []):
         if stream.get("type") == "DefaultStream":
             for input_node in stream.get("inputNodes", []):
                 source_name = input_node.get("name")
                 if source_name not in source_names:
                     errors.append(f"Stream '{stream['name']}' references unknown source '{source_name}'")
-    
+
     # Destination validation
     for dest in definition.get("destinations", []):
         for input_node in dest.get("inputNodes", []):
             stream_name = input_node.get("name")
             if stream_name not in stream_names:
                 errors.append(f"Destination '{dest['name']}' references unknown stream '{stream_name}'")
-    
+
     is_valid = len(errors) == 0
     session["status"] = "valid" if is_valid else "invalid"
     session["last_updated"] = datetime.now().isoformat()
-    
+
     logger.info(f"Validated definition for session {session_id}: {'valid' if is_valid else 'invalid'}")
-    
+
     return {
         "session_id": session_id,
         "is_valid": is_valid,
         "errors": errors,
         "warnings": warnings,
         "summary": {
             "sources": len(definition.get("sources", [])),
             "streams": len(definition.get("streams", [])),
             "destinations": len(definition.get("destinations", [])),
-            "operators": len(definition.get("operators", []))
-        }
+            "operators": len(definition.get("operators", [])),
+        },
     }
 
 
 def eventstream_create_from_definition(session_id: str, workspace_id: str) -> Dict[str, Any]:
     """
     Create an eventstream in Fabric from the current definition.
-    
+
     :param session_id: Builder session ID
     :param workspace_id: Target Fabric workspace ID
     :return: Creation results
     """
     session = _get_session(session_id)
     if not session:
         raise ValueError(f"Session {session_id} not found")
-    
+
     # Validate definition first
     validation_result = eventstream_validate_definition(session_id)
     if not validation_result["is_valid"]:
         raise ValueError(f"Definition is invalid: {', '.join(validation_result['errors'])}")
-    
+
     try:
         # Import here to avoid circular imports at module level
         from fabric_rti_mcp.eventstream.eventstream_service import eventstream_create as _eventstream_create
-        
+
         # Create the eventstream using the base service
         result = _eventstream_create(
             workspace_id=workspace_id,
             eventstream_name=session["name"],
             eventstream_id=None,  # Auto-generate
             definition=session["definition"],
-            description=session["description"]
+            description=session["description"],
         )
-        
+
         # Mark session as completed
         session["status"] = "created"
-        
+
         # Handle different response types safely
         if result and len(result) > 0:
             result_data = result[0]
             if isinstance(result_data, dict):
                 if result_data.get("error"):
@@ -556,31 +521,31 @@
                 session["created_item_id"] = None
                 logger.info(f"Created eventstream from session {session_id}: Success (no ID returned)")
         else:
             session["created_item_id"] = None
             logger.info(f"Created eventstream from session {session_id}: Success (empty response)")
-            
+
         session["last_updated"] = datetime.now().isoformat()
-        
+
         return {
             "session_id": session_id,
             "status": "created",
             "eventstream": result[0] if result and len(result) > 0 else {"success": True},
-            "workspace_id": workspace_id
+            "workspace_id": workspace_id,
         }
-        
+
     except Exception as e:
         logger.error(f"Error creating eventstream from session {session_id}: {str(e)}")
         session["status"] = "error"
         session["error"] = str(e)
         raise
 
 
 def eventstream_list_available_components() -> Dict[str, List[str]]:
     """
     List available components for building eventstreams.
-    
+
     :return: Available components
     """
     return {
         "sources": [
             "SampleData",
@@ -590,34 +555,12 @@
             "AmazonKinesis",
             "ApacheKafka",
             "ConfluentCloud",
             "FabricWorkspaceItemEvents",
             "FabricJobEvents",
-            "FabricOneLakeEvents"
+            "FabricOneLakeEvents",
         ],
-        "streams": [
-            "DefaultStream",
-            "DerivedStream"
-        ],
-        "destinations": [
-            "Eventhouse", 
-            "CustomEndpoint",
-            "Lakehouse"
-        ],
-        "operators": [
-            "Filter",
-            "Join",
-            "ManageFields",
-            "Aggregate",
-            "GroupBy",
-            "Union",
-            "Expand"
-        ],
-        "sample_data_types": [
-            "Bicycles",
-            "Buses",
-            "SemanticModelLogs",
-            "SP500Stocks",
-            "StockMarket",            
-            "YellowTaxi"            
-        ]
-    }
+        "streams": ["DefaultStream", "DerivedStream"],
+        "destinations": ["Eventhouse", "CustomEndpoint", "Lakehouse"],
+        "operators": ["Filter", "Join", "ManageFields", "Aggregate", "GroupBy", "Union", "Expand"],
+        "sample_data_types": ["Bicycles", "Buses", "SemanticModelLogs", "SP500Stocks", "StockMarket", "YellowTaxi"],
+    }
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py

Oh no! 💥 💔 💥
4 files would be reformatted, 14 files would be left unchanged.

❌ Flake8 checks failed

./fabric_rti_mcp/eventstream/eventstream_builder_service.py:5:121: E501 line too long (128 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:6:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:12:1: F401 'json' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:15:1: F401 'typing.Union' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:22:1: E302 expected 2 blank lines, found 1
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:41:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:48:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:52:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:61:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:85:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:93:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:103:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:105:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:107:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:115:121: E501 line too long (124 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:116:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:129:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:136:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:150:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:157:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:161:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:163:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:171:21: W291 trailing whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:177:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:186:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:190:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:198:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:201:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:219:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:228:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:234:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:240:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:243:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:261:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:271:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:276:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:284:121: E501 line too long (163 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:285:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:290:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:304:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:307:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:331:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:346:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:350:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:356:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:375:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:378:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:380:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:399:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:411:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:417:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:423:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:430:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:433:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:435:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:447:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:454:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:458:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:462:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:465:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:468:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:472:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:480:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:487:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:491:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:493:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:511:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:519:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:524:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:528:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:537:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:540:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:561:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:563:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:570:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:581:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:602:26: W291 trailing whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:620:27: W291 trailing whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:621:25: W291 trailing whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:12:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:18:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:23:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:28:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:34:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:39:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:43:121: E501 line too long (163 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:45:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48:121: E501 line too long (258 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:50:121: E501 line too long (207 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:51:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53:121: E501 line too long (190 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:55:121: E501 line too long (162 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:56:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:62:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:67:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:13:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:19:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:24:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:29:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:32:121: E501 line too long (154 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_tools.py:34:121: E501 line too long (126 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_tools.py:35:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:40:1: W293 blank line contains whitespace
./fabric_rti_mcp/eventstream/eventstream_tools.py:45:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:7:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:11:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:15:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:19:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:23:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:27:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:31:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:35:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:39:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:43:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:45:121: E501 line too long (130 > 120 characters)
./fabric_rti_mcp/kusto/kusto_tools.py:47:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:49:121: E501 line too long (123 > 120 characters)
./fabric_rti_mcp/kusto/kusto_tools.py:51:1: W293 blank line contains whitespace
./fabric_rti_mcp/kusto/kusto_tools.py:53:121: E501 line too long (154 > 120 characters)
./fabric_rti_mcp/kusto/kusto_tools.py:54:121: E501 line too long (126 > 120 characters)

❌ MyPy checks failed

fabric_rti_mcp/eventstream/eventstream_builder_service.py:556: error: Statement is unreachable  [unreachable]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_service.py:556: error: Statement is unreachable  [unreachable]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: error: Incompatible default for argument "description" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:20: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:25: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: error: Incompatible default for argument "source_name" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Incompatible default for argument "source_name" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Incompatible default for argument "endpoint_url" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: error: Missing type parameters for generic type "list"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: error: Incompatible default for argument "input_nodes" (default has type "None", argument has type "list[Any]")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: error: Missing type parameters for generic type "list"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: error: Incompatible default for argument "destination_name" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Missing type parameters for generic type "list"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Incompatible default for argument "destination_name" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Incompatible default for argument "endpoint_url" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Missing type parameters for generic type "dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Incompatible default for argument "headers" (default has type "None", argument has type "dict[Any, Any]")  [assignment]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:59: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:64: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:69: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_tools.py:16: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_tools.py:21: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_tools.py:26: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "eventstream_name" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_tools.py:32: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/eventstream/eventstream_tools.py:32: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "eventstream_id" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Missing type parameters for generic type "dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "definition" (default has type "None", argument has type "dict[Any, Any]")  [assignment]
fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "description" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/eventstream/eventstream_tools.py:37: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/eventstream/eventstream_tools.py:37: error: Missing type parameters for generic type "dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:42: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:16: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:21: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:26: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "eventstream_name" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "eventstream_id" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Missing type parameters for generic type "dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "definition" (default has type "None", argument has type "dict[Any, Any]")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:32: error: Incompatible default for argument "description" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:37: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:37: error: Missing type parameters for generic type "dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:42: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: error: Incompatible default for argument "description" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:15: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:20: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:25: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: error: Incompatible default for argument "source_name" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:31: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Incompatible default for argument "source_name" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Incompatible default for argument "endpoint_url" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: error: Missing type parameters for generic type "list"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: error: Incompatible default for argument "input_nodes" (default has type "None", argument has type "list[Any]")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:42: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: error: Missing type parameters for generic type "list"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: error: Incompatible default for argument "destination_name" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:48: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Missing type parameters for generic type "list"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Incompatible default for argument "destination_name" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Incompatible default for argument "endpoint_url" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Missing type parameters for generic type "dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:53: error: Incompatible default for argument "headers" (default has type "None", argument has type "dict[Any, Any]")  [assignment]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:59: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:64: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:69: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:9: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:13: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:13: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:13: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:13: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:17: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:17: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:17: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:17: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:21: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:25: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:29: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:29: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:29: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:29: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:33: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:33: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:33: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:33: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:37: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:37: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:37: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:37: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:41: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:41: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:41: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:41: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:45: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:45: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:45: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:45: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:49: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:49: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:49: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:49: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:53: error: Function is missing a return type annotation  [no-untyped-def]
fabric_rti_mcp/kusto/kusto_tools.py:53: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/kusto/kusto_tools.py:53: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
fabric_rti_mcp/kusto/kusto_tools.py:53: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
fabric_rti_mcp/kusto/kusto_tools.py:53: error: Incompatible default for argument "embedding_endpoint" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:9: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:13: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:13: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:13: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:13: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:17: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:17: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:17: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:17: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:21: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:25: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:29: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:29: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:29: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:29: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:33: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:33: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:33: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:33: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:37: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:37: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:37: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:37: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:41: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:41: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:41: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:41: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:45: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:45: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:45: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:45: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:49: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:49: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:49: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:49: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:53: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:53: error: Incompatible default for argument "database" (default has type "None", argument has type "str")  [assignment]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:53: note: PEP 484 prohibits implicit Optional. Accordingly, mypy has changed its default to no_implicit_optional=True
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:53: note: Use https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade your codebase
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:53: error: Incompatible default for argument "embedding_endpoint" (default has type "None", argument has type "str")  [assignment]
fabric_rti_mcp/server.py:15: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
fabric_rti_mcp/server.py:16: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
build/lib/fabric_rti_mcp/server.py:15: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
build/lib/fabric_rti_mcp/server.py:16: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
Found 122 errors in 10 files (checked 33 source files)

✅ Pytest checks passed

- Add proper type annotations to all functions
- Fix import sorting and organization
- Apply black code formatting
- Resolve all mypy type checking errors
- Maintain functionality while meeting Microsoft repository standards
Copy link

Code Quality Report

❌ isort checks failed

ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py Imports are incorrectly sorted and/or formatted.
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py:before	2025-08-25 15:39:51.070467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py:after	2025-08-25 15:40:09.399630
@@ -7,6 +7,7 @@
     
     try:
         from fastmcp import FastMCP
+
         from fabric_rti_mcp.server import register_tools
         
         print("✓ Imports successful")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py:before	2025-08-25 15:39:51.067467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py:after	2025-08-25 15:40:09.405319
@@ -9,7 +9,7 @@
         import json
         import uuid
         from datetime import datetime
-        from typing import Dict, List, Optional, Any, Union
+        from typing import Any, Dict, List, Optional, Union
         print("✓ Basic imports successful")
     except Exception as e:
         print(f"✗ Basic imports failed: {e}")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py:before	2025-08-25 15:39:51.069468
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py:after	2025-08-25 15:40:09.411179
@@ -3,15 +3,17 @@
 Demo script showing the exact HTTP REST API payload for TestMCPSampleBikes eventstream
 """
 
+import base64
 import json
-import base64
+
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
-    eventstream_start_definition,
-    eventstream_add_sample_data_source, 
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
-    eventstream_get_current_definition
+    eventstream_add_sample_data_source,
+    eventstream_get_current_definition,
+    eventstream_start_definition,
 )
+
 
 def show_rest_api_payload():
     print("=== Building TestMCPSampleBikes Eventstream ===\n")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py:before	2025-08-25 15:39:51.069468
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py:after	2025-08-25 15:40:09.415234
@@ -4,12 +4,14 @@
 """
 
 import json
+
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
+    eventstream_add_default_stream,
+    eventstream_add_sample_data_source,
+    eventstream_get_current_definition,
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
-    eventstream_add_default_stream,
-    eventstream_get_current_definition
 )
+
 
 def test_default_stream_naming():
     print("Testing default stream naming convention...")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py:before	2025-08-25 15:39:51.069468
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py:after	2025-08-25 15:40:09.421245
@@ -4,8 +4,9 @@
 Tests the builder workflow end-to-end
 """
 
+import os
 import sys
-import os
+
 sys.path.insert(0, os.path.abspath('.'))
 
 from fabric_rti_mcp.eventstream import eventstream_builder_service as builder
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py:before	2025-08-25 15:39:51.070467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py:after	2025-08-25 15:40:09.423930
@@ -2,6 +2,7 @@
 """Test individual imports to isolate the hanging issue."""
 
 import sys
+
 
 def test_import(module_name, description):
     """Test importing a module."""
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py:before	2025-08-25 15:39:51.067467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py:after	2025-08-25 15:40:09.430029
@@ -5,14 +5,15 @@
 """
 
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
+    eventstream_add_derived_stream,
+    eventstream_add_sample_data_source,
+    eventstream_create_from_definition,
+    eventstream_get_current_definition,
+    eventstream_list_available_components,
     eventstream_start_definition,
-    eventstream_get_current_definition,
-    eventstream_add_sample_data_source,
-    eventstream_add_derived_stream,
     eventstream_validate_definition,
-    eventstream_create_from_definition,
-    eventstream_list_available_components
 )
+
 
 def build_eventstream_step_by_step():
     """Build the TestMCPSampleBikes22 eventstream step by step"""
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py:before	2025-08-25 15:39:51.069468
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py:after	2025-08-25 15:40:09.439754
@@ -4,9 +4,10 @@
 Tests key components and functionality
 """
 
+import os
 import sys
-import os
 from typing import List
+
 
 def test_imports() -> bool:
     """Test that all required modules can be imported"""
@@ -34,7 +35,7 @@
     print("\n🔧 Testing MCP tools registration...")
     try:
         from fabric_rti_mcp.server import mcp
-        
+
         # Get list of tools
         tools = mcp.list_tools()
         print(f"✅ Found {len(tools)} registered tools:")
@@ -118,11 +119,11 @@
     
     try:
         from fabric_rti_mcp.eventstream.eventstream_builder_service import (
+            eventstream_get_current_definition,
+            eventstream_list_available_components,
             eventstream_start_definition,
-            eventstream_get_current_definition,
-            eventstream_list_available_components
         )
-        
+
         # Test 1: Start a definition
         print("  Testing eventstream_start_definition...")
         result = eventstream_start_definition("test-stream", "Test eventstream for sanity check")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py:before	2025-08-25 15:39:51.070467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py:after	2025-08-25 15:40:09.442321
@@ -1,10 +1,11 @@
 #!/usr/bin/env python3
 """Simple server test - runs the server briefly to check for startup errors."""
 
+import signal
 import sys
-import signal
 import threading
 import time
+
 
 def timeout_handler():
     """Exit after a few seconds to prevent hanging."""
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py:before	2025-08-25 15:39:51.068468
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py:after	2025-08-25 15:40:09.445231
@@ -6,7 +6,8 @@
 import json
 import uuid
 from datetime import datetime
-from typing import Dict, Any, Optional
+from typing import Any, Dict, Optional
+
 
 def create_fixed_eventstream_payload(
     eventstream_name: str,
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py:before	2025-08-25 15:39:51.067467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py:after	2025-08-25 15:40:09.447440
@@ -5,14 +5,16 @@
 """
 
 import json
+
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
-    eventstream_start_definition,
-    eventstream_add_sample_data_source, 
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
+    eventstream_add_sample_data_source,
     eventstream_get_current_definition,
-    eventstream_validate_definition
+    eventstream_start_definition,
+    eventstream_validate_definition,
 )
+
 
 def main():
     print("=== Building Eventstream: TestMCPSampleBikes ===\n")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py:before	2025-08-25 15:39:51.070467
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py:after	2025-08-25 15:40:09.451556
@@ -2,6 +2,7 @@
 """Test each import step by step to find the hanging point."""
 
 import sys
+
 
 def test_import_chain():
     """Test the import chain step by step."""
@@ -10,7 +11,7 @@
         print("1. Testing basic imports...")
         import uuid
         from datetime import datetime
-        from typing import Dict, List, Optional, Any
+        from typing import Any, Dict, List, Optional
         print("   ✓ Basic imports OK")
         
         print("2. Testing fabric_rti_mcp.common...")
Skipped 3 files

❌ Black checks failed

--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/decode_working_eventstream.py	2025-08-25 15:39:51.067467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/decode_working_eventstream.py	2025-08-25 15:40:10.119650+00:00
@@ -13,26 +13,26 @@
 
 platform_payload = "ewogICIkc2NoZW1hIjogImh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vanNvbi1zY2hlbWFzL2ZhYnJpYy9naXRJbnRlZ3JhdGlvbi9wbGF0Zm9ybVByb3BlcnRpZXMvMi4wLjAvc2NoZW1hLmpzb24iLAogICJtZXRhZGF0YSI6IHsKICAgICJ0eXBlIjogIkV2ZW50c3RyZWFtIiwKICAgICJkaXNwbGF5TmFtZSI6ICJFdmVudHN0cmVhbU1DUFNhbXBsZUJpa2VzIiwKICAgICJkZXNjcmlwdGlvbiI6ICJFdmVudHN0cmVhbSB3aXRoIEJpY3ljbGVzIHNhbXBsZSBkYXRhIHNvdXJjZSBhbmQgcHJvY2Vzc2luZyBzdHJlYW1zIgogIH0sCiAgImNvbmZpZyI6IHsKICAgICJ2ZXJzaW9uIjogIjIuMCIsCiAgICAibG9naWNhbElkIjogIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIKICB9Cn0="
 
 print("=== EVENTSTREAM.JSON ===")
 try:
-    decoded = base64.b64decode(eventstream_payload).decode('utf-8')
+    decoded = base64.b64decode(eventstream_payload).decode("utf-8")
     parsed = json.loads(decoded)
     print(json.dumps(parsed, indent=2))
 except Exception as e:
     print(f"Error decoding eventstream.json: {e}")
 
 print("\n=== EVENTSTREAMPROPERTIES.JSON ===")
 try:
-    decoded = base64.b64decode(properties_payload).decode('utf-8')
+    decoded = base64.b64decode(properties_payload).decode("utf-8")
     parsed = json.loads(decoded)
     print(json.dumps(parsed, indent=2))
 except Exception as e:
     print(f"Error decoding eventstreamProperties.json: {e}")
 
 print("\n=== .PLATFORM ===")
 try:
-    decoded = base64.b64decode(platform_payload).decode('utf-8')
+    decoded = base64.b64decode(platform_payload).decode("utf-8")
     parsed = json.loads(decoded)
     print(json.dumps(parsed, indent=2))
 except Exception as e:
     print(f"Error decoding .platform: {e}")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/decode_working_eventstream.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py	2025-08-25 15:39:51.067467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py	2025-08-25 15:40:10.132951+00:00
@@ -1,70 +1,80 @@
 #!/usr/bin/env python3
 """Minimal test to isolate the eventstream_builder_service import issue."""
 
+
 def test_step_by_step():
     """Test imports step by step to find where it fails."""
-    
+
     print("Step 1: Testing basic imports...")
     try:
         import json
         import uuid
         from datetime import datetime
         from typing import Dict, List, Optional, Any, Union
+
         print("✓ Basic imports successful")
     except Exception as e:
         print(f"✗ Basic imports failed: {e}")
         return False
-    
+
     print("Step 2: Testing fabric_rti_mcp.common...")
     try:
         from fabric_rti_mcp.common import logger
+
         print("✓ Common module import successful")
     except Exception as e:
         print(f"✗ Common module import failed: {e}")
         return False
-    
+
     print("Step 3: Testing eventstream_service import...")
     try:
         from fabric_rti_mcp.eventstream import eventstream_service
+
         print("✓ eventstream_service module import successful")
     except Exception as e:
         print(f"✗ eventstream_service module import failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     print("Step 4: Testing specific function import...")
     try:
         from fabric_rti_mcp.eventstream.eventstream_service import eventstream_create
+
         print("✓ eventstream_create function import successful")
     except Exception as e:
         print(f"✗ eventstream_create function import failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     print("Step 5: Testing eventstream_builder_service import...")
     try:
         from fabric_rti_mcp.eventstream import eventstream_builder_service
+
         print("✓ eventstream_builder_service module import successful")
     except Exception as e:
         print(f"✗ eventstream_builder_service module import failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     print("Step 6: Testing specific function access...")
     try:
         func = eventstream_builder_service.eventstream_start_definition
         print(f"✓ eventstream_start_definition function found: {func}")
         return True
     except Exception as e:
         print(f"✗ eventstream_start_definition function not found: {e}")
         print(f"Available attributes: {dir(eventstream_builder_service)}")
         return False
 
+
 if __name__ == "__main__":
     print("=== Eventstream Builder Service Import Test ===")
     success = test_step_by_step()
     if success:
         print("\n✅ All imports successful!")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py	2025-08-25 15:39:51.067467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py	2025-08-25 15:40:10.134088+00:00
@@ -5,74 +5,66 @@
 """
 
 import json
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
+    eventstream_add_sample_data_source,
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
     eventstream_get_current_definition,
-    eventstream_validate_definition
+    eventstream_validate_definition,
 )
+
 
 def main():
     print("=== Building Eventstream: TestMCPSampleBikes ===\n")
-    
+
     # Step 1: Start the definition
     print("Step 1: Starting definition...")
     session = eventstream_start_definition(
-        'TestMCPSampleBikes', 
-        'Simple eventstream for bicycle sample data with derived stream'
+        "TestMCPSampleBikes", "Simple eventstream for bicycle sample data with derived stream"
     )
-    session_id = session['session_id']
+    session_id = session["session_id"]
     print(f"✅ Session started: {session_id}\n")
-    
+
     # Step 2: Add bicycle sample data source
     print("Step 2: Adding bicycle sample data source...")
-    source_result = eventstream_add_sample_data_source(
-        session_id, 
-        'BicycleSampleSource', 
-        'Bicycles'
-    )
+    source_result = eventstream_add_sample_data_source(session_id, "BicycleSampleSource", "Bicycles")
     print(f"✅ Added source: {source_result['source_added']}\n")
-    
+
     # Step 3: Add default stream to process the source data
     print("Step 3: Adding default stream...")
-    default_stream_result = eventstream_add_default_stream(
-        session_id, 
-        ['BicycleSampleSource']
-    )
+    default_stream_result = eventstream_add_default_stream(session_id, ["BicycleSampleSource"])
     print(f"✅ Added default stream: {default_stream_result['stream_added']}\n")
-    
+
     # Step 4: Add derived stream
     print("Step 4: Adding derived stream...")
     derived_stream_result = eventstream_add_derived_stream(
-        session_id, 
-        'SampleBikesDS', 
-        ['TestMCPSampleBikes-stream']  # Using the auto-generated default stream name
+        session_id, "SampleBikesDS", ["TestMCPSampleBikes-stream"]  # Using the auto-generated default stream name
     )
     print(f"✅ Added derived stream: {derived_stream_result['stream_added']}\n")
-    
+
     # Step 5: Get the final definition
     print("=== FINAL EVENTSTREAM DEFINITION ===")
     final_definition = eventstream_get_current_definition(session_id)
-    print(json.dumps(final_definition['definition'], indent=2))
+    print(json.dumps(final_definition["definition"], indent=2))
     print()
-    
+
     # Step 6: Validate
     print("=== VALIDATION RESULTS ===")
     validation = eventstream_validate_definition(session_id)
     print(f"✅ Is Valid: {validation['is_valid']}")
-    
-    if validation['errors']:
+
+    if validation["errors"]:
         print(f"❌ Errors: {validation['errors']}")
-    if validation['warnings']:
+    if validation["warnings"]:
         print(f"⚠️  Warnings: {validation['warnings']}")
-    
+
     print(f"\n📊 Summary:")
     print(f"   Sources: {validation['summary']['sources']}")
     print(f"   Streams: {validation['summary']['streams']} (1 default + 1 derived)")
     print(f"   Destinations: {validation['summary']['destinations']}")
     print(f"   Operators: {validation['summary']['operators']}")
 
+
 if __name__ == "__main__":
     main()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py	2025-08-25 15:39:51.067467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py	2025-08-25 15:40:10.172420+00:00
@@ -9,118 +9,113 @@
     eventstream_get_current_definition,
     eventstream_add_sample_data_source,
     eventstream_add_derived_stream,
     eventstream_validate_definition,
     eventstream_create_from_definition,
-    eventstream_list_available_components
+    eventstream_list_available_components,
 )
+
 
 def build_eventstream_step_by_step():
     """Build the TestMCPSampleBikes22 eventstream step by step"""
-    
+
     print("🚀 Building EventStream: TestMCPSampleBikes22")
     print("=" * 60)
-    
+
     # Configuration
     eventstream_name = "TestMCPSampleBikes22"
     workspace_id = "bff1ab3a-47f0-4b85-9226-509c4cfdda10"
     description = "EventStream with bicycle sample data and derived stream"
-    
+
     try:
         # STEP 1: Start the eventstream definition
         print("📋 STEP 1: Starting eventstream definition...")
-        session_result = eventstream_start_definition(
-            name=eventstream_name, 
-            description=description
-        )
-        session_id = session_result['session_id']
+        session_result = eventstream_start_definition(name=eventstream_name, description=description)
+        session_id = session_result["session_id"]
         print(f"✅ Started session: {session_id}")
         print(f"   Name: {session_result['name']}")
         print(f"   Status: {session_result['status']}")
         print()
-        
+
         # STEP 2: Add bicycle sample data source
         print("🚲 STEP 2: Adding bicycle sample data source...")
         source_result = eventstream_add_sample_data_source(
-            session_id=session_id,
-            source_name="BicycleDataSource",
-            sample_type="Bicycles"
+            session_id=session_id, source_name="BicycleDataSource", sample_type="Bicycles"
         )
         print(f"✅ Added data source: {source_result['source_added']}")
         print(f"   Type: {source_result['source_type']}")
         print(f"   Total sources: {source_result['sources_count']}")
         print()
-        
+
         # STEP 3: Default stream is automatically created
         print("🌊 STEP 3: Default stream automatically created with definition...")
         print(f"✅ Default stream available for derived streams")
         print(f"   Total streams: 1 (DefaultStream)")
         print()
-        
+
         # STEP 4: Add derived stream "SampleBikesDS"
         print("🔄 STEP 4: Adding derived stream 'SampleBikesDS'...")
         derived_stream_result = eventstream_add_derived_stream(
             session_id=session_id,
             stream_name="SampleBikesDS",
             source_stream=f"{eventstream_name}-stream",
-            transformation_query="| where isnotempty(BikeId) | extend ProcessedAt = now()"
+            transformation_query="| where isnotempty(BikeId) | extend ProcessedAt = now()",
         )
         print(f"✅ Added derived stream: {derived_stream_result['stream_added']}")
         print(f"   Source stream: {derived_stream_result['source_stream']}")
         print(f"   Total streams: {derived_stream_result['streams_count']}")
         print()
-        
+
         # STEP 5: Get current definition to review
         print("📄 STEP 5: Reviewing current definition...")
         current_def = eventstream_get_current_definition(session_id)
         print(f"✅ Current definition status: {current_def['status']}")
         print(f"   Sources: {len(current_def['definition']['sources'])}")
         print(f"   Streams: {len(current_def['definition']['streams'])}")
         print(f"   Last updated: {current_def['last_updated']}")
         print()
-        
+
         # STEP 6: Validate the definition
         print("🔍 STEP 6: Validating eventstream definition...")
         validation_result = eventstream_validate_definition(session_id)
         print(f"✅ Validation status: {validation_result['status']}")
-        if validation_result['status'] == 'valid':
+        if validation_result["status"] == "valid":
             print("   All components are properly configured")
             print("   Ready for creation!")
         else:
             print(f"   Issues found: {validation_result.get('issues', [])}")
         print()
-        
+
         # STEP 7: Create the eventstream (if validation passed)
-        if validation_result['status'] == 'valid':
+        if validation_result["status"] == "valid":
             print("🎯 STEP 7: Creating eventstream in Fabric workspace...")
-            creation_result = eventstream_create_from_definition(
-                session_id=session_id,
-                workspace_id=workspace_id
-            )
+            creation_result = eventstream_create_from_definition(session_id=session_id, workspace_id=workspace_id)
             print(f"✅ Creation status: {creation_result['status']}")
-            if 'item_id' in creation_result:
+            if "item_id" in creation_result:
                 print(f"   Item ID: {creation_result['item_id']}")
-            if 'message' in creation_result:
+            if "message" in creation_result:
                 print(f"   Message: {creation_result['message']}")
         else:
             print("❌ STEP 7: Skipping creation due to validation issues")
-        
+
         print()
         print("🎉 EVENTSTREAM BUILD COMPLETE!")
         print("=" * 60)
         print(f"EventStream: {eventstream_name}")
         print(f"Workspace: {workspace_id}")
         print(f"Data Source: Bicycle sample data")
         print(f"Default Stream: {eventstream_name}-stream")
         print(f"Derived Stream: SampleBikesDS")
         print("=" * 60)
-        
+
         return session_id
-        
+
     except Exception as e:
         print(f"❌ Error during eventstream building: {e}")
         import traceback
+
         traceback.print_exc()
         return None
 
+
 if __name__ == "__main__":
     build_eventstream_step_by_step()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/quick_check.py	2025-08-25 15:39:51.069468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/quick_check.py	2025-08-25 15:40:10.257700+00:00
@@ -1,48 +1,57 @@
 #!/usr/bin/env python3
 """
 Quick sanity check for builder tools
 """
 
+
 def quick_check():
     print("🔍 Quick Builder Tools Check")
     print("=" * 40)
-    
+
     # Test imports
     try:
         from fabric_rti_mcp.server import mcp
+
         print("✅ Server imported")
-        
+
         tools = mcp.list_tools()
-        builder_tools = [t.name for t in tools if 'eventstream' in t.name and any(k in t.name for k in ['add_', 'start_', 'validate_', 'create_from_', 'clear_'])]
-        
+        builder_tools = [
+            t.name
+            for t in tools
+            if "eventstream" in t.name
+            and any(k in t.name for k in ["add_", "start_", "validate_", "create_from_", "clear_"])
+        ]
+
         print(f"✅ Found {len(tools)} total tools")
         print(f"✅ Found {len(builder_tools)} builder tools")
-        
+
         expected_builders = [
             "eventstream_start_definition",
-            "eventstream_add_sample_data_source", 
+            "eventstream_add_sample_data_source",
             "eventstream_validate_definition",
-            "eventstream_create_from_definition"
+            "eventstream_create_from_definition",
         ]
-        
+
         print("\n🏗️ Key Builder Tools:")
         for tool in expected_builders:
             status = "✅" if tool in builder_tools else "❌"
             print(f"  {status} {tool}")
-        
+
         # Test basic functionality
         print("\n🧪 Testing basic functionality:")
         from fabric_rti_mcp.eventstream.eventstream_builder_service import eventstream_start_definition
+
         result = eventstream_start_definition("test", "test description")
-        if 'session_id' in result:
+        if "session_id" in result:
             print("✅ Builder functionality works")
         else:
             print("❌ Builder functionality failed")
-            
+
         print(f"\n🎉 Builder tools ready: {len(builder_tools)}/12 expected tools available")
-        
+
     except Exception as e:
         print(f"❌ Error: {e}")
 
+
 if __name__ == "__main__":
     quick_check()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/quick_check.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py	2025-08-25 15:39:51.068468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py	2025-08-25 15:40:10.317828+00:00
@@ -6,152 +6,105 @@
 import json
 import uuid
 from datetime import datetime
 from typing import Dict, Any, Optional
 
+
 def create_fixed_eventstream_payload(
-    eventstream_name: str,
-    definition: Dict[str, Any],
-    description: Optional[str] = None
+    eventstream_name: str, definition: Dict[str, Any], description: Optional[str] = None
 ) -> Dict[str, Any]:
     """
     Create properly formatted eventstream payload with all three required parts.
-    
+
     :param eventstream_name: Name of the eventstream
     :param definition: Eventstream definition dictionary
     :param description: Optional description
     :return: Complete API payload
     """
-    
+
     # 1. Prepare eventstream.json (main definition)
     definition_json = json.dumps(definition)
     definition_b64 = base64.b64encode(definition_json.encode("utf-8")).decode("utf-8")
-    
+
     # 2. Prepare eventstreamProperties.json (retention and throughput settings)
-    properties = {
-        "retentionTimeInDays": 1,
-        "eventThroughputLevel": "Low"
-    }
+    properties = {"retentionTimeInDays": 1, "eventThroughputLevel": "Low"}
     properties_json = json.dumps(properties)
     properties_b64 = base64.b64encode(properties_json.encode("utf-8")).decode("utf-8")
-    
+
     # 3. Prepare .platform (metadata and config)
     platform_metadata = {
         "$schema": "https://developer.microsoft.com/json-schemas/fabric/gitIntegration/platformProperties/2.0.0/schema.json",
-        "metadata": {
-            "type": "Eventstream",
-            "displayName": eventstream_name,
-            "description": description or ""
-        },
-        "config": {
-            "version": "2.0",
-            "logicalId": "00000000-0000-0000-0000-000000000000"
-        }
+        "metadata": {"type": "Eventstream", "displayName": eventstream_name, "description": description or ""},
+        "config": {"version": "2.0", "logicalId": "00000000-0000-0000-0000-000000000000"},
     }
     platform_json = json.dumps(platform_metadata)
     platform_b64 = base64.b64encode(platform_json.encode("utf-8")).decode("utf-8")
-    
+
     # Create the complete payload
     payload = {
         "displayName": eventstream_name,
         "type": "Eventstream",
         "description": description or "",
         "definition": {
             "parts": [
-                {
-                    "path": "eventstream.json",
-                    "payload": definition_b64,
-                    "payloadType": "InlineBase64"
-                },
-                {
-                    "path": "eventstreamProperties.json",
-                    "payload": properties_b64,
-                    "payloadType": "InlineBase64"
-                },
-                {
-                    "path": ".platform",
-                    "payload": platform_b64,
-                    "payloadType": "InlineBase64"
-                }
+                {"path": "eventstream.json", "payload": definition_b64, "payloadType": "InlineBase64"},
+                {"path": "eventstreamProperties.json", "payload": properties_b64, "payloadType": "InlineBase64"},
+                {"path": ".platform", "payload": platform_b64, "payloadType": "InlineBase64"},
             ]
-        }
+        },
     }
-    
+
     return payload
 
 
 def create_test_bikes_definition() -> Dict[str, Any]:
     """
     Create the TestMCPSampleBikes22 eventstream definition.
     """
-    
+
     # Generate UUIDs for all components
     source_id = str(uuid.uuid4())
     default_stream_id = str(uuid.uuid4())
     derived_stream_id = str(uuid.uuid4())
-    
+
     definition = {
         "sources": [
-            {
-                "id": source_id,
-                "name": "BicycleDataSource",
-                "type": "SampleData",
-                "properties": {
-                    "type": "Bicycles"
-                }
-            }
+            {"id": source_id, "name": "BicycleDataSource", "type": "SampleData", "properties": {"type": "Bicycles"}}
         ],
         "streams": [
             {
                 "id": default_stream_id,
                 "name": "TestMCPSampleBikes22-stream",
                 "type": "DefaultStream",
                 "properties": {},
-                "inputNodes": [
-                    {
-                        "name": "BicycleDataSource"
-                    }
-                ]
+                "inputNodes": [{"name": "BicycleDataSource"}],
             },
             {
                 "id": derived_stream_id,
                 "name": "SampleBikesDS",
                 "type": "DerivedStream",
-                "properties": {
-                    "inputSerialization": {
-                        "type": "Json",
-                        "properties": {
-                            "encoding": "UTF8"
-                        }
-                    }
-                },
-                "inputNodes": [
-                    {
-                        "name": "TestMCPSampleBikes22-stream"
-                    }
-                ]
-            }
+                "properties": {"inputSerialization": {"type": "Json", "properties": {"encoding": "UTF8"}}},
+                "inputNodes": [{"name": "TestMCPSampleBikes22-stream"}],
+            },
         ],
         "destinations": [],
         "operators": [],
-        "compatibilityLevel": "1.0"
+        "compatibilityLevel": "1.0",
     }
-    
+
     return definition
 
 
 # Test the fixed format
 if __name__ == "__main__":
     definition = create_test_bikes_definition()
     payload = create_fixed_eventstream_payload(
-        "TestMCPSampleBikes22",
-        definition,
-        "Eventstream with Bicycles sample data and derived stream SampleBikesDS"
+        "TestMCPSampleBikes22", definition, "Eventstream with Bicycles sample data and derived stream SampleBikesDS"
     )
-    
+
     print("=== FIXED PAYLOAD STRUCTURE ===")
     print(f"Parts count: {len(payload['definition']['parts'])}")
-    for i, part in enumerate(payload['definition']['parts']):
+    for i, part in enumerate(payload["definition"]["parts"]):
         print(f"Part {i+1}: {part['path']}")
-    
+
     print("\n=== DEFINITION STRUCTURE ===")
     print(json.dumps(definition, indent=2))
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_auto_connection.py	2025-08-25 15:39:51.069468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_auto_connection.py	2025-08-25 15:40:10.326379+00:00
@@ -1,42 +1,44 @@
 #!/usr/bin/env python3
 """
 Quick test to verify auto-connection logic works as expected
 """
 
+
 def test_auto_connection_logic():
     """Test the auto-connection logic in isolation"""
-    
+
     # Simulate the condition from our function
     input_nodes = []  # Empty list passed from MCP
     stream_names = ["TestFinalFix-stream"]  # One default stream exists
     operator_names = []  # No operators
-    
+
     print(f"Initial state:")
     print(f"  input_nodes: {input_nodes}")
     print(f"  stream_names: {stream_names}")
     print(f"  operator_names: {operator_names}")
     print()
-    
+
     # Test the auto-connection logic
     if not input_nodes:  # This handles both None and empty list []
         print("Auto-connection check triggered (input_nodes is falsy)")
-        
+
         # Auto-connect logic: if only one stream and no operators, connect to that stream
         if len(stream_names) == 1 and len(operator_names) == 0:
             input_nodes = stream_names.copy()  # Use copy to avoid reference issues
             print(f"Auto-connecting to default stream '{stream_names[0]}'")
         else:
             print(f"Multiple streams/operators exist - auto-connection not allowed")
-            
+
     print(f"Final input_nodes: {input_nodes}")
-    
+
     # Test the inputNodes creation
     final_input_nodes = [{"name": node} for node in input_nodes]
     print(f"Final inputNodes structure: {final_input_nodes}")
-    
+
     return final_input_nodes
+
 
 if __name__ == "__main__":
     print("Testing auto-connection logic...")
     result = test_auto_connection_logic()
     print(f"\nExpected result: [{'name': 'TestFinalFix-stream'}]")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_auto_connection.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py	2025-08-25 15:39:51.069468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py	2025-08-25 15:40:10.329687+00:00
@@ -5,83 +5,79 @@
 
 import json
 import base64
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
+    eventstream_add_sample_data_source,
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
-    eventstream_get_current_definition
+    eventstream_get_current_definition,
 )
+
 
 def show_rest_api_payload():
     print("=== Building TestMCPSampleBikes Eventstream ===\n")
-    
+
     # Build the eventstream definition using the builder
-    session = eventstream_start_definition('TestMCPSampleBikes', 'Simple eventstream for bicycle sample data with derived stream')
-    session_id = session['session_id']
-    
+    session = eventstream_start_definition(
+        "TestMCPSampleBikes", "Simple eventstream for bicycle sample data with derived stream"
+    )
+    session_id = session["session_id"]
+
     # Add components
-    eventstream_add_sample_data_source(session_id, 'BicycleSampleSource', 'Bicycles')
-    eventstream_add_default_stream(session_id, ['BicycleSampleSource'])
-    eventstream_add_derived_stream(session_id, 'SampleBikesDS', ['TestMCPSampleBikes-stream'])
-    
+    eventstream_add_sample_data_source(session_id, "BicycleSampleSource", "Bicycles")
+    eventstream_add_default_stream(session_id, ["BicycleSampleSource"])
+    eventstream_add_derived_stream(session_id, "SampleBikesDS", ["TestMCPSampleBikes-stream"])
+
     # Get the final definition
     final_definition = eventstream_get_current_definition(session_id)
-    eventstream_definition = final_definition['definition']
-    
+    eventstream_definition = final_definition["definition"]
+
     print("=== EVENTSTREAM DEFINITION (what gets base64 encoded) ===")
     definition_json = json.dumps(eventstream_definition, indent=2)
     print(definition_json)
-    
+
     # Encode as base64 (like the service does)
     definition_b64 = base64.b64encode(definition_json.encode("utf-8")).decode("utf-8")
-    
+
     # Build the complete HTTP payload
     workspace_id = "bff1ab3a-47f0-4b85-9226-509c4cfdda10"
-    eventstream_name = session['name']
-    description = session['description']
-    
+    eventstream_name = session["name"]
+    description = session["description"]
+
     http_payload = {
         "displayName": eventstream_name,
-        "type": "Eventstream", 
+        "type": "Eventstream",
         "description": description,
         "definition": {
             "parts": [
-                {
-                    "path": "eventstream.json",
-                    "payload": definition_b64,
-                    "payloadType": "InlineBase64"
-                },
-                {
-                    "path": ".platform", 
-                    "payload": definition_b64,
-                    "payloadType": "InlineBase64"
-                }
+                {"path": "eventstream.json", "payload": definition_b64, "payloadType": "InlineBase64"},
+                {"path": ".platform", "payload": definition_b64, "payloadType": "InlineBase64"},
             ]
-        }
+        },
     }
-    
-    print("\n" + "="*60)
+
+    print("\n" + "=" * 60)
     print("=== COMPLETE HTTP REST API PAYLOAD ===")
     print(f"Method: POST")
     print(f"URL: https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/items")
     print(f"Headers: Authorization: Bearer <token>, Content-Type: application/json")
     print("\nPayload (JSON):")
     print(json.dumps(http_payload, indent=2))
-    
-    print("\n" + "="*60) 
+
+    print("\n" + "=" * 60)
     print("=== BASE64 DECODED DEFINITION (for reference) ===")
     print("The 'payload' field above contains this definition (base64 encoded):")
     print(definition_json)
-    
-    print("\n" + "="*60)
+
+    print("\n" + "=" * 60)
     print("=== SUMMARY ===")
     print(f"✅ Eventstream Name: {eventstream_name}")
-    print(f"✅ Target Workspace: {workspace_id}")  
+    print(f"✅ Target Workspace: {workspace_id}")
     print(f"✅ Description: {description}")
     print(f"✅ Definition Size: {len(definition_json)} characters")
     print(f"✅ Base64 Payload Size: {len(definition_b64)} characters")
     print(f"✅ Components: 1 source, 2 streams (1 default + 1 derived), 0 destinations")
 
+
 if __name__ == "__main__":
     show_rest_api_payload()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py	2025-08-25 15:39:51.069468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py	2025-08-25 15:40:10.354724+00:00
@@ -4,46 +4,48 @@
 """
 
 import json
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
+    eventstream_add_sample_data_source,
     eventstream_add_default_stream,
-    eventstream_get_current_definition
+    eventstream_get_current_definition,
 )
+
 
 def test_default_stream_naming():
     print("Testing default stream naming convention...")
-    
+
     # Start with an eventstream named "TestMCPSampleBikes"
-    session = eventstream_start_definition('TestMCPSampleBikes', 'Test eventstream')
-    session_id = session['session_id']
+    session = eventstream_start_definition("TestMCPSampleBikes", "Test eventstream")
+    session_id = session["session_id"]
     print(f"✅ Started session for eventstream: {session['name']}")
-    
+
     # Add a source
-    eventstream_add_sample_data_source(session_id, 'BicycleSource', 'Bicycles')
+    eventstream_add_sample_data_source(session_id, "BicycleSource", "Bicycles")
     print("✅ Added sample data source")
-    
+
     # Add default stream (no stream name parameter - should auto-generate)
-    result = eventstream_add_default_stream(session_id, ['BicycleSource'])
+    result = eventstream_add_default_stream(session_id, ["BicycleSource"])
     print(f"✅ Added default stream: {result['stream_added']}")
-    
+
     # Get the current definition to verify the stream name
     definition = eventstream_get_current_definition(session_id)
-    
-    streams = definition['definition']['streams']
+
+    streams = definition["definition"]["streams"]
     if len(streams) == 1:
-        stream_name = streams[0]['name']
-        expected_name = 'TestMCPSampleBikes-stream'
-        
+        stream_name = streams[0]["name"]
+        expected_name = "TestMCPSampleBikes-stream"
+
         if stream_name == expected_name:
             print(f"✅ PASS: Default stream named correctly: '{stream_name}'")
         else:
             print(f"❌ FAIL: Expected '{expected_name}', got '{stream_name}'")
     else:
         print(f"❌ FAIL: Expected 1 stream, got {len(streams)}")
-    
+
     print("\nGenerated definition:")
-    print(json.dumps(definition['definition'], indent=2))
+    print(json.dumps(definition["definition"], indent=2))
+
 
 if __name__ == "__main__":
     test_default_stream_naming()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py	2025-08-25 15:40:10.366831+00:00
@@ -1,58 +1,66 @@
 #!/usr/bin/env python3
 """Test each import step by step to find the hanging point."""
 
 import sys
 
+
 def test_import_chain():
     """Test the import chain step by step."""
-    
+
     try:
         print("1. Testing basic imports...")
         import uuid
         from datetime import datetime
         from typing import Dict, List, Optional, Any
+
         print("   ✓ Basic imports OK")
-        
+
         print("2. Testing fabric_rti_mcp.common...")
         from fabric_rti_mcp.common import logger
+
         print("   ✓ Common module OK")
-        
+
         print("3. Testing other eventstream modules...")
-        
+
         print("3a. Testing eventstream_connection...")
         from fabric_rti_mcp.eventstream import eventstream_connection
+
         print("   ✓ eventstream_connection OK")
-        
+
         print("3b. Testing eventstream_service...")
         from fabric_rti_mcp.eventstream import eventstream_service
+
         print("   ✓ eventstream_service OK")
-        
+
         print("4. Testing eventstream_builder_service directly...")
         # Let's try to import the file content step by step
-        sys.path.insert(0, 'fabric_rti_mcp/eventstream')
-        
+        sys.path.insert(0, "fabric_rti_mcp/eventstream")
+
         print("4a. Trying direct import...")
         import eventstream_builder_service
+
         print("   ✓ Direct import OK")
-        
+
         print("4b. Checking for function...")
-        has_func = hasattr(eventstream_builder_service, 'eventstream_start_definition')
+        has_func = hasattr(eventstream_builder_service, "eventstream_start_definition")
         print(f"   Has function: {has_func}")
-        
+
         if not has_func:
             print("   Available attributes:")
             for attr in dir(eventstream_builder_service):
-                if not attr.startswith('_') and callable(getattr(eventstream_builder_service, attr)):
+                if not attr.startswith("_") and callable(getattr(eventstream_builder_service, attr)):
                     print(f"     - {attr}")
-        
+
         return has_func
-        
+
     except Exception as e:
         print(f"ERROR at step: {e}")
         import traceback
+
         traceback.print_exc()
         return False
+
 
 if __name__ == "__main__":
     print("=== Import Chain Test ===")
     test_import_chain()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py	2025-08-25 15:40:10.381994+00:00
@@ -1,9 +1,10 @@
 #!/usr/bin/env python3
 """Test individual imports to isolate the hanging issue."""
 
 import sys
+
 
 def test_import(module_name, description):
     """Test importing a module."""
     try:
         print(f"Testing {description}...")
@@ -11,10 +12,11 @@
         print(f"✓ {description} import successful")
         return True
     except Exception as e:
         print(f"✗ {description} import error: {e}")
         return False
+
 
 # Test basic imports first
 test_import("logging", "logging")
 test_import("sys", "sys")
 test_import("os", "os")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_import.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_import.py	2025-08-25 15:40:10.407708+00:00
@@ -3,34 +3,40 @@
 
 print("Testing basic MCP import...")
 
 try:
     import mcp
+
     print("✓ mcp import successful")
     print(f"  mcp version: {getattr(mcp, '__version__', 'unknown')}")
 except Exception as e:
     print(f"✗ mcp import failed: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTesting fastmcp import...")
 
 try:
     import fastmcp
-    print("✓ fastmcp import successful") 
+
+    print("✓ fastmcp import successful")
     print(f"  fastmcp version: {getattr(fastmcp, '__version__', 'unknown')}")
 except Exception as e:
     print(f"✗ fastmcp import failed: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTesting FastMCP class import...")
 
 try:
     from mcp.server.fastmcp import FastMCP
+
     print("✓ FastMCP class import successful")
 except Exception as e:
     print(f"✗ FastMCP class import failed: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTest completed.")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_import.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_fixed.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_fixed.py	2025-08-25 15:40:10.414532+00:00
@@ -1,79 +1,90 @@
 #!/usr/bin/env python3
 """Test script to verify all MCP imports work correctly."""
+
 
 def test_basic_imports():
     """Test that all required imports work."""
     print("Testing basic imports...")
-    
+
     # Test FastMCP import
     try:
         from fastmcp import FastMCP
+
         print("✓ FastMCP import successful")
     except Exception as e:
         print(f"✗ FastMCP import failed: {e}")
         return False
-    
+
     # Test fabric_rti_mcp imports
     try:
         from fabric_rti_mcp import __version__
+
         print(f"✓ fabric_rti_mcp version: {__version__}")
     except Exception as e:
         print(f"✗ fabric_rti_mcp import failed: {e}")
         return False
-    
+
     # Test common module
     try:
         from fabric_rti_mcp.common import logger
+
         print("✓ fabric_rti_mcp.common import successful")
     except Exception as e:
         print(f"✗ fabric_rti_mcp.common import failed: {e}")
         return False
-    
+
     # Test kusto tools
     try:
         from fabric_rti_mcp.kusto import kusto_tools
+
         print("✓ kusto_tools import successful")
     except Exception as e:
         print(f"✗ kusto_tools import failed: {e}")
         return False
-    
+
     # Test eventstream tools
     try:
         from fabric_rti_mcp.eventstream import eventstream_tools
+
         print("✓ eventstream_tools import successful")
     except Exception as e:
         print(f"✗ eventstream_tools import failed: {e}")
         return False
-    
+
     return True
+
 
 def test_server_creation():
     """Test creating a FastMCP server instance."""
     print("\nTesting server creation...")
-    
+
     try:
         from fastmcp import FastMCP
+
         mcp = FastMCP("test-server")
         print("✓ FastMCP server instance created successfully")
         return True
     except Exception as e:
         print(f"✗ FastMCP server creation failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
 
+
 def main():
     print("=== MCP Server Import Test ===")
-    
+
     if not test_basic_imports():
         print("\n❌ Basic imports failed!")
         return
-    
+
     if not test_server_creation():
         print("\n❌ Server creation failed!")
         return
-    
+
     print("\n✅ All tests passed! The MCP server should start successfully.")
+
 
 if __name__ == "__main__":
     main()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_fixed.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py	2025-08-25 15:40:10.427593+00:00
@@ -1,33 +1,36 @@
 #!/usr/bin/env python3
 """Test server startup by importing and checking tool registration."""
+
 
 def test_server_startup():
     """Test that the server can start and register tools without errors."""
     print("Testing MCP server startup...")
-    
+
     try:
         from fastmcp import FastMCP
         from fabric_rti_mcp.server import register_tools
-        
+
         print("✓ Imports successful")
-        
+
         # Create test MCP instance
         mcp = FastMCP("test-server")
         print("✓ FastMCP instance created")
-        
+
         # Try to register tools
         register_tools(mcp)
         print("✓ Tools registered successfully")
-        
+
         print("\n🎉 MCP server startup test PASSED!")
         print("The server should now work with VS Code.")
         return True
-        
+
     except Exception as e:
         print(f"❌ Server startup test FAILED: {e}")
         import traceback
+
         traceback.print_exc()
         return False
 
+
 if __name__ == "__main__":
     test_server_startup()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_import.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_import.py	2025-08-25 15:40:10.437583+00:00
@@ -2,30 +2,36 @@
 """Test script to check server import issues."""
 
 try:
     print("Testing fabric_rti_mcp.server import...")
     import fabric_rti_mcp.server
+
     print("✓ Server import successful")
 except Exception as e:
     print(f"✗ Import error: {e}")
     import traceback
+
     traceback.print_exc()
 
 try:
     print("\nTesting eventstream_builder_service import...")
     import fabric_rti_mcp.eventstream.eventstream_builder_service
+
     print("✓ Builder service import successful")
 except Exception as e:
     print(f"✗ Builder service import error: {e}")
     import traceback
+
     traceback.print_exc()
 
 try:
     print("\nTesting eventstream_tools import...")
     import fabric_rti_mcp.eventstream.eventstream_tools
+
     print("✓ Eventstream tools import successful")
 except Exception as e:
     print(f"✗ Eventstream tools import error: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTesting complete.")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_import.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py	2025-08-25 15:40:10.452090+00:00
@@ -4,36 +4,41 @@
 import sys
 import signal
 import threading
 import time
 
+
 def timeout_handler():
     """Exit after a few seconds to prevent hanging."""
     time.sleep(3)
     print("\n⏰ Test timeout - server appears to be working!")
     sys.exit(0)
 
+
 def main():
     print("Testing MCP server startup...")
-    
+
     # Start timeout thread
     timeout_thread = threading.Thread(target=timeout_handler, daemon=True)
     timeout_thread.start()
-    
+
     try:
         # Import and run the server main function
         from fabric_rti_mcp.server import main as server_main
+
         print("✓ Server import successful")
         print("🚀 Starting server (will auto-exit after 3 seconds)...")
         server_main()
     except KeyboardInterrupt:
         print("\n🛑 Server interrupted")
     except Exception as e:
         print(f"\n❌ Server startup failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     return True
+
 
 if __name__ == "__main__":
     main()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py	2025-08-25 15:39:51.069468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py	2025-08-25 15:40:10.451761+00:00
@@ -6,211 +6,233 @@
 
 import sys
 import os
 from typing import List
 
+
 def test_imports() -> bool:
     """Test that all required modules can be imported"""
     print("🧪 Testing imports...")
     try:
         import fabric_rti_mcp
+
         print(f"✅ fabric_rti_mcp version: {fabric_rti_mcp.__version__}")
-        
+
         from fabric_rti_mcp.server import mcp
+
         print("✅ Server module imported")
-        
+
         from fabric_rti_mcp.kusto import kusto_service, kusto_tools
+
         print("✅ Kusto modules imported")
-        
+
         from fabric_rti_mcp.eventstream import eventstream_service, eventstream_tools
+
         print("✅ Eventstream modules imported")
-        
+
         return True
     except Exception as e:
         print(f"❌ Import failed: {e}")
         return False
+
 
 def test_mcp_tools() -> bool:
     """Test MCP tools registration"""
     print("\n🔧 Testing MCP tools registration...")
     try:
         from fabric_rti_mcp.server import mcp
-        
+
         # Get list of tools
         tools = mcp.list_tools()
         print(f"✅ Found {len(tools)} registered tools:")
-        
+
         kusto_tools = []
         eventstream_basic_tools = []
         eventstream_builder_tools = []
-        
+
         for tool in tools:
             print(f"  - {tool.name}")
-            if 'kusto' in tool.name:
+            if "kusto" in tool.name:
                 kusto_tools.append(tool.name)
-            elif 'eventstream' in tool.name:
-                if any(keyword in tool.name for keyword in ['add_', 'start_', 'validate_', 'create_from_', 'clear_', 'get_current_', 'list_available_']):
+            elif "eventstream" in tool.name:
+                if any(
+                    keyword in tool.name
+                    for keyword in [
+                        "add_",
+                        "start_",
+                        "validate_",
+                        "create_from_",
+                        "clear_",
+                        "get_current_",
+                        "list_available_",
+                    ]
+                ):
                     eventstream_builder_tools.append(tool.name)
                 else:
                     eventstream_basic_tools.append(tool.name)
-        
+
         print(f"\n📊 Kusto tools ({len(kusto_tools)}): {kusto_tools}")
         print(f"🌊 Basic Eventstream tools ({len(eventstream_basic_tools)}): {eventstream_basic_tools}")
         print(f"🏗️ Builder Eventstream tools ({len(eventstream_builder_tools)}): {eventstream_builder_tools}")
-        
+
         return len(tools) > 0
     except Exception as e:
         print(f"❌ Tools test failed: {e}")
         return False
+
 
 def test_builder_tools_detailed() -> bool:
     """Test builder tools in detail"""
     print("\n🏗️ Testing Builder Tools in Detail...")
-    
+
     expected_builder_tools = [
         "eventstream_start_definition",
-        "eventstream_get_current_definition", 
+        "eventstream_get_current_definition",
         "eventstream_clear_definition",
         "eventstream_add_sample_data_source",
         "eventstream_add_custom_endpoint_source",
         "eventstream_add_derived_stream",
         "eventstream_add_derived_stream",
         "eventstream_add_eventhouse_destination",
         "eventstream_add_custom_endpoint_destination",
         "eventstream_validate_definition",
         "eventstream_create_from_definition",
-        "eventstream_list_available_components"
+        "eventstream_list_available_components",
     ]
-    
+
     try:
         from fabric_rti_mcp.server import mcp
+
         tools = mcp.list_tools()
         available_tools = [t.name for t in tools]
-        
+
         print(f"Expected {len(expected_builder_tools)} builder tools:")
-        
+
         missing_tools = []
         present_tools = []
-        
+
         for tool in expected_builder_tools:
             if tool in available_tools:
                 print(f"  ✅ {tool}")
                 present_tools.append(tool)
             else:
                 print(f"  ❌ {tool} (MISSING)")
                 missing_tools.append(tool)
-        
+
         print(f"\n📈 Builder Tools Summary:")
         print(f"  Present: {len(present_tools)}/{len(expected_builder_tools)}")
         print(f"  Missing: {len(missing_tools)}")
-        
+
         if missing_tools:
             print(f"  Missing tools: {missing_tools}")
-        
+
         return len(missing_tools) == 0
-        
+
     except Exception as e:
         print(f"❌ Builder tools test failed: {e}")
         return False
+
 
 def test_builder_functionality() -> bool:
     """Test basic builder functionality"""
     print("\n🧪 Testing Builder Functionality...")
-    
+
     try:
         from fabric_rti_mcp.eventstream.eventstream_builder_service import (
             eventstream_start_definition,
             eventstream_get_current_definition,
-            eventstream_list_available_components
+            eventstream_list_available_components,
         )
-        
+
         # Test 1: Start a definition
         print("  Testing eventstream_start_definition...")
         result = eventstream_start_definition("test-stream", "Test eventstream for sanity check")
-        if 'session_id' in result and 'status' in result:
+        if "session_id" in result and "status" in result:
             print(f"    ✅ Started session: {result['session_id']}")
-            session_id = result['session_id']
+            session_id = result["session_id"]
         else:
             print("    ❌ Failed to start session")
             return False
-        
+
         # Test 2: Get current definition
         print("  Testing eventstream_get_current_definition...")
         current_def = eventstream_get_current_definition(session_id)
-        if 'definition' in current_def:
+        if "definition" in current_def:
             print("    ✅ Retrieved current definition")
         else:
             print("    ❌ Failed to get current definition")
             return False
-            
+
         # Test 3: List available components
         print("  Testing eventstream_list_available_components...")
         components = eventstream_list_available_components()
         if isinstance(components, dict):
             print("    ✅ Listed available components")
         else:
             print("    ❌ Failed to list components")
             return False
-            
+
         print("  🎉 All basic builder functionality tests passed!")
         return True
-        
+
     except Exception as e:
         print(f"  ❌ Builder functionality test failed: {e}")
         return False
+
 
 def test_environment() -> bool:
     """Test environment variables"""
     print("\n🌍 Testing environment variables...")
-    
+
     env_vars = {
-        'KUSTO_SERVICE_URI': os.getenv('KUSTO_SERVICE_URI'),
-        'KUSTO_DATABASE': os.getenv('KUSTO_DATABASE'), 
-        'FABRIC_API_BASE_URL': os.getenv('FABRIC_API_BASE_URL')
+        "KUSTO_SERVICE_URI": os.getenv("KUSTO_SERVICE_URI"),
+        "KUSTO_DATABASE": os.getenv("KUSTO_DATABASE"),
+        "FABRIC_API_BASE_URL": os.getenv("FABRIC_API_BASE_URL"),
     }
-    
+
     for name, value in env_vars.items():
         if value:
             print(f"✅ {name}: {value}")
         else:
             print(f"⚠️  {name}: Not set")
-    
+
     return True
+
 
 def main():
     """Run all sanity checks"""
     print("🚀 Fabric RTI MCP Server Sanity Check with Builder Tools")
     print("=" * 65)
-    
+
     tests = [
         ("Imports", test_imports),
         ("MCP Tools Registration", test_mcp_tools),
         ("Builder Tools Detail", test_builder_tools_detailed),
         ("Builder Functionality", test_builder_functionality),
-        ("Environment Variables", test_environment)
+        ("Environment Variables", test_environment),
     ]
-    
+
     results = []
     for name, test_func in tests:
         try:
             result = test_func()
             results.append((name, result))
         except Exception as e:
             print(f"❌ {name} test crashed: {e}")
             results.append((name, False))
-    
+
     print("\n" + "=" * 65)
     print("📋 DETAILED SANITY CHECK REPORT")
     print("=" * 65)
-    
+
     all_passed = True
     for name, passed in results:
         status = "✅ PASS" if passed else "❌ FAIL"
         print(f"{status:<8} {name}")
         if not passed:
             all_passed = False
-    
+
     print("\n" + "=" * 65)
     if all_passed:
         print("🎉 ALL SANITY CHECKS PASSED!")
         print("   MCP server with full builder tools is ready for use.")
         print("   You can now:")
@@ -220,11 +242,12 @@
         print("   - Create and manage Fabric eventstreams")
     else:
         print("⚠️  SOME CHECKS FAILED!")
         print("   Review the detailed output above to identify issues.")
         print("   The MCP server may not function correctly.")
-    
+
     print("=" * 65)
     return 0 if all_passed else 1
 
+
 if __name__ == "__main__":
     sys.exit(main())
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_simple.py	2025-08-25 15:39:51.070467+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_simple.py	2025-08-25 15:40:10.460254+00:00
@@ -2,25 +2,27 @@
 """Simple test to check module loading issues."""
 
 try:
     print("Step 1: Importing the module...")
     import fabric_rti_mcp.eventstream.eventstream_builder_service as ebs
+
     print("SUCCESS: Module imported")
-    
+
     print("Step 2: Checking for function...")
-    has_func = hasattr(ebs, 'eventstream_start_definition')
+    has_func = hasattr(ebs, "eventstream_start_definition")
     print(f"Has eventstream_start_definition: {has_func}")
-    
+
     if has_func:
         print("Step 3: Getting function...")
-        func = getattr(ebs, 'eventstream_start_definition')
+        func = getattr(ebs, "eventstream_start_definition")
         print(f"Function: {func}")
         print("SUCCESS: Function found!")
     else:
         print("Step 3: Listing available attributes...")
-        attrs = [attr for attr in dir(ebs) if not attr.startswith('_')]
+        attrs = [attr for attr in dir(ebs) if not attr.startswith("_")]
         print(f"Available attributes: {attrs}")
-        
+
 except Exception as e:
     print(f"ERROR: {e}")
     import traceback
+
     traceback.print_exc()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_simple.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py	2025-08-25 15:39:51.069468+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py	2025-08-25 15:40:10.499690+00:00
@@ -4,235 +4,232 @@
 Tests the builder workflow end-to-end
 """
 
 import sys
 import os
-sys.path.insert(0, os.path.abspath('.'))
+
+sys.path.insert(0, os.path.abspath("."))
 
 from fabric_rti_mcp.eventstream import eventstream_builder_service as builder
 
 
 def test_builder_workflow():
     """Test the complete builder workflow."""
     print("🧪 Testing Eventstream Builder Workflow")
     print("=" * 50)
-    
+
     try:
         # Test 1: Start Definition
         print("\n1️⃣ Starting eventstream definition...")
         session = builder.eventstream_start_definition(
-            name="TestEventstream",
-            description="Test eventstream created by automated test"
+            name="TestEventstream", description="Test eventstream created by automated test"
         )
         session_id = session["session_id"]
         print(f"✅ Session created: {session_id}")
         print(f"   Name: {session['name']}")
         print(f"   Status: {session['status']}")
-        
+
         # Test 2: List Available Components
         print("\n2️⃣ Listing available components...")
         components = builder.eventstream_list_available_components()
         print(f"✅ Available sources: {components['sources']}")
         print(f"   Available destinations: {components['destinations']}")
-        
+
         # Test 3: Add Sample Data Source
         print("\n3️⃣ Adding sample data source...")
-        source_result = builder.eventstream_add_sample_data_source(
-            session_id, "TestSource", "Bicycles"
-        )
+        source_result = builder.eventstream_add_sample_data_source(session_id, "TestSource", "Bicycles")
         print(f"✅ Source added: {source_result['source_added']}")
         print(f"   Sources count: {source_result['sources_count']}")
-        
+
         # Test 4: Check Default Stream (auto-created)
         print("\n4️⃣ Checking default stream (auto-created)...")
         current_def = builder.eventstream_get_current_definition(session_id)
-        default_streams = [s for s in current_def['streams'] if s['name'] == 'DefaultStream']
+        default_streams = [s for s in current_def["streams"] if s["name"] == "DefaultStream"]
         print(f"✅ Default stream available: {len(default_streams) > 0}")
         if default_streams:
             print(f"   Default stream: {default_streams[0]['name']}")
-        
+
         # Test 5: Add Derived Stream
         print("\n5️⃣ Adding derived stream...")
-        derived_result = builder.eventstream_add_derived_stream(
-            session_id, "TestDerivedStream", ["DefaultStream"]
-        )
+        derived_result = builder.eventstream_add_derived_stream(session_id, "TestDerivedStream", ["DefaultStream"])
         print(f"✅ Derived stream added: {derived_result['stream_added']}")
         print(f"   Streams count: {derived_result['streams_count']}")
-        
+
         # Test 5: Get Current Definition
         print("\n5️⃣ Getting current definition...")
         current_def = builder.eventstream_get_current_definition(session_id)
         print(f"✅ Definition retrieved for: {current_def['name']}")
         print(f"   Last updated: {current_def['last_updated']}")
         print(f"   Sources: {list(current_def['definition']['sources'].keys())}")
         print(f"   Streams: {list(current_def['definition']['streams'].keys())}")
-        
+
         # Test 6: Validate Definition (should have warnings but no errors)
         print("\n6️⃣ Validating definition...")
         validation = builder.eventstream_validate_definition(session_id)
         print(f"✅ Validation complete - Valid: {validation['is_valid']}")
-        if validation['errors']:
+        if validation["errors"]:
             print(f"   ❌ Errors: {validation['errors']}")
-        if validation['warnings']:
+        if validation["warnings"]:
             print(f"   ⚠️ Warnings: {validation['warnings']}")
         print(f"   Summary: {validation['summary']}")
-        
+
         # Test 7: Add Custom Endpoint Destination
         print("\n7️⃣ Adding custom endpoint destination...")
         dest_result = builder.eventstream_add_custom_endpoint_destination(
-            session_id, "TestDestination", "https://webhook.example.com/events",
-            ["TestStream"]
+            session_id, "TestDestination", "https://webhook.example.com/events", ["TestStream"]
         )
         print(f"✅ Destination added: {dest_result['destination_added']}")
         print(f"   Destinations count: {dest_result['destinations_count']}")
-        
+
         # Test 8: Final Validation
         print("\n8️⃣ Final validation...")
         final_validation = builder.eventstream_validate_definition(session_id)
         print(f"✅ Final validation - Valid: {final_validation['is_valid']}")
-        if final_validation['errors']:
+        if final_validation["errors"]:
             print(f"   ❌ Errors: {final_validation['errors']}")
-        if final_validation['warnings']:
+        if final_validation["warnings"]:
             print(f"   ⚠️ Warnings: {final_validation['warnings']}")
-        
+
         # Test 9: Clear Definition
         print("\n9️⃣ Testing clear definition...")
         clear_result = builder.eventstream_clear_definition(session_id)
         print(f"✅ Definition cleared: {clear_result['status']}")
-        
+
         # Test 10: Verify Cleared
         print("\n🔟 Verifying definition was cleared...")
         cleared_def = builder.eventstream_get_current_definition(session_id)
-        sources_count = len(cleared_def['definition']['sources'])
-        streams_count = len(cleared_def['definition']['streams'])
+        sources_count = len(cleared_def["definition"]["sources"])
+        streams_count = len(cleared_def["definition"]["streams"])
         print(f"✅ After clearing - Sources: {sources_count}, Streams: {streams_count}")
-        
+
         print("\n🎉 All tests passed! Builder workflow is working correctly.")
         return True
-        
+
     except Exception as e:
         print(f"\n❌ Test failed with error: {str(e)}")
         import traceback
+
         traceback.print_exc()
         return False
 
 
 def test_error_handling():
     """Test error handling scenarios."""
     print("\n\n🔬 Testing Error Handling")
     print("=" * 50)
-    
+
     try:
         # Test invalid session
         print("\n1️⃣ Testing invalid session ID...")
         try:
             builder.eventstream_get_current_definition("invalid-session-id")
             print("❌ Should have failed with invalid session")
             return False
         except ValueError as e:
             print(f"✅ Correctly handled invalid session: {str(e)}")
-        
+
         # Test adding stream with non-existent source
         print("\n2️⃣ Testing invalid source reference...")
         session = builder.eventstream_start_definition("ErrorTest")
         session_id = session["session_id"]
-        
+
         try:
             builder.eventstream_add_default_stream(session_id, "BadStream", ["NonExistentSource"])
             print("❌ Should have failed with non-existent source")
             return False
         except ValueError as e:
             print(f"✅ Correctly handled invalid source reference: {str(e)}")
-        
+
         print("\n🎉 Error handling tests passed!")
         return True
-        
+
     except Exception as e:
         print(f"\n❌ Error handling test failed: {str(e)}")
         return False
 
 
 def test_component_types():
     """Test different component types."""
     print("\n\n🔧 Testing Component Types")
     print("=" * 50)
-    
+
     try:
         session = builder.eventstream_start_definition("ComponentTest", "Testing all component types")
         session_id = session["session_id"]
-        
+
         # Test custom endpoint source
         print("\n1️⃣ Testing custom endpoint source...")
-        builder.eventstream_add_custom_endpoint_source(
-            session_id, "APISource", "https://api.example.com/events"
-        )
+        builder.eventstream_add_custom_endpoint_source(session_id, "APISource", "https://api.example.com/events")
         print("✅ Custom endpoint source added")
-        
+
         # Test sample data with different type
         print("\n2️⃣ Testing stock sample data...")
-        builder.eventstream_add_sample_data_source(
-            session_id, "StockData", "Stock"
-        )
+        builder.eventstream_add_sample_data_source(session_id, "StockData", "Stock")
         print("✅ Stock sample data added")
-        
+
         # Test multiple streams
         print("\n3️⃣ Testing multiple streams...")
         builder.eventstream_add_default_stream(session_id, "APIStream", ["APISource"])
         builder.eventstream_add_default_stream(session_id, "StockStream", ["StockData"])
         print("✅ Multiple streams added")
-        
+
         # Test derived stream (should fail - no operators yet)
         print("\n4️⃣ Testing derived stream (should fail)...")
         try:
             builder.eventstream_add_derived_stream(session_id, "DerivedStream", ["NonExistentOperator"])
             print("❌ Should have failed with non-existent operator")
             return False
         except ValueError as e:
             print(f"✅ Correctly handled missing operator: {str(e)}")
-        
+
         # Test Eventhouse destination (mock)
         print("\n5️⃣ Testing Eventhouse destination...")
         builder.eventstream_add_eventhouse_destination(
-            session_id, "DataWarehouse",
-            "workspace-id", "eventhouse-id", "database", "table",
-            ["APIStream", "StockStream"]
+            session_id,
+            "DataWarehouse",
+            "workspace-id",
+            "eventhouse-id",
+            "database",
+            "table",
+            ["APIStream", "StockStream"],
         )
         print("✅ Eventhouse destination added")
-        
+
         # Final validation
         print("\n6️⃣ Final validation of complex definition...")
         validation = builder.eventstream_validate_definition(session_id)
         print(f"✅ Complex definition validation - Valid: {validation['is_valid']}")
         print(f"   Sources: {validation['summary']['sources']}")
         print(f"   Streams: {validation['summary']['streams']}")
         print(f"   Destinations: {validation['summary']['destinations']}")
-        
+
         print("\n🎉 Component type tests passed!")
         return True
-        
+
     except Exception as e:
         print(f"\n❌ Component type test failed: {str(e)}")
         import traceback
+
         traceback.print_exc()
         return False
 
 
 if __name__ == "__main__":
     print("🚀 Starting Eventstream Builder Tests")
     print("====================================")
-    
+
     all_passed = True
-    
+
     # Run workflow test
     all_passed &= test_builder_workflow()
-    
+
     # Run error handling test
     all_passed &= test_error_handling()
-    
+
     # Run component type test
     all_passed &= test_component_types()
-    
+
     # Final result
     print("\n" + "=" * 50)
     if all_passed:
         print("🏆 ALL TESTS PASSED! Builder is ready for use.")
         sys.exit(0)
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py

Oh no! 💥 💔 💥
19 files would be reformatted, 19 files would be left unchanged.

❌ Flake8 checks failed

./build_eventstream_demo.py:7:1: F401 'fabric_rti_mcp.eventstream.eventstream_builder_service.eventstream_list_available_components' imported but unused
./build_eventstream_demo.py:17:1: E302 expected 2 blank lines, found 1
./build_eventstream_demo.py:19:1: W293 blank line contains whitespace
./build_eventstream_demo.py:22:1: W293 blank line contains whitespace
./build_eventstream_demo.py:27:1: W293 blank line contains whitespace
./build_eventstream_demo.py:32:35: W291 trailing whitespace
./build_eventstream_demo.py:40:1: W293 blank line contains whitespace
./build_eventstream_demo.py:52:1: W293 blank line contains whitespace
./build_eventstream_demo.py:55:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:56:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:58:1: W293 blank line contains whitespace
./build_eventstream_demo.py:71:1: W293 blank line contains whitespace
./build_eventstream_demo.py:80:1: W293 blank line contains whitespace
./build_eventstream_demo.py:91:1: W293 blank line contains whitespace
./build_eventstream_demo.py:106:1: W293 blank line contains whitespace
./build_eventstream_demo.py:112:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:114:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:116:1: W293 blank line contains whitespace
./build_eventstream_demo.py:118:1: W293 blank line contains whitespace
./build_eventstream_demo.py:125:1: E305 expected 2 blank lines after class or function definition, found 1
./debug_imports.py:4:1: E302 expected 2 blank lines, found 1
./debug_imports.py:6:1: W293 blank line contains whitespace
./debug_imports.py:9:9: F401 'json' imported but unused
./debug_imports.py:10:9: F401 'uuid' imported but unused
./debug_imports.py:11:9: F401 'datetime.datetime' imported but unused
./debug_imports.py:12:9: F401 'typing.Dict' imported but unused
./debug_imports.py:12:9: F401 'typing.List' imported but unused
./debug_imports.py:12:9: F401 'typing.Optional' imported but unused
./debug_imports.py:12:9: F401 'typing.Any' imported but unused
./debug_imports.py:12:9: F401 'typing.Union' imported but unused
./debug_imports.py:17:1: W293 blank line contains whitespace
./debug_imports.py:20:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./debug_imports.py:25:1: W293 blank line contains whitespace
./debug_imports.py:28:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./debug_imports.py:35:1: W293 blank line contains whitespace
./debug_imports.py:38:9: F401 'fabric_rti_mcp.eventstream.eventstream_service.eventstream_create' imported but unused
./debug_imports.py:45:1: W293 blank line contains whitespace
./debug_imports.py:55:1: W293 blank line contains whitespace
./debug_imports.py:66:1: E305 expected 2 blank lines after class or function definition, found 1
./decode_working_eventstream.py:10:121: E501 line too long (1716 > 120 characters)
./decode_working_eventstream.py:14:121: E501 line too long (561 > 120 characters)
./demo_eventstream_definition.py:10:40: W291 trailing whitespace
./demo_eventstream_definition.py:17:1: E302 expected 2 blank lines, found 1
./demo_eventstream_definition.py:19:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:23:30: W291 trailing whitespace
./demo_eventstream_definition.py:28:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:32:20: W291 trailing whitespace
./demo_eventstream_definition.py:33:31: W291 trailing whitespace
./demo_eventstream_definition.py:37:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:41:20: W291 trailing whitespace
./demo_eventstream_definition.py:45:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:49:20: W291 trailing whitespace
./demo_eventstream_definition.py:50:25: W291 trailing whitespace
./demo_eventstream_definition.py:54:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:60:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:65:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:70:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:71:11: F541 f-string is missing placeholders
./demo_eventstream_definition.py:77:1: E305 expected 2 blank lines after class or function definition, found 1
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:9:121: E501 line too long (128 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:10:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:16:1: F401 'json' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:19:1: F401 'typing.Union' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:113:121: E501 line too long (124 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:114:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:264:121: E501 line too long (149 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:52:121: E501 line too long (163 > 120 characters)
./fix_eventstream_creation.py:8:1: F401 'datetime.datetime' imported but unused
./fix_eventstream_creation.py:11:1: E302 expected 2 blank lines, found 1
./fix_eventstream_creation.py:18:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:24:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:28:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:36:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:39:121: E501 line too long (125 > 120 characters)
./fix_eventstream_creation.py:52:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:78:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:86:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:91:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:138:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:150:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:155:1: W293 blank line contains whitespace
./quick_check.py:6:1: E302 expected 2 blank lines, found 1
./quick_check.py:9:1: W293 blank line contains whitespace
./quick_check.py:14:1: W293 blank line contains whitespace
./quick_check.py:16:121: E501 line too long (162 > 120 characters)
./quick_check.py:17:1: W293 blank line contains whitespace
./quick_check.py:20:1: W293 blank line contains whitespace
./quick_check.py:23:50: W291 trailing whitespace
./quick_check.py:27:1: W293 blank line contains whitespace
./quick_check.py:32:1: W293 blank line contains whitespace
./quick_check.py:41:1: W293 blank line contains whitespace
./quick_check.py:43:1: W293 blank line contains whitespace
./quick_check.py:47:1: E305 expected 2 blank lines after class or function definition, found 1
./sanity_check.py:9:1: F401 'typing.List' imported but unused
./sanity_check.py:11:1: E302 expected 2 blank lines, found 1
./sanity_check.py:17:1: W293 blank line contains whitespace
./sanity_check.py:18:9: F401 'fabric_rti_mcp.server.mcp' imported but unused
./sanity_check.py:20:1: W293 blank line contains whitespace
./sanity_check.py:21:9: F401 'fabric_rti_mcp.kusto.kusto_service' imported but unused
./sanity_check.py:21:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./sanity_check.py:23:1: W293 blank line contains whitespace
./sanity_check.py:24:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./sanity_check.py:24:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./sanity_check.py:26:1: W293 blank line contains whitespace
./sanity_check.py:32:1: E302 expected 2 blank lines, found 1
./sanity_check.py:37:1: W293 blank line contains whitespace
./sanity_check.py:41:1: W293 blank line contains whitespace
./sanity_check.py:45:1: W293 blank line contains whitespace
./sanity_check.py:51:121: E501 line too long (153 > 120 characters)
./sanity_check.py:55:1: W293 blank line contains whitespace
./sanity_check.py:59:1: W293 blank line contains whitespace
./sanity_check.py:65:1: E302 expected 2 blank lines, found 1
./sanity_check.py:68:1: W293 blank line contains whitespace
./sanity_check.py:71:46: W291 trailing whitespace
./sanity_check.py:83:1: W293 blank line contains whitespace
./sanity_check.py:88:1: W293 blank line contains whitespace
./sanity_check.py:90:1: W293 blank line contains whitespace
./sanity_check.py:93:1: W293 blank line contains whitespace
./sanity_check.py:101:1: W293 blank line contains whitespace
./sanity_check.py:102:15: F541 f-string is missing placeholders
./sanity_check.py:105:1: W293 blank line contains whitespace
./sanity_check.py:108:1: W293 blank line contains whitespace
./sanity_check.py:110:1: W293 blank line contains whitespace
./sanity_check.py:115:1: E302 expected 2 blank lines, found 1
./sanity_check.py:118:1: W293 blank line contains whitespace
./sanity_check.py:125:1: W293 blank line contains whitespace
./sanity_check.py:135:1: W293 blank line contains whitespace
./sanity_check.py:144:1: W293 blank line contains whitespace
./sanity_check.py:153:1: W293 blank line contains whitespace
./sanity_check.py:156:1: W293 blank line contains whitespace
./sanity_check.py:161:1: E302 expected 2 blank lines, found 1
./sanity_check.py:164:1: W293 blank line contains whitespace
./sanity_check.py:167:55: W291 trailing whitespace
./sanity_check.py:170:1: W293 blank line contains whitespace
./sanity_check.py:176:1: W293 blank line contains whitespace
./sanity_check.py:179:1: E302 expected 2 blank lines, found 1
./sanity_check.py:183:1: W293 blank line contains whitespace
./sanity_check.py:191:1: W293 blank line contains whitespace
./sanity_check.py:200:1: W293 blank line contains whitespace
./sanity_check.py:204:1: W293 blank line contains whitespace
./sanity_check.py:211:1: W293 blank line contains whitespace
./sanity_check.py:225:1: W293 blank line contains whitespace
./sanity_check.py:229:1: E305 expected 2 blank lines after class or function definition, found 1
./show_rest_api_payload.py:10:40: W291 trailing whitespace
./show_rest_api_payload.py:16:1: E302 expected 2 blank lines, found 1
./show_rest_api_payload.py:18:1: W293 blank line contains whitespace
./show_rest_api_payload.py:20:121: E501 line too long (130 > 120 characters)
./show_rest_api_payload.py:22:1: W293 blank line contains whitespace
./show_rest_api_payload.py:27:1: W293 blank line contains whitespace
./show_rest_api_payload.py:31:1: W293 blank line contains whitespace
./show_rest_api_payload.py:35:1: W293 blank line contains whitespace
./show_rest_api_payload.py:38:1: W293 blank line contains whitespace
./show_rest_api_payload.py:43:1: W293 blank line contains whitespace
./show_rest_api_payload.py:46:31: W291 trailing whitespace
./show_rest_api_payload.py:56:41: W291 trailing whitespace
./show_rest_api_payload.py:63:1: W293 blank line contains whitespace
./show_rest_api_payload.py:66:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:68:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:71:1: W293 blank line contains whitespace
./show_rest_api_payload.py:72:25: W291 trailing whitespace
./show_rest_api_payload.py:76:1: W293 blank line contains whitespace
./show_rest_api_payload.py:80:49: W291 trailing whitespace
./show_rest_api_payload.py:84:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:86:1: E305 expected 2 blank lines after class or function definition, found 1
./test_auto_connection.py:6:1: E302 expected 2 blank lines, found 1
./test_auto_connection.py:8:1: W293 blank line contains whitespace
./test_auto_connection.py:13:1: W293 blank line contains whitespace
./test_auto_connection.py:14:11: F541 f-string is missing placeholders
./test_auto_connection.py:19:1: W293 blank line contains whitespace
./test_auto_connection.py:23:1: W293 blank line contains whitespace
./test_auto_connection.py:29:19: F541 f-string is missing placeholders
./test_auto_connection.py:30:1: W293 blank line contains whitespace
./test_auto_connection.py:32:1: W293 blank line contains whitespace
./test_auto_connection.py:36:1: W293 blank line contains whitespace
./test_auto_connection.py:39:1: E305 expected 2 blank lines after class or function definition, found 1
./test_default_stream_naming.py:9:40: W291 trailing whitespace
./test_default_stream_naming.py:14:1: E302 expected 2 blank lines, found 1
./test_default_stream_naming.py:16:1: W293 blank line contains whitespace
./test_default_stream_naming.py:21:1: W293 blank line contains whitespace
./test_default_stream_naming.py:25:1: W293 blank line contains whitespace
./test_default_stream_naming.py:29:1: W293 blank line contains whitespace
./test_default_stream_naming.py:32:1: W293 blank line contains whitespace
./test_default_stream_naming.py:37:1: W293 blank line contains whitespace
./test_default_stream_naming.py:44:1: W293 blank line contains whitespace
./test_default_stream_naming.py:48:1: E305 expected 2 blank lines after class or function definition, found 1
./test_eventstream_builder.py:18:1: W293 blank line contains whitespace
./test_eventstream_builder.py:30:1: W293 blank line contains whitespace
./test_eventstream_builder.py:36:1: W293 blank line contains whitespace
./test_eventstream_builder.py:44:1: W293 blank line contains whitespace
./test_eventstream_builder.py:52:1: W293 blank line contains whitespace
./test_eventstream_builder.py:60:1: W293 blank line contains whitespace
./test_eventstream_builder.py:68:1: W293 blank line contains whitespace
./test_eventstream_builder.py:78:1: W293 blank line contains whitespace
./test_eventstream_builder.py:87:1: W293 blank line contains whitespace
./test_eventstream_builder.py:96:1: W293 blank line contains whitespace
./test_eventstream_builder.py:101:1: W293 blank line contains whitespace
./test_eventstream_builder.py:108:1: W293 blank line contains whitespace
./test_eventstream_builder.py:111:1: W293 blank line contains whitespace
./test_eventstream_builder.py:123:1: W293 blank line contains whitespace
./test_eventstream_builder.py:133:1: W293 blank line contains whitespace
./test_eventstream_builder.py:138:1: W293 blank line contains whitespace
./test_eventstream_builder.py:145:1: W293 blank line contains whitespace
./test_eventstream_builder.py:148:1: W293 blank line contains whitespace
./test_eventstream_builder.py:158:1: W293 blank line contains whitespace
./test_eventstream_builder.py:162:1: W293 blank line contains whitespace
./test_eventstream_builder.py:169:1: W293 blank line contains whitespace
./test_eventstream_builder.py:176:1: W293 blank line contains whitespace
./test_eventstream_builder.py:182:1: W293 blank line contains whitespace
./test_eventstream_builder.py:191:1: W293 blank line contains whitespace
./test_eventstream_builder.py:200:1: W293 blank line contains whitespace
./test_eventstream_builder.py:208:1: W293 blank line contains whitespace
./test_eventstream_builder.py:211:1: W293 blank line contains whitespace
./test_eventstream_builder.py:222:1: W293 blank line contains whitespace
./test_eventstream_builder.py:224:1: W293 blank line contains whitespace
./test_eventstream_builder.py:227:1: W293 blank line contains whitespace
./test_eventstream_builder.py:230:1: W293 blank line contains whitespace
./test_eventstream_builder.py:233:1: W293 blank line contains whitespace
./test_import_chain.py:6:1: E302 expected 2 blank lines, found 1
./test_import_chain.py:8:1: W293 blank line contains whitespace
./test_import_chain.py:11:9: F401 'uuid' imported but unused
./test_import_chain.py:12:9: F401 'datetime.datetime' imported but unused
./test_import_chain.py:13:9: F401 'typing.Dict' imported but unused
./test_import_chain.py:13:9: F401 'typing.List' imported but unused
./test_import_chain.py:13:9: F401 'typing.Optional' imported but unused
./test_import_chain.py:13:9: F401 'typing.Any' imported but unused
./test_import_chain.py:15:1: W293 blank line contains whitespace
./test_import_chain.py:17:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_import_chain.py:19:1: W293 blank line contains whitespace
./test_import_chain.py:21:1: W293 blank line contains whitespace
./test_import_chain.py:23:9: F401 'fabric_rti_mcp.eventstream.eventstream_connection' imported but unused
./test_import_chain.py:25:1: W293 blank line contains whitespace
./test_import_chain.py:27:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./test_import_chain.py:29:1: W293 blank line contains whitespace
./test_import_chain.py:33:1: W293 blank line contains whitespace
./test_import_chain.py:37:1: W293 blank line contains whitespace
./test_import_chain.py:41:1: W293 blank line contains whitespace
./test_import_chain.py:47:1: W293 blank line contains whitespace
./test_import_chain.py:49:1: W293 blank line contains whitespace
./test_import_chain.py:56:1: E305 expected 2 blank lines after class or function definition, found 1
./test_imports.py:4:1: F401 'sys' imported but unused
./test_imports.py:6:1: E302 expected 2 blank lines, found 1
./test_imports.py:18:1: E305 expected 2 blank lines after class or function definition, found 1
./test_mcp_fixed.py:4:1: E302 expected 2 blank lines, found 1
./test_mcp_fixed.py:7:1: W293 blank line contains whitespace
./test_mcp_fixed.py:10:9: F401 'fastmcp.FastMCP' imported but unused
./test_mcp_fixed.py:15:1: W293 blank line contains whitespace
./test_mcp_fixed.py:23:1: W293 blank line contains whitespace
./test_mcp_fixed.py:26:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_mcp_fixed.py:31:1: W293 blank line contains whitespace
./test_mcp_fixed.py:34:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./test_mcp_fixed.py:39:1: W293 blank line contains whitespace
./test_mcp_fixed.py:42:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_mcp_fixed.py:47:1: W293 blank line contains whitespace
./test_mcp_fixed.py:50:1: E302 expected 2 blank lines, found 1
./test_mcp_fixed.py:53:1: W293 blank line contains whitespace
./test_mcp_fixed.py:56:9: F841 local variable 'mcp' is assigned to but never used
./test_mcp_fixed.py:65:1: E302 expected 2 blank lines, found 1
./test_mcp_fixed.py:67:1: W293 blank line contains whitespace
./test_mcp_fixed.py:71:1: W293 blank line contains whitespace
./test_mcp_fixed.py:75:1: W293 blank line contains whitespace
./test_mcp_fixed.py:78:1: E305 expected 2 blank lines after class or function definition, found 1
./test_mcp_import.py:19:41: W291 trailing whitespace
./test_mcp_import.py:29:5: F401 'mcp.server.fastmcp.FastMCP' imported but unused
./test_server_final.py:4:1: E302 expected 2 blank lines, found 1
./test_server_final.py:7:1: W293 blank line contains whitespace
./test_server_final.py:11:1: W293 blank line contains whitespace
./test_server_final.py:13:1: W293 blank line contains whitespace
./test_server_final.py:17:1: W293 blank line contains whitespace
./test_server_final.py:21:1: W293 blank line contains whitespace
./test_server_final.py:25:1: W293 blank line contains whitespace
./test_server_final.py:32:1: E305 expected 2 blank lines after class or function definition, found 1
./test_server_import.py:24:5: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_server_startup.py:5:1: F401 'signal' imported but unused
./test_server_startup.py:9:1: E302 expected 2 blank lines, found 1
./test_server_startup.py:15:1: E302 expected 2 blank lines, found 1
./test_server_startup.py:17:1: W293 blank line contains whitespace
./test_server_startup.py:21:1: W293 blank line contains whitespace
./test_server_startup.py:35:1: W293 blank line contains whitespace
./test_server_startup.py:38:1: E305 expected 2 blank lines after class or function definition, found 1
./test_simple.py:8:1: W293 blank line contains whitespace
./test_simple.py:12:1: W293 blank line contains whitespace
./test_simple.py:22:1: W293 blank line contains whitespace

❌ MyPy checks failed

test_imports.py:6: error: Function is missing a type annotation  [no-untyped-def]
test_auto_connection.py:6: error: Function is missing a return type annotation  [no-untyped-def]
test_auto_connection.py:10: error: Need type annotation for "input_nodes" (hint: "input_nodes: list[<type>] = ...")  [var-annotated]
test_auto_connection.py:12: error: Need type annotation for "operator_names" (hint: "operator_names: list[<type>] = ...")  [var-annotated]
fabric_rti_mcp/eventstream/eventstream_builder_service.py:525: error: Statement is unreachable  [unreachable]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_service.py:525: error: Statement is unreachable  [unreachable]
test_default_stream_naming.py:7: error: Module "fabric_rti_mcp.eventstream.eventstream_builder_service" has no attribute "eventstream_add_default_stream"; maybe "eventstream_add_derived_stream"?  [attr-defined]
test_default_stream_naming.py:14: error: Function is missing a return type annotation  [no-untyped-def]
test_default_stream_naming.py:14: note: Use "-> None" if function does not return a value
show_rest_api_payload.py:8: error: Module "fabric_rti_mcp.eventstream.eventstream_builder_service" has no attribute "eventstream_add_default_stream"; maybe "eventstream_add_derived_stream"?  [attr-defined]
show_rest_api_payload.py:16: error: Function is missing a return type annotation  [no-untyped-def]
show_rest_api_payload.py:16: note: Use "-> None" if function does not return a value
demo_eventstream_definition.py:8: error: Module "fabric_rti_mcp.eventstream.eventstream_builder_service" has no attribute "eventstream_add_default_stream"; maybe "eventstream_add_derived_stream"?  [attr-defined]
demo_eventstream_definition.py:17: error: Function is missing a return type annotation  [no-untyped-def]
demo_eventstream_definition.py:17: note: Use "-> None" if function does not return a value
build_eventstream_demo.py:17: error: Function is missing a return type annotation  [no-untyped-def]
build_eventstream_demo.py:61: error: Unexpected keyword argument "source_stream" for "eventstream_add_derived_stream"  [call-arg]
fabric_rti_mcp/eventstream/eventstream_builder_service.py:235: note: "eventstream_add_derived_stream" defined here
build_eventstream_demo.py:61: error: Unexpected keyword argument "transformation_query" for "eventstream_add_derived_stream"  [call-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:43: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:51: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:67: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:89: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:97: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:102: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:107: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:38: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:40: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:47: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:52: error: Missing type parameters for generic type "Dict"  [type-arg]
test_import_chain.py:6: error: Function is missing a return type annotation  [no-untyped-def]
test_import_chain.py:35: error: Cannot find implementation or library stub for module named "eventstream_builder_service"  [import-not-found]
test_import_chain.py:35: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
test_eventstream_builder.py:14: error: Function is missing a return type annotation  [no-untyped-def]
test_eventstream_builder.py:82: error: Argument 2 to "eventstream_add_custom_endpoint_destination" has incompatible type "str"; expected "list[str]"  [arg-type]
test_eventstream_builder.py:83: error: Argument 4 to "eventstream_add_custom_endpoint_destination" has incompatible type "list[str]"; expected "str | None"  [arg-type]
test_eventstream_builder.py:119: error: Function is missing a return type annotation  [no-untyped-def]
test_eventstream_builder.py:140: error: Module has no attribute "eventstream_add_default_stream"; maybe "eventstream_add_derived_stream"?  [attr-defined]
test_eventstream_builder.py:154: error: Function is missing a return type annotation  [no-untyped-def]
test_eventstream_builder.py:179: error: Module has no attribute "eventstream_add_default_stream"; maybe "eventstream_add_derived_stream"?  [attr-defined]
test_eventstream_builder.py:180: error: Module has no attribute "eventstream_add_default_stream"; maybe "eventstream_add_derived_stream"?  [attr-defined]
test_eventstream_builder.py:196: error: Argument 6 to "eventstream_add_eventhouse_destination" has incompatible type "str"; expected "list[str]"  [arg-type]
test_eventstream_builder.py:197: error: Argument 7 to "eventstream_add_eventhouse_destination" has incompatible type "list[str]"; expected "str | None"  [arg-type]
debug_imports.py:4: error: Function is missing a return type annotation  [no-untyped-def]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:38: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:40: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:47: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_tools.py:52: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:43: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:51: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:67: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:89: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:97: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:102: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/eventstream/eventstream_builder_tools.py:107: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:12: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:16: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:20: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:24: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:32: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:36: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:40: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:46: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:52: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:58: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/kusto/kusto_tools.py:69: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:12: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:16: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:20: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:24: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:32: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:36: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:40: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:46: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:52: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:58: error: Missing type parameters for generic type "Dict"  [type-arg]
build/lib/fabric_rti_mcp/kusto/kusto_tools.py:69: error: Missing type parameters for generic type "Dict"  [type-arg]
test_mcp_fixed.py:4: error: Function is missing a return type annotation  [no-untyped-def]
test_mcp_fixed.py:50: error: Function is missing a return type annotation  [no-untyped-def]
test_mcp_fixed.py:65: error: Function is missing a return type annotation  [no-untyped-def]
test_mcp_fixed.py:65: note: Use "-> None" if function does not return a value
fabric_rti_mcp/server.py:15: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
fabric_rti_mcp/server.py:16: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
build/lib/fabric_rti_mcp/server.py:15: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
build/lib/fabric_rti_mcp/server.py:16: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
test_server_startup.py:9: error: Function is missing a return type annotation  [no-untyped-def]
test_server_startup.py:9: note: Use "-> None" if function does not return a value
test_server_startup.py:15: error: Function is missing a return type annotation  [no-untyped-def]
test_server_final.py:4: error: Function is missing a return type annotation  [no-untyped-def]
test_server_final.py:19: error: Argument 1 to "register_tools" has incompatible type "fastmcp.server.server.FastMCP[Any]"; expected "mcp.server.fastmcp.server.FastMCP[Any]"  [arg-type]
sanity_check.py:18: error: Module "fabric_rti_mcp.server" has no attribute "mcp"  [attr-defined]
sanity_check.py:36: error: Module "fabric_rti_mcp.server" has no attribute "mcp"  [attr-defined]
sanity_check.py:85: error: Module "fabric_rti_mcp.server" has no attribute "mcp"  [attr-defined]
sanity_check.py:151: error: Statement is unreachable  [unreachable]
sanity_check.py:179: error: Function is missing a return type annotation  [no-untyped-def]
quick_check.py:6: error: Function is missing a return type annotation  [no-untyped-def]
quick_check.py:6: note: Use "-> None" if function does not return a value
quick_check.py:12: error: Module "fabric_rti_mcp.server" has no attribute "mcp"  [attr-defined]
Found 106 errors in 24 files (checked 53 source files)

❌ Pytest checks failed

============================= test session starts ==============================
platform linux -- Python 3.10.18, pytest-8.4.1, pluggy-1.6.0
rootdir: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp
configfile: pyproject.toml
plugins: anyio-4.10.0
collected 18 items / 1 error

==================================== ERRORS ====================================
________________ ERROR collecting test_default_stream_naming.py ________________
ImportError while importing test module '/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/hostedtoolcache/Python/3.10.18/x64/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
test_default_stream_naming.py:7: in <module>
    from fabric_rti_mcp.eventstream.eventstream_builder_service import (
E   ImportError: cannot import name 'eventstream_add_default_stream' from 'fabric_rti_mcp.eventstream.eventstream_builder_service' (/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py)
=========================== short test summary info ============================
ERROR test_default_stream_naming.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 1.40s ===============================

Resolved conflicts in kusto_tools.py by adopting the main branch version with:
- Updated kusto service function names (kusto_known_services, kusto_list_entities, etc.)
- Proper ToolAnnotations usage
- mcp.server.fastmcp import path

This brings in the latest kusto improvements, HTTP support, OBO authentication,
and other enhancements from main branch.
Copy link

Code Quality Report

❌ isort checks failed

ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py Imports are incorrectly sorted and/or formatted.
ERROR: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py Imports are incorrectly sorted and/or formatted.
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py:before	2025-09-23 23:30:53.750407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py:after	2025-09-23 23:31:13.645639
@@ -1,10 +1,11 @@
 #!/usr/bin/env python3
 """Simple server test - runs the server briefly to check for startup errors."""
 
+import signal
 import sys
-import signal
 import threading
 import time
+
 
 def timeout_handler():
     """Exit after a few seconds to prevent hanging."""
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py:before	2025-09-23 23:30:53.749407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py:after	2025-09-23 23:31:13.652166
@@ -4,8 +4,9 @@
 Tests the builder workflow end-to-end
 """
 
+import os
 import sys
-import os
+
 sys.path.insert(0, os.path.abspath('.'))
 
 from fabric_rti_mcp.eventstream import eventstream_builder_service as builder
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py:before	2025-09-23 23:30:53.746407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py:after	2025-09-23 23:31:13.654871
@@ -5,14 +5,16 @@
 """
 
 import json
+
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
-    eventstream_start_definition,
-    eventstream_add_sample_data_source, 
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
+    eventstream_add_sample_data_source,
     eventstream_get_current_definition,
-    eventstream_validate_definition
+    eventstream_start_definition,
+    eventstream_validate_definition,
 )
+
 
 def main():
     print("=== Building Eventstream: TestMCPSampleBikes ===\n")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py:before	2025-09-23 23:30:53.750407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py:after	2025-09-23 23:31:13.660535
@@ -7,6 +7,7 @@
     
     try:
         from fastmcp import FastMCP
+
         from fabric_rti_mcp.server import register_tools
         
         print("✓ Imports successful")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py:before	2025-09-23 23:30:53.748407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py:after	2025-09-23 23:31:13.663717
@@ -6,7 +6,8 @@
 import json
 import uuid
 from datetime import datetime
-from typing import Dict, Any, Optional
+from typing import Any, Dict, Optional
+
 
 def create_fixed_eventstream_payload(
     eventstream_name: str,
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py:before	2025-09-23 23:30:53.749407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py:after	2025-09-23 23:31:13.668348
@@ -2,6 +2,7 @@
 """Test each import step by step to find the hanging point."""
 
 import sys
+
 
 def test_import_chain():
     """Test the import chain step by step."""
@@ -10,7 +11,7 @@
         print("1. Testing basic imports...")
         import uuid
         from datetime import datetime
-        from typing import Dict, List, Optional, Any
+        from typing import Any, Dict, List, Optional
         print("   ✓ Basic imports OK")
         
         print("2. Testing fabric_rti_mcp.common...")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py:before	2025-09-23 23:30:53.746407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py:after	2025-09-23 23:31:13.671831
@@ -5,14 +5,15 @@
 """
 
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
+    eventstream_add_derived_stream,
+    eventstream_add_sample_data_source,
+    eventstream_create_from_definition,
+    eventstream_get_current_definition,
+    eventstream_list_available_components,
     eventstream_start_definition,
-    eventstream_get_current_definition,
-    eventstream_add_sample_data_source,
-    eventstream_add_derived_stream,
     eventstream_validate_definition,
-    eventstream_create_from_definition,
-    eventstream_list_available_components
 )
+
 
 def build_eventstream_step_by_step():
     """Build the TestMCPSampleBikes22 eventstream step by step"""
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py:before	2025-09-23 23:30:53.749407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py:after	2025-09-23 23:31:13.679383
@@ -4,9 +4,10 @@
 Tests key components and functionality
 """
 
+import os
 import sys
-import os
 from typing import List
+
 
 def test_imports() -> bool:
     """Test that all required modules can be imported"""
@@ -34,7 +35,7 @@
     print("\n🔧 Testing MCP tools registration...")
     try:
         from fabric_rti_mcp.server import mcp
-        
+
         # Get list of tools
         tools = mcp.list_tools()
         print(f"✅ Found {len(tools)} registered tools:")
@@ -118,11 +119,11 @@
     
     try:
         from fabric_rti_mcp.eventstream.eventstream_builder_service import (
+            eventstream_get_current_definition,
+            eventstream_list_available_components,
             eventstream_start_definition,
-            eventstream_get_current_definition,
-            eventstream_list_available_components
         )
-        
+
         # Test 1: Start a definition
         print("  Testing eventstream_start_definition...")
         result = eventstream_start_definition("test-stream", "Test eventstream for sanity check")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py:before	2025-09-23 23:30:53.746407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py:after	2025-09-23 23:31:13.684544
@@ -9,7 +9,7 @@
         import json
         import uuid
         from datetime import datetime
-        from typing import Dict, List, Optional, Any, Union
+        from typing import Any, Dict, List, Optional, Union
         print("✓ Basic imports successful")
     except Exception as e:
         print(f"✗ Basic imports failed: {e}")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py:before	2025-09-23 23:30:53.749407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py:after	2025-09-23 23:31:13.685995
@@ -2,6 +2,7 @@
 """Test individual imports to isolate the hanging issue."""
 
 import sys
+
 
 def test_import(module_name, description):
     """Test importing a module."""
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py:before	2025-09-23 23:30:53.749407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py:after	2025-09-23 23:31:13.694087
@@ -3,15 +3,17 @@
 Demo script showing the exact HTTP REST API payload for TestMCPSampleBikes eventstream
 """
 
+import base64
 import json
-import base64
+
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
-    eventstream_start_definition,
-    eventstream_add_sample_data_source, 
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
-    eventstream_get_current_definition
+    eventstream_add_sample_data_source,
+    eventstream_get_current_definition,
+    eventstream_start_definition,
 )
+
 
 def show_rest_api_payload():
     print("=== Building TestMCPSampleBikes Eventstream ===\n")
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py:before	2025-09-23 23:30:53.749407
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py:after	2025-09-23 23:31:13.698655
@@ -4,12 +4,14 @@
 """
 
 import json
+
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
+    eventstream_add_default_stream,
+    eventstream_add_sample_data_source,
+    eventstream_get_current_definition,
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
-    eventstream_add_default_stream,
-    eventstream_get_current_definition
 )
+
 
 def test_default_stream_naming():
     print("Testing default stream naming convention...")
Skipped 3 files

❌ Black checks failed

--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/decode_working_eventstream.py	2025-09-23 23:30:53.746407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/decode_working_eventstream.py	2025-09-23 23:31:14.652775+00:00
@@ -13,26 +13,26 @@
 
 platform_payload = "ewogICIkc2NoZW1hIjogImh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vanNvbi1zY2hlbWFzL2ZhYnJpYy9naXRJbnRlZ3JhdGlvbi9wbGF0Zm9ybVByb3BlcnRpZXMvMi4wLjAvc2NoZW1hLmpzb24iLAogICJtZXRhZGF0YSI6IHsKICAgICJ0eXBlIjogIkV2ZW50c3RyZWFtIiwKICAgICJkaXNwbGF5TmFtZSI6ICJFdmVudHN0cmVhbU1DUFNhbXBsZUJpa2VzIiwKICAgICJkZXNjcmlwdGlvbiI6ICJFdmVudHN0cmVhbSB3aXRoIEJpY3ljbGVzIHNhbXBsZSBkYXRhIHNvdXJjZSBhbmQgcHJvY2Vzc2luZyBzdHJlYW1zIgogIH0sCiAgImNvbmZpZyI6IHsKICAgICJ2ZXJzaW9uIjogIjIuMCIsCiAgICAibG9naWNhbElkIjogIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIKICB9Cn0="
 
 print("=== EVENTSTREAM.JSON ===")
 try:
-    decoded = base64.b64decode(eventstream_payload).decode('utf-8')
+    decoded = base64.b64decode(eventstream_payload).decode("utf-8")
     parsed = json.loads(decoded)
     print(json.dumps(parsed, indent=2))
 except Exception as e:
     print(f"Error decoding eventstream.json: {e}")
 
 print("\n=== EVENTSTREAMPROPERTIES.JSON ===")
 try:
-    decoded = base64.b64decode(properties_payload).decode('utf-8')
+    decoded = base64.b64decode(properties_payload).decode("utf-8")
     parsed = json.loads(decoded)
     print(json.dumps(parsed, indent=2))
 except Exception as e:
     print(f"Error decoding eventstreamProperties.json: {e}")
 
 print("\n=== .PLATFORM ===")
 try:
-    decoded = base64.b64decode(platform_payload).decode('utf-8')
+    decoded = base64.b64decode(platform_payload).decode("utf-8")
     parsed = json.loads(decoded)
     print(json.dumps(parsed, indent=2))
 except Exception as e:
     print(f"Error decoding .platform: {e}")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/decode_working_eventstream.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py	2025-09-23 23:30:53.746407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py	2025-09-23 23:31:14.665637+00:00
@@ -5,74 +5,66 @@
 """
 
 import json
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
+    eventstream_add_sample_data_source,
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
     eventstream_get_current_definition,
-    eventstream_validate_definition
+    eventstream_validate_definition,
 )
+
 
 def main():
     print("=== Building Eventstream: TestMCPSampleBikes ===\n")
-    
+
     # Step 1: Start the definition
     print("Step 1: Starting definition...")
     session = eventstream_start_definition(
-        'TestMCPSampleBikes', 
-        'Simple eventstream for bicycle sample data with derived stream'
+        "TestMCPSampleBikes", "Simple eventstream for bicycle sample data with derived stream"
     )
-    session_id = session['session_id']
+    session_id = session["session_id"]
     print(f"✅ Session started: {session_id}\n")
-    
+
     # Step 2: Add bicycle sample data source
     print("Step 2: Adding bicycle sample data source...")
-    source_result = eventstream_add_sample_data_source(
-        session_id, 
-        'BicycleSampleSource', 
-        'Bicycles'
-    )
+    source_result = eventstream_add_sample_data_source(session_id, "BicycleSampleSource", "Bicycles")
     print(f"✅ Added source: {source_result['source_added']}\n")
-    
+
     # Step 3: Add default stream to process the source data
     print("Step 3: Adding default stream...")
-    default_stream_result = eventstream_add_default_stream(
-        session_id, 
-        ['BicycleSampleSource']
-    )
+    default_stream_result = eventstream_add_default_stream(session_id, ["BicycleSampleSource"])
     print(f"✅ Added default stream: {default_stream_result['stream_added']}\n")
-    
+
     # Step 4: Add derived stream
     print("Step 4: Adding derived stream...")
     derived_stream_result = eventstream_add_derived_stream(
-        session_id, 
-        'SampleBikesDS', 
-        ['TestMCPSampleBikes-stream']  # Using the auto-generated default stream name
+        session_id, "SampleBikesDS", ["TestMCPSampleBikes-stream"]  # Using the auto-generated default stream name
     )
     print(f"✅ Added derived stream: {derived_stream_result['stream_added']}\n")
-    
+
     # Step 5: Get the final definition
     print("=== FINAL EVENTSTREAM DEFINITION ===")
     final_definition = eventstream_get_current_definition(session_id)
-    print(json.dumps(final_definition['definition'], indent=2))
+    print(json.dumps(final_definition["definition"], indent=2))
     print()
-    
+
     # Step 6: Validate
     print("=== VALIDATION RESULTS ===")
     validation = eventstream_validate_definition(session_id)
     print(f"✅ Is Valid: {validation['is_valid']}")
-    
-    if validation['errors']:
+
+    if validation["errors"]:
         print(f"❌ Errors: {validation['errors']}")
-    if validation['warnings']:
+    if validation["warnings"]:
         print(f"⚠️  Warnings: {validation['warnings']}")
-    
+
     print(f"\n📊 Summary:")
     print(f"   Sources: {validation['summary']['sources']}")
     print(f"   Streams: {validation['summary']['streams']} (1 default + 1 derived)")
     print(f"   Destinations: {validation['summary']['destinations']}")
     print(f"   Operators: {validation['summary']['operators']}")
 
+
 if __name__ == "__main__":
     main()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/demo_eventstream_definition.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py	2025-09-23 23:30:53.746407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py	2025-09-23 23:31:14.670008+00:00
@@ -1,70 +1,80 @@
 #!/usr/bin/env python3
 """Minimal test to isolate the eventstream_builder_service import issue."""
 
+
 def test_step_by_step():
     """Test imports step by step to find where it fails."""
-    
+
     print("Step 1: Testing basic imports...")
     try:
         import json
         import uuid
         from datetime import datetime
         from typing import Dict, List, Optional, Any, Union
+
         print("✓ Basic imports successful")
     except Exception as e:
         print(f"✗ Basic imports failed: {e}")
         return False
-    
+
     print("Step 2: Testing fabric_rti_mcp.common...")
     try:
         from fabric_rti_mcp.common import logger
+
         print("✓ Common module import successful")
     except Exception as e:
         print(f"✗ Common module import failed: {e}")
         return False
-    
+
     print("Step 3: Testing eventstream_service import...")
     try:
         from fabric_rti_mcp.eventstream import eventstream_service
+
         print("✓ eventstream_service module import successful")
     except Exception as e:
         print(f"✗ eventstream_service module import failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     print("Step 4: Testing specific function import...")
     try:
         from fabric_rti_mcp.eventstream.eventstream_service import eventstream_create
+
         print("✓ eventstream_create function import successful")
     except Exception as e:
         print(f"✗ eventstream_create function import failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     print("Step 5: Testing eventstream_builder_service import...")
     try:
         from fabric_rti_mcp.eventstream import eventstream_builder_service
+
         print("✓ eventstream_builder_service module import successful")
     except Exception as e:
         print(f"✗ eventstream_builder_service module import failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     print("Step 6: Testing specific function access...")
     try:
         func = eventstream_builder_service.eventstream_start_definition
         print(f"✓ eventstream_start_definition function found: {func}")
         return True
     except Exception as e:
         print(f"✗ eventstream_start_definition function not found: {e}")
         print(f"Available attributes: {dir(eventstream_builder_service)}")
         return False
 
+
 if __name__ == "__main__":
     print("=== Eventstream Builder Service Import Test ===")
     success = test_step_by_step()
     if success:
         print("\n✅ All imports successful!")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/debug_imports.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py	2025-09-23 23:30:53.746407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py	2025-09-23 23:31:14.728258+00:00
@@ -9,118 +9,113 @@
     eventstream_get_current_definition,
     eventstream_add_sample_data_source,
     eventstream_add_derived_stream,
     eventstream_validate_definition,
     eventstream_create_from_definition,
-    eventstream_list_available_components
+    eventstream_list_available_components,
 )
+
 
 def build_eventstream_step_by_step():
     """Build the TestMCPSampleBikes22 eventstream step by step"""
-    
+
     print("🚀 Building EventStream: TestMCPSampleBikes22")
     print("=" * 60)
-    
+
     # Configuration
     eventstream_name = "TestMCPSampleBikes22"
     workspace_id = "bff1ab3a-47f0-4b85-9226-509c4cfdda10"
     description = "EventStream with bicycle sample data and derived stream"
-    
+
     try:
         # STEP 1: Start the eventstream definition
         print("📋 STEP 1: Starting eventstream definition...")
-        session_result = eventstream_start_definition(
-            name=eventstream_name, 
-            description=description
-        )
-        session_id = session_result['session_id']
+        session_result = eventstream_start_definition(name=eventstream_name, description=description)
+        session_id = session_result["session_id"]
         print(f"✅ Started session: {session_id}")
         print(f"   Name: {session_result['name']}")
         print(f"   Status: {session_result['status']}")
         print()
-        
+
         # STEP 2: Add bicycle sample data source
         print("🚲 STEP 2: Adding bicycle sample data source...")
         source_result = eventstream_add_sample_data_source(
-            session_id=session_id,
-            source_name="BicycleDataSource",
-            sample_type="Bicycles"
+            session_id=session_id, source_name="BicycleDataSource", sample_type="Bicycles"
         )
         print(f"✅ Added data source: {source_result['source_added']}")
         print(f"   Type: {source_result['source_type']}")
         print(f"   Total sources: {source_result['sources_count']}")
         print()
-        
+
         # STEP 3: Default stream is automatically created
         print("🌊 STEP 3: Default stream automatically created with definition...")
         print(f"✅ Default stream available for derived streams")
         print(f"   Total streams: 1 (DefaultStream)")
         print()
-        
+
         # STEP 4: Add derived stream "SampleBikesDS"
         print("🔄 STEP 4: Adding derived stream 'SampleBikesDS'...")
         derived_stream_result = eventstream_add_derived_stream(
             session_id=session_id,
             stream_name="SampleBikesDS",
             source_stream=f"{eventstream_name}-stream",
-            transformation_query="| where isnotempty(BikeId) | extend ProcessedAt = now()"
+            transformation_query="| where isnotempty(BikeId) | extend ProcessedAt = now()",
         )
         print(f"✅ Added derived stream: {derived_stream_result['stream_added']}")
         print(f"   Source stream: {derived_stream_result['source_stream']}")
         print(f"   Total streams: {derived_stream_result['streams_count']}")
         print()
-        
+
         # STEP 5: Get current definition to review
         print("📄 STEP 5: Reviewing current definition...")
         current_def = eventstream_get_current_definition(session_id)
         print(f"✅ Current definition status: {current_def['status']}")
         print(f"   Sources: {len(current_def['definition']['sources'])}")
         print(f"   Streams: {len(current_def['definition']['streams'])}")
         print(f"   Last updated: {current_def['last_updated']}")
         print()
-        
+
         # STEP 6: Validate the definition
         print("🔍 STEP 6: Validating eventstream definition...")
         validation_result = eventstream_validate_definition(session_id)
         print(f"✅ Validation status: {validation_result['status']}")
-        if validation_result['status'] == 'valid':
+        if validation_result["status"] == "valid":
             print("   All components are properly configured")
             print("   Ready for creation!")
         else:
             print(f"   Issues found: {validation_result.get('issues', [])}")
         print()
-        
+
         # STEP 7: Create the eventstream (if validation passed)
-        if validation_result['status'] == 'valid':
+        if validation_result["status"] == "valid":
             print("🎯 STEP 7: Creating eventstream in Fabric workspace...")
-            creation_result = eventstream_create_from_definition(
-                session_id=session_id,
-                workspace_id=workspace_id
-            )
+            creation_result = eventstream_create_from_definition(session_id=session_id, workspace_id=workspace_id)
             print(f"✅ Creation status: {creation_result['status']}")
-            if 'item_id' in creation_result:
+            if "item_id" in creation_result:
                 print(f"   Item ID: {creation_result['item_id']}")
-            if 'message' in creation_result:
+            if "message" in creation_result:
                 print(f"   Message: {creation_result['message']}")
         else:
             print("❌ STEP 7: Skipping creation due to validation issues")
-        
+
         print()
         print("🎉 EVENTSTREAM BUILD COMPLETE!")
         print("=" * 60)
         print(f"EventStream: {eventstream_name}")
         print(f"Workspace: {workspace_id}")
         print(f"Data Source: Bicycle sample data")
         print(f"Default Stream: {eventstream_name}-stream")
         print(f"Derived Stream: SampleBikesDS")
         print("=" * 60)
-        
+
         return session_id
-        
+
     except Exception as e:
         print(f"❌ Error during eventstream building: {e}")
         import traceback
+
         traceback.print_exc()
         return None
 
+
 if __name__ == "__main__":
     build_eventstream_step_by_step()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/build_eventstream_demo.py
error: cannot format /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/kusto/kusto_tools.py: Cannot parse for target version Python 3.10: 9:0: <<<<<<< HEAD
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/quick_check.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/quick_check.py	2025-09-23 23:31:14.990948+00:00
@@ -1,48 +1,57 @@
 #!/usr/bin/env python3
 """
 Quick sanity check for builder tools
 """
 
+
 def quick_check():
     print("🔍 Quick Builder Tools Check")
     print("=" * 40)
-    
+
     # Test imports
     try:
         from fabric_rti_mcp.server import mcp
+
         print("✅ Server imported")
-        
+
         tools = mcp.list_tools()
-        builder_tools = [t.name for t in tools if 'eventstream' in t.name and any(k in t.name for k in ['add_', 'start_', 'validate_', 'create_from_', 'clear_'])]
-        
+        builder_tools = [
+            t.name
+            for t in tools
+            if "eventstream" in t.name
+            and any(k in t.name for k in ["add_", "start_", "validate_", "create_from_", "clear_"])
+        ]
+
         print(f"✅ Found {len(tools)} total tools")
         print(f"✅ Found {len(builder_tools)} builder tools")
-        
+
         expected_builders = [
             "eventstream_start_definition",
-            "eventstream_add_sample_data_source", 
+            "eventstream_add_sample_data_source",
             "eventstream_validate_definition",
-            "eventstream_create_from_definition"
+            "eventstream_create_from_definition",
         ]
-        
+
         print("\n🏗️ Key Builder Tools:")
         for tool in expected_builders:
             status = "✅" if tool in builder_tools else "❌"
             print(f"  {status} {tool}")
-        
+
         # Test basic functionality
         print("\n🧪 Testing basic functionality:")
         from fabric_rti_mcp.eventstream.eventstream_builder_service import eventstream_start_definition
+
         result = eventstream_start_definition("test", "test description")
-        if 'session_id' in result:
+        if "session_id" in result:
             print("✅ Builder functionality works")
         else:
             print("❌ Builder functionality failed")
-            
+
         print(f"\n🎉 Builder tools ready: {len(builder_tools)}/12 expected tools available")
-        
+
     except Exception as e:
         print(f"❌ Error: {e}")
 
+
 if __name__ == "__main__":
     quick_check()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/quick_check.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py	2025-09-23 23:30:53.748407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py	2025-09-23 23:31:15.013172+00:00
@@ -6,152 +6,105 @@
 import json
 import uuid
 from datetime import datetime
 from typing import Dict, Any, Optional
 
+
 def create_fixed_eventstream_payload(
-    eventstream_name: str,
-    definition: Dict[str, Any],
-    description: Optional[str] = None
+    eventstream_name: str, definition: Dict[str, Any], description: Optional[str] = None
 ) -> Dict[str, Any]:
     """
     Create properly formatted eventstream payload with all three required parts.
-    
+
     :param eventstream_name: Name of the eventstream
     :param definition: Eventstream definition dictionary
     :param description: Optional description
     :return: Complete API payload
     """
-    
+
     # 1. Prepare eventstream.json (main definition)
     definition_json = json.dumps(definition)
     definition_b64 = base64.b64encode(definition_json.encode("utf-8")).decode("utf-8")
-    
+
     # 2. Prepare eventstreamProperties.json (retention and throughput settings)
-    properties = {
-        "retentionTimeInDays": 1,
-        "eventThroughputLevel": "Low"
-    }
+    properties = {"retentionTimeInDays": 1, "eventThroughputLevel": "Low"}
     properties_json = json.dumps(properties)
     properties_b64 = base64.b64encode(properties_json.encode("utf-8")).decode("utf-8")
-    
+
     # 3. Prepare .platform (metadata and config)
     platform_metadata = {
         "$schema": "https://developer.microsoft.com/json-schemas/fabric/gitIntegration/platformProperties/2.0.0/schema.json",
-        "metadata": {
-            "type": "Eventstream",
-            "displayName": eventstream_name,
-            "description": description or ""
-        },
-        "config": {
-            "version": "2.0",
-            "logicalId": "00000000-0000-0000-0000-000000000000"
-        }
+        "metadata": {"type": "Eventstream", "displayName": eventstream_name, "description": description or ""},
+        "config": {"version": "2.0", "logicalId": "00000000-0000-0000-0000-000000000000"},
     }
     platform_json = json.dumps(platform_metadata)
     platform_b64 = base64.b64encode(platform_json.encode("utf-8")).decode("utf-8")
-    
+
     # Create the complete payload
     payload = {
         "displayName": eventstream_name,
         "type": "Eventstream",
         "description": description or "",
         "definition": {
             "parts": [
-                {
-                    "path": "eventstream.json",
-                    "payload": definition_b64,
-                    "payloadType": "InlineBase64"
-                },
-                {
-                    "path": "eventstreamProperties.json",
-                    "payload": properties_b64,
-                    "payloadType": "InlineBase64"
-                },
-                {
-                    "path": ".platform",
-                    "payload": platform_b64,
-                    "payloadType": "InlineBase64"
-                }
+                {"path": "eventstream.json", "payload": definition_b64, "payloadType": "InlineBase64"},
+                {"path": "eventstreamProperties.json", "payload": properties_b64, "payloadType": "InlineBase64"},
+                {"path": ".platform", "payload": platform_b64, "payloadType": "InlineBase64"},
             ]
-        }
+        },
     }
-    
+
     return payload
 
 
 def create_test_bikes_definition() -> Dict[str, Any]:
     """
     Create the TestMCPSampleBikes22 eventstream definition.
     """
-    
+
     # Generate UUIDs for all components
     source_id = str(uuid.uuid4())
     default_stream_id = str(uuid.uuid4())
     derived_stream_id = str(uuid.uuid4())
-    
+
     definition = {
         "sources": [
-            {
-                "id": source_id,
-                "name": "BicycleDataSource",
-                "type": "SampleData",
-                "properties": {
-                    "type": "Bicycles"
-                }
-            }
+            {"id": source_id, "name": "BicycleDataSource", "type": "SampleData", "properties": {"type": "Bicycles"}}
         ],
         "streams": [
             {
                 "id": default_stream_id,
                 "name": "TestMCPSampleBikes22-stream",
                 "type": "DefaultStream",
                 "properties": {},
-                "inputNodes": [
-                    {
-                        "name": "BicycleDataSource"
-                    }
-                ]
+                "inputNodes": [{"name": "BicycleDataSource"}],
             },
             {
                 "id": derived_stream_id,
                 "name": "SampleBikesDS",
                 "type": "DerivedStream",
-                "properties": {
-                    "inputSerialization": {
-                        "type": "Json",
-                        "properties": {
-                            "encoding": "UTF8"
-                        }
-                    }
-                },
-                "inputNodes": [
-                    {
-                        "name": "TestMCPSampleBikes22-stream"
-                    }
-                ]
-            }
+                "properties": {"inputSerialization": {"type": "Json", "properties": {"encoding": "UTF8"}}},
+                "inputNodes": [{"name": "TestMCPSampleBikes22-stream"}],
+            },
         ],
         "destinations": [],
         "operators": [],
-        "compatibilityLevel": "1.0"
+        "compatibilityLevel": "1.0",
     }
-    
+
     return definition
 
 
 # Test the fixed format
 if __name__ == "__main__":
     definition = create_test_bikes_definition()
     payload = create_fixed_eventstream_payload(
-        "TestMCPSampleBikes22",
-        definition,
-        "Eventstream with Bicycles sample data and derived stream SampleBikesDS"
+        "TestMCPSampleBikes22", definition, "Eventstream with Bicycles sample data and derived stream SampleBikesDS"
     )
-    
+
     print("=== FIXED PAYLOAD STRUCTURE ===")
     print(f"Parts count: {len(payload['definition']['parts'])}")
-    for i, part in enumerate(payload['definition']['parts']):
+    for i, part in enumerate(payload["definition"]["parts"]):
         print(f"Part {i+1}: {part['path']}")
-    
+
     print("\n=== DEFINITION STRUCTURE ===")
     print(json.dumps(definition, indent=2))
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fix_eventstream_creation.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_auto_connection.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_auto_connection.py	2025-09-23 23:31:15.042830+00:00
@@ -1,42 +1,44 @@
 #!/usr/bin/env python3
 """
 Quick test to verify auto-connection logic works as expected
 """
 
+
 def test_auto_connection_logic():
     """Test the auto-connection logic in isolation"""
-    
+
     # Simulate the condition from our function
     input_nodes = []  # Empty list passed from MCP
     stream_names = ["TestFinalFix-stream"]  # One default stream exists
     operator_names = []  # No operators
-    
+
     print(f"Initial state:")
     print(f"  input_nodes: {input_nodes}")
     print(f"  stream_names: {stream_names}")
     print(f"  operator_names: {operator_names}")
     print()
-    
+
     # Test the auto-connection logic
     if not input_nodes:  # This handles both None and empty list []
         print("Auto-connection check triggered (input_nodes is falsy)")
-        
+
         # Auto-connect logic: if only one stream and no operators, connect to that stream
         if len(stream_names) == 1 and len(operator_names) == 0:
             input_nodes = stream_names.copy()  # Use copy to avoid reference issues
             print(f"Auto-connecting to default stream '{stream_names[0]}'")
         else:
             print(f"Multiple streams/operators exist - auto-connection not allowed")
-            
+
     print(f"Final input_nodes: {input_nodes}")
-    
+
     # Test the inputNodes creation
     final_input_nodes = [{"name": node} for node in input_nodes]
     print(f"Final inputNodes structure: {final_input_nodes}")
-    
+
     return final_input_nodes
+
 
 if __name__ == "__main__":
     print("Testing auto-connection logic...")
     result = test_auto_connection_logic()
     print(f"\nExpected result: [{'name': 'TestFinalFix-stream'}]")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_auto_connection.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py	2025-09-23 23:31:15.066503+00:00
@@ -4,46 +4,48 @@
 """
 
 import json
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
+    eventstream_add_sample_data_source,
     eventstream_add_default_stream,
-    eventstream_get_current_definition
+    eventstream_get_current_definition,
 )
+
 
 def test_default_stream_naming():
     print("Testing default stream naming convention...")
-    
+
     # Start with an eventstream named "TestMCPSampleBikes"
-    session = eventstream_start_definition('TestMCPSampleBikes', 'Test eventstream')
-    session_id = session['session_id']
+    session = eventstream_start_definition("TestMCPSampleBikes", "Test eventstream")
+    session_id = session["session_id"]
     print(f"✅ Started session for eventstream: {session['name']}")
-    
+
     # Add a source
-    eventstream_add_sample_data_source(session_id, 'BicycleSource', 'Bicycles')
+    eventstream_add_sample_data_source(session_id, "BicycleSource", "Bicycles")
     print("✅ Added sample data source")
-    
+
     # Add default stream (no stream name parameter - should auto-generate)
-    result = eventstream_add_default_stream(session_id, ['BicycleSource'])
+    result = eventstream_add_default_stream(session_id, ["BicycleSource"])
     print(f"✅ Added default stream: {result['stream_added']}")
-    
+
     # Get the current definition to verify the stream name
     definition = eventstream_get_current_definition(session_id)
-    
-    streams = definition['definition']['streams']
+
+    streams = definition["definition"]["streams"]
     if len(streams) == 1:
-        stream_name = streams[0]['name']
-        expected_name = 'TestMCPSampleBikes-stream'
-        
+        stream_name = streams[0]["name"]
+        expected_name = "TestMCPSampleBikes-stream"
+
         if stream_name == expected_name:
             print(f"✅ PASS: Default stream named correctly: '{stream_name}'")
         else:
             print(f"❌ FAIL: Expected '{expected_name}', got '{stream_name}'")
     else:
         print(f"❌ FAIL: Expected 1 stream, got {len(streams)}")
-    
+
     print("\nGenerated definition:")
-    print(json.dumps(definition['definition'], indent=2))
+    print(json.dumps(definition["definition"], indent=2))
+
 
 if __name__ == "__main__":
     test_default_stream_naming()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py	2025-09-23 23:31:15.072076+00:00
@@ -5,83 +5,79 @@
 
 import json
 import base64
 from fabric_rti_mcp.eventstream.eventstream_builder_service import (
     eventstream_start_definition,
-    eventstream_add_sample_data_source, 
+    eventstream_add_sample_data_source,
     eventstream_add_default_stream,
     eventstream_add_derived_stream,
-    eventstream_get_current_definition
+    eventstream_get_current_definition,
 )
+
 
 def show_rest_api_payload():
     print("=== Building TestMCPSampleBikes Eventstream ===\n")
-    
+
     # Build the eventstream definition using the builder
-    session = eventstream_start_definition('TestMCPSampleBikes', 'Simple eventstream for bicycle sample data with derived stream')
-    session_id = session['session_id']
-    
+    session = eventstream_start_definition(
+        "TestMCPSampleBikes", "Simple eventstream for bicycle sample data with derived stream"
+    )
+    session_id = session["session_id"]
+
     # Add components
-    eventstream_add_sample_data_source(session_id, 'BicycleSampleSource', 'Bicycles')
-    eventstream_add_default_stream(session_id, ['BicycleSampleSource'])
-    eventstream_add_derived_stream(session_id, 'SampleBikesDS', ['TestMCPSampleBikes-stream'])
-    
+    eventstream_add_sample_data_source(session_id, "BicycleSampleSource", "Bicycles")
+    eventstream_add_default_stream(session_id, ["BicycleSampleSource"])
+    eventstream_add_derived_stream(session_id, "SampleBikesDS", ["TestMCPSampleBikes-stream"])
+
     # Get the final definition
     final_definition = eventstream_get_current_definition(session_id)
-    eventstream_definition = final_definition['definition']
-    
+    eventstream_definition = final_definition["definition"]
+
     print("=== EVENTSTREAM DEFINITION (what gets base64 encoded) ===")
     definition_json = json.dumps(eventstream_definition, indent=2)
     print(definition_json)
-    
+
     # Encode as base64 (like the service does)
     definition_b64 = base64.b64encode(definition_json.encode("utf-8")).decode("utf-8")
-    
+
     # Build the complete HTTP payload
     workspace_id = "bff1ab3a-47f0-4b85-9226-509c4cfdda10"
-    eventstream_name = session['name']
-    description = session['description']
-    
+    eventstream_name = session["name"]
+    description = session["description"]
+
     http_payload = {
         "displayName": eventstream_name,
-        "type": "Eventstream", 
+        "type": "Eventstream",
         "description": description,
         "definition": {
             "parts": [
-                {
-                    "path": "eventstream.json",
-                    "payload": definition_b64,
-                    "payloadType": "InlineBase64"
-                },
-                {
-                    "path": ".platform", 
-                    "payload": definition_b64,
-                    "payloadType": "InlineBase64"
-                }
+                {"path": "eventstream.json", "payload": definition_b64, "payloadType": "InlineBase64"},
+                {"path": ".platform", "payload": definition_b64, "payloadType": "InlineBase64"},
             ]
-        }
+        },
     }
-    
-    print("\n" + "="*60)
+
+    print("\n" + "=" * 60)
     print("=== COMPLETE HTTP REST API PAYLOAD ===")
     print(f"Method: POST")
     print(f"URL: https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/items")
     print(f"Headers: Authorization: Bearer <token>, Content-Type: application/json")
     print("\nPayload (JSON):")
     print(json.dumps(http_payload, indent=2))
-    
-    print("\n" + "="*60) 
+
+    print("\n" + "=" * 60)
     print("=== BASE64 DECODED DEFINITION (for reference) ===")
     print("The 'payload' field above contains this definition (base64 encoded):")
     print(definition_json)
-    
-    print("\n" + "="*60)
+
+    print("\n" + "=" * 60)
     print("=== SUMMARY ===")
     print(f"✅ Eventstream Name: {eventstream_name}")
-    print(f"✅ Target Workspace: {workspace_id}")  
+    print(f"✅ Target Workspace: {workspace_id}")
     print(f"✅ Description: {description}")
     print(f"✅ Definition Size: {len(definition_json)} characters")
     print(f"✅ Base64 Payload Size: {len(definition_b64)} characters")
     print(f"✅ Components: 1 source, 2 streams (1 default + 1 derived), 0 destinations")
 
+
 if __name__ == "__main__":
     show_rest_api_payload()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/show_rest_api_payload.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py	2025-09-23 23:31:15.109725+00:00
@@ -1,9 +1,10 @@
 #!/usr/bin/env python3
 """Test individual imports to isolate the hanging issue."""
 
 import sys
+
 
 def test_import(module_name, description):
     """Test importing a module."""
     try:
         print(f"Testing {description}...")
@@ -11,10 +12,11 @@
         print(f"✓ {description} import successful")
         return True
     except Exception as e:
         print(f"✗ {description} import error: {e}")
         return False
+
 
 # Test basic imports first
 test_import("logging", "logging")
 test_import("sys", "sys")
 test_import("os", "os")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_imports.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py	2025-09-23 23:31:15.126764+00:00
@@ -1,58 +1,66 @@
 #!/usr/bin/env python3
 """Test each import step by step to find the hanging point."""
 
 import sys
 
+
 def test_import_chain():
     """Test the import chain step by step."""
-    
+
     try:
         print("1. Testing basic imports...")
         import uuid
         from datetime import datetime
         from typing import Dict, List, Optional, Any
+
         print("   ✓ Basic imports OK")
-        
+
         print("2. Testing fabric_rti_mcp.common...")
         from fabric_rti_mcp.common import logger
+
         print("   ✓ Common module OK")
-        
+
         print("3. Testing other eventstream modules...")
-        
+
         print("3a. Testing eventstream_connection...")
         from fabric_rti_mcp.eventstream import eventstream_connection
+
         print("   ✓ eventstream_connection OK")
-        
+
         print("3b. Testing eventstream_service...")
         from fabric_rti_mcp.eventstream import eventstream_service
+
         print("   ✓ eventstream_service OK")
-        
+
         print("4. Testing eventstream_builder_service directly...")
         # Let's try to import the file content step by step
-        sys.path.insert(0, 'fabric_rti_mcp/eventstream')
-        
+        sys.path.insert(0, "fabric_rti_mcp/eventstream")
+
         print("4a. Trying direct import...")
         import eventstream_builder_service
+
         print("   ✓ Direct import OK")
-        
+
         print("4b. Checking for function...")
-        has_func = hasattr(eventstream_builder_service, 'eventstream_start_definition')
+        has_func = hasattr(eventstream_builder_service, "eventstream_start_definition")
         print(f"   Has function: {has_func}")
-        
+
         if not has_func:
             print("   Available attributes:")
             for attr in dir(eventstream_builder_service):
-                if not attr.startswith('_') and callable(getattr(eventstream_builder_service, attr)):
+                if not attr.startswith("_") and callable(getattr(eventstream_builder_service, attr)):
                     print(f"     - {attr}")
-        
+
         return has_func
-        
+
     except Exception as e:
         print(f"ERROR at step: {e}")
         import traceback
+
         traceback.print_exc()
         return False
+
 
 if __name__ == "__main__":
     print("=== Import Chain Test ===")
     test_import_chain()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_import_chain.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_import.py	2025-09-23 23:30:53.750407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_import.py	2025-09-23 23:31:15.165051+00:00
@@ -3,34 +3,40 @@
 
 print("Testing basic MCP import...")
 
 try:
     import mcp
+
     print("✓ mcp import successful")
     print(f"  mcp version: {getattr(mcp, '__version__', 'unknown')}")
 except Exception as e:
     print(f"✗ mcp import failed: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTesting fastmcp import...")
 
 try:
     import fastmcp
-    print("✓ fastmcp import successful") 
+
+    print("✓ fastmcp import successful")
     print(f"  fastmcp version: {getattr(fastmcp, '__version__', 'unknown')}")
 except Exception as e:
     print(f"✗ fastmcp import failed: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTesting FastMCP class import...")
 
 try:
     from mcp.server.fastmcp import FastMCP
+
     print("✓ FastMCP class import successful")
 except Exception as e:
     print(f"✗ FastMCP class import failed: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTest completed.")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_import.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_fixed.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_fixed.py	2025-09-23 23:31:15.183291+00:00
@@ -1,79 +1,90 @@
 #!/usr/bin/env python3
 """Test script to verify all MCP imports work correctly."""
+
 
 def test_basic_imports():
     """Test that all required imports work."""
     print("Testing basic imports...")
-    
+
     # Test FastMCP import
     try:
         from fastmcp import FastMCP
+
         print("✓ FastMCP import successful")
     except Exception as e:
         print(f"✗ FastMCP import failed: {e}")
         return False
-    
+
     # Test fabric_rti_mcp imports
     try:
         from fabric_rti_mcp import __version__
+
         print(f"✓ fabric_rti_mcp version: {__version__}")
     except Exception as e:
         print(f"✗ fabric_rti_mcp import failed: {e}")
         return False
-    
+
     # Test common module
     try:
         from fabric_rti_mcp.common import logger
+
         print("✓ fabric_rti_mcp.common import successful")
     except Exception as e:
         print(f"✗ fabric_rti_mcp.common import failed: {e}")
         return False
-    
+
     # Test kusto tools
     try:
         from fabric_rti_mcp.kusto import kusto_tools
+
         print("✓ kusto_tools import successful")
     except Exception as e:
         print(f"✗ kusto_tools import failed: {e}")
         return False
-    
+
     # Test eventstream tools
     try:
         from fabric_rti_mcp.eventstream import eventstream_tools
+
         print("✓ eventstream_tools import successful")
     except Exception as e:
         print(f"✗ eventstream_tools import failed: {e}")
         return False
-    
+
     return True
+
 
 def test_server_creation():
     """Test creating a FastMCP server instance."""
     print("\nTesting server creation...")
-    
+
     try:
         from fastmcp import FastMCP
+
         mcp = FastMCP("test-server")
         print("✓ FastMCP server instance created successfully")
         return True
     except Exception as e:
         print(f"✗ FastMCP server creation failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
 
+
 def main():
     print("=== MCP Server Import Test ===")
-    
+
     if not test_basic_imports():
         print("\n❌ Basic imports failed!")
         return
-    
+
     if not test_server_creation():
         print("\n❌ Server creation failed!")
         return
-    
+
     print("\n✅ All tests passed! The MCP server should start successfully.")
+
 
 if __name__ == "__main__":
     main()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_mcp_fixed.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py	2025-09-23 23:31:15.192430+00:00
@@ -6,211 +6,233 @@
 
 import sys
 import os
 from typing import List
 
+
 def test_imports() -> bool:
     """Test that all required modules can be imported"""
     print("🧪 Testing imports...")
     try:
         import fabric_rti_mcp
+
         print(f"✅ fabric_rti_mcp version: {fabric_rti_mcp.__version__}")
-        
+
         from fabric_rti_mcp.server import mcp
+
         print("✅ Server module imported")
-        
+
         from fabric_rti_mcp.kusto import kusto_service, kusto_tools
+
         print("✅ Kusto modules imported")
-        
+
         from fabric_rti_mcp.eventstream import eventstream_service, eventstream_tools
+
         print("✅ Eventstream modules imported")
-        
+
         return True
     except Exception as e:
         print(f"❌ Import failed: {e}")
         return False
+
 
 def test_mcp_tools() -> bool:
     """Test MCP tools registration"""
     print("\n🔧 Testing MCP tools registration...")
     try:
         from fabric_rti_mcp.server import mcp
-        
+
         # Get list of tools
         tools = mcp.list_tools()
         print(f"✅ Found {len(tools)} registered tools:")
-        
+
         kusto_tools = []
         eventstream_basic_tools = []
         eventstream_builder_tools = []
-        
+
         for tool in tools:
             print(f"  - {tool.name}")
-            if 'kusto' in tool.name:
+            if "kusto" in tool.name:
                 kusto_tools.append(tool.name)
-            elif 'eventstream' in tool.name:
-                if any(keyword in tool.name for keyword in ['add_', 'start_', 'validate_', 'create_from_', 'clear_', 'get_current_', 'list_available_']):
+            elif "eventstream" in tool.name:
+                if any(
+                    keyword in tool.name
+                    for keyword in [
+                        "add_",
+                        "start_",
+                        "validate_",
+                        "create_from_",
+                        "clear_",
+                        "get_current_",
+                        "list_available_",
+                    ]
+                ):
                     eventstream_builder_tools.append(tool.name)
                 else:
                     eventstream_basic_tools.append(tool.name)
-        
+
         print(f"\n📊 Kusto tools ({len(kusto_tools)}): {kusto_tools}")
         print(f"🌊 Basic Eventstream tools ({len(eventstream_basic_tools)}): {eventstream_basic_tools}")
         print(f"🏗️ Builder Eventstream tools ({len(eventstream_builder_tools)}): {eventstream_builder_tools}")
-        
+
         return len(tools) > 0
     except Exception as e:
         print(f"❌ Tools test failed: {e}")
         return False
+
 
 def test_builder_tools_detailed() -> bool:
     """Test builder tools in detail"""
     print("\n🏗️ Testing Builder Tools in Detail...")
-    
+
     expected_builder_tools = [
         "eventstream_start_definition",
-        "eventstream_get_current_definition", 
+        "eventstream_get_current_definition",
         "eventstream_clear_definition",
         "eventstream_add_sample_data_source",
         "eventstream_add_custom_endpoint_source",
         "eventstream_add_derived_stream",
         "eventstream_add_derived_stream",
         "eventstream_add_eventhouse_destination",
         "eventstream_add_custom_endpoint_destination",
         "eventstream_validate_definition",
         "eventstream_create_from_definition",
-        "eventstream_list_available_components"
+        "eventstream_list_available_components",
     ]
-    
+
     try:
         from fabric_rti_mcp.server import mcp
+
         tools = mcp.list_tools()
         available_tools = [t.name for t in tools]
-        
+
         print(f"Expected {len(expected_builder_tools)} builder tools:")
-        
+
         missing_tools = []
         present_tools = []
-        
+
         for tool in expected_builder_tools:
             if tool in available_tools:
                 print(f"  ✅ {tool}")
                 present_tools.append(tool)
             else:
                 print(f"  ❌ {tool} (MISSING)")
                 missing_tools.append(tool)
-        
+
         print(f"\n📈 Builder Tools Summary:")
         print(f"  Present: {len(present_tools)}/{len(expected_builder_tools)}")
         print(f"  Missing: {len(missing_tools)}")
-        
+
         if missing_tools:
             print(f"  Missing tools: {missing_tools}")
-        
+
         return len(missing_tools) == 0
-        
+
     except Exception as e:
         print(f"❌ Builder tools test failed: {e}")
         return False
+
 
 def test_builder_functionality() -> bool:
     """Test basic builder functionality"""
     print("\n🧪 Testing Builder Functionality...")
-    
+
     try:
         from fabric_rti_mcp.eventstream.eventstream_builder_service import (
             eventstream_start_definition,
             eventstream_get_current_definition,
-            eventstream_list_available_components
+            eventstream_list_available_components,
         )
-        
+
         # Test 1: Start a definition
         print("  Testing eventstream_start_definition...")
         result = eventstream_start_definition("test-stream", "Test eventstream for sanity check")
-        if 'session_id' in result and 'status' in result:
+        if "session_id" in result and "status" in result:
             print(f"    ✅ Started session: {result['session_id']}")
-            session_id = result['session_id']
+            session_id = result["session_id"]
         else:
             print("    ❌ Failed to start session")
             return False
-        
+
         # Test 2: Get current definition
         print("  Testing eventstream_get_current_definition...")
         current_def = eventstream_get_current_definition(session_id)
-        if 'definition' in current_def:
+        if "definition" in current_def:
             print("    ✅ Retrieved current definition")
         else:
             print("    ❌ Failed to get current definition")
             return False
-            
+
         # Test 3: List available components
         print("  Testing eventstream_list_available_components...")
         components = eventstream_list_available_components()
         if isinstance(components, dict):
             print("    ✅ Listed available components")
         else:
             print("    ❌ Failed to list components")
             return False
-            
+
         print("  🎉 All basic builder functionality tests passed!")
         return True
-        
+
     except Exception as e:
         print(f"  ❌ Builder functionality test failed: {e}")
         return False
+
 
 def test_environment() -> bool:
     """Test environment variables"""
     print("\n🌍 Testing environment variables...")
-    
+
     env_vars = {
-        'KUSTO_SERVICE_URI': os.getenv('KUSTO_SERVICE_URI'),
-        'KUSTO_DATABASE': os.getenv('KUSTO_DATABASE'), 
-        'FABRIC_API_BASE_URL': os.getenv('FABRIC_API_BASE_URL')
+        "KUSTO_SERVICE_URI": os.getenv("KUSTO_SERVICE_URI"),
+        "KUSTO_DATABASE": os.getenv("KUSTO_DATABASE"),
+        "FABRIC_API_BASE_URL": os.getenv("FABRIC_API_BASE_URL"),
     }
-    
+
     for name, value in env_vars.items():
         if value:
             print(f"✅ {name}: {value}")
         else:
             print(f"⚠️  {name}: Not set")
-    
+
     return True
+
 
 def main():
     """Run all sanity checks"""
     print("🚀 Fabric RTI MCP Server Sanity Check with Builder Tools")
     print("=" * 65)
-    
+
     tests = [
         ("Imports", test_imports),
         ("MCP Tools Registration", test_mcp_tools),
         ("Builder Tools Detail", test_builder_tools_detailed),
         ("Builder Functionality", test_builder_functionality),
-        ("Environment Variables", test_environment)
+        ("Environment Variables", test_environment),
     ]
-    
+
     results = []
     for name, test_func in tests:
         try:
             result = test_func()
             results.append((name, result))
         except Exception as e:
             print(f"❌ {name} test crashed: {e}")
             results.append((name, False))
-    
+
     print("\n" + "=" * 65)
     print("📋 DETAILED SANITY CHECK REPORT")
     print("=" * 65)
-    
+
     all_passed = True
     for name, passed in results:
         status = "✅ PASS" if passed else "❌ FAIL"
         print(f"{status:<8} {name}")
         if not passed:
             all_passed = False
-    
+
     print("\n" + "=" * 65)
     if all_passed:
         print("🎉 ALL SANITY CHECKS PASSED!")
         print("   MCP server with full builder tools is ready for use.")
         print("   You can now:")
@@ -220,11 +242,12 @@
         print("   - Create and manage Fabric eventstreams")
     else:
         print("⚠️  SOME CHECKS FAILED!")
         print("   Review the detailed output above to identify issues.")
         print("   The MCP server may not function correctly.")
-    
+
     print("=" * 65)
     return 0 if all_passed else 1
 
+
 if __name__ == "__main__":
     sys.exit(main())
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/sanity_check.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py	2025-09-23 23:30:53.750407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py	2025-09-23 23:31:15.196298+00:00
@@ -1,33 +1,36 @@
 #!/usr/bin/env python3
 """Test server startup by importing and checking tool registration."""
+
 
 def test_server_startup():
     """Test that the server can start and register tools without errors."""
     print("Testing MCP server startup...")
-    
+
     try:
         from fastmcp import FastMCP
         from fabric_rti_mcp.server import register_tools
-        
+
         print("✓ Imports successful")
-        
+
         # Create test MCP instance
         mcp = FastMCP("test-server")
         print("✓ FastMCP instance created")
-        
+
         # Try to register tools
         register_tools(mcp)
         print("✓ Tools registered successfully")
-        
+
         print("\n🎉 MCP server startup test PASSED!")
         print("The server should now work with VS Code.")
         return True
-        
+
     except Exception as e:
         print(f"❌ Server startup test FAILED: {e}")
         import traceback
+
         traceback.print_exc()
         return False
 
+
 if __name__ == "__main__":
     test_server_startup()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_final.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_import.py	2025-09-23 23:30:53.750407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_import.py	2025-09-23 23:31:15.218747+00:00
@@ -2,30 +2,36 @@
 """Test script to check server import issues."""
 
 try:
     print("Testing fabric_rti_mcp.server import...")
     import fabric_rti_mcp.server
+
     print("✓ Server import successful")
 except Exception as e:
     print(f"✗ Import error: {e}")
     import traceback
+
     traceback.print_exc()
 
 try:
     print("\nTesting eventstream_builder_service import...")
     import fabric_rti_mcp.eventstream.eventstream_builder_service
+
     print("✓ Builder service import successful")
 except Exception as e:
     print(f"✗ Builder service import error: {e}")
     import traceback
+
     traceback.print_exc()
 
 try:
     print("\nTesting eventstream_tools import...")
     import fabric_rti_mcp.eventstream.eventstream_tools
+
     print("✓ Eventstream tools import successful")
 except Exception as e:
     print(f"✗ Eventstream tools import error: {e}")
     import traceback
+
     traceback.print_exc()
 
 print("\nTesting complete.")
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_import.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_simple.py	2025-09-23 23:30:53.750407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_simple.py	2025-09-23 23:31:15.228951+00:00
@@ -2,25 +2,27 @@
 """Simple test to check module loading issues."""
 
 try:
     print("Step 1: Importing the module...")
     import fabric_rti_mcp.eventstream.eventstream_builder_service as ebs
+
     print("SUCCESS: Module imported")
-    
+
     print("Step 2: Checking for function...")
-    has_func = hasattr(ebs, 'eventstream_start_definition')
+    has_func = hasattr(ebs, "eventstream_start_definition")
     print(f"Has eventstream_start_definition: {has_func}")
-    
+
     if has_func:
         print("Step 3: Getting function...")
-        func = getattr(ebs, 'eventstream_start_definition')
+        func = getattr(ebs, "eventstream_start_definition")
         print(f"Function: {func}")
         print("SUCCESS: Function found!")
     else:
         print("Step 3: Listing available attributes...")
-        attrs = [attr for attr in dir(ebs) if not attr.startswith('_')]
+        attrs = [attr for attr in dir(ebs) if not attr.startswith("_")]
         print(f"Available attributes: {attrs}")
-        
+
 except Exception as e:
     print(f"ERROR: {e}")
     import traceback
+
     traceback.print_exc()
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py	2025-09-23 23:30:53.750407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py	2025-09-23 23:31:15.230002+00:00
@@ -4,36 +4,41 @@
 import sys
 import signal
 import threading
 import time
 
+
 def timeout_handler():
     """Exit after a few seconds to prevent hanging."""
     time.sleep(3)
     print("\n⏰ Test timeout - server appears to be working!")
     sys.exit(0)
 
+
 def main():
     print("Testing MCP server startup...")
-    
+
     # Start timeout thread
     timeout_thread = threading.Thread(target=timeout_handler, daemon=True)
     timeout_thread.start()
-    
+
     try:
         # Import and run the server main function
         from fabric_rti_mcp.server import main as server_main
+
         print("✓ Server import successful")
         print("🚀 Starting server (will auto-exit after 3 seconds)...")
         server_main()
     except KeyboardInterrupt:
         print("\n🛑 Server interrupted")
     except Exception as e:
         print(f"\n❌ Server startup failed: {e}")
         import traceback
+
         traceback.print_exc()
         return False
-    
+
     return True
+
 
 if __name__ == "__main__":
     main()
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_simple.py
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_server_startup.py
--- /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py	2025-09-23 23:30:53.749407+00:00
+++ /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py	2025-09-23 23:31:15.316611+00:00
@@ -4,235 +4,232 @@
 Tests the builder workflow end-to-end
 """
 
 import sys
 import os
-sys.path.insert(0, os.path.abspath('.'))
+
+sys.path.insert(0, os.path.abspath("."))
 
 from fabric_rti_mcp.eventstream import eventstream_builder_service as builder
 
 
 def test_builder_workflow():
     """Test the complete builder workflow."""
     print("🧪 Testing Eventstream Builder Workflow")
     print("=" * 50)
-    
+
     try:
         # Test 1: Start Definition
         print("\n1️⃣ Starting eventstream definition...")
         session = builder.eventstream_start_definition(
-            name="TestEventstream",
-            description="Test eventstream created by automated test"
+            name="TestEventstream", description="Test eventstream created by automated test"
         )
         session_id = session["session_id"]
         print(f"✅ Session created: {session_id}")
         print(f"   Name: {session['name']}")
         print(f"   Status: {session['status']}")
-        
+
         # Test 2: List Available Components
         print("\n2️⃣ Listing available components...")
         components = builder.eventstream_list_available_components()
         print(f"✅ Available sources: {components['sources']}")
         print(f"   Available destinations: {components['destinations']}")
-        
+
         # Test 3: Add Sample Data Source
         print("\n3️⃣ Adding sample data source...")
-        source_result = builder.eventstream_add_sample_data_source(
-            session_id, "TestSource", "Bicycles"
-        )
+        source_result = builder.eventstream_add_sample_data_source(session_id, "TestSource", "Bicycles")
         print(f"✅ Source added: {source_result['source_added']}")
         print(f"   Sources count: {source_result['sources_count']}")
-        
+
         # Test 4: Check Default Stream (auto-created)
         print("\n4️⃣ Checking default stream (auto-created)...")
         current_def = builder.eventstream_get_current_definition(session_id)
-        default_streams = [s for s in current_def['streams'] if s['name'] == 'DefaultStream']
+        default_streams = [s for s in current_def["streams"] if s["name"] == "DefaultStream"]
         print(f"✅ Default stream available: {len(default_streams) > 0}")
         if default_streams:
             print(f"   Default stream: {default_streams[0]['name']}")
-        
+
         # Test 5: Add Derived Stream
         print("\n5️⃣ Adding derived stream...")
-        derived_result = builder.eventstream_add_derived_stream(
-            session_id, "TestDerivedStream", ["DefaultStream"]
-        )
+        derived_result = builder.eventstream_add_derived_stream(session_id, "TestDerivedStream", ["DefaultStream"])
         print(f"✅ Derived stream added: {derived_result['stream_added']}")
         print(f"   Streams count: {derived_result['streams_count']}")
-        
+
         # Test 5: Get Current Definition
         print("\n5️⃣ Getting current definition...")
         current_def = builder.eventstream_get_current_definition(session_id)
         print(f"✅ Definition retrieved for: {current_def['name']}")
         print(f"   Last updated: {current_def['last_updated']}")
         print(f"   Sources: {list(current_def['definition']['sources'].keys())}")
         print(f"   Streams: {list(current_def['definition']['streams'].keys())}")
-        
+
         # Test 6: Validate Definition (should have warnings but no errors)
         print("\n6️⃣ Validating definition...")
         validation = builder.eventstream_validate_definition(session_id)
         print(f"✅ Validation complete - Valid: {validation['is_valid']}")
-        if validation['errors']:
+        if validation["errors"]:
             print(f"   ❌ Errors: {validation['errors']}")
-        if validation['warnings']:
+        if validation["warnings"]:
             print(f"   ⚠️ Warnings: {validation['warnings']}")
         print(f"   Summary: {validation['summary']}")
-        
+
         # Test 7: Add Custom Endpoint Destination
         print("\n7️⃣ Adding custom endpoint destination...")
         dest_result = builder.eventstream_add_custom_endpoint_destination(
-            session_id, "TestDestination", "https://webhook.example.com/events",
-            ["TestStream"]
+            session_id, "TestDestination", "https://webhook.example.com/events", ["TestStream"]
         )
         print(f"✅ Destination added: {dest_result['destination_added']}")
         print(f"   Destinations count: {dest_result['destinations_count']}")
-        
+
         # Test 8: Final Validation
         print("\n8️⃣ Final validation...")
         final_validation = builder.eventstream_validate_definition(session_id)
         print(f"✅ Final validation - Valid: {final_validation['is_valid']}")
-        if final_validation['errors']:
+        if final_validation["errors"]:
             print(f"   ❌ Errors: {final_validation['errors']}")
-        if final_validation['warnings']:
+        if final_validation["warnings"]:
             print(f"   ⚠️ Warnings: {final_validation['warnings']}")
-        
+
         # Test 9: Clear Definition
         print("\n9️⃣ Testing clear definition...")
         clear_result = builder.eventstream_clear_definition(session_id)
         print(f"✅ Definition cleared: {clear_result['status']}")
-        
+
         # Test 10: Verify Cleared
         print("\n🔟 Verifying definition was cleared...")
         cleared_def = builder.eventstream_get_current_definition(session_id)
-        sources_count = len(cleared_def['definition']['sources'])
-        streams_count = len(cleared_def['definition']['streams'])
+        sources_count = len(cleared_def["definition"]["sources"])
+        streams_count = len(cleared_def["definition"]["streams"])
         print(f"✅ After clearing - Sources: {sources_count}, Streams: {streams_count}")
-        
+
         print("\n🎉 All tests passed! Builder workflow is working correctly.")
         return True
-        
+
     except Exception as e:
         print(f"\n❌ Test failed with error: {str(e)}")
         import traceback
+
         traceback.print_exc()
         return False
 
 
 def test_error_handling():
     """Test error handling scenarios."""
     print("\n\n🔬 Testing Error Handling")
     print("=" * 50)
-    
+
     try:
         # Test invalid session
         print("\n1️⃣ Testing invalid session ID...")
         try:
             builder.eventstream_get_current_definition("invalid-session-id")
             print("❌ Should have failed with invalid session")
             return False
         except ValueError as e:
             print(f"✅ Correctly handled invalid session: {str(e)}")
-        
+
         # Test adding stream with non-existent source
         print("\n2️⃣ Testing invalid source reference...")
         session = builder.eventstream_start_definition("ErrorTest")
         session_id = session["session_id"]
-        
+
         try:
             builder.eventstream_add_default_stream(session_id, "BadStream", ["NonExistentSource"])
             print("❌ Should have failed with non-existent source")
             return False
         except ValueError as e:
             print(f"✅ Correctly handled invalid source reference: {str(e)}")
-        
+
         print("\n🎉 Error handling tests passed!")
         return True
-        
+
     except Exception as e:
         print(f"\n❌ Error handling test failed: {str(e)}")
         return False
 
 
 def test_component_types():
     """Test different component types."""
     print("\n\n🔧 Testing Component Types")
     print("=" * 50)
-    
+
     try:
         session = builder.eventstream_start_definition("ComponentTest", "Testing all component types")
         session_id = session["session_id"]
-        
+
         # Test custom endpoint source
         print("\n1️⃣ Testing custom endpoint source...")
-        builder.eventstream_add_custom_endpoint_source(
-            session_id, "APISource", "https://api.example.com/events"
-        )
+        builder.eventstream_add_custom_endpoint_source(session_id, "APISource", "https://api.example.com/events")
         print("✅ Custom endpoint source added")
-        
+
         # Test sample data with different type
         print("\n2️⃣ Testing stock sample data...")
-        builder.eventstream_add_sample_data_source(
-            session_id, "StockData", "Stock"
-        )
+        builder.eventstream_add_sample_data_source(session_id, "StockData", "Stock")
         print("✅ Stock sample data added")
-        
+
         # Test multiple streams
         print("\n3️⃣ Testing multiple streams...")
         builder.eventstream_add_default_stream(session_id, "APIStream", ["APISource"])
         builder.eventstream_add_default_stream(session_id, "StockStream", ["StockData"])
         print("✅ Multiple streams added")
-        
+
         # Test derived stream (should fail - no operators yet)
         print("\n4️⃣ Testing derived stream (should fail)...")
         try:
             builder.eventstream_add_derived_stream(session_id, "DerivedStream", ["NonExistentOperator"])
             print("❌ Should have failed with non-existent operator")
             return False
         except ValueError as e:
             print(f"✅ Correctly handled missing operator: {str(e)}")
-        
+
         # Test Eventhouse destination (mock)
         print("\n5️⃣ Testing Eventhouse destination...")
         builder.eventstream_add_eventhouse_destination(
-            session_id, "DataWarehouse",
-            "workspace-id", "eventhouse-id", "database", "table",
-            ["APIStream", "StockStream"]
+            session_id,
+            "DataWarehouse",
+            "workspace-id",
+            "eventhouse-id",
+            "database",
+            "table",
+            ["APIStream", "StockStream"],
         )
         print("✅ Eventhouse destination added")
-        
+
         # Final validation
         print("\n6️⃣ Final validation of complex definition...")
         validation = builder.eventstream_validate_definition(session_id)
         print(f"✅ Complex definition validation - Valid: {validation['is_valid']}")
         print(f"   Sources: {validation['summary']['sources']}")
         print(f"   Streams: {validation['summary']['streams']}")
         print(f"   Destinations: {validation['summary']['destinations']}")
-        
+
         print("\n🎉 Component type tests passed!")
         return True
-        
+
     except Exception as e:
         print(f"\n❌ Component type test failed: {str(e)}")
         import traceback
+
         traceback.print_exc()
         return False
 
 
 if __name__ == "__main__":
     print("🚀 Starting Eventstream Builder Tests")
     print("====================================")
-    
+
     all_passed = True
-    
+
     # Run workflow test
     all_passed &= test_builder_workflow()
-    
+
     # Run error handling test
     all_passed &= test_error_handling()
-    
+
     # Run component type test
     all_passed &= test_component_types()
-    
+
     # Final result
     print("\n" + "=" * 50)
     if all_passed:
         print("🏆 ALL TESTS PASSED! Builder is ready for use.")
         sys.exit(0)
would reformat /home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_eventstream_builder.py

Oh no! 💥 💔 💥
19 files would be reformatted, 24 files would be left unchanged, 1 file would fail to reformat.

❌ Flake8 checks failed

./build_eventstream_demo.py:7:1: F401 'fabric_rti_mcp.eventstream.eventstream_builder_service.eventstream_list_available_components' imported but unused
./build_eventstream_demo.py:17:1: E302 expected 2 blank lines, found 1
./build_eventstream_demo.py:19:1: W293 blank line contains whitespace
./build_eventstream_demo.py:22:1: W293 blank line contains whitespace
./build_eventstream_demo.py:27:1: W293 blank line contains whitespace
./build_eventstream_demo.py:32:35: W291 trailing whitespace
./build_eventstream_demo.py:40:1: W293 blank line contains whitespace
./build_eventstream_demo.py:52:1: W293 blank line contains whitespace
./build_eventstream_demo.py:55:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:56:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:58:1: W293 blank line contains whitespace
./build_eventstream_demo.py:71:1: W293 blank line contains whitespace
./build_eventstream_demo.py:80:1: W293 blank line contains whitespace
./build_eventstream_demo.py:91:1: W293 blank line contains whitespace
./build_eventstream_demo.py:106:1: W293 blank line contains whitespace
./build_eventstream_demo.py:112:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:114:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:116:1: W293 blank line contains whitespace
./build_eventstream_demo.py:118:1: W293 blank line contains whitespace
./build_eventstream_demo.py:125:1: E305 expected 2 blank lines after class or function definition, found 1
./debug_imports.py:4:1: E302 expected 2 blank lines, found 1
./debug_imports.py:6:1: W293 blank line contains whitespace
./debug_imports.py:9:9: F401 'json' imported but unused
./debug_imports.py:10:9: F401 'uuid' imported but unused
./debug_imports.py:11:9: F401 'datetime.datetime' imported but unused
./debug_imports.py:12:9: F401 'typing.Dict' imported but unused
./debug_imports.py:12:9: F401 'typing.List' imported but unused
./debug_imports.py:12:9: F401 'typing.Optional' imported but unused
./debug_imports.py:12:9: F401 'typing.Any' imported but unused
./debug_imports.py:12:9: F401 'typing.Union' imported but unused
./debug_imports.py:17:1: W293 blank line contains whitespace
./debug_imports.py:20:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./debug_imports.py:25:1: W293 blank line contains whitespace
./debug_imports.py:28:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./debug_imports.py:35:1: W293 blank line contains whitespace
./debug_imports.py:38:9: F401 'fabric_rti_mcp.eventstream.eventstream_service.eventstream_create' imported but unused
./debug_imports.py:45:1: W293 blank line contains whitespace
./debug_imports.py:55:1: W293 blank line contains whitespace
./debug_imports.py:66:1: E305 expected 2 blank lines after class or function definition, found 1
./decode_working_eventstream.py:10:121: E501 line too long (1716 > 120 characters)
./decode_working_eventstream.py:14:121: E501 line too long (561 > 120 characters)
./demo_eventstream_definition.py:10:40: W291 trailing whitespace
./demo_eventstream_definition.py:17:1: E302 expected 2 blank lines, found 1
./demo_eventstream_definition.py:19:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:23:30: W291 trailing whitespace
./demo_eventstream_definition.py:28:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:32:20: W291 trailing whitespace
./demo_eventstream_definition.py:33:31: W291 trailing whitespace
./demo_eventstream_definition.py:37:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:41:20: W291 trailing whitespace
./demo_eventstream_definition.py:45:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:49:20: W291 trailing whitespace
./demo_eventstream_definition.py:50:25: W291 trailing whitespace
./demo_eventstream_definition.py:54:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:60:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:65:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:70:1: W293 blank line contains whitespace
./demo_eventstream_definition.py:71:11: F541 f-string is missing placeholders
./demo_eventstream_definition.py:77:1: E305 expected 2 blank lines after class or function definition, found 1
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:9:121: E501 line too long (128 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:10:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:16:1: F401 'json' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:19:1: F401 'typing.Union' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:113:121: E501 line too long (124 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:114:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:264:121: E501 line too long (149 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:52:121: E501 line too long (163 > 120 characters)
./fabric_rti_mcp/kusto/kusto_tools.py:9:2: E999 IndentationError: expected an indented block after function definition on line 8
./fix_eventstream_creation.py:8:1: F401 'datetime.datetime' imported but unused
./fix_eventstream_creation.py:11:1: E302 expected 2 blank lines, found 1
./fix_eventstream_creation.py:18:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:24:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:28:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:36:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:39:121: E501 line too long (125 > 120 characters)
./fix_eventstream_creation.py:52:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:78:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:86:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:91:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:138:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:150:1: W293 blank line contains whitespace
./fix_eventstream_creation.py:155:1: W293 blank line contains whitespace
./quick_check.py:6:1: E302 expected 2 blank lines, found 1
./quick_check.py:9:1: W293 blank line contains whitespace
./quick_check.py:14:1: W293 blank line contains whitespace
./quick_check.py:16:121: E501 line too long (162 > 120 characters)
./quick_check.py:17:1: W293 blank line contains whitespace
./quick_check.py:20:1: W293 blank line contains whitespace
./quick_check.py:23:50: W291 trailing whitespace
./quick_check.py:27:1: W293 blank line contains whitespace
./quick_check.py:32:1: W293 blank line contains whitespace
./quick_check.py:41:1: W293 blank line contains whitespace
./quick_check.py:43:1: W293 blank line contains whitespace
./quick_check.py:47:1: E305 expected 2 blank lines after class or function definition, found 1
./sanity_check.py:9:1: F401 'typing.List' imported but unused
./sanity_check.py:11:1: E302 expected 2 blank lines, found 1
./sanity_check.py:17:1: W293 blank line contains whitespace
./sanity_check.py:18:9: F401 'fabric_rti_mcp.server.mcp' imported but unused
./sanity_check.py:20:1: W293 blank line contains whitespace
./sanity_check.py:21:9: F401 'fabric_rti_mcp.kusto.kusto_service' imported but unused
./sanity_check.py:21:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./sanity_check.py:23:1: W293 blank line contains whitespace
./sanity_check.py:24:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./sanity_check.py:24:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./sanity_check.py:26:1: W293 blank line contains whitespace
./sanity_check.py:32:1: E302 expected 2 blank lines, found 1
./sanity_check.py:37:1: W293 blank line contains whitespace
./sanity_check.py:41:1: W293 blank line contains whitespace
./sanity_check.py:45:1: W293 blank line contains whitespace
./sanity_check.py:51:121: E501 line too long (153 > 120 characters)
./sanity_check.py:55:1: W293 blank line contains whitespace
./sanity_check.py:59:1: W293 blank line contains whitespace
./sanity_check.py:65:1: E302 expected 2 blank lines, found 1
./sanity_check.py:68:1: W293 blank line contains whitespace
./sanity_check.py:71:46: W291 trailing whitespace
./sanity_check.py:83:1: W293 blank line contains whitespace
./sanity_check.py:88:1: W293 blank line contains whitespace
./sanity_check.py:90:1: W293 blank line contains whitespace
./sanity_check.py:93:1: W293 blank line contains whitespace
./sanity_check.py:101:1: W293 blank line contains whitespace
./sanity_check.py:102:15: F541 f-string is missing placeholders
./sanity_check.py:105:1: W293 blank line contains whitespace
./sanity_check.py:108:1: W293 blank line contains whitespace
./sanity_check.py:110:1: W293 blank line contains whitespace
./sanity_check.py:115:1: E302 expected 2 blank lines, found 1
./sanity_check.py:118:1: W293 blank line contains whitespace
./sanity_check.py:125:1: W293 blank line contains whitespace
./sanity_check.py:135:1: W293 blank line contains whitespace
./sanity_check.py:144:1: W293 blank line contains whitespace
./sanity_check.py:153:1: W293 blank line contains whitespace
./sanity_check.py:156:1: W293 blank line contains whitespace
./sanity_check.py:161:1: E302 expected 2 blank lines, found 1
./sanity_check.py:164:1: W293 blank line contains whitespace
./sanity_check.py:167:55: W291 trailing whitespace
./sanity_check.py:170:1: W293 blank line contains whitespace
./sanity_check.py:176:1: W293 blank line contains whitespace
./sanity_check.py:179:1: E302 expected 2 blank lines, found 1
./sanity_check.py:183:1: W293 blank line contains whitespace
./sanity_check.py:191:1: W293 blank line contains whitespace
./sanity_check.py:200:1: W293 blank line contains whitespace
./sanity_check.py:204:1: W293 blank line contains whitespace
./sanity_check.py:211:1: W293 blank line contains whitespace
./sanity_check.py:225:1: W293 blank line contains whitespace
./sanity_check.py:229:1: E305 expected 2 blank lines after class or function definition, found 1
./show_rest_api_payload.py:10:40: W291 trailing whitespace
./show_rest_api_payload.py:16:1: E302 expected 2 blank lines, found 1
./show_rest_api_payload.py:18:1: W293 blank line contains whitespace
./show_rest_api_payload.py:20:121: E501 line too long (130 > 120 characters)
./show_rest_api_payload.py:22:1: W293 blank line contains whitespace
./show_rest_api_payload.py:27:1: W293 blank line contains whitespace
./show_rest_api_payload.py:31:1: W293 blank line contains whitespace
./show_rest_api_payload.py:35:1: W293 blank line contains whitespace
./show_rest_api_payload.py:38:1: W293 blank line contains whitespace
./show_rest_api_payload.py:43:1: W293 blank line contains whitespace
./show_rest_api_payload.py:46:31: W291 trailing whitespace
./show_rest_api_payload.py:56:41: W291 trailing whitespace
./show_rest_api_payload.py:63:1: W293 blank line contains whitespace
./show_rest_api_payload.py:66:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:68:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:71:1: W293 blank line contains whitespace
./show_rest_api_payload.py:72:25: W291 trailing whitespace
./show_rest_api_payload.py:76:1: W293 blank line contains whitespace
./show_rest_api_payload.py:80:49: W291 trailing whitespace
./show_rest_api_payload.py:84:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:86:1: E305 expected 2 blank lines after class or function definition, found 1
./test_auto_connection.py:6:1: E302 expected 2 blank lines, found 1
./test_auto_connection.py:8:1: W293 blank line contains whitespace
./test_auto_connection.py:13:1: W293 blank line contains whitespace
./test_auto_connection.py:14:11: F541 f-string is missing placeholders
./test_auto_connection.py:19:1: W293 blank line contains whitespace
./test_auto_connection.py:23:1: W293 blank line contains whitespace
./test_auto_connection.py:29:19: F541 f-string is missing placeholders
./test_auto_connection.py:30:1: W293 blank line contains whitespace
./test_auto_connection.py:32:1: W293 blank line contains whitespace
./test_auto_connection.py:36:1: W293 blank line contains whitespace
./test_auto_connection.py:39:1: E305 expected 2 blank lines after class or function definition, found 1
./test_default_stream_naming.py:9:40: W291 trailing whitespace
./test_default_stream_naming.py:14:1: E302 expected 2 blank lines, found 1
./test_default_stream_naming.py:16:1: W293 blank line contains whitespace
./test_default_stream_naming.py:21:1: W293 blank line contains whitespace
./test_default_stream_naming.py:25:1: W293 blank line contains whitespace
./test_default_stream_naming.py:29:1: W293 blank line contains whitespace
./test_default_stream_naming.py:32:1: W293 blank line contains whitespace
./test_default_stream_naming.py:37:1: W293 blank line contains whitespace
./test_default_stream_naming.py:44:1: W293 blank line contains whitespace
./test_default_stream_naming.py:48:1: E305 expected 2 blank lines after class or function definition, found 1
./test_eventstream_builder.py:18:1: W293 blank line contains whitespace
./test_eventstream_builder.py:30:1: W293 blank line contains whitespace
./test_eventstream_builder.py:36:1: W293 blank line contains whitespace
./test_eventstream_builder.py:44:1: W293 blank line contains whitespace
./test_eventstream_builder.py:52:1: W293 blank line contains whitespace
./test_eventstream_builder.py:60:1: W293 blank line contains whitespace
./test_eventstream_builder.py:68:1: W293 blank line contains whitespace
./test_eventstream_builder.py:78:1: W293 blank line contains whitespace
./test_eventstream_builder.py:87:1: W293 blank line contains whitespace
./test_eventstream_builder.py:96:1: W293 blank line contains whitespace
./test_eventstream_builder.py:101:1: W293 blank line contains whitespace
./test_eventstream_builder.py:108:1: W293 blank line contains whitespace
./test_eventstream_builder.py:111:1: W293 blank line contains whitespace
./test_eventstream_builder.py:123:1: W293 blank line contains whitespace
./test_eventstream_builder.py:133:1: W293 blank line contains whitespace
./test_eventstream_builder.py:138:1: W293 blank line contains whitespace
./test_eventstream_builder.py:145:1: W293 blank line contains whitespace
./test_eventstream_builder.py:148:1: W293 blank line contains whitespace
./test_eventstream_builder.py:158:1: W293 blank line contains whitespace
./test_eventstream_builder.py:162:1: W293 blank line contains whitespace
./test_eventstream_builder.py:169:1: W293 blank line contains whitespace
./test_eventstream_builder.py:176:1: W293 blank line contains whitespace
./test_eventstream_builder.py:182:1: W293 blank line contains whitespace
./test_eventstream_builder.py:191:1: W293 blank line contains whitespace
./test_eventstream_builder.py:200:1: W293 blank line contains whitespace
./test_eventstream_builder.py:208:1: W293 blank line contains whitespace
./test_eventstream_builder.py:211:1: W293 blank line contains whitespace
./test_eventstream_builder.py:222:1: W293 blank line contains whitespace
./test_eventstream_builder.py:224:1: W293 blank line contains whitespace
./test_eventstream_builder.py:227:1: W293 blank line contains whitespace
./test_eventstream_builder.py:230:1: W293 blank line contains whitespace
./test_eventstream_builder.py:233:1: W293 blank line contains whitespace
./test_import_chain.py:6:1: E302 expected 2 blank lines, found 1
./test_import_chain.py:8:1: W293 blank line contains whitespace
./test_import_chain.py:11:9: F401 'uuid' imported but unused
./test_import_chain.py:12:9: F401 'datetime.datetime' imported but unused
./test_import_chain.py:13:9: F401 'typing.Dict' imported but unused
./test_import_chain.py:13:9: F401 'typing.List' imported but unused
./test_import_chain.py:13:9: F401 'typing.Optional' imported but unused
./test_import_chain.py:13:9: F401 'typing.Any' imported but unused
./test_import_chain.py:15:1: W293 blank line contains whitespace
./test_import_chain.py:17:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_import_chain.py:19:1: W293 blank line contains whitespace
./test_import_chain.py:21:1: W293 blank line contains whitespace
./test_import_chain.py:23:9: F401 'fabric_rti_mcp.eventstream.eventstream_connection' imported but unused
./test_import_chain.py:25:1: W293 blank line contains whitespace
./test_import_chain.py:27:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./test_import_chain.py:29:1: W293 blank line contains whitespace
./test_import_chain.py:33:1: W293 blank line contains whitespace
./test_import_chain.py:37:1: W293 blank line contains whitespace
./test_import_chain.py:41:1: W293 blank line contains whitespace
./test_import_chain.py:47:1: W293 blank line contains whitespace
./test_import_chain.py:49:1: W293 blank line contains whitespace
./test_import_chain.py:56:1: E305 expected 2 blank lines after class or function definition, found 1
./test_imports.py:4:1: F401 'sys' imported but unused
./test_imports.py:6:1: E302 expected 2 blank lines, found 1
./test_imports.py:18:1: E305 expected 2 blank lines after class or function definition, found 1
./test_mcp_fixed.py:4:1: E302 expected 2 blank lines, found 1
./test_mcp_fixed.py:7:1: W293 blank line contains whitespace
./test_mcp_fixed.py:10:9: F401 'fastmcp.FastMCP' imported but unused
./test_mcp_fixed.py:15:1: W293 blank line contains whitespace
./test_mcp_fixed.py:23:1: W293 blank line contains whitespace
./test_mcp_fixed.py:26:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_mcp_fixed.py:31:1: W293 blank line contains whitespace
./test_mcp_fixed.py:34:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./test_mcp_fixed.py:39:1: W293 blank line contains whitespace
./test_mcp_fixed.py:42:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_mcp_fixed.py:47:1: W293 blank line contains whitespace
./test_mcp_fixed.py:50:1: E302 expected 2 blank lines, found 1
./test_mcp_fixed.py:53:1: W293 blank line contains whitespace
./test_mcp_fixed.py:56:9: F841 local variable 'mcp' is assigned to but never used
./test_mcp_fixed.py:65:1: E302 expected 2 blank lines, found 1
./test_mcp_fixed.py:67:1: W293 blank line contains whitespace
./test_mcp_fixed.py:71:1: W293 blank line contains whitespace
./test_mcp_fixed.py:75:1: W293 blank line contains whitespace
./test_mcp_fixed.py:78:1: E305 expected 2 blank lines after class or function definition, found 1
./test_mcp_import.py:19:41: W291 trailing whitespace
./test_mcp_import.py:29:5: F401 'mcp.server.fastmcp.FastMCP' imported but unused
./test_server_final.py:4:1: E302 expected 2 blank lines, found 1
./test_server_final.py:7:1: W293 blank line contains whitespace
./test_server_final.py:11:1: W293 blank line contains whitespace
./test_server_final.py:13:1: W293 blank line contains whitespace
./test_server_final.py:17:1: W293 blank line contains whitespace
./test_server_final.py:21:1: W293 blank line contains whitespace
./test_server_final.py:25:1: W293 blank line contains whitespace
./test_server_final.py:32:1: E305 expected 2 blank lines after class or function definition, found 1
./test_server_import.py:24:5: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_server_startup.py:5:1: F401 'signal' imported but unused
./test_server_startup.py:9:1: E302 expected 2 blank lines, found 1
./test_server_startup.py:15:1: E302 expected 2 blank lines, found 1
./test_server_startup.py:17:1: W293 blank line contains whitespace
./test_server_startup.py:21:1: W293 blank line contains whitespace
./test_server_startup.py:35:1: W293 blank line contains whitespace
./test_server_startup.py:38:1: E305 expected 2 blank lines after class or function definition, found 1
./test_simple.py:8:1: W293 blank line contains whitespace
./test_simple.py:12:1: W293 blank line contains whitespace
./test_simple.py:22:1: W293 blank line contains whitespace

❌ MyPy checks failed

fabric_rti_mcp/kusto/kusto_tools.py:9: error: Expected an indented block after function definition on line 8  [syntax]
Found 1 error in 1 file (errors prevented further checking)

❌ Pytest checks failed

============================= test session starts ==============================
platform linux -- Python 3.10.18, pytest-8.4.2, pluggy-1.6.0
rootdir: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp
configfile: pyproject.toml
plugins: anyio-4.11.0
collected 37 items / 1 error

==================================== ERRORS ====================================
________________ ERROR collecting test_default_stream_naming.py ________________
ImportError while importing test module '/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/hostedtoolcache/Python/3.10.18/x64/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
test_default_stream_naming.py:7: in <module>
    from fabric_rti_mcp.eventstream.eventstream_builder_service import (
E   ImportError: cannot import name 'eventstream_add_default_stream' from 'fabric_rti_mcp.eventstream.eventstream_builder_service' (/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py)
=========================== short test summary info ============================
ERROR test_default_stream_naming.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 1.35s ===============================

Copy link

Code Quality Report

✅ isort checks passed

✅ Black checks passed

❌ Flake8 checks failed

./build_eventstream_demo.py:7:1: F401 'fabric_rti_mcp.eventstream.eventstream_builder_service.eventstream_list_available_components' imported but unused
./build_eventstream_demo.py:51:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:52:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:105:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:107:15: F541 f-string is missing placeholders
./debug_imports.py:10:9: F401 'json' imported but unused
./debug_imports.py:11:9: F401 'uuid' imported but unused
./debug_imports.py:12:9: F401 'datetime.datetime' imported but unused
./debug_imports.py:13:9: F401 'typing.Any' imported but unused
./debug_imports.py:13:9: F401 'typing.Dict' imported but unused
./debug_imports.py:13:9: F401 'typing.List' imported but unused
./debug_imports.py:13:9: F401 'typing.Optional' imported but unused
./debug_imports.py:13:9: F401 'typing.Union' imported but unused
./debug_imports.py:22:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./debug_imports.py:31:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./debug_imports.py:43:9: F401 'fabric_rti_mcp.eventstream.eventstream_service.eventstream_create' imported but unused
./decode_working_eventstream.py:10:121: E501 line too long (1716 > 120 characters)
./decode_working_eventstream.py:14:121: E501 line too long (561 > 120 characters)
./demo_eventstream_definition.py:63:11: F541 f-string is missing placeholders
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:9:121: E501 line too long (128 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:10:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:16:1: F401 'json' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:19:1: F401 'typing.Union' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:113:121: E501 line too long (124 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:114:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:264:121: E501 line too long (149 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:52:121: E501 line too long (163 > 120 characters)
./fix_eventstream_creation.py:8:1: F401 'datetime.datetime' imported but unused
./fix_eventstream_creation.py:35:121: E501 line too long (125 > 120 characters)
./sanity_check.py:9:1: F401 'typing.List' imported but unused
./sanity_check.py:20:9: F401 'fabric_rti_mcp.server.mcp' imported but unused
./sanity_check.py:24:9: F401 'fabric_rti_mcp.kusto.kusto_service' imported but unused
./sanity_check.py:24:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./sanity_check.py:28:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./sanity_check.py:28:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./sanity_check.py:121:15: F541 f-string is missing placeholders
./show_rest_api_payload.py:62:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:64:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:80:11: F541 f-string is missing placeholders
./test_auto_connection.py:15:11: F541 f-string is missing placeholders
./test_auto_connection.py:30:19: F541 f-string is missing placeholders
./test_import_chain.py:12:9: F401 'uuid' imported but unused
./test_import_chain.py:13:9: F401 'datetime.datetime' imported but unused
./test_import_chain.py:14:9: F401 'typing.Any' imported but unused
./test_import_chain.py:14:9: F401 'typing.Dict' imported but unused
./test_import_chain.py:14:9: F401 'typing.List' imported but unused
./test_import_chain.py:14:9: F401 'typing.Optional' imported but unused
./test_import_chain.py:19:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_import_chain.py:26:9: F401 'fabric_rti_mcp.eventstream.eventstream_connection' imported but unused
./test_import_chain.py:31:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./test_imports.py:4:1: F401 'sys' imported but unused
./test_mcp_fixed.py:11:9: F401 'fastmcp.FastMCP' imported but unused
./test_mcp_fixed.py:29:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_mcp_fixed.py:38:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./test_mcp_fixed.py:47:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_mcp_fixed.py:64:9: F841 local variable 'mcp' is assigned to but never used
./test_mcp_import.py:33:5: F401 'mcp.server.fastmcp.FastMCP' imported but unused
./test_server_import.py:28:5: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_server_startup.py:4:1: F401 'signal' imported but unused

❌ MyPy checks failed

fabric_rti_mcp/eventstream/eventstream_builder_service.py:525: error: Statement is unreachable  [unreachable]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:43: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:51: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:67: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:89: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:97: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:102: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:107: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:38: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:40: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:47: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:52: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/server.py:39: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
Found 20 errors in 4 files (checked 18 source files)

❌ Pytest checks failed

============================= test session starts ==============================
platform linux -- Python 3.10.18, pytest-8.4.2, pluggy-1.6.0
rootdir: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp
configfile: pyproject.toml
plugins: anyio-4.11.0
collected 37 items / 1 error

==================================== ERRORS ====================================
________________ ERROR collecting test_default_stream_naming.py ________________
ImportError while importing test module '/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/hostedtoolcache/Python/3.10.18/x64/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
test_default_stream_naming.py:8: in <module>
    from fabric_rti_mcp.eventstream.eventstream_builder_service import (
E   ImportError: cannot import name 'eventstream_add_default_stream' from 'fabric_rti_mcp.eventstream.eventstream_builder_service' (/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py)
=========================== short test summary info ============================
ERROR test_default_stream_naming.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 1.29s ===============================

Copy link

Code Quality Report

✅ isort checks passed

✅ Black checks passed

❌ Flake8 checks failed

./build_eventstream_demo.py:7:1: F401 'fabric_rti_mcp.eventstream.eventstream_builder_service.eventstream_list_available_components' imported but unused
./build_eventstream_demo.py:51:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:52:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:105:15: F541 f-string is missing placeholders
./build_eventstream_demo.py:107:15: F541 f-string is missing placeholders
./debug_imports.py:10:9: F401 'json' imported but unused
./debug_imports.py:11:9: F401 'uuid' imported but unused
./debug_imports.py:12:9: F401 'datetime.datetime' imported but unused
./debug_imports.py:13:9: F401 'typing.Any' imported but unused
./debug_imports.py:13:9: F401 'typing.Dict' imported but unused
./debug_imports.py:13:9: F401 'typing.List' imported but unused
./debug_imports.py:13:9: F401 'typing.Optional' imported but unused
./debug_imports.py:13:9: F401 'typing.Union' imported but unused
./debug_imports.py:22:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./debug_imports.py:31:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./debug_imports.py:43:9: F401 'fabric_rti_mcp.eventstream.eventstream_service.eventstream_create' imported but unused
./decode_working_eventstream.py:10:121: E501 line too long (1716 > 120 characters)
./decode_working_eventstream.py:14:121: E501 line too long (561 > 120 characters)
./demo_eventstream_definition.py:63:11: F541 f-string is missing placeholders
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:9:121: E501 line too long (128 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:10:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:16:1: F401 'json' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:19:1: F401 'typing.Union' imported but unused
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:113:121: E501 line too long (124 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:114:121: E501 line too long (127 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_service.py:264:121: E501 line too long (149 > 120 characters)
./fabric_rti_mcp/eventstream/eventstream_builder_tools.py:52:121: E501 line too long (163 > 120 characters)
./fix_eventstream_creation.py:8:1: F401 'datetime.datetime' imported but unused
./fix_eventstream_creation.py:35:121: E501 line too long (125 > 120 characters)
./sanity_check.py:9:1: F401 'typing.List' imported but unused
./sanity_check.py:20:9: F401 'fabric_rti_mcp.server.mcp' imported but unused
./sanity_check.py:24:9: F401 'fabric_rti_mcp.kusto.kusto_service' imported but unused
./sanity_check.py:24:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./sanity_check.py:28:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./sanity_check.py:28:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./sanity_check.py:121:15: F541 f-string is missing placeholders
./show_rest_api_payload.py:62:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:64:11: F541 f-string is missing placeholders
./show_rest_api_payload.py:80:11: F541 f-string is missing placeholders
./test_auto_connection.py:15:11: F541 f-string is missing placeholders
./test_auto_connection.py:30:19: F541 f-string is missing placeholders
./test_import_chain.py:12:9: F401 'uuid' imported but unused
./test_import_chain.py:13:9: F401 'datetime.datetime' imported but unused
./test_import_chain.py:14:9: F401 'typing.Any' imported but unused
./test_import_chain.py:14:9: F401 'typing.Dict' imported but unused
./test_import_chain.py:14:9: F401 'typing.List' imported but unused
./test_import_chain.py:14:9: F401 'typing.Optional' imported but unused
./test_import_chain.py:19:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_import_chain.py:26:9: F401 'fabric_rti_mcp.eventstream.eventstream_connection' imported but unused
./test_import_chain.py:31:9: F401 'fabric_rti_mcp.eventstream.eventstream_service' imported but unused
./test_imports.py:4:1: F401 'sys' imported but unused
./test_mcp_fixed.py:11:9: F401 'fastmcp.FastMCP' imported but unused
./test_mcp_fixed.py:29:9: F401 'fabric_rti_mcp.common.logger' imported but unused
./test_mcp_fixed.py:38:9: F401 'fabric_rti_mcp.kusto.kusto_tools' imported but unused
./test_mcp_fixed.py:47:9: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_mcp_fixed.py:64:9: F841 local variable 'mcp' is assigned to but never used
./test_mcp_import.py:33:5: F401 'mcp.server.fastmcp.FastMCP' imported but unused
./test_server_import.py:28:5: F401 'fabric_rti_mcp.eventstream.eventstream_tools' imported but unused
./test_server_startup.py:4:1: F401 'signal' imported but unused

❌ MyPy checks failed

fabric_rti_mcp/eventstream/eventstream_builder_service.py:525: error: Statement is unreachable  [unreachable]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:36: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:43: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:51: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:67: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:89: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:97: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:102: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_builder_tools.py:107: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:18: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:23: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:28: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:38: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:40: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:47: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/eventstream/eventstream_tools.py:52: error: Missing type parameters for generic type "Dict"  [type-arg]
fabric_rti_mcp/server.py:39: error: Argument 1 to "register_tools" has incompatible type "mcp.server.fastmcp.server.FastMCP[Any]"; expected "fastmcp.server.server.FastMCP[Any]"  [arg-type]
Found 20 errors in 4 files (checked 18 source files)

❌ Pytest checks failed

============================= test session starts ==============================
platform linux -- Python 3.10.18, pytest-8.4.2, pluggy-1.6.0
rootdir: /home/runner/work/fabric-rti-mcp/fabric-rti-mcp
configfile: pyproject.toml
plugins: anyio-4.11.0
collected 37 items / 1 error

==================================== ERRORS ====================================
________________ ERROR collecting test_default_stream_naming.py ________________
ImportError while importing test module '/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/test_default_stream_naming.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/hostedtoolcache/Python/3.10.18/x64/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
test_default_stream_naming.py:8: in <module>
    from fabric_rti_mcp.eventstream.eventstream_builder_service import (
E   ImportError: cannot import name 'eventstream_add_default_stream' from 'fabric_rti_mcp.eventstream.eventstream_builder_service' (/home/runner/work/fabric-rti-mcp/fabric-rti-mcp/fabric_rti_mcp/eventstream/eventstream_builder_service.py)
=========================== short test summary info ============================
ERROR test_default_stream_naming.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 1.31s ===============================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant