Reported issues for PyScrappy
Pod holds 13 of 13 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to PyScrappy.
Most discussed
scrape_stock MCP tool documents quote/profile fields the scraper never returns
The scrape_stock MCP tool docstring advertises quote and profile shapes whose fields the scraper does not emit, so an agent (or user) reading the tool schema is told to read keys that will never be present.
Where
src/pyscrappy/mcp/server.py (the scrape_stock docstring):
- "quote": {"symbol", "price", "currency", "change", "change_percent", "market_time"}.
- "profile": {"symbol", "name", "sector", "industry", "country", "website", "summary"}.
What the scraper actua
Read the thread · 2026-08-08 · closed · 1 comment
convert_currency docstring states wrong defaults for base and to
The bug
The convert_currency MCP tool docstring states two defaults that don't match the function signature, so an agent reading the doc is misinformed.
Signature (src/pyscrappy/mcp/server.py:332):
async def convert_currency(base: str = "USD", to: str | None = None, amount: float = 1.0)
Docstring (server.py:342-343):
base: Base currency code as a 3-letter ISO 4217 string. Example: "USD". No default (required).
to: Target currency codes ...; omit or leave empty ...
[Read the thread](https://github.com/mldsveda/PyScrappy/issues/96) · 2026-08-05 · closed · 1 comment
### get_weather docstring promises a 'wind' key but the scraper emits 'wind_speed'
### The bug
The `get_weather` MCP tool docstring promises a `wind` key, but the scraper never emits one — it emits `wind_speed`. A consumer keying `item["wind"]` (per the tool doc) gets a `KeyError`/`None`.
Doc (`src/pyscrappy/mcp/server.py:431`):
> Fetch the current weather … return a dict with keys: temperature (…degrees Celsius), humidity (…percent), **wind** (number, wind speed), condition (…), and location (…).
Scraper output (`src/pyscrappy/scrapers/weather.py:144-148`):
```python
"tempe
[Read the thread](https://github.com/mldsveda/PyScrappy/issues/95) · 2026-08-05 · closed · 1 comment
### GitHubScraper default max_results (30) disagrees with its MCP tool (20)
### The problem
`GitHubScraper` and its MCP tool disagree on the default `max_results`, so the same call returns a different number of results depending on how it's invoked.
- `src/pyscrappy/scrapers/github.py:47` (and `:84`): `max_results: int = 30`
- `src/pyscrappy/mcp/server.py:373`: `search_github(query, max_results: int = 20, ...)`, and the tool docstring (line ~381) says `Default 20`.
So `GitHubScraper().scrape(query="...")` returns up to 30, while the same search through the MCP `search
[Read the thread](https://github.com/mldsveda/PyScrappy/issues/79) · 2026-08-02 · closed · 1 comment
### Make the MCP server's cache TTL configurable (env var)
The MCP server hardcodes its response cache TTL, and the code says so:
```python
# src/pyscrappy/mcp/server.py
# Hardcoded for now; a future version will make this configurable.
_CACHE_TTL = 300.0
Different deployments want different freshness/latency tradeoffs, so this should be configurable — e.g. a PYSCRAPPY_MCP_CACHE_TTL env var, falling back to 300s.
Acceptance
_CACHE_TTLreads from an env var (e.g. PYSCRAPPY_MCP_CACHE_TTL) with the current 300s default.- A test confirms t
Read the thread · 2026-07-31 · closed · 1 comment
Add a --json output option to the pyscrappy CLI agent
The pyscrappy CLI (the Ollama agent) prints human-readable output. Adding a --json flag that emits the raw ScrapeResult as JSON would make it scriptable and CI-friendly (pipe into jq, etc.).
What
- Add
--jsonto the CLI argument parser. - When set, print
result.to_json()(already exists on ScrapeResult) instead of the formatted output.
Good first issue: small, self-contained, and ScrapeResult already has to_json().
Acceptance
pyscrappy ... --jsonprints valid JSON
Read the thread · 2026-07-31 · closed · 1 comment
Document the fastmcp requirement and pyscrappy[mcp] extra in the README
The MCP server now depends on the standalone fastmcp package (Python >=3.10 only), installed via the pyscrappy[mcp] extra. The README's MCP section should make this explicit so users know:
- The MCP server needs
pip install pyscrappy[mcp](not justpyscrappy). - fastmcp requires Python >=3.10; on 3.9 the core scraping library still works, but the MCP server is unavailable.
- A short note on running
pyscrappy-mcp(stdio by default,--http/--ssefor remote).
Good first issue: d
Read the thread · 2026-07-31 · closed · 1 comment
search_hackernews doc says 'comments' but the scraper emits 'num_comments'
The bug
The search_hackernews MCP tool docstring says each result has a comments key, but the scraper emits num_comments — so an agent reading item["comments"] gets nothing.
Doc (src/pyscrappy/mcp/server.py:403):
...each with title, url, points, author (username), and comments (comment count).
Scraper (src/pyscrappy/scrapers/hackernews.py:118):
"num_comments": hit.get("num_comments"),
There is no comments key.
What to do
One-word docstring fix: `comme
Read the thread · 2026-08-05 · closed · 0 comments
Most recent
search_images doc lists keys (image_url/thumbnail_url/source_url) the scraper doesn't emit
The bug
The search_images MCP tool docstring documents result keys that the scraper doesn't emit, so a consumer keying by the documented names gets nothing.
Doc (src/pyscrappy/mcp/server.py:264):
Each result is a dict with keys: "image_url", "thumbnail_url", "source_url", "title", "width", "height".
Actual scraper output (src/pyscrappy/scrapers/image_search.py:137-140):
"url": img_url,
"thumbnail": m_data.get("turl", ""),
"title": ...,
"source_page": m_data.ge
[Read the thread](https://github.com/mldsveda/PyScrappy/issues/104) · 2026-08-05 · closed · 0 comments
### search_hackernews MCP tool drops the tags filter the scraper supports
### The problem
`HackerNewsScraper.scrape` supports a `tags` filter (`story`, `comment`, `show_hn`, `ask_hn`, `poll`, …), but the MCP `search_hackernews` tool doesn't expose it — so an agent can only ever get `story` results.
Scraper (`src/pyscrappy/scrapers/hackernews.py:36-49`):
```python
def scrape(self, query, max_results=20, by="relevance", tags="story") -> ScrapeResult:
...
tags is wired into the Algolia query in _build_url (hackernews.py:91-95, &tags={tags}).
MCP tool (`
Read the thread · 2026-08-04 · closed · 0 comments
scrape_stock MCP tool drops the interval param (history locked to daily)
The problem
StockScraper.scrape supports an interval parameter for historical data, but the MCP scrape_stock tool doesn't expose it, so every history request through MCP is locked to daily bars.
Scraper (src/pyscrappy/scrapers/stock.py:41-47):
def scrape(self, symbol, mode="quote", period="1mo", interval="1d") -> ScrapeResult:
...
interval is threaded into the Yahoo chart URL for history (and is already covered by a test that asserts interval=1wk in the request
Read the thread · 2026-08-04 · closed · 0 comments
search_images MCP tool advertises a 'duckduckgo' engine that isn't implemented
The bug
The search_images MCP tool advertises a duckduckgo engine that the scraper doesn't implement, so engine="duckduckgo" silently returns Bing results with no error.
MCP tool docstring (src/pyscrappy/mcp/server.py:266):
engine: String naming the search engine, one of "bing", "google", or "duckduckgo", e.g. "google". Defaults to "bing".
But the scraper only handles google, and anything else falls through to Bing (src/pyscrappy/scrapers/image_search.py:57-60):
[Read the thread](https://github.com/mldsveda/PyScrappy/issues/88) · 2026-08-04 · closed · 0 comments
### NewsScraper crashes on a network error instead of returning a ScrapeError
### The bug
`NewsScraper` doesn't guard its network fetches, so a network error crashes the whole scrape instead of being returned as a `ScrapeError`. Every other API scraper (crypto, currency, weather, github, hackernews, ikea) wraps its fetch and returns a `ScrapeError` result; News is the outlier.
Unguarded fetches:
- `_scrape_feed` — `src/pyscrappy/scrapers/news.py:82` (`xml_text = self.http.get_html(url)`)
- `_scrape_site` — `src/pyscrappy/scrapers/news.py:102` (`html = self.http.get_html(
[Read the thread](https://github.com/mldsveda/PyScrappy/issues/87) · 2026-08-04 · closed · 0 comments
The remaining reports are on [the project's issue tracker](https://github.com/mldsveda/PyScrappy/issues).