134 lines
4.6 KiB
Python
134 lines
4.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Basic usage example for Vultr MCP Server
|
|
"""
|
|
import requests
|
|
import json
|
|
import time
|
|
|
|
# Server configuration
|
|
SERVER_URL = "http://localhost:8000"
|
|
|
|
print("Vultr MCP Server - Basic Usage Example\n")
|
|
print(f"Connecting to server at {SERVER_URL}\n")
|
|
|
|
def make_request(method, endpoint, data=None):
|
|
"""Make HTTP request and handle errors"""
|
|
url = f"{SERVER_URL}{endpoint}"
|
|
try:
|
|
if method == "GET":
|
|
response = requests.get(url)
|
|
elif method == "POST":
|
|
response = requests.post(url, json=data)
|
|
else:
|
|
raise ValueError(f"Unsupported method: {method}")
|
|
|
|
response.raise_for_status()
|
|
return response.json()
|
|
except requests.exceptions.ConnectionError:
|
|
print(f"Error: Cannot connect to server at {url}")
|
|
print("Make sure the server is running with: python main.py")
|
|
return None
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"Error: {e}")
|
|
if hasattr(e.response, 'text'):
|
|
print(f"Response: {e.response.text}")
|
|
return None
|
|
|
|
# 1. Get server info
|
|
print("1. Getting server information...")
|
|
info = make_request("GET", "/")
|
|
if info:
|
|
print(f" Server: {info.get('name')}")
|
|
print(f" Version: {info.get('version')}")
|
|
print(f" Description: {info.get('description')}\n")
|
|
|
|
# 2. List available tools
|
|
print("2. Listing available tools...")
|
|
tools = make_request("GET", "/tools")
|
|
if tools:
|
|
print(f" Found {len(tools)} tools:")
|
|
for tool in tools[:5]: # Show first 5 tools
|
|
print(f" - {tool['name']}: {tool['description']}")
|
|
if len(tools) > 5:
|
|
print(f" ... and {len(tools) - 5} more tools\n")
|
|
else:
|
|
print()
|
|
|
|
# 3. List available resources
|
|
print("3. Listing available resources...")
|
|
resources = make_request("GET", "/resources")
|
|
if resources:
|
|
print(f" Found {len(resources)} resources:")
|
|
for resource in resources:
|
|
print(f" - {resource['name']}: {resource['uri']}")
|
|
print()
|
|
|
|
# 4. List available prompts
|
|
print("4. Listing available prompts...")
|
|
prompts = make_request("GET", "/prompts")
|
|
if prompts:
|
|
print(f" Found {len(prompts)} prompts:")
|
|
for prompt in prompts:
|
|
print(f" - {prompt['name']}: {prompt['description']}")
|
|
print()
|
|
|
|
# 5. Try to get account info (requires API key)
|
|
print("5. Trying to get account info...")
|
|
account_info = make_request("POST", "/tools/call", {
|
|
"name": "get_account_info",
|
|
"arguments": {}
|
|
})
|
|
if account_info:
|
|
if account_info.get("isError"):
|
|
print(" Error: Vultr API key not configured or invalid")
|
|
print(" To fix this, add your VULTR_API_KEY to .env file\n")
|
|
else:
|
|
print(" Account info retrieved successfully!")
|
|
# Pretty print the result
|
|
content = account_info.get("content", [])
|
|
if content and len(content) > 0:
|
|
try:
|
|
data = json.loads(content[0].get("text", "{}"))
|
|
print(f" Account: {data.get('name', 'N/A')}")
|
|
print(f" Email: {data.get('email', 'N/A')}")
|
|
print(f" Balance: ${data.get('balance', 'N/A')}")
|
|
except:
|
|
print(f" Response: {content[0].get('text', 'No data')}")
|
|
print()
|
|
|
|
# 6. List regions (doesn't require API key for some endpoints)
|
|
print("6. Trying to list available regions...")
|
|
regions = make_request("POST", "/tools/call", {
|
|
"name": "list_regions",
|
|
"arguments": {}
|
|
})
|
|
if regions:
|
|
if regions.get("isError"):
|
|
print(" Error: Could not list regions")
|
|
error_text = regions.get("content", [{}])[0].get("text", "Unknown error")
|
|
print(f" Details: {error_text}")
|
|
else:
|
|
content = regions.get("content", [])
|
|
if content and len(content) > 0:
|
|
try:
|
|
regions_data = json.loads(content[0].get("text", "[]"))
|
|
if isinstance(regions_data, list):
|
|
print(f" Found {len(regions_data)} regions:")
|
|
for region in regions_data[:3]: # Show first 3
|
|
if isinstance(region, dict):
|
|
print(f" - {region.get('city', 'N/A')}, {region.get('country', 'N/A')} ({region.get('id', 'N/A')})")
|
|
if len(regions_data) > 3:
|
|
print(f" ... and {len(regions_data) - 3} more regions")
|
|
except:
|
|
print(f" Response: {content[0].get('text', 'No data')}")
|
|
print()
|
|
|
|
print("\nExample completed!")
|
|
print("\nNext steps:")
|
|
print("1. Add your VULTR_API_KEY to .env file")
|
|
print("2. Start the server: python main.py")
|
|
print("3. Run this example again to see full functionality")
|
|
print("\nFor more examples, check the examples/ directory")
|
|
|