#!/usr/bin/env python3
"""
Example usage of DNAC MCP Server functions
This script demonstrates how to use the DNAC wireless client tools
directly in Python without the MCP server.
"""
import os
import json
from dnac_mcp import query_wireless_clients, get_client_health, WirelessClientAgent
from dnacentersdk import api
def example_query_all_clients():
"""Example: Query all wireless clients"""
print("\n" + "="*80)
print("Example 1: Query All Wireless Clients")
print("="*80)
result = query_wireless_clients(
base_url=os.getenv("DNAC_BASE_URL", "https://dnac.example.com"),
username=os.getenv("DNAC_USERNAME", "admin"),
password=os.getenv("DNAC_PASSWORD", "password"),
max_results=10, # Limit for demo
verify=False # Use True in production
)
print(f"\nTotal clients: {result['total_count']}")
print(f"Fetched: {result['fetched_count']}")
print(f"Exceeded limit: {result['exceeded_limit']}")
if result['clients']:
print(f"\nFirst client:")
print(json.dumps(result['clients'][0], indent=2))
if result['guidance']:
print(f"\n{result['guidance']}")
def example_query_by_ssid():
"""Example: Query clients on specific SSID"""
print("\n" + "="*80)
print("Example 2: Query Clients by SSID")
print("="*80)
result = query_wireless_clients(
base_url=os.getenv("DNAC_BASE_URL"),
username=os.getenv("DNAC_USERNAME"),
password=os.getenv("DNAC_PASSWORD"),
ssid="Corporate-WiFi", # Filter by SSID
verify=False
)
print(f"\nClients on 'Corporate-WiFi': {result['fetched_count']}")
def example_query_by_site():
"""Example: Query clients at specific site"""
print("\n" + "="*80)
print("Example 3: Query Clients by Site")
print("="*80)
# You would get site_id from DNAC sites API
site_id = "abc-123-def-456" # Example site ID
result = query_wireless_clients(
base_url=os.getenv("DNAC_BASE_URL"),
username=os.getenv("DNAC_USERNAME"),
password=os.getenv("DNAC_PASSWORD"),
site_id=site_id,
verify=False
)
print(f"\nClients at site {site_id}: {result['fetched_count']}")
def example_get_client_health():
"""Example: Get health info for specific client"""
print("\n" + "="*80)
print("Example 4: Get Client Health")
print("="*80)
mac_address = "AA:BB:CC:DD:EE:FF" # Example MAC
result = get_client_health(
base_url=os.getenv("DNAC_BASE_URL"),
username=os.getenv("DNAC_USERNAME"),
password=os.getenv("DNAC_PASSWORD"),
mac_address=mac_address,
verify=False
)
if 'error' not in result:
print(f"\nHealth for {mac_address}:")
print(json.dumps(result['health'], indent=2))
else:
print(f"\nError: {result['error']}")
def example_using_agent_directly():
"""Example: Using WirelessClientAgent directly"""
print("\n" + "="*80)
print("Example 5: Using WirelessClientAgent Directly")
print("="*80)
# Initialize DNAC client
dnac = api.DNACenterAPI(
base_url=os.getenv("DNAC_BASE_URL"),
username=os.getenv("DNAC_USERNAME"),
password=os.getenv("DNAC_PASSWORD"),
verify=False
)
# Create agent with custom settings
agent = WirelessClientAgent(
dnac_client=dnac,
max_results=50, # Custom limit
rate_limit_delay=0.3, # Custom rate limit
debug=True # Enable debug logging
)
# Query clients with specific filters
result = agent.get_clients(
ssid="Guest-WiFi",
band="5GHz"
)
print(f"\n5GHz clients on Guest-WiFi: {result['fetched_count']}")
def example_error_handling():
"""Example: Proper error handling"""
print("\n" + "="*80)
print("Example 6: Error Handling")
print("="*80)
result = query_wireless_clients(
base_url="https://invalid.dnac.com",
username="invalid",
password="invalid",
max_results=10,
verify=False,
debug=False # Disable debug for cleaner output
)
if 'error' in result and result['error']:
print(f"\n✗ Error occurred: {result['error']}")
print(f"Total count: {result['total_count']}")
print(f"Fetched count: {result['fetched_count']}")
else:
print(f"\n✓ Success! Found {result['fetched_count']} clients")
def main():
"""Run all examples"""
print("\n" + "="*80)
print("DNAC MCP Server - Usage Examples")
print("="*80)
print("\nIMPORTANT: Set these environment variables before running:")
print(" export DNAC_BASE_URL='https://dnac.example.com'")
print(" export DNAC_USERNAME='admin'")
print(" export DNAC_PASSWORD='your-password'")
print()
# Check if credentials are set
if not all([os.getenv("DNAC_BASE_URL"), os.getenv("DNAC_USERNAME"), os.getenv("DNAC_PASSWORD")]):
print("⚠️ WARNING: DNAC credentials not set. Examples will use placeholder values.")
print()
try:
# Run examples
example_query_all_clients()
example_query_by_ssid()
example_query_by_site()
example_get_client_health()
example_using_agent_directly()
example_error_handling()
except Exception as e:
print(f"\n❌ Error running examples: {e}")
import traceback
traceback.print_exc()
print("\n" + "="*80)
print("Examples completed!")
print("="*80)
if __name__ == "__main__":
main()