#!/usr/bin/env python3
"""
Demo script for the new rover_member_summary MCP tool.
This showcases comprehensive member profiles including group roles and JIRA involvement.
"""
import json
from datetime import datetime
def simulate_member_summary(member_id: str, include_jira_details: bool = True):
"""
Simulate the rover_member_summary tool output with realistic data.
This demonstrates what the tool would return with real data integration.
"""
# Realistic member data based on actual Red Hat context
member_data = {
"dhshah": {
"projects": ["SPAI", "KONFLUX", "PVO11Y", "OSIM", "SPRE"],
"groups": [
{"name": "sp-ai-support-chatbot", "role": "member"},
{"name": "sp-ai-support-chatbot-admins", "role": "member"},
{"name": "konflux-users", "role": "member"}
],
"expertise": ["AI/ML Platform Development", "Software Engineering", "Platform Integration"],
"recent_issues": [
{
"key": "SPAI-213",
"project": "SPAI",
"summary": "onboarding first users (feedback and testing)",
"status": "Open",
"role": "assignee"
},
{
"key": "KONFLUX-8901",
"project": "KONFLUX",
"summary": "Integrate AI chatbot with Konflux platform",
"status": "In Progress",
"role": "reporter"
},
{
"key": "PVO11Y-1701",
"project": "PVO11Y",
"summary": "Observability metrics for AI services",
"status": "Open",
"role": "mentioned"
}
]
},
"mboy": {
"projects": ["H2R", "HPUX", "SPAI", "MTV", "PVO11Y"],
"groups": [
{"name": "sp-ai-support-chatbot-admins", "role": "owner"},
{"name": "pv-observability-team", "role": "member"},
{"name": "ux-research-guild", "role": "member"}
],
"expertise": ["User Experience Research", "CI/CD Pipeline Development", "Process Optimization"],
"recent_issues": [
{
"key": "H2R-1075",
"project": "H2R",
"summary": "Review of notifications that create no action tickets for GSS coordinators",
"status": "Open",
"role": "assignee"
},
{
"key": "SPAI-129",
"project": "SPAI",
"summary": "Define a gitlab ci pipeline for the frontend service",
"status": "Resolved",
"role": "assignee"
}
]
}
}
# Get member-specific data or use default
data = member_data.get(member_id, {
"projects": ["PLACEHOLDER"],
"groups": [{"name": "unknown-group", "role": "member"}],
"expertise": ["To be determined"],
"recent_issues": [
{
"key": "EXAMPLE-123",
"project": "PLACEHOLDER",
"summary": f"Sample issue for {member_id}",
"status": "Open",
"role": "mentioned"
}
]
})
# Build comprehensive member summary
member_summary = {
"member_profile": {
"member_id": member_id,
"type": "user",
"total_groups": len(data["groups"]),
"roles": [f"{group['role']} in {group['name']}" for group in data["groups"]]
},
"group_memberships": {
"discovered_groups": data["groups"],
"leadership_roles": [group for group in data["groups"] if group["role"] in ["owner", "admin"]],
"membership_diversity": "high" if len(data["groups"]) > 2 else "moderate"
},
"jira_involvement": {
"projects": data["projects"],
"total_issues": len(data["recent_issues"]),
"is_active": len(data["recent_issues"]) > 0,
"expertise_areas": data["expertise"],
"activity_level": "high" if len(data["recent_issues"]) > 3 else "moderate" if len(data["recent_issues"]) > 0 else "low"
},
"professional_profile": {
"primary_expertise": data["expertise"][:3],
"collaboration_score": "high" if len(data["projects"]) > 3 else "moderate",
"project_diversity": len(set(data["projects"]))
}
}
if include_jira_details:
member_summary["jira_involvement"]["recent_issues"] = data["recent_issues"]
# Add project breakdown
project_breakdown = {}
for project in data["projects"]:
project_issues = [issue for issue in data["recent_issues"] if issue.get("project") == project]
project_breakdown[project] = {
"issue_count": len(project_issues),
"recent_activity": len(project_issues) > 0,
"primary_role": project_issues[0]["role"] if project_issues else "contributor"
}
member_summary["jira_involvement"]["project_breakdown"] = project_breakdown
# Add insights based on activity
activity_insights = []
if member_summary["jira_involvement"]["is_active"]:
activity_insights.append("Active contributor with recent JIRA involvement")
if member_summary["professional_profile"]["project_diversity"] > 3:
activity_insights.append("Cross-functional expertise across multiple projects")
if member_summary["jira_involvement"]["activity_level"] == "high":
activity_insights.append("High-volume contributor")
if len(member_summary["group_memberships"]["leadership_roles"]) > 0:
activity_insights.append("Leadership experience in Red Hat groups")
member_summary["insights"] = {
"activity_insights": activity_insights,
"recommended_for": [
"Technical consultation",
"Project collaboration",
"Cross-team initiatives"
] if member_summary["jira_involvement"]["is_active"] else ["Future opportunities"],
"expertise_summary": f"Specialist in {', '.join(data['expertise'][:2])}" if data['expertise'] else "Expertise to be determined",
"leadership_potential": "High" if len(member_summary["group_memberships"]["leadership_roles"]) > 0 else "Emerging"
}
return member_summary
def main():
"""Demonstrate the rover_member_summary tool functionality."""
print("π ROVER MEMBER SUMMARY TOOL DEMONSTRATION")
print("=" * 60)
print()
# Example 1: dhshah profile
print("π EXAMPLE 1: Member Profile - dhshah")
print("-" * 40)
dhshah_summary = simulate_member_summary("dhshah", include_jira_details=True)
print(f"π€ Member: {dhshah_summary['member_profile']['member_id']}")
print(f"π Group Memberships: {dhshah_summary['member_profile']['total_groups']} groups")
print(f"π― Activity Level: {dhshah_summary['jira_involvement']['activity_level']}")
print(f"π¬ Expertise: {', '.join(dhshah_summary['professional_profile']['primary_expertise'])}")
print()
print("π’ GROUP INVOLVEMENT:")
for group in dhshah_summary["group_memberships"]["discovered_groups"]:
role_emoji = "π" if group["role"] == "owner" else "βοΈ" if group["role"] == "admin" else "π₯"
print(f" {role_emoji} {group['role']} in {group['name']}")
print()
print("π― JIRA PROJECT INVOLVEMENT:")
for project, details in dhshah_summary["jira_involvement"]["project_breakdown"].items():
status_emoji = "π’" if details["recent_activity"] else "βͺ"
print(f" {status_emoji} {project}: {details['issue_count']} issues ({details['primary_role']})")
print()
print("π‘ INSIGHTS:")
for insight in dhshah_summary["insights"]["activity_insights"]:
print(f" β¨ {insight}")
print(f" π― {dhshah_summary['insights']['expertise_summary']}")
print(f" π Leadership Potential: {dhshah_summary['insights']['leadership_potential']}")
print()
# Example 2: mboy profile (admin)
print("π EXAMPLE 2: Admin Profile - mboy")
print("-" * 40)
mboy_summary = simulate_member_summary("mboy", include_jira_details=True)
print(f"π€ Member: {mboy_summary['member_profile']['member_id']}")
print(f"π Leadership Roles: {len(mboy_summary['group_memberships']['leadership_roles'])}")
print(f"π Projects: {len(mboy_summary['jira_involvement']['projects'])}")
print(f"π₯ Recent Issues: {mboy_summary['jira_involvement']['total_issues']}")
print()
print("π LEADERSHIP POSITIONS:")
for role in mboy_summary["group_memberships"]["leadership_roles"]:
print(f" π {role['role']} in {role['name']}")
print()
print("π¬ EXPERTISE AREAS:")
for expertise in mboy_summary["professional_profile"]["primary_expertise"]:
print(f" π― {expertise}")
print()
print("π RECENT ACTIVITY:")
for issue in mboy_summary["jira_involvement"]["recent_issues"][:3]:
status_emoji = "π’" if issue["status"] == "Resolved" else "π‘" if issue["status"] == "In Progress" else "π΄"
print(f" {status_emoji} {issue['key']}: {issue['summary'][:50]}...")
print()
# Example 3: JSON output for integration
print("π EXAMPLE 3: JSON Output Structure")
print("-" * 40)
sample_summary = simulate_member_summary("sample-user", include_jira_details=False)
print("Sample JSON structure (abbreviated):")
print(json.dumps({
"member_profile": sample_summary["member_profile"],
"insights": sample_summary["insights"]
}, indent=2))
print()
print("π§ TOOL USAGE EXAMPLES")
print("-" * 40)
print("# Get full member summary with JIRA details")
print("rover_member_summary('dhshah', include_jira_details=True)")
print()
print("# Get basic member profile without detailed JIRA data")
print("rover_member_summary('mboy', include_jira_details=False)")
print()
print("# For any Red Hat member ID")
print("rover_member_summary('your-redhat-id')")
print()
print("π‘ INTEGRATION NOTES")
print("-" * 40)
print("β
Tool added to rover MCP server")
print("β
Integrates with existing JIRA analysis functions")
print("β
Provides comprehensive member profiles")
print("β
Supports both detailed and summary views")
print("π Ready for real JIRA data integration via jira-mcp-snowflake")
print("π Can be enhanced with actual group discovery APIs")
if __name__ == "__main__":
main()