Skip to main content
Glama
ShivamPansuriya

Dynamic Per-User Tool Generation MCP Server

test_tool_listing.py2.89 kB
#!/usr/bin/env python3 """ Test tool listing to verify invalid field names are skipped. """ import asyncio import logging from config import AppConfig from form_schema_client import FormSchemaClient from dynamic_tool_manager import DynamicToolManager from tool_function_factory import extract_parameters_from_schema # Setup logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) async def test_tool_listing(): """Test that tool listing works and skips invalid field names.""" logger.info("=" * 80) logger.info("Testing Tool Listing with Invalid Field Names") logger.info("=" * 80) # Initialize components config = AppConfig.load() # Create schema client schema_client = FormSchemaClient( base_url=config.main_server.base_url, client_id=config.main_server.client_id, client_secret=config.main_server.client_secret ) # Create tool manager tool_manager = DynamicToolManager(schema_client=schema_client) # Test with a sample auth token test_token = "test_token_12345" logger.info(f"\nFetching schema for token: {test_token[:20]}...") try: # Get schema schema = await schema_client.get_form_schema( module="request", auth_token=test_token ) logger.info(f"✅ Schema fetched successfully") logger.info(f"Schema has {len(schema.get('properties', {}))} total fields") # Extract parameters logger.info("\nExtracting parameters from schema...") params = extract_parameters_from_schema(schema) logger.info(f"✅ Extracted {len(params)} valid parameters") # Show some parameter names logger.info("\nSample valid parameter names:") for param in params[:10]: logger.info(f" - {param['name']} ({param['type'].__name__})") # Generate tools logger.info("\nGenerating dynamic tools...") tools = await tool_manager.generate_tools_for_user(test_token) logger.info(f"✅ Generated {len(tools)} tools successfully") for tool in tools: logger.info(f"\nTool: {tool.name}") logger.info(f" Description: {tool.description[:100]}...") logger.info(f" Parameters: {len(tool.input_schema.get('properties', {}))} fields") logger.info("\n" + "=" * 80) logger.info("✅ TEST PASSED: Tool listing works correctly") logger.info("=" * 80) return True except Exception as e: logger.error(f"❌ TEST FAILED: {e}", exc_info=True) return False if __name__ == "__main__": success = asyncio.run(test_tool_listing()) exit(0 if success else 1)

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/ShivamPansuriya/MCP-server-Python'

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