Skip to content

v4.0.0: Python MCP server and CLI

Latest

Choose a tag to compare

@CyranoB CyranoB released this 03 Oct 15:54
a485882

Python MCP server and CLI release from public main at a485882f72d1cebea5aa76b9bc427483bcf7da23.

This major release includes breaking changes accumulated since v3.0.1. The Claude/Codex skills plugin remains independently versioned at 1.1.5.

Migration from v3

  • Update MCP calls from jina_fetch to web_fetch. The legacy name remains a top-level Python alias, but is no longer a registered MCP tool.
  • Replace imports from the removed web_forager.jina_fetch module with from web_forager import fetch_url, web_fetch (or imports from web_forager.web_fetch).
  • Handle web_forager.SearchError for web/news provider failures. Failures now raise an error rather than returning an empty list; successful searches with no matches still return an empty list. MCP exposes failures as tool errors, and CLI search/news commands exit with status 1.
  • Fetching now tries direct HTTP extraction before Jina. Direct JSON returns url, title, and content; Jina JSON may contain text under data.content. Consumers should account for both sources. with_images includes images during direct extraction; generated alt text remains a Jina feature.
  • Jina fallback now requires an eligible public original URL and observed redirect chain. URLs with user information, query strings, or fragments, private/internal hosts, unresolved or mixed DNS, and unestablished redirect chains prevent forwarding. Use allow_jina=False or CLI --direct-only for confidential resources.
  • max_length uses character paging with continuation markers or JSON metadata. Continue with offset/CLI --offset; compare offsets only for an unchanged page from the same source.
  • Supported Python versions are 3.10–3.13 (>=3.10,<3.14). Dependency requirements have been updated, including FastMCP 3.2+, Requests 2.33+, Pydantic 2+, and trafilatura 2+.

Fixes and additions

  • Direct HTTP content extraction with trafilatura and permitted Jina recovery when retrieval, extraction, or minimum-content checks fail.
  • Metadata-only extraction errors preserve usable direct content with an empty title.
  • Diagnostics omit complete search queries and redact URLs and signed request paths. Debug mode retains application diagnostics while limiting dependency and FastMCP logs.
  • python -m web_forager now propagates command failure status consistently with web-forager.
  • Direct-only fetching, observed-redirect forwarding safeguards, character paging, and sanitized retrieval/search errors.
  • Updated dependency pins, build-time Python version generation, documentation, and regression coverage.

All tests, mypy, Black, and isort passed on the release commit in public CI. The release workflow builds the tag and publishes the Python package to PyPI.

Full comparison: v3.0.1...v4.0.0