feat(mcp): update bigmind/mcp-image-gen/webscraper servers; add image-gen batch scripts

This commit is contained in:
Patrick Plate
2026-06-11 09:02:09 +02:00
parent 0cb94122bf
commit bf721c1379
9 changed files with 2659 additions and 297 deletions
+35 -43
View File
@@ -206,27 +206,39 @@ def test_sitemap_max_urls(mock_get, mock_sitemap_response):
# --- webscraper_search_hint tests ---
# Helper to build a Brave-style result card with the new 2026-04 class names.
# Real result cards have a .result-wrapper; non-result blocks (videos, FAQ) do not.
def _brave_card(href: str, title: str, snippet: str) -> str:
"""Return a mock Brave Search .snippet card with .result-wrapper (web result)."""
return f"""
<div class="snippet svelte-jmfu5f">
<div class="result-wrapper svelte-1rq4ngz">
<div class="result-content svelte-1rq4ngz">
<a class="l1 svelte-14r20fy" href="{href}">
<div class="search-snippet-title line-clamp-1 svelte-14r20fy">{title}</div>
</a>
<div class="generic-snippet svelte-1cwdgg3">
<div class="content desktop-default-regular t-primary line-clamp-dynamic svelte-1cwdgg3">{snippet}</div>
</div>
</div>
</div>
</div>"""
@pytest.fixture
def mock_brave_response():
"""Mock Brave Search HTML response with result cards."""
"""Mock Brave Search HTML response with result cards (2026-04 class names)."""
mock_resp = MagicMock()
mock_resp.status_code = 200
mock_resp.text = """
<html><body>
<div class="snippet">
<a href="https://example.com/article1" class="snippet-title">Feynman on Electric Fields</a>
<div class="snippet-title">Feynman on Electric Fields</div>
<div class="snippet-description">Richard Feynman explains that all matter has an electric field.</div>
</div>
<div class="snippet">
<a href="https://example.com/article2" class="snippet-title">Electric Fields Everywhere</a>
<div class="snippet-title">Electric Fields Everywhere</div>
<div class="snippet-description">Everything in the universe is surrounded by electric fields.</div>
</div>
<div class="snippet">
<a href="javascript:void(0)" class="snippet-title">JS Junk</a>
<div class="snippet-title">JS Junk</div>
<div class="snippet-description">Should be filtered out.</div>
<html><body id="results">
""" + _brave_card("https://example.com/article1", "Feynman on Electric Fields",
"Richard Feynman explains that all matter has an electric field.") + """
""" + _brave_card("https://example.com/article2", "Electric Fields Everywhere",
"Everything in the universe is surrounded by electric fields.") + """
<!-- Non-result block (no .result-wrapper) — should be skipped -->
<div class="snippet svelte-jmfu5f standalone" id="faq">
<header class="desktop-heading-h4">FAQ</header>
</div>
</body></html>
"""
@@ -240,22 +252,10 @@ def mock_brave_response_dups():
mock_resp = MagicMock()
mock_resp.status_code = 200
mock_resp.text = """
<html><body>
<div class="snippet">
<a href="https://example.com/dup">Dup Result A</a>
<div class="snippet-title">Dup Result A</div>
<div class="snippet-description">First occurrence.</div>
</div>
<div class="snippet">
<a href="https://example.com/dup">Dup Result B</a>
<div class="snippet-title">Dup Result B</div>
<div class="snippet-description">Second occurrence — same URL.</div>
</div>
<div class="snippet">
<a href="https://example.com/unique">Unique Result</a>
<div class="snippet-title">Unique Result</div>
<div class="snippet-description">Only once.</div>
</div>
<html><body id="results">
""" + _brave_card("https://example.com/dup", "Dup Result A", "First occurrence.") + """
""" + _brave_card("https://example.com/dup", "Dup Result B", "Second occurrence — same URL.") + """
""" + _brave_card("https://example.com/unique", "Unique Result", "Only once.") + """
</body></html>
"""
mock_resp.headers = {"content-type": "text/html"}
@@ -268,17 +268,9 @@ def mock_brave_response_empty_content():
mock_resp = MagicMock()
mock_resp.status_code = 200
mock_resp.text = """
<html><body>
<div class="snippet">
<a href="https://example.com/ghost"></a>
<div class="snippet-title"></div>
<div class="snippet-description"></div>
</div>
<div class="snippet">
<a href="https://example.com/real">Real Result</a>
<div class="snippet-title">Real Result</div>
<div class="snippet-description">Has content.</div>
</div>
<html><body id="results">
""" + _brave_card("https://example.com/ghost", "", "") + """
""" + _brave_card("https://example.com/real", "Real Result", "Has content.") + """
</body></html>
"""
mock_resp.headers = {"content-type": "text/html"}