Skip to main content
Glama
ShivamPansuriya

Dynamic Per-User Tool Generation MCP Server

example.py8.27 kB
""" Slot Resolution System - Complete Example Demonstrates how to use the slot resolution system to transform user requests from entity names to IDs. """ import asyncio import logging from elasticsearch_search_lib import SearchClient from slot_resolution import SlotResolutionMiddleware from slot_resolution.core.resolver import SlotResolver from slot_resolution.core.decisioning import DecisionEngine from slot_resolution.services.elasticsearch_service import ElasticsearchMatchingService from slot_resolution.services.cache_service import CacheService from slot_resolution.services.audit_service import AuditService from slot_resolution.services.alias_service import AliasService from slot_resolution.services.exact_match_service import ExactMatchService # Setup logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) async def main(): """Run complete slot resolution example.""" print("=" * 80) print("SLOT RESOLUTION SYSTEM - COMPLETE EXAMPLE") print("=" * 80) # ======================================================================== # STEP 1: Initialize Components # ======================================================================== print("\n[1] Initializing components...") # Create Elasticsearch search client search_client = SearchClient(tenant_id="apolo") print(" ✓ Elasticsearch search client created") # Create services es_service = ElasticsearchMatchingService(search_client) exact_match_service = ExactMatchService() alias_service = AliasService() cache_service = CacheService(ttl_seconds=900, max_size=1000) audit_service = AuditService(log_to_file=False) print(" ✓ Services initialized") # Create decision engine with custom thresholds decision_engine = DecisionEngine( min_scores={ "impact": 0.65, "urgency": 0.65, "priority": 0.65, "user": 0.70 }, score_gap_delta=0.15, max_candidates=5 ) print(" ✓ Decision engine configured") # Create slot resolver resolver = SlotResolver( es_service=es_service, exact_match_service=exact_match_service, alias_service=alias_service, cache_service=cache_service, audit_service=audit_service, decision_engine=decision_engine ) print(" ✓ Slot resolver created") # Create middleware middleware = SlotResolutionMiddleware( tenant_id="apolo", resolver=resolver ) print(" ✓ Middleware initialized") # ======================================================================== # STEP 2: Example 1 - Successful Resolution # ======================================================================== print("\n[2] Example 1: Successful Resolution") print("-" * 80) request_1 = { "subject": "Laptop not working", "impact": "high", "urgency": "medium", "priority": "high" } print(f"Input Request: {request_1}") result_1 = await middleware.resolve_request( request_payload=request_1, module="request", user_id="user123" ) print(f"\nResult Status: {result_1.status}") if result_1.status == "READY": print(f"Transformed Payload: {result_1.payload}") print(f"\nAudit Trail:") for field, audit in result_1.audit_trail.items(): print(f" {field}: {audit}") # ======================================================================== # STEP 3: Example 2 - With Assignee (Potential Disambiguation) # ======================================================================== print("\n[3] Example 2: Request with Assignee") print("-" * 80) request_2 = { "subject": "Password reset needed", "impact": "low", "assignee": "shivam", "requester": "john.doe" } print(f"Input Request: {request_2}") result_2 = await middleware.resolve_request( request_payload=request_2, module="request", user_id="user123" ) print(f"\nResult Status: {result_2.status}") if result_2.status == "READY": print(f"Transformed Payload: {result_2.payload}") elif result_2.status == "DISAMBIGUATION_REQUIRED": print(f"Disambiguation Required for {len(result_2.disambiguations)} field(s):") for disambiguation in result_2.disambiguations: print(f"\n Field: {disambiguation.field}") print(f" Target: {disambiguation.target_field}") print(f" Original Input: '{disambiguation.original_input}'") print(f" Candidates:") for i, candidate in enumerate(disambiguation.candidates, 1): print(f" {i}. {candidate.canonical_name} (ID: {candidate.id}, Confidence: {candidate.confidence:.2f})") if candidate.attributes: print(f" Attributes: {candidate.attributes}") # ======================================================================== # STEP 4: Example 3 - Multiple Modules # ======================================================================== print("\n[4] Example 3: Different Module (Problem)") print("-" * 80) problem_request = { "subject": "Network outage", "impact": "high", "urgency": "high", "priority": "critical", "assignee": "network.admin" } print(f"Input Request: {problem_request}") result_3 = await middleware.resolve_request( request_payload=problem_request, module="problem", user_id="user123" ) print(f"\nResult Status: {result_3.status}") if result_3.status == "READY": print(f"Transformed Payload: {result_3.payload}") # ======================================================================== # STEP 5: Example 4 - Alias Resolution # ======================================================================== print("\n[5] Example 4: Alias Resolution") print("-" * 80) request_4 = { "subject": "Email not working", "impact": "hi", # Alias for "high" "urgency": "med", # Alias for "medium" "priority": "p2" # Alias for "high" } print(f"Input Request: {request_4}") print("Note: Using aliases 'hi', 'med', 'p2'") result_4 = await middleware.resolve_request( request_payload=request_4, module="request", user_id="user123" ) print(f"\nResult Status: {result_4.status}") if result_4.status == "READY": print(f"Transformed Payload: {result_4.payload}") # ======================================================================== # STEP 6: Cache Statistics # ======================================================================== print("\n[6] Cache Statistics") print("-" * 80) cache_stats = cache_service.get_stats() print(f"Cache Size: {cache_stats['size']}/{cache_stats['max_size']}") print(f"TTL: {cache_stats['ttl_seconds']} seconds") # ======================================================================== # STEP 7: Configuration Info # ======================================================================== print("\n[7] Configuration Information") print("-" * 80) available_modules = middleware.config_loader.get_available_modules() print(f"Available Modules: {', '.join(available_modules)}") for module in available_modules: mappings = middleware.config_loader.get_module_mappings(module) print(f"\n{module.upper()} Module:") print(f" Fields: {len(mappings)}") for mapping in mappings[:3]: # Show first 3 print(f" - {mapping.column_name} → {mapping.reference_to} ({mapping.db_key})") if len(mappings) > 3: print(f" ... and {len(mappings) - 3} more") print("\n" + "=" * 80) print("EXAMPLE COMPLETED SUCCESSFULLY") print("=" * 80) if __name__ == "__main__": """Run the example.""" asyncio.run(main())

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