> ## Documentation Index
> Fetch the complete documentation index at: https://docs.parashell.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Research and web tools

> Parashell and FreeCAD context retrieval plus live web search and page reading through Hubble.

Parashell and FreeCAD context retrieval, live web search, and full-page reading.
The tools are served through the WorkOS-authenticated Hubble service; provider
credentials stay server-side and are never exposed to the agent.

Tool count: `3`.

Client note: `ctx` is injected by the MCP server and is not supplied as a user argument.

## `gather_context`

Signature:

```python theme={null}
gather_context(source: str, keywords: str, limit: int = 20) -> list[TextContent]
```

Descriptor:

```text theme={null}
search parashell and freecad documentation
```

Searches one or more comma-separated Parashell documentation, FreeCAD wiki, or
FreeCAD forum sources. HTTP errors preserve status and service detail and advise
retrying sources separately so one unavailable provider can be isolated.

## `web_search`

Signature:

```python theme={null}
web_search(query: str, num_results: int = 10, type: Literal['auto', 'fast', 'instant'] = 'auto', include_domains: str = '', exclude_domains: str = '', include_text: bool = False) -> list[TextContent]
```

Descriptor:

```text theme={null}
Search the live web for current, external information and get ranked results
with relevant highlight snippets. Use this for anything outside the
Parashell/FreeCAD docs and forum (which are covered by gather_context):
current events, library or standard references, vendor specs, pricing, general
research, or verifying a fact you are unsure about.

Args:
    query: Natural-language search query.
    num_results: How many results to return (1-25, default 10).
    type: Search profile - auto (balanced, default), fast (lower latency), or
          instant (fastest, for quick lookups).
    include_domains: Optional comma-separated domain allowlist (e.g.
                     "arxiv.org,github.com"), up to 25 domains.
    exclude_domains: Optional comma-separated domain blocklist, up to 25 domains.
    include_text: When true, also include a short text excerpt per result;
                  leave false to keep results compact and use web_fetch for the
                  full page.
```

Response: ranked results, each with `title`, `url`, optional `published_date`,
`author`, `score`, `highlights`, and an optional `text` excerpt. Pass a `url`
to `web_fetch` to read the full page.

## `web_fetch`

Signature:

```python theme={null}
web_fetch(url: str, char_limit_overide: bool = False, highlights_query: str = '') -> list[TextContent]
```

Descriptor:

```text theme={null}
Read the full, cleaned text of a specific web page by URL. Use this after
web_search to open a result, or on any absolute http/https URL the user gives
you, to ground your next step in the actual page content instead of guessing.

Args:
    url: Absolute http or https URL to read.
    char_limit_overide: Content is truncated to 8096 characters unless this is
                        true, which raises the cap to 200000. The response always
                        reports the full character count so you can judge whether
                        to pull the whole thing.
    highlights_query: Optional question or phrase; when provided, the most
                      relevant excerpts for that query are surfaced alongside the
                      full text.
```

Response: the page `title`, `url`, cleaned `content`, the truncation flag and
`char_limit` / `full_length`, optional `published_date` / `author`, and any
`highlights` when `highlights_query` was provided.
