Skip to main content
Glama
aserper

RTFD (Read The F*****g Docs)

by aserper

fetch_pypi_docs

Retrieve formatted Python package documentation from PyPI, extracting installation instructions, usage examples, and API references to support development tasks.

Instructions

Fetch actual Python package documentation from PyPI README/description. USE THIS WHEN: You need installation instructions, usage examples, API reference, or quickstart guides. BEST FOR: Getting complete, formatted documentation for Python packages. Better than using curl or WebFetch because it: - Automatically extracts relevant sections (Installation, Usage, Examples) - Converts reStructuredText to Markdown - Prioritizes most useful content sections - Falls back to GitHub README if PyPI description is minimal NOT SUITABLE FOR: External documentation sites (use docs_url from pypi_metadata + WebFetch) Args: package: PyPI package name (e.g., "requests", "numpy", "pandas") max_bytes: Maximum content size, default 20KB (increase for large packages) ignore_verification: Skip PyPI verification check if VERIFIED_BY_PYPI is enabled Returns: JSON with actual documentation content, size, truncation status Example: fetch_pypi_docs("requests") → Returns formatted README with installation and usage

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
packageYes
max_bytesNo
ignore_verificationNo

Implementation Reference

  • Main handler function for the fetch_pypi_docs tool. Calls the private _fetch_pypi_docs helper and serializes the response for MCP.
    async def fetch_pypi_docs( package: str, max_bytes: int = 20480, ignore_verification: bool = False ) -> CallToolResult: """ Fetch actual Python package documentation from PyPI README/description. USE THIS WHEN: You need installation instructions, usage examples, API reference, or quickstart guides. BEST FOR: Getting complete, formatted documentation for Python packages. Better than using curl or WebFetch because it: - Automatically extracts relevant sections (Installation, Usage, Examples) - Converts reStructuredText to Markdown - Prioritizes most useful content sections - Falls back to GitHub README if PyPI description is minimal NOT SUITABLE FOR: External documentation sites (use docs_url from pypi_metadata + WebFetch) Args: package: PyPI package name (e.g., "requests", "numpy", "pandas") max_bytes: Maximum content size, default 20KB (increase for large packages) ignore_verification: Skip PyPI verification check if VERIFIED_BY_PYPI is enabled Returns: JSON with actual documentation content, size, truncation status Example: fetch_pypi_docs("requests") → Returns formatted README with installation and usage """ result = await self._fetch_pypi_docs(package, max_bytes, ignore_verification) return serialize_response_with_meta(result)
  • Private helper method containing the core logic for fetching, processing, and prioritizing PyPI package documentation.
    async def _fetch_pypi_docs( self, package: str, max_bytes: int = 20480, ignore_verification: bool = False ) -> dict[str, Any]: """ Fetch documentation content for PyPI package. Args: package: Package name max_bytes: Maximum content size in bytes ignore_verification: Whether to ignore PyPI verification status Returns: Dict with content, size, source, etc. """ try: # 1. Get metadata to find description and project URLs # This will also perform the verification check metadata = await self._fetch_metadata(package, ignore_verification) if metadata.get("error"): return { "package": package, "content": "", "error": metadata["error"], "size_bytes": 0, "source": None, } # 2. Try PyPI description (often reStructuredText) content = metadata.get("description", "") source = "pypi" # 3. Convert reST to Markdown if needed # Check for common reST markers if content and (".. " in content or "::" in content[:200]): content = convert_rst_to_markdown(content) # 4. If insufficient content, try GitHub README if len(content.encode("utf-8")) < 500: repo_url = self._extract_github_url(metadata.get("project_urls", {})) if repo_url: # For now, note that GitHub fallback requires github provider # This will be implemented after GitHub provider is updated # source = "pypi_minimal" pass # 5. Extract and prioritize sections sections = extract_sections(content) if sections: final_content = prioritize_sections(sections, max_bytes) else: final_content = content[:max_bytes] if content else "" return { "package": package, "content": final_content, "size_bytes": len(final_content.encode("utf-8")), "source": source, "truncated": len(content.encode("utf-8")) > max_bytes, } except httpx.HTTPStatusError as exc: return { "package": package, "content": "", "error": f"PyPI returned {exc.response.status_code}", "size_bytes": 0, "source": None, } except Exception as exc: return { "package": package, "content": "", "error": f"Failed to fetch docs: {exc!s}", "size_bytes": 0, "source": None, }
  • Registers the fetch_pypi_docs tool function in the provider's tools dictionary, conditionally if fetch is enabled.
    tools = {"pypi_metadata": pypi_metadata} if is_fetch_enabled(): tools["fetch_pypi_docs"] = fetch_pypi_docs return tools
  • Conditionally adds 'fetch_pypi_docs' to the provider metadata's tool_names list.
    if is_fetch_enabled(): tool_names.append("fetch_pypi_docs")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aserper/RTFD'

If you have feedback or need assistance with the MCP directory API, please join our Discord server