Skip to main content
Glama

FastMCP Server Template

by rdwj
test_fda_agent.py8.17 kB
#!/usr/bin/env python3 """ Test script for the FDA Verification Agent """ import asyncio import json import sys import os from pathlib import Path # Add parent directory to path sys.path.append(str(Path(__file__).parent)) from agents.fda_verification_agent import FDAVerificationAgent, PADecision # Test scenarios TEST_SCENARIOS = [ { "name": "Jabra Enhance Plus with K-number", "description": "Device with explicit FDA 510(k) number", "device_request": { "resourceType": "DeviceRequest", "status": "active", "intent": "order", "codeCodeableConcept": { "text": "Jabra Enhance Plus hearing aid", "coding": [{ "system": "http://snomed.info/sct", "code": "706230002", "display": "Hearing aid" }] }, "note": [{ "text": "Patient requires OTC hearing aid for moderate hearing loss. FDA 510(k) number K213424" }], "performer": { "display": "GN Hearing A/S" }, "subject": { "reference": "Patient/123", "display": "John Doe" }, "authoredOn": "2025-09-22", "reasonCode": [{ "text": "Bilateral moderate sensorineural hearing loss" }] } }, { "name": "Generic hearing aid request", "description": "Vague device request without specific model", "device_request": { "resourceType": "DeviceRequest", "status": "active", "intent": "order", "codeCodeableConcept": { "text": "Hearing aid device", "coding": [{ "system": "http://snomed.info/sct", "code": "706230002", "display": "Hearing aid" }] }, "subject": { "reference": "Patient/456", "display": "Jane Smith" }, "authoredOn": "2025-09-22", "reasonCode": [{ "text": "Hearing loss" }] } }, { "name": "Bose hearing aid by brand name", "description": "Device identified by consumer brand name", "device_request": { "resourceType": "DeviceRequest", "status": "active", "intent": "order", "codeCodeableConcept": { "text": "Lexie B2 hearing aid powered by Bose", "coding": [{ "system": "http://snomed.info/sct", "code": "706230002", "display": "Hearing aid" }] }, "note": [{ "text": "Patient prefers Bose/Lexie brand OTC hearing aid" }], "subject": { "reference": "Patient/789", "display": "Bob Johnson" }, "authoredOn": "2025-09-22" } }, { "name": "Non-FDA device", "description": "Device that likely doesn't have FDA clearance", "device_request": { "resourceType": "DeviceRequest", "status": "active", "intent": "order", "codeCodeableConcept": { "text": "Generic amplification device from unknown manufacturer", "coding": [{ "system": "http://snomed.info/sct", "code": "706230002", "display": "Hearing aid" }] }, "note": [{ "text": "Patient found this device online, no brand information available" }], "subject": { "reference": "Patient/999", "display": "Alice Brown" }, "authoredOn": "2025-09-22" } }, { "name": "High-end prescription device", "description": "Professional-grade hearing aid requiring prescription", "device_request": { "resourceType": "DeviceRequest", "status": "active", "intent": "order", "codeCodeableConcept": { "text": "Phonak Audeo Paradise P90 hearing aid system", "coding": [{ "system": "http://snomed.info/sct", "code": "706230002", "display": "Hearing aid" }] }, "note": [{ "text": "Bilateral severe hearing loss, requires professional fitting and programming" }], "performer": { "display": "Sonova AG" }, "subject": { "reference": "Patient/555", "display": "Charlie Wilson" }, "authoredOn": "2025-09-22", "reasonCode": [{ "text": "Severe bilateral sensorineural hearing loss" }] } } ] async def test_agent(): """Test the FDA Verification Agent with various scenarios.""" # Get credentials from environment or use defaults api_key = os.getenv("LLAMA_API_KEY", "af78aa99d7ae5bb58f19380ee007277c") base_url = os.getenv("LLAMA_BASE_URL", "https://llama-4-scout-17b-16e-w4a16-maas-apicast-production.apps.prod.rhoai.rh-aiservices-bu.com:443/v1") mcp_url = os.getenv("FDA_MCP_URL", "http://localhost:8090/mcp/") print("=" * 80) print("FDA Verification Agent Test Suite") print("=" * 80) print(f"MCP Server: {mcp_url}") print(f"LLM Model: llama-4-scout-17b-16e-w4a16") print("=" * 80) # Initialize agent agent = FDAVerificationAgent( mcp_url=mcp_url, api_key=api_key, base_url=base_url ) # Run test scenarios for i, scenario in enumerate(TEST_SCENARIOS, 1): print(f"\nTest {i}: {scenario['name']}") print("-" * 60) print(f"Description: {scenario['description']}") try: # Run the agent result = await agent.analyze_device_request(scenario["device_request"]) # Display results print(f"\n📊 PA Decision: {result.decision.value.upper()}") print(f"💭 Reasoning: {result.reasoning}") if result.fda_verification: fda = result.fda_verification print(f"\n🔍 FDA Verification:") print(f" Device: {fda.device_name}") print(f" FDA Status: {fda.fda_status}") print(f" FDA Approved: {'✅' if fda.is_fda_approved else '❌'}") if fda.fda_number: print(f" FDA Number: {fda.fda_number}") if fda.manufacturer: print(f" Manufacturer: {fda.manufacturer}") print(f" Confidence: {fda.confidence:.0%}") print(f" Method: {fda.verification_method}") if fda.is_otc: print(f" OTC Status: ✅ Over-the-counter") if result.requirements_met: print(f"\n✓ Requirements Met:") for req, met in result.requirements_met.items(): status = "✅" if met else "❌" print(f" {status} {req}") if result.missing_information: print(f"\n⚠️ Missing Information:") for info in result.missing_information: print(f" • {info}") if result.recommendations: print(f"\n💡 Recommendations:") for rec in result.recommendations: print(f" • {rec}") print(f"\n🎯 Confidence: {result.confidence:.0%}") print(f"⏰ Timestamp: {result.timestamp}") except Exception as e: print(f"\n❌ Error: {e}") import traceback traceback.print_exc() print("\n" + "=" * 80) print("\n✅ All tests completed!") if __name__ == "__main__": asyncio.run(test_agent())

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/rdwj/fda-mcp'

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