Skip to main content
Glama

Smart Code Search MCP Server

fix_agent_parameters.pyโ€ข8.23 kB
#!/usr/bin/env python3 """ Fix agent parameter inconsistencies in agent_templates.py Makes all analyzer agents accept consistent parameters """ import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent)) def create_fixed_templates(): """Create fixed agent templates with consistent parameters""" fixed_templates = ''' # Fixed Import Analyzer - accepts code as first parameter import_analyzer_fixed = """ def analyze(code: str, **kwargs) -> dict: # Extract optional parameters file_path = kwargs.get('file_path', None) threshold = kwargs.get('threshold', 10) imports = [] unused = [] try: tree = ast.parse(code) # Extract imports for node in ast.walk(tree): if isinstance(node, ast.Import): for alias in node.names: imports.append({ 'module': alias.name, 'alias': alias.asname, 'line': node.lineno }) elif isinstance(node, ast.ImportFrom): module = node.module or '' for alias in node.names: imports.append({ 'module': f"{module}.{alias.name}" if module else alias.name, 'alias': alias.asname, 'line': node.lineno, 'from_import': True }) # Find unused imports for imp in imports: module_name = imp['alias'] or imp['module'].split('.')[-1] code_lines = code.split('\\n') used = False for i, line in enumerate(code_lines, 1): if i != imp['line'] and module_name in line: used = True break if not used: unused.append(imp) except SyntaxError as e: return {'error': str(e), 'imports': [], 'unused': []} return { 'imports': imports, 'unused': unused, 'count': len(imports), 'unused_count': len(unused) } """ # Fixed Complexity Analyzer - accepts code as first parameter complexity_analyzer_fixed = """ def analyze(code: str, **kwargs) -> dict: # Extract optional parameters threshold = kwargs.get('threshold', 10) complexity = 1 # Base complexity nesting_depth = 0 max_nesting = 0 try: tree = ast.parse(code) # Calculate cyclomatic complexity for node in ast.walk(tree): if isinstance(node, (ast.If, ast.While, ast.For, ast.ExceptHandler)): complexity += 1 elif isinstance(node, ast.BoolOp): complexity += len(node.values) - 1 # Find max nesting # ... rest of the logic ... except SyntaxError as e: return {'error': str(e), 'complexity': 0} return { 'complexity': complexity, 'max_nesting': max_nesting, 'is_complex': complexity > threshold, 'threshold': threshold } """ # Fixed Test Gap Finder - accepts code as first parameter test_gap_finder_fixed = """ def analyze(code: str, **kwargs) -> dict: # Extract optional parameters functions = kwargs.get('functions', []) test_files = kwargs.get('test_files', []) # If functions not provided, extract them if not functions: try: tree = ast.parse(code) for node in ast.walk(tree): if isinstance(node, ast.FunctionDef): functions.append({ 'name': node.name, 'line': node.lineno }) except: pass # Find untested functions tested = set() for test_file in test_files: # Extract test function names # ... test detection logic ... pass untested = [f for f in functions if f.get('name') not in tested] return { 'total_functions': len(functions), 'tested_count': len(tested), 'untested_count': len(untested), 'untested': untested, 'coverage_percentage': (len(tested) / len(functions) * 100) if functions else 0 } """ # Review Aggregator - accepts all results review_aggregator_fixed = """ def analyze(code: str, **kwargs) -> dict: # Aggregate all results passed in kwargs aggregated = { 'summary': {}, 'issues': [], 'suggestions': [], 'metrics': {} } # Process each result from other agents for key, value in kwargs.items(): if isinstance(value, dict): # Extract relevant information if 'unused' in value: for item in value.get('unused', []): aggregated['issues'].append({ 'type': 'unused_import', 'severity': 'low', 'description': f"Unused import: {item.get('module')}", 'line': item.get('line') }) if 'complexity' in value and value.get('is_complex'): aggregated['issues'].append({ 'type': 'high_complexity', 'severity': 'medium', 'description': f"High complexity: {value['complexity']}", }) if 'untested' in value: for func in value.get('untested', []): aggregated['suggestions'].append({ 'type': 'add_test', 'description': f"Add test for function: {func.get('name')}" }) # Create summary aggregated['summary'] = { 'total_issues': len(aggregated['issues']), 'total_suggestions': len(aggregated['suggestions']), 'severity_high': sum(1 for i in aggregated['issues'] if i.get('severity') == 'high'), 'severity_medium': sum(1 for i in aggregated['issues'] if i.get('severity') == 'medium'), 'severity_low': sum(1 for i in aggregated['issues'] if i.get('severity') == 'low'), } return aggregated """ ''' return fixed_templates def test_fixed_templates(): """Test that fixed templates work correctly""" import ast import json print("๐Ÿงช Testing Fixed Agent Templates") print("=" * 60) test_code = ''' import os import sys import unused_module def test_function(): print(os.path.exists('.')) return True def complex_function(): for i in range(10): if i > 5: for j in range(10): if j > 5: print(i, j) ''' # Test each fixed template templates = { 'import_analyzer': import_analyzer_fixed, 'complexity_analyzer': complexity_analyzer_fixed, 'test_gap_finder': test_gap_finder_fixed, } for name, template_code in templates.items(): print(f"\nTesting {name}...") try: exec_globals = {'ast': ast, 'json': json} exec(template_code, exec_globals) # Call analyze with code parameter result = exec_globals['analyze'](test_code) print(f"โœ… {name} works!") print(f" Result keys: {list(result.keys())}") except Exception as e: print(f"โŒ {name} failed: {e}") print("\n" + "=" * 60) print("โœจ Template fixes ready to apply!") if __name__ == "__main__": # Show the fixed templates print(create_fixed_templates()) # Note for implementation print("\n" + "=" * 60) print("๐Ÿ“ Implementation Notes:") print("1. All analyzer agents now accept 'code' as first parameter") print("2. Additional parameters passed via **kwargs") print("3. Agents handle missing optional parameters gracefully") print("4. This ensures compatibility with orchestration flows") print("\nTo apply these fixes:") print("1. Update agent_templates.py with the fixed templates") print("2. Or add parameter mapping in execute_agent method") print("3. Test with scripts/test_tools.py")

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/stevenjjobson/scs-mcp'

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