13
13
from modelscope_mcp_server .settings import settings
14
14
from modelscope_mcp_server .utils .metadata import get_server_name_with_version
15
15
16
+ # Global counter for demo step numbering
17
+ demo_step = 0
18
+
19
+
20
+ def print_step_title (tool_name : str , task_description : str ) -> None :
21
+ """Print demo step title."""
22
+ global demo_step
23
+ demo_step += 1
24
+ print (f"{ demo_step } . 🛠️ Tool: { tool_name } " )
25
+ print (f" • Task: { task_description } " )
26
+
16
27
17
28
def parse_tool_response (result ) -> dict :
18
29
"""Parse tool response and return JSON data."""
@@ -27,10 +38,10 @@ def parse_tool_response(result) -> dict:
27
38
28
39
async def demo_user_info (client : Client ) -> None :
29
40
"""Demo getting current user information."""
30
- print ( "1. 🛠️ Tool: get_current_user")
31
- print ( " • Task: 👤 Get current user information" )
41
+ tool_name = " get_current_user"
42
+ print_step_title ( tool_name , " 👤 Get current user information" )
32
43
33
- result = await client .call_tool ("get_current_user" , {})
44
+ result = await client .call_tool (tool_name , {})
34
45
data = parse_tool_response (result )
35
46
36
47
username = data .get ("username" , "N/A" )
@@ -43,10 +54,10 @@ async def demo_user_info(client: Client) -> None:
43
54
44
55
async def demo_environment_info (client : Client ) -> None :
45
56
"""Demo getting environment information."""
46
- print ( "2. 🛠️ Tool: get_environment_info")
47
- print ( " • Task: 🔧 Get current MCP server environment information" )
57
+ tool_name = " get_environment_info"
58
+ print_step_title ( tool_name , " 🔧 Get current MCP server environment information" )
48
59
49
- result = await client .call_tool ("get_environment_info" , {})
60
+ result = await client .call_tool (tool_name , {})
50
61
data = parse_tool_response (result )
51
62
52
63
print (f" • Result: { data } " )
@@ -55,11 +66,13 @@ async def demo_environment_info(client: Client) -> None:
55
66
56
67
async def demo_search_models (client : Client ) -> None :
57
68
"""Demo searching models."""
58
- print ("3. 🛠️ Tool: search_models" )
59
- print (" • Task: 🔍 Search text-generation models (keyword='DeepSeek', support inference, limit 3 results)" )
69
+ tool_name = "search_models"
70
+ print_step_title (
71
+ tool_name , "🔍 Search text-generation models (keyword='DeepSeek', support inference, limit 3 results)"
72
+ )
60
73
61
74
result = await client .call_tool (
62
- "search_models" ,
75
+ tool_name ,
63
76
{
64
77
"query" : "DeepSeek" ,
65
78
"task" : "text-generation" ,
@@ -82,40 +95,73 @@ async def demo_search_models(client: Client) -> None:
82
95
print ()
83
96
84
97
98
+ async def demo_search_datasets (client : Client ) -> None :
99
+ """Demo searching datasets."""
100
+ tool_name = "search_datasets"
101
+ print_step_title (tool_name , "📊 Search datasets (keyword='金融', sort='downloads', limit 3 results)" )
102
+
103
+ result = await client .call_tool (
104
+ tool_name ,
105
+ {
106
+ "query" : "金融" ,
107
+ "sort" : "downloads" ,
108
+ "limit" : 3 ,
109
+ },
110
+ )
111
+ data = parse_tool_response (result )
112
+
113
+ if isinstance (data , list ) and data :
114
+ summaries = []
115
+ for dataset in data :
116
+ name = dataset .get ("name" , "N/A" )
117
+ chinese_name = dataset .get ("chinese_name" , "N/A" )
118
+ downloads = dataset .get ("downloads_count" , 0 )
119
+ likes = dataset .get ("likes_count" , 0 )
120
+ summaries .append (f"{ name } ({ chinese_name } ) - Downloads { downloads :,} , Likes { likes } " )
121
+ print (f" • Result: Found { len (data )} items - { ' | ' .join (summaries )} " )
122
+ else :
123
+ print (" • Result: No datasets found" )
124
+ print ()
125
+
126
+
85
127
async def demo_search_papers (client : Client ) -> None :
86
128
"""Demo searching papers."""
87
- print ( "4. 🛠️ Tool: search_papers")
88
- print ( " • Task: 📚 Search academic papers (keyword='Qwen3', sort='hot', limit 1 result)" )
129
+ tool_name = " search_papers"
130
+ print_step_title ( tool_name , " 📚 Search papers (keyword='Qwen3', sort='hot', limit 3 result)" )
89
131
90
132
result = await client .call_tool (
91
- "search_papers" ,
133
+ tool_name ,
92
134
{
93
135
"query" : "Qwen3" ,
94
136
"sort" : "hot" ,
95
- "limit" : 1 ,
137
+ "limit" : 3 ,
96
138
},
97
139
)
98
140
data = parse_tool_response (result )
99
141
100
142
if isinstance (data , list ) and data :
101
- paper = data [0 ]
102
- title = paper .get ("title" , "N/A" )
103
- arxiv_id = paper .get ("arxiv_id" , "N/A" )
104
- view_count = paper .get ("view_count" , 0 )
105
- modelscope_url = paper .get ("modelscope_url" , "N/A" )
106
- print (f" • Result: '{ title } ' ArXiv ID={ arxiv_id } , Views={ view_count :,} ModelScope URL={ modelscope_url } " )
143
+ summaries = []
144
+ for paper in data :
145
+ title = paper .get ("title" , "N/A" )
146
+ arxiv_id = paper .get ("arxiv_id" , "N/A" )
147
+ view_count = paper .get ("view_count" , 0 )
148
+ modelscope_url = paper .get ("modelscope_url" , "N/A" )
149
+ summaries .append (f"{ title } (ArXiv={ arxiv_id } , Views={ view_count :,} URL={ modelscope_url } )" )
150
+ print (f" • Result: Found { len (data )} items - { ' | ' .join (summaries )} " )
107
151
else :
108
152
print (" • Result: No papers found" )
109
153
print ()
110
154
111
155
112
156
async def demo_search_mcp_servers (client : Client ) -> None :
113
157
"""Demo searching MCP servers."""
114
- print ("5. 🛠️ Tool: search_mcp_servers" )
115
- print (" • Task: 🔍 Search MCP servers (keyword='Chrome', category='browser-automation', limit 3 results)" )
158
+ tool_name = "search_mcp_servers"
159
+ print_step_title (
160
+ tool_name , "🔍 Search MCP servers (keyword='Chrome', category='browser-automation', limit 3 results)"
161
+ )
116
162
117
163
result = await client .call_tool (
118
- "search_mcp_servers" ,
164
+ tool_name ,
119
165
{
120
166
"search" : "Chrome" ,
121
167
"category" : "browser-automation" ,
@@ -139,24 +185,15 @@ async def demo_search_mcp_servers(client: Client) -> None:
139
185
140
186
async def demo_generate_image (client : Client ) -> None :
141
187
"""Demo image generation."""
142
- print ("6. 🛠️ Tool: generate_image" )
143
- print (" • Task: 🎨 Generate image (prompt='A curious cat wearing a tiny wizard hat in candy cloud kingdom')" )
188
+ tool_name = "generate_image"
189
+ prompt = "A curious cat wearing a tiny wizard hat in candy cloud kingdom"
190
+ print_step_title (tool_name , f"🎨 Generate image with prompt: { prompt } " )
144
191
145
- result = await client .call_tool (
146
- "generate_image" ,
147
- {
148
- "prompt" : "A curious cat wearing a tiny wizard hat in candy cloud kingdom" ,
149
- },
150
- )
192
+ result = await client .call_tool (tool_name , {"prompt" : prompt })
151
193
data = parse_tool_response (result )
152
194
153
- image_url = data .get ("image_url" )
154
- model = data .get ("model" )
155
-
156
- if not image_url :
157
- raise RuntimeError ("Missing required field 'image_url' in response" )
158
- if not model :
159
- raise RuntimeError ("Missing required field 'model' in response" )
195
+ image_url = data .get ("image_url" , "N/A" )
196
+ model = data .get ("model" , "N/A" )
160
197
161
198
print (f" • Result: Image generated using model '{ model } ' - URL: { image_url } " )
162
199
print ()
@@ -204,6 +241,7 @@ async def main() -> None:
204
241
await demo_user_info (client )
205
242
await demo_environment_info (client )
206
243
await demo_search_models (client )
244
+ await demo_search_datasets (client )
207
245
await demo_search_papers (client )
208
246
await demo_search_mcp_servers (client )
209
247
0 commit comments