Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from .tools import log_alert, get_open_alerts, mark_alert_resolved, summarize_alerts | |
| # Define the Gradio interface | |
| # We can use a TabbedInterface to organize the tools for the UI, | |
| # which also registers them as MCP tools. | |
| def create_demo(): | |
| with gr.Blocks(title="CredentialWatch Alert MCP") as demo: | |
| gr.Markdown("# CredentialWatch Alert MCP Server") | |
| gr.Markdown("This server exposes tools for managing alerts via MCP. It also provides a simple UI.") | |
| with gr.Tab("Log Alert"): | |
| gr.Markdown("## Log a new alert") | |
| with gr.Row(): | |
| t1_provider_id = gr.Number(label="Provider ID", value=1, precision=0) | |
| t1_credential_id = gr.Number(label="Credential ID (Optional)", value=None, precision=0) | |
| with gr.Row(): | |
| t1_severity = gr.Dropdown(choices=["info", "warning", "critical"], label="Severity", value="info") | |
| t1_window_days = gr.Number(label="Window Days", value=30, precision=0) | |
| t1_message = gr.Textbox(label="Message") | |
| t1_channel = gr.Textbox(label="Channel", value="ui") | |
| t1_output = gr.JSON(label="Response") | |
| t1_btn = gr.Button("Log Alert") | |
| t1_btn.click( | |
| fn=log_alert, | |
| inputs=[t1_provider_id, t1_severity, t1_window_days, t1_message, t1_credential_id, t1_channel], | |
| outputs=t1_output | |
| ) | |
| with gr.Tab("Get Open Alerts"): | |
| gr.Markdown("## List open alerts") | |
| t2_provider_id = gr.Number(label="Provider ID (Optional)", value=None, precision=0) | |
| t2_severity = gr.Dropdown(choices=["info", "warning", "critical", None], label="Severity (Optional)", value=None) | |
| t2_output = gr.JSON(label="Open Alerts") | |
| t2_btn = gr.Button("Get Alerts") | |
| t2_btn.click( | |
| fn=get_open_alerts, | |
| inputs=[t2_provider_id, t2_severity], | |
| outputs=t2_output | |
| ) | |
| with gr.Tab("Resolve Alert"): | |
| gr.Markdown("## Mark alert as resolved") | |
| t3_alert_id = gr.Number(label="Alert ID", precision=0) | |
| t3_note = gr.Textbox(label="Resolution Note") | |
| t3_output = gr.JSON(label="Updated Alert") | |
| t3_btn = gr.Button("Resolve") | |
| t3_btn.click( | |
| fn=mark_alert_resolved, | |
| inputs=[t3_alert_id, t3_note], | |
| outputs=t3_output | |
| ) | |
| with gr.Tab("Summarize Alerts"): | |
| gr.Markdown("## Summary of alerts") | |
| t4_window = gr.Number(label="Window Days (Optional)", value=None, precision=0) | |
| t4_output = gr.JSON(label="Summary") | |
| t4_btn = gr.Button("Summarize") | |
| t4_btn.click( | |
| fn=summarize_alerts, | |
| inputs=[t4_window], | |
| outputs=t4_output | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| demo = create_demo() | |
| demo.launch(mcp_server=True) | |