Update app.py
Browse files
app.py
CHANGED
|
@@ -260,10 +260,51 @@ def Fetch_Webpage( # <-- MCP tool #1 (Fetch)
|
|
| 260 |
max_links: int = 20,
|
| 261 |
) -> str:
|
| 262 |
"""
|
| 263 |
-
Fetch a web page and return a compact Markdown summary
|
| 264 |
metadata, readable main text, and outbound links.
|
| 265 |
|
| 266 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
"""
|
| 268 |
if not url or not url.strip():
|
| 269 |
return "Please enter a valid URL."
|
|
@@ -335,10 +376,35 @@ def Search_DuckDuckGo( # <-- MCP tool #2 (DDG Search)
|
|
| 335 |
title_chars: int = 80,
|
| 336 |
) -> str:
|
| 337 |
"""
|
| 338 |
-
Run a DuckDuckGo search and return ultra-compact JSONL
|
| 339 |
minimize tokens.
|
| 340 |
|
| 341 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 342 |
"""
|
| 343 |
if not query or not query.strip():
|
| 344 |
return ""
|
|
@@ -384,8 +450,23 @@ def Search_DuckDuckGo( # <-- MCP tool #2 (DDG Search)
|
|
| 384 |
|
| 385 |
def Execute_Python(code: str) -> str:
|
| 386 |
"""
|
| 387 |
-
Execute Python code and return
|
| 388 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 389 |
"""
|
| 390 |
if code is None:
|
| 391 |
return "No code provided."
|
|
|
|
| 260 |
max_links: int = 20,
|
| 261 |
) -> str:
|
| 262 |
"""
|
| 263 |
+
Fetch a web page and return a compact Markdown summary containing title, key
|
| 264 |
metadata, readable main text, and outbound links.
|
| 265 |
|
| 266 |
+
This function powers the MCP tool "Fetch_Webpage". Descriptions below are
|
| 267 |
+
provided explicitly for MCP clients that surface parameter help.
|
| 268 |
+
|
| 269 |
+
Args:
|
| 270 |
+
url (str):
|
| 271 |
+
The absolute URL to fetch. Must return HTML. Example:
|
| 272 |
+
"https://example.com/article".
|
| 273 |
+
verbosity (str, optional):
|
| 274 |
+
Controls how much body text to include. One of:
|
| 275 |
+
- "Brief" (about 800–1200 chars)
|
| 276 |
+
- "Standard" (about 3000 chars)
|
| 277 |
+
- "Full" (no practical cap apart from max_chars)
|
| 278 |
+
Default: "Standard".
|
| 279 |
+
include_metadata (bool, optional):
|
| 280 |
+
If True, include a Metadata section with description, site name,
|
| 281 |
+
canonical URL, language, and fetched URL. Default: True.
|
| 282 |
+
include_text (bool, optional):
|
| 283 |
+
If True, include the readable main text extracted with Readability.
|
| 284 |
+
Default: True.
|
| 285 |
+
include_links (bool, optional):
|
| 286 |
+
If True, include outbound links discovered in the readable section
|
| 287 |
+
of the page. Default: True.
|
| 288 |
+
max_chars (int, optional):
|
| 289 |
+
Hard maximum number of characters for the body text, applied after
|
| 290 |
+
the verbosity preset. Use 0 or a negative value to disable the cap
|
| 291 |
+
(the verbosity preset will still apply). Default: 3000.
|
| 292 |
+
max_links (int, optional):
|
| 293 |
+
Maximum number of links to include. Set 0 to omit links even if
|
| 294 |
+
include_links=True. Default: 20.
|
| 295 |
+
|
| 296 |
+
Returns:
|
| 297 |
+
str: Markdown that may contain the following sections:
|
| 298 |
+
- Title (H1)
|
| 299 |
+
- Metadata (optional)
|
| 300 |
+
- Text (optional, may be trimmed)
|
| 301 |
+
- Links (optional, deduped and absolute)
|
| 302 |
+
|
| 303 |
+
Notes:
|
| 304 |
+
- Only HTML content types are supported. Non-HTML responses return a
|
| 305 |
+
short message indicating the unsupported content type.
|
| 306 |
+
- Link text is shortened to keep tokens small; URLs are absolute and
|
| 307 |
+
fragments are removed.
|
| 308 |
"""
|
| 309 |
if not url or not url.strip():
|
| 310 |
return "Please enter a valid URL."
|
|
|
|
| 376 |
title_chars: int = 80,
|
| 377 |
) -> str:
|
| 378 |
"""
|
| 379 |
+
Run a DuckDuckGo search and return ultra-compact JSONL with short keys to
|
| 380 |
minimize tokens.
|
| 381 |
|
| 382 |
+
This function powers the MCP tool "Search_DuckDuckGo". Each line in the
|
| 383 |
+
output is a JSON object using short keys to reduce token usage.
|
| 384 |
+
|
| 385 |
+
Args:
|
| 386 |
+
query (str):
|
| 387 |
+
The search query. Examples: "langchain streaming" or
|
| 388 |
+
"vector database site:docs.pinecone.io".
|
| 389 |
+
max_results (int, optional):
|
| 390 |
+
Maximum number of results to return. Range: 1–20. Default: 5.
|
| 391 |
+
include_snippets (bool, optional):
|
| 392 |
+
If True, includes a short snippet for each result (key "s"). This
|
| 393 |
+
increases tokens. Default: False.
|
| 394 |
+
max_snippet_chars (int, optional):
|
| 395 |
+
Character cap applied to each snippet when include_snippets=True.
|
| 396 |
+
Default: 80.
|
| 397 |
+
dedupe_domains (bool, optional):
|
| 398 |
+
If True, only the first result from each domain is kept. Default: True.
|
| 399 |
+
title_chars (int, optional):
|
| 400 |
+
Character cap applied to titles. Default: 80.
|
| 401 |
+
|
| 402 |
+
Returns:
|
| 403 |
+
str: Newline-delimited JSON (JSONL). Each line has:
|
| 404 |
+
{"t": "title", "u": "url"[, "s": "snippet"]}
|
| 405 |
+
|
| 406 |
+
Error Handling:
|
| 407 |
+
On search errors, returns a single JSON object with an "error" key.
|
| 408 |
"""
|
| 409 |
if not query or not query.strip():
|
| 410 |
return ""
|
|
|
|
| 450 |
|
| 451 |
def Execute_Python(code: str) -> str:
|
| 452 |
"""
|
| 453 |
+
Execute arbitrary Python code and return captured stdout or an error message.
|
| 454 |
+
|
| 455 |
+
This function powers the MCP tool "Execute_Python" and mirrors the
|
| 456 |
+
standalone code interpreter behavior used in the UI tab.
|
| 457 |
+
|
| 458 |
+
Args:
|
| 459 |
+
code (str):
|
| 460 |
+
The Python source code to run. The code executes in a single call
|
| 461 |
+
with a fresh global scope. Prints are captured and returned.
|
| 462 |
+
|
| 463 |
+
Returns:
|
| 464 |
+
str: Combined stdout produced by the code, or the exception text if
|
| 465 |
+
execution failed.
|
| 466 |
+
|
| 467 |
+
Security:
|
| 468 |
+
The code executes within the current Python process. Do not run
|
| 469 |
+
untrusted code in environments where it could access sensitive data.
|
| 470 |
"""
|
| 471 |
if code is None:
|
| 472 |
return "No code provided."
|