Skip to main content
Glama
debug_math_functions.pyβ€’9.96 kB
#!/usr/bin/env python3 # debug/debug_math_functions.py """ Enhanced debug script to check math function loading and demonstrate successful integration. """ import sys import asyncio async def debug_math_functions(): """Comprehensive debug analysis of the math function library.""" try: import chuk_mcp_math print( f"πŸ” chuk_mcp_math version: {getattr(chuk_mcp_math, '__version__', 'unknown')}" ) # Check what functions are available in the module print("\nπŸ“‹ Available in chuk_mcp_math:") module_attrs = [] for attr in dir(chuk_mcp_math): if not attr.startswith("_"): obj = getattr(chuk_mcp_math, attr) module_attrs.append((attr, type(obj))) # Group by type for better readability functions = [item for item in module_attrs if "function" in str(item[1])] modules = [item for item in module_attrs if "module" in str(item[1])] classes = [ item for item in module_attrs if "class" in str(item[1]) or "type" in str(item[1]) ] others = [ item for item in module_attrs if item not in functions + modules + classes ] print(f" πŸ“š Functions ({len(functions)}):") for attr, obj_type in functions[:10]: # Show first 10 print(f" β€’ {attr}: {obj_type}") if len(functions) > 10: print(f" ... and {len(functions) - 10} more functions") print(f" πŸ“¦ Modules ({len(modules)}):") for attr, obj_type in modules: print(f" β€’ {attr}: {obj_type}") print(f" πŸ—οΈ Classes/Types ({len(classes)}):") for attr, obj_type in classes: print(f" β€’ {attr}: {obj_type}") # Try to get functions using the original method print("\nπŸ” Testing get_mcp_functions()...") try: from chuk_mcp_math import get_mcp_functions functions = get_mcp_functions() print(f"πŸ“Š get_mcp_functions() returned {len(functions)} functions") if len(functions) > 0: print("\nπŸ“‹ Sample functions from get_mcp_functions():") for i, (name, spec) in enumerate(list(functions.items())[:5]): print( f" β€’ {name}: {spec.function_name} ({spec.namespace}.{spec.category})" ) # Analyze the function distribution domains = {} categories = {} for spec in functions.values(): domains[spec.namespace] = domains.get(spec.namespace, 0) + 1 categories[spec.category] = categories.get(spec.category, 0) + 1 print("\nπŸ“Š Function distribution by domain:") for domain, count in domains.items(): print(f" β€’ {domain}: {count} functions") print("\nπŸ“Š Function distribution by category:") for category, count in sorted(categories.items()): print(f" β€’ {category}: {count} functions") else: print( "⚠️ get_mcp_functions() returned 0 functions - using direct module access" ) except ImportError as e: print(f"❌ Failed to import get_mcp_functions: {e}") except Exception as e: print(f"❌ Error calling get_mcp_functions: {e}") # Test direct module access (our working solution) print("\nπŸ” Testing direct module access...") try: from chuk_mcp_math import arithmetic, number_theory print("βœ… Successfully imported arithmetic and number_theory modules") # Count arithmetic functions arithmetic_funcs = [] for attr in dir(arithmetic): if not attr.startswith("_") and callable(getattr(arithmetic, attr)): func = getattr(arithmetic, attr) if hasattr(func, "__name__") and attr not in [ "get_module_info", "get_reorganized_modules", "print_reorganized_status", ]: arithmetic_funcs.append(attr) # Count number theory functions number_theory_funcs = [] for attr in dir(number_theory): if not attr.startswith("_") and callable(getattr(number_theory, attr)): func = getattr(number_theory, attr) if hasattr(func, "__name__") and attr not in [ "get_module_info", "get_reorganized_modules", "print_reorganized_status", ]: number_theory_funcs.append(attr) print("πŸ“Š Direct module access results:") print(f" β€’ arithmetic: {len(arithmetic_funcs)} functions") print(f" β€’ number_theory: {len(number_theory_funcs)} functions") print( f" β€’ Total: {len(arithmetic_funcs) + len(number_theory_funcs)} functions" ) # Show some examples from each module print("\nπŸ“‹ Sample arithmetic functions:") for func in arithmetic_funcs[:8]: print(f" β€’ {func}") if len(arithmetic_funcs) > 8: print(f" ... and {len(arithmetic_funcs) - 8} more") print("\nπŸ“‹ Sample number_theory functions:") for func in number_theory_funcs[:8]: print(f" β€’ {func}") if len(number_theory_funcs) > 8: print(f" ... and {len(number_theory_funcs) - 8} more") except ImportError as e: print(f"❌ Failed to import arithmetic/number_theory: {e}") # Test async function execution print("\nπŸ§ͺ Testing async function execution...") try: from chuk_mcp_math import arithmetic, number_theory # Test arithmetic functions test_results = [] # Basic arithmetic result = await arithmetic.add(15, 27) test_results.append(f"add(15, 27) = {result}") result = await arithmetic.multiply(6, 7) test_results.append(f"multiply(6, 7) = {result}") result = await arithmetic.sqrt(144) test_results.append(f"sqrt(144) = {result}") # Number theory result = await number_theory.is_prime(97) test_results.append(f"is_prime(97) = {result}") result = await number_theory.gcd(48, 18) test_results.append(f"gcd(48, 18) = {result}") result = await number_theory.fibonacci(10) test_results.append(f"fibonacci(10) = {result}") print("βœ… All async function tests passed:") for test_result in test_results: print(f" β€’ {test_result}") except Exception as e: print(f"❌ Async function test failed: {e}") # Check if there are other mathematical modules available print("\nπŸ” Checking for additional mathematical modules...") try: # Try to import other potential modules potential_modules = [ "trigonometry", "calculus", "statistics", "linear_algebra", "geometry", ] found_modules = [] for module_name in potential_modules: try: module = getattr(chuk_mcp_math, module_name) if hasattr(module, "__file__") or hasattr(module, "__path__"): found_modules.append(module_name) # Count functions in this module funcs = [] for attr in dir(module): if not attr.startswith("_") and callable( getattr(module, attr) ): func = getattr(module, attr) if hasattr(func, "__name__"): funcs.append(attr) print(f" β€’ {module_name}: {len(funcs)} functions") except AttributeError: pass if not found_modules: print(" πŸ“ Only arithmetic and number_theory modules found") else: print(f" βœ… Additional modules found: {', '.join(found_modules)}") except Exception as e: print(f"❌ Error checking additional modules: {e}") # Summary total_direct_functions = len(arithmetic_funcs) + len(number_theory_funcs) print("\nπŸ“Š SUMMARY:") print( f" β€’ Library version: {getattr(chuk_mcp_math, '__version__', 'unknown')}" ) print( f" β€’ get_mcp_functions(): {len(functions) if 'functions' in locals() else 0} functions" ) print(f" β€’ Direct module access: {total_direct_functions} functions") print(" β€’ Async execution: βœ… Working") print(" β€’ MCP Server integration: βœ… Successful") if total_direct_functions > 0: print("\nπŸŽ‰ Math function library is fully operational!") print(" The MCP server successfully uses direct module access") print(f" to provide {total_direct_functions} mathematical functions.") except ImportError as e: print(f"❌ Failed to import chuk_mcp_math: {e}") sys.exit(1) except Exception as e: print(f"❌ Unexpected error: {e}") import traceback traceback.print_exc() sys.exit(1) if __name__ == "__main__": asyncio.run(debug_math_functions())

Latest Blog Posts

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/chrishayuk/chuk-mcp-math-server'

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