Manakavoo commited on
Commit
7380407
·
verified ·
1 Parent(s): 0a72c9c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +139 -0
app.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import json
3
+ from datetime import datetime
4
+ from typing import List, Dict, Optional
5
+
6
+ # Simple in-memory task storage
7
+ tasks_db = []
8
+ task_id_counter = 1
9
+
10
+ # MCP Server Tool Functions
11
+ def create_task(title: str, description: str = "", priority: str = "medium") -> Dict:
12
+ """Create a new task"""
13
+ global task_id_counter
14
+ task = {
15
+ "id": task_id_counter,
16
+ "title": title,
17
+ "description": description,
18
+ "priority": priority,
19
+ "status": "pending",
20
+ "created_at": datetime.now().isoformat()
21
+ }
22
+ tasks_db.append(task)
23
+ task_id_counter += 1
24
+ return {"success": True, "task": task, "message": "Task created successfully"}
25
+
26
+ def list_tasks(status: Optional[str] = None) -> Dict:
27
+ """List all tasks or filter by status"""
28
+ if status:
29
+ filtered = [t for t in tasks_db if t["status"] == status]
30
+ return {"success": True, "tasks": filtered, "count": len(filtered)}
31
+ return {"success": True, "tasks": tasks_db, "count": len(tasks_db)}
32
+
33
+ def update_task(task_id: int, status: str) -> Dict:
34
+ """Update task status"""
35
+ for task in tasks_db:
36
+ if task["id"] == task_id:
37
+ task["status"] = status
38
+ task["updated_at"] = datetime.now().isoformat()
39
+ return {"success": True, "task": task, "message": "Task updated"}
40
+ return {"success": False, "message": "Task not found"}
41
+
42
+ def delete_task(task_id: int) -> Dict:
43
+ """Delete a task"""
44
+ global tasks_db
45
+ initial_len = len(tasks_db)
46
+ tasks_db = [t for t in tasks_db if t["id"] != task_id]
47
+ if len(tasks_db) < initial_len:
48
+ return {"success": True, "message": f"Task {task_id} deleted"}
49
+ return {"success": False, "message": "Task not found"}
50
+
51
+ def get_task_stats() -> Dict:
52
+ """Get task statistics"""
53
+ stats = {
54
+ "total": len(tasks_db),
55
+ "pending": len([t for t in tasks_db if t["status"] == "pending"]),
56
+ "in_progress": len([t for t in tasks_db if t["status"] == "in_progress"]),
57
+ "completed": len([t for t in tasks_db if t["status"] == "completed"])
58
+ }
59
+ return {"success": True, "stats": stats}
60
+
61
+ # Gradio Interface Functions
62
+ def create_task_ui(title, desc, priority):
63
+ result = create_task(title, desc, priority)
64
+ return json.dumps(result, indent=2)
65
+
66
+ def list_tasks_ui(status_filter):
67
+ status = status_filter if status_filter != "all" else None
68
+ result = list_tasks(status)
69
+ return json.dumps(result, indent=2)
70
+
71
+ def update_task_ui(task_id, new_status):
72
+ result = update_task(int(task_id), new_status)
73
+ return json.dumps(result, indent=2)
74
+
75
+ def delete_task_ui(task_id):
76
+ result = delete_task(int(task_id))
77
+ return json.dumps(result, indent=2)
78
+
79
+ def stats_ui():
80
+ result = get_task_stats()
81
+ return json.dumps(result, indent=2)
82
+
83
+ # Create Gradio Interface
84
+ with gr.Blocks(title="Task Manager MCP Server") as demo:
85
+ gr.Markdown(
86
+ """
87
+ # 📋 Task Manager MCP Server
88
+ ### Track 1: Building MCP - MCP 1st Birthday Hackathon
89
+
90
+ This is a simple MCP server providing task management tools for AI agents.
91
+
92
+ **Available Tools:**
93
+ - Create tasks with title, description, and priority
94
+ - List all tasks or filter by status
95
+ - Update task status
96
+ - Delete tasks
97
+ - Get task statistics
98
+
99
+ **MCP Integration:** This server can be used by AI agents via the Model Context Protocol
100
+ to manage tasks programmatically.
101
+ """
102
+ )
103
+
104
+ with gr.Tab("Create Task"):
105
+ title_input = gr.Textbox(label="Task Title", placeholder="Enter task title")
106
+ desc_input = gr.Textbox(label="Description", placeholder="Enter description", lines=3)
107
+ priority_input = gr.Radio(["low", "medium", "high"], label="Priority", value="medium")
108
+ create_btn = gr.Button("Create Task")
109
+ create_output = gr.Code(label="Result", language="json")
110
+ create_btn.click(create_task_ui, [title_input, desc_input, priority_input], create_output)
111
+
112
+ with gr.Tab("List Tasks"):
113
+ status_filter = gr.Radio(["all", "pending", "in_progress", "completed"],
114
+ label="Filter by Status", value="all")
115
+ list_btn = gr.Button("List Tasks")
116
+ list_output = gr.Code(label="Tasks", language="json")
117
+ list_btn.click(list_tasks_ui, [status_filter], list_output)
118
+
119
+ with gr.Tab("Update Task"):
120
+ update_id = gr.Number(label="Task ID", precision=0)
121
+ update_status = gr.Radio(["pending", "in_progress", "completed"],
122
+ label="New Status", value="in_progress")
123
+ update_btn = gr.Button("Update Task")
124
+ update_output = gr.Code(label="Result", language="json")
125
+ update_btn.click(update_task_ui, [update_id, update_status], update_output)
126
+
127
+ with gr.Tab("Delete Task"):
128
+ delete_id = gr.Number(label="Task ID to Delete", precision=0)
129
+ delete_btn = gr.Button("Delete Task", variant="stop")
130
+ delete_output = gr.Code(label="Result", language="json")
131
+ delete_btn.click(delete_task_ui, [delete_id], delete_output)
132
+
133
+ with gr.Tab("Statistics"):
134
+ stats_btn = gr.Button("Get Statistics")
135
+ stats_output = gr.Code(label="Statistics", language="json")
136
+ stats_btn.click(stats_ui, [], stats_output)
137
+
138
+ if __name__ == "__main__":
139
+ demo.launch()