# fetch_url

> Fetch 1–10 URLs as clean markdown.

URL: https://mcp-docs.opennomos.com/docs/tools/research/fetch_url

> Fetch 1–10 URLs as clean markdown. Returns page data without saving memory.

| Field | Value |
| --- | --- |
| Pack | Core (`core`) |
| Estimated cost per call | $0 |
| Monthly pack limit | none |
| Project | optional (`project` or `X-OpenNomos-Project`); only attaches the project id to the result |

## Parameters

| Parameter | Required | Type | Description |
| --- | --- | --- | --- |
| `project` | no | `string` | Project slug or id. Omit to use the credential or workspace default. |
| `urls` | yes | `string[]` | 1–10 full URLs including https://, e.g. ['https://example.com/pricing']. |

## Example call

```json
{
  "urls": [
    "https://example.com/pricing"
  ]
}
```

REST: `POST https://service.opennomos.com/v1/tools/fetch_url` with that JSON as the body. MCP: `tools/call` with `name: "fetch_url"` and that JSON as `arguments`.

## Example result

Values are illustrative; the shape comes from the service code.

```json
{
  "results": [
    {
      "url": "https://example.com/pricing",
      "title": "Pricing",
      "content": "# Pricing\n…",
      "author": null,
      "publishedAt": null
    }
  ]
}
```

## Notes

- Core pack: no provider cost is counted against a pack limit. Returns page text as markdown and saves nothing.
- If fewer pages come back than URLs requested, `note` says so.

## Errors

Upstream trouble is reported **inside a normal result** as `error`, `reason` and `action` (and `tool` / `retry_after_seconds` when they apply). For `search_signals` this appears per source. See [Errors](https://mcp-docs.opennomos.com/docs/reference/errors.md).
