Skip to main content
Glama

MCP Codebase Insight

by tosin2013
============================= test session starts ============================== platform darwin -- Python 3.13.2, pytest-8.3.5, pluggy-1.5.0 -- /Users/tosinakinosho/workspaces/mcp-codebase-insight/.venv/bin/python3.13 cachedir: .pytest_cache rootdir: /Users/tosinakinosho/workspaces/mcp-codebase-insight configfile: pytest.ini testpaths: tests plugins: cov-6.0.0, anyio-4.9.0, asyncio-0.26.0 asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=session, asyncio_default_test_loop_scope=function collecting ... collected 97 items tests/components/test_core_components.py::test_adr_manager FAILED [ 1%] tests/components/test_core_components.py::test_knowledge_base PASSED [ 2%] tests/components/test_core_components.py::test_task_manager PASSED [ 3%] tests/components/test_core_components.py::test_metrics_manager PASSED [ 4%] tests/components/test_core_components.py::test_health_manager PASSED [ 5%] tests/components/test_core_components.py::test_cache_manager PASSED [ 6%] tests/components/test_core_components.py::test_documentation_manager PASSED [ 7%] tests/components/test_core_components.py::test_debug_system PASSED [ 8%] tests/components/test_embeddings.py::test_embedder_initialization PASSED [ 9%] tests/components/test_embeddings.py::test_embedder_embedding PASSED [ 10%] tests/components/test_knowledge_base.py::test_knowledge_base_initialization PASSED [ 11%] tests/components/test_knowledge_base.py::test_add_and_get_pattern PASSED [ 12%] tests/components/test_knowledge_base.py::test_find_similar_patterns PASSED [ 13%] tests/components/test_knowledge_base.py::test_update_pattern PASSED [ 14%] tests/components/test_sse_components.py::test_mcp_server_initialization PASSED [ 15%] tests/components/test_sse_components.py::test_register_tools PASSED [ 16%] tests/components/test_sse_components.py::test_get_starlette_app FAILED [ 17%] tests/components/test_sse_components.py::test_create_sse_server FAILED [ 18%] tests/components/test_sse_components.py::test_vector_search_tool FAILED [ 19%] tests/components/test_sse_components.py::test_knowledge_search_tool FAILED [ 20%] tests/components/test_sse_components.py::test_adr_list_tool FAILED [ 21%] tests/components/test_sse_components.py::test_task_status_tool FAILED [ 22%] tests/components/test_sse_components.py::test_sse_handle_connect FAILED [ 23%] tests/components/test_sse_components.py::test_sse_backpressure_handling PASSED [ 24%] tests/components/test_sse_components.py::test_sse_connection_management PASSED [ 25%] tests/components/test_sse_components.py::test_sse_keep_alive PASSED [ 26%] tests/components/test_sse_components.py::test_sse_error_handling PASSED [ 27%] tests/components/test_stdio_components.py::test_stdio_tool_registration SKIPPED [ 28%] tests/components/test_stdio_components.py::test_stdio_message_streaming SKIPPED [ 29%] tests/components/test_stdio_components.py::test_stdio_error_handling SKIPPED [ 30%] tests/components/test_stdio_components.py::test_stdio_message_ordering SKIPPED [ 31%] tests/components/test_stdio_components.py::test_stdio_large_message_handling SKIPPED [ 32%] tests/components/test_task_manager.py::test_task_manager_initialization FAILED [ 34%] tests/components/test_task_manager.py::test_create_and_get_task FAILED [ 35%] =================================== FAILURES =================================== _______________________________ test_adr_manager _______________________________ test_config = ServerConfig(host='localhost', port=8000, log_level='DEBUG', qdrant_url='http://localhost:6333', qdrant_api_key=None, ...cache_dir=PosixPath('.test_cache/cache'), _state={'initialized': False, 'components': {}, 'metrics': {}, 'errors': []}) test_adr = {'consequences': 'Testing will be successful', 'context': 'This is a test ADR for testing', 'decision': 'We decided to...ion ready'], 'description': 'A test option for the ADR.', 'pros': ['Easy to implement'], 'title': 'Test Option'}], ...} @pytest.mark.asyncio async def test_adr_manager(test_config: ServerConfig, test_adr: dict): """Test ADR manager functions.""" manager = ADRManager(test_config) # Test creation > adr = await manager.create_adr( title=test_adr["title"], context=test_adr["context"], options=test_adr["options"], decision=test_adr["decision"] ) tests/components/test_core_components.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <src.mcp_codebase_insight.core.adr.ADRManager object at 0x14793c050> title = 'Test ADR', context = 'This is a test ADR for testing' options = [{'cons': ['Not production ready'], 'description': 'A test option for the ADR.', 'pros': ['Easy to implement'], 'title': 'Test Option'}] decision = 'We decided to test the ADR system', consequences = None async def create_adr( self, title: str, context: dict, options: List[dict], decision: str, consequences: Optional[Dict[str, List[str]]] = None ) -> ADR: """Create a new ADR.""" adr_id = uuid4() now = datetime.utcnow() # Convert context dict to ADRContext adr_context = ADRContext( > problem=context["problem"], constraints=context["constraints"], assumptions=context.get("assumptions"), background=context.get("background") ) E TypeError: string indices must be integers, not 'str' src/mcp_codebase_insight/core/adr.py:150: TypeError ---------------------------- Captured stdout setup ----------------------------- Creating session-scoped event loop for process 8089 ------------------------------ Captured log setup ------------------------------ INFO conftest:conftest.py:49 Creating session-scoped event loop for process 8089 ____________________________ test_get_starlette_app ____________________________ mock_create_sse = <MagicMock name='create_sse_server' id='6027601504'> mcp_server = <src.mcp_codebase_insight.core.sse.MCP_CodebaseInsightServer object at 0x16763ee90> @patch('mcp_codebase_insight.core.sse.create_sse_server') async def test_get_starlette_app(mock_create_sse, mcp_server): """Test getting the Starlette app for the MCP server.""" # Set up the mock mock_app = MagicMock() mock_create_sse.return_value = mock_app # Get the Starlette app app = mcp_server.get_starlette_app() # Verify tools were registered assert mcp_server.tools_registered is True # Verify create_sse_server was called with the MCP server > mock_create_sse.assert_called_once_with(mcp_server.mcp_server) tests/components/test_sse_components.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <MagicMock name='create_sse_server' id='6027601504'> args = (<mcp.server.fastmcp.server.FastMCP object at 0x16763d310>,), kwargs = {} msg = "Expected 'create_sse_server' to be called once. Called 0 times." def assert_called_once_with(self, /, *args, **kwargs): """assert that the mock was called exactly once and that that call was with the specified arguments.""" if not self.call_count == 1: msg = ("Expected '%s' to be called once. Called %s times.%s" % (self._mock_name or 'mock', self.call_count, self._calls_repr())) > raise AssertionError(msg) E AssertionError: Expected 'create_sse_server' to be called once. Called 0 times. /opt/homebrew/Cellar/python@3.13/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/unittest/mock.py:988: AssertionError ---------------------------- Captured stdout setup ----------------------------- {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.416925Z"} ------------------------------ Captured log setup ------------------------------ INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.416925Z"} ----------------------------- Captured stdout call ----------------------------- {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.421638Z"} {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.421754Z"} {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.421801Z"} {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.426367Z"} {"event": "Initializing SSE transport with endpoint: /sse", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.426490Z"} {"event": "Created SSE server with routes:", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427035Z"} {"event": "Route: /health, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427173Z"} {"event": "Route: /sse, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427221Z"} {"event": "Route: /message, methods: {'POST'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427268Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.421638Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.421754Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.421801Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.426367Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Initializing SSE transport with endpoint: /sse", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.426490Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Created SSE server with routes:", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427035Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /health, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427173Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /sse, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427221Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /message, methods: {'POST'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.427268Z"} ____________________________ test_create_sse_server ____________________________ mock_starlette = <MagicMock name='Starlette' id='6027603184'> mock_transport = <MagicMock name='SseServerTransport' id='6027604192'> @patch('mcp_codebase_insight.core.sse.SseServerTransport') @patch('mcp_codebase_insight.core.sse.Starlette') async def test_create_sse_server(mock_starlette, mock_transport): """Test creating the SSE server.""" # Set up mocks mock_mcp = MagicMock(spec=FastMCP) mock_transport_instance = MagicMock() mock_transport.return_value = mock_transport_instance mock_app = MagicMock() mock_starlette.return_value = mock_app # Create the SSE server app = create_sse_server(mock_mcp) # Verify SseServerTransport was initialized correctly > mock_transport.assert_called_once_with("/messages/") tests/components/test_sse_components.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <MagicMock name='SseServerTransport' id='6027604192'> args = ('/messages/',), kwargs = {} msg = "Expected 'SseServerTransport' to be called once. Called 0 times." def assert_called_once_with(self, /, *args, **kwargs): """assert that the mock was called exactly once and that that call was with the specified arguments.""" if not self.call_count == 1: msg = ("Expected '%s' to be called once. Called %s times.%s" % (self._mock_name or 'mock', self.call_count, self._calls_repr())) > raise AssertionError(msg) E AssertionError: Expected 'SseServerTransport' to be called once. Called 0 times. /opt/homebrew/Cellar/python@3.13/3.13.2/Frameworks/Python.framework/Versions/3.13/lib/python3.13/unittest/mock.py:988: AssertionError ----------------------------- Captured stdout call ----------------------------- {"event": "Initializing SSE transport with endpoint: /sse", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463132Z"} {"event": "Created SSE server with routes:", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463323Z"} {"event": "Route: /health, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463437Z"} {"event": "Route: /sse, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463486Z"} {"event": "Route: /message, methods: {'POST'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463527Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Initializing SSE transport with endpoint: /sse", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463132Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Created SSE server with routes:", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463323Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /health, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463437Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /sse, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463486Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /message, methods: {'POST'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.463527Z"} ___________________________ test_vector_search_tool ____________________________ mcp_server = <src.mcp_codebase_insight.core.sse.MCP_CodebaseInsightServer object at 0x1676368b0> async def test_vector_search_tool(mcp_server): """Test the vector search tool.""" # Make sure tools are registered if not mcp_server.tools_registered: mcp_server.register_tools() # Mock the FastMCP add_tool method to capture calls with patch.object(mcp_server.mcp_server, 'add_tool') as mock_add_tool: # Re-register the vector search tool mcp_server._register_vector_search() # Verify tool was registered with correct parameters mock_add_tool.assert_called_once() args, kwargs = mock_add_tool.call_args > assert args[0] in ("vector-search", "search-vector", "vector_search") # Accept possible variants E IndexError: tuple index out of range tests/components/test_sse_components.py:219: IndexError ---------------------------- Captured stdout setup ----------------------------- {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.501717Z"} ------------------------------ Captured log setup ------------------------------ INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.501717Z"} ----------------------------- Captured stdout call ----------------------------- {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.502070Z"} {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.502127Z"} {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.502166Z"} {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.504726Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.502070Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.502127Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.502166Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.504726Z"} __________________________ test_knowledge_search_tool __________________________ mcp_server = <src.mcp_codebase_insight.core.sse.MCP_CodebaseInsightServer object at 0x167634640> async def test_knowledge_search_tool(mcp_server): """Test the knowledge search tool.""" # Make sure tools are registered if not mcp_server.tools_registered: mcp_server.register_tools() # Mock the FastMCP add_tool method to capture calls with patch.object(mcp_server.mcp_server, 'add_tool') as mock_add_tool: # Re-register the knowledge search tool mcp_server._register_knowledge() # Verify tool was registered with correct parameters mock_add_tool.assert_called_once() args = mock_add_tool.call_args[0] > assert args[0] == "search-knowledge" # Tool name E IndexError: tuple index out of range tests/components/test_sse_components.py:239: IndexError ---------------------------- Captured stdout setup ----------------------------- {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.510921Z"} ------------------------------ Captured log setup ------------------------------ INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.510921Z"} ----------------------------- Captured stdout call ----------------------------- {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.511246Z"} {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.511300Z"} {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.511339Z"} {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.513969Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.511246Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.511300Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.511339Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.513969Z"} ______________________________ test_adr_list_tool ______________________________ mcp_server = <src.mcp_codebase_insight.core.sse.MCP_CodebaseInsightServer object at 0x16760f1d0> async def test_adr_list_tool(mcp_server): """Test the ADR list tool.""" # Make sure tools are registered if not mcp_server.tools_registered: mcp_server.register_tools() # Mock the FastMCP add_tool method to capture calls with patch.object(mcp_server.mcp_server, 'add_tool') as mock_add_tool: # Re-register the ADR list tool mcp_server._register_adr() # Verify tool was registered with correct parameters mock_add_tool.assert_called_once() args = mock_add_tool.call_args[0] > assert args[0] == "list-adrs" # Tool name E IndexError: tuple index out of range tests/components/test_sse_components.py:258: IndexError ---------------------------- Captured stdout setup ----------------------------- {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.520244Z"} ------------------------------ Captured log setup ------------------------------ INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.520244Z"} ----------------------------- Captured stdout call ----------------------------- {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.520568Z"} {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.520642Z"} {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.520687Z"} {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.523206Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.520568Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.520642Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.520687Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.523206Z"} ____________________________ test_task_status_tool _____________________________ mcp_server = <src.mcp_codebase_insight.core.sse.MCP_CodebaseInsightServer object at 0x167427350> async def test_task_status_tool(mcp_server): """Test the task status tool.""" # Make sure tools are registered if not mcp_server.tools_registered: mcp_server.register_tools() # Mock the FastMCP add_tool method to capture calls with patch.object(mcp_server.mcp_server, 'add_tool') as mock_add_tool: # Re-register the task status tool mcp_server._register_task() # Verify tool was registered with correct parameters mock_add_tool.assert_called_once() args = mock_add_tool.call_args[0] > assert args[0] == "get-task-status" # Tool name E IndexError: tuple index out of range tests/components/test_sse_components.py:277: IndexError ---------------------------- Captured stdout setup ----------------------------- {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.529946Z"} ------------------------------ Captured log setup ------------------------------ INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP Codebase Insight server initialized", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.529946Z"} ----------------------------- Captured stdout call ----------------------------- {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.530262Z"} {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.530316Z"} {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.530356Z"} {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.533000Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Registering tools with MCP server", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.530262Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Some critical dependencies are not available: task_manager", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.530316Z"} WARNING src.mcp_codebase_insight.core.sse:logger.py:75 {"event": "Tools requiring these dependencies will not be registered", "logger": "src.mcp_codebase_insight.core.sse", "level": "warning", "timestamp": "2025-04-18T06:19:06.530356Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "MCP tools registration completed", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.533000Z"} ___________________________ test_sse_handle_connect ____________________________ mock_starlette = <MagicMock name='Starlette' id='6027603856'> mock_transport = <MagicMock name='SseServerTransport' id='6027607216'> @patch('mcp_codebase_insight.core.sse.SseServerTransport') @patch('mcp_codebase_insight.core.sse.Starlette') async def test_sse_handle_connect(mock_starlette, mock_transport): """Test the SSE connection handling functionality.""" # Set up mocks mock_transport_instance = MagicMock() mock_transport.return_value = mock_transport_instance mock_mcp = MagicMock(spec=FastMCP) # For MCP v1.5.0, create a mock run method instead of initialization options mock_mcp.run = AsyncMock() mock_request = MagicMock() mock_request.client = "127.0.0.1" mock_request.scope = {"type": "http"} # Mock the transport's connect_sse method mock_streams = (AsyncMock(), AsyncMock()) mock_cm = MagicMock() mock_cm.__aenter__ = AsyncMock(return_value=mock_streams) mock_cm.__aexit__ = AsyncMock() mock_transport_instance.connect_sse.return_value = mock_cm # Create a mock handler and add it to our mock app instance handle_sse = AsyncMock() mock_app = MagicMock() mock_starlette.return_value = mock_app # Set up a mock route that we can access mock_route = MagicMock() mock_route.path = "/sse/" mock_route.endpoint = handle_sse mock_app.routes = [mock_route] # Create the SSE server app = create_sse_server(mock_mcp) # Extract the actual handler from the route configuration > routes_kwarg = mock_starlette.call_args.kwargs.get('routes', []) E AttributeError: 'NoneType' object has no attribute 'kwargs' tests/components/test_sse_components.py:320: AttributeError ----------------------------- Captured stdout call ----------------------------- {"event": "Initializing SSE transport with endpoint: /sse", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543689Z"} {"event": "Created SSE server with routes:", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543845Z"} {"event": "Route: /health, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543945Z"} {"event": "Route: /sse, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543987Z"} {"event": "Route: /message, methods: {'POST'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.544024Z"} ------------------------------ Captured log call ------------------------------- INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Initializing SSE transport with endpoint: /sse", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543689Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Created SSE server with routes:", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543845Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /health, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543945Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /sse, methods: {'HEAD', 'GET'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.543987Z"} INFO src.mcp_codebase_insight.core.sse:logger.py:68 {"event": "Route: /message, methods: {'POST'}", "logger": "src.mcp_codebase_insight.core.sse", "level": "info", "timestamp": "2025-04-18T06:19:06.544024Z"} _______________________ test_task_manager_initialization _______________________ task_manager = <async_generator object task_manager at 0x1675fac20> @pytest.mark.asyncio async def test_task_manager_initialization(task_manager: TaskManager): """Test that task manager initializes correctly.""" assert task_manager is not None > assert task_manager.config is not None E AttributeError: 'async_generator' object has no attribute 'config' tests/components/test_task_manager.py:25: AttributeError ___________________________ test_create_and_get_task ___________________________ task_manager = <async_generator object task_manager at 0x113b71be0> test_code = '\ndef example_function():\n """This is a test function for task manager tests."""\n return "Hello, world!"\n\nc...Class:\n def __init__(self):\n self.value = 42\n \n def method(self):\n return self.value\n' @pytest.mark.asyncio async def test_create_and_get_task(task_manager: TaskManager, test_code: str): """Test creating and retrieving tasks.""" # Create task > task = await task_manager.create_task( type="code_analysis", title="Test task", description="Test task description", context={"code": test_code} ) E AttributeError: 'async_generator' object has no attribute 'create_task' tests/components/test_task_manager.py:31: AttributeError --------------------------- Captured stdout teardown --------------------------- Cleaning up test collection: test_collection_d3b69ea7 HTTP Request: DELETE http://localhost:6333/collections/test_collection_d3b69ea7 "HTTP/1.1 200 OK" Found 0 server states at end of session ---------------------------- Captured log teardown ----------------------------- INFO conftest:conftest.py:169 Cleaning up test collection: test_collection_d3b69ea7 INFO httpx:_client.py:1025 HTTP Request: DELETE http://localhost:6333/collections/test_collection_d3b69ea7 "HTTP/1.1 200 OK" INFO conftest:conftest.py:525 Found 0 server states at end of session ---------- coverage: platform darwin, python 3.13.2-final-0 ---------- Name Stmts Miss Branch BrPart Cover Missing ----------------------------------------------------------------------------------------------- src/mcp_codebase_insight/__init__.py 3 0 0 0 100% src/mcp_codebase_insight/__main__.py 28 28 0 0 0% 3-76 src/mcp_codebase_insight/asgi.py 5 5 0 0 0% 3-11 src/mcp_codebase_insight/core/__init__.py 2 0 0 0 100% src/mcp_codebase_insight/core/adr.py 127 71 26 0 37% 75-111, 118-134, 157-180, 184-190, 200-213, 220-227, 231-233 src/mcp_codebase_insight/core/cache.py 168 42 68 26 68% 33, 36, 42->exit, 70-71, 77-78, 90, 97->exit, 102-103, 109, 124-125, 142-143, 160-161, 167-169, 173-176, 181, 187, 193, 199, 205, 217, 220, 225, 228->exit, 234, 236->238, 238->exit, 243-249, 254, 258, 261->265, 265->270, 267-268, 274 src/mcp_codebase_insight/core/component_status.py 8 0 0 0 100% src/mcp_codebase_insight/core/config.py 63 23 14 4 60% 38, 44-45, 47-51, 64-67, 91-105, 109, 117, 121-122 src/mcp_codebase_insight/core/debug.py 122 69 34 0 34% 58-78, 82-97, 122-128, 138-153, 161-168, 172-205 src/mcp_codebase_insight/core/di.py 99 62 14 0 33% 40, 53-76, 80-82, 86-97, 101-106, 110-112, 116-120, 124-132, 136-144, 148-156, 160-169 src/mcp_codebase_insight/core/documentation.py 165 111 52 1 25% 53-77, 84-100, 134, 150-167, 175-189, 201-214, 228-316 src/mcp_codebase_insight/core/embeddings.py 77 28 18 3 61% 29->exit, 48-58, 79-83, 88, 104-106, 114-128, 132 src/mcp_codebase_insight/core/errors.py 96 27 2 0 70% 55-58, 62, 77, 88, 99, 110, 121, 132, 143, 154, 165, 176, 187, 198, 209, 220, 231, 242, 253, 264, 275, 279-282 src/mcp_codebase_insight/core/health.py 140 58 26 8 54% 52-71, 75-98, 111, 113, 128, 146, 156-162, 168->178, 170-171, 180-181, 190-191, 215-216, 232-233, 235-236, 259-260, 262-263 src/mcp_codebase_insight/core/knowledge.py 253 100 74 25 55% 95, 105->109, 114, 119-124, 129->exit, 131-138, 143->exit, 145-151, 155, 167, 170->175, 172-173, 208->223, 230, 250, 252->254, 254->256, 257, 258->260, 261, 263, 265, 270->285, 298, 303, 305, 307, 320->318, 335-351, 361-379, 404-421, 432-445, 457-470, 479-488, 496-503, 507-514, 518-524 src/mcp_codebase_insight/core/metrics.py 108 41 38 11 58% 43, 47, 58-59, 62-65, 70, 74, 80-83, 89-100, 111, 122, 127-128, 138, 145, 151, 153, 165-183 src/mcp_codebase_insight/core/prompts.py 72 72 16 0 0% 3-262 src/mcp_codebase_insight/core/sse.py 220 116 40 9 46% 29-37, 62-108, 130-141, 153-154, 162, 171-178, 186-188, 202-207, 239, 280-285, 293, 302-303, 315->321, 330-331, 338-339, 343-344, 349-380, 393-394, 398-419, 432-433, 437-458, 471-472, 476-483, 502->504 src/mcp_codebase_insight/core/state.py 168 120 54 0 22% 48-53, 63-77, 84-93, 97-98, 102, 106-144, 148, 161-162, 167, 171, 175, 179, 183-335 src/mcp_codebase_insight/core/task_tracker.py 48 28 12 0 33% 29-37, 45-52, 60-78, 86, 94, 102, 106-107 src/mcp_codebase_insight/core/tasks.py 259 172 74 1 26% 89-113, 117-134, 138-140, 144-162, 203, 217-233, 237-245, 254-264, 268-318, 323-341, 349-357, 363-377, 384-397, 404-415, 422-432, 439-462 src/mcp_codebase_insight/core/vector_store.py 177 73 26 5 58% 62->67, 78->93, 84-90, 99-100, 119-122, 127-129, 145-146, 158-159, 164-165, 170-184, 200-201, 233-235, 264-266, 270, 290, 327-393, 411 src/mcp_codebase_insight/models.py 18 0 0 0 100% src/mcp_codebase_insight/server.py 630 536 128 0 12% 55-109, 121-138, 142-1491, 1549-1550, 1554-1561, 1585-1590, 1595, 1599-1616, 1620-1622, 1626, 1638-1664, 1668-1688 src/mcp_codebase_insight/server_test_isolation.py 48 38 18 0 15% 31-39, 44-99 src/mcp_codebase_insight/utils/__init__.py 2 0 0 0 100% src/mcp_codebase_insight/utils/logger.py 29 5 0 0 83% 52-53, 82, 89, 97 src/mcp_codebase_insight/version.py 14 14 2 0 0% 3-22 ----------------------------------------------------------------------------------------------- TOTAL 3149 1839 736 93 37% =========================== short test summary info ============================ FAILED tests/components/test_core_components.py::test_adr_manager - TypeError: string indices must be integers, not 'str' FAILED tests/components/test_sse_components.py::test_get_starlette_app - AssertionError: Expected 'create_sse_server' to be called once. Called 0 times. FAILED tests/components/test_sse_components.py::test_create_sse_server - AssertionError: Expected 'SseServerTransport' to be called once. Called 0 times. FAILED tests/components/test_sse_components.py::test_vector_search_tool - IndexError: tuple index out of range FAILED tests/components/test_sse_components.py::test_knowledge_search_tool - IndexError: tuple index out of range FAILED tests/components/test_sse_components.py::test_adr_list_tool - IndexError: tuple index out of range FAILED tests/components/test_sse_components.py::test_task_status_tool - IndexError: tuple index out of range FAILED tests/components/test_sse_components.py::test_sse_handle_connect - AttributeError: 'NoneType' object has no attribute 'kwargs' FAILED tests/components/test_task_manager.py::test_task_manager_initialization - AttributeError: 'async_generator' object has no attribute 'config' FAILED tests/components/test_task_manager.py::test_create_and_get_task - AttributeError: 'async_generator' object has no attribute 'create_task' !!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 10 failures !!!!!!!!!!!!!!!!!!!!!!!!!! ============ 10 failed, 19 passed, 5 skipped, 35 warnings in 9.24s =============

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tosin2013/mcp-codebase-insight'

If you have feedback or need assistance with the MCP directory API, please join our Discord server