> ## Documentation Index
> Fetch the complete documentation index at: https://colin-feat-client-cache-mode.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ClientOptions

Defined in: [client/client.ts:74](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L74)

## Properties

### auth?

```ts theme={null}
optional auth?: 
  | string
  | AsyncHeaderAuth
  | OAuth
  | BearerAuth;
```

Defined in: [client/client.ts:79](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L79)

Authentication to attach to HTTP requests.
A plain string is treated as a Bearer token.

***

### autoInitialize?

```ts theme={null}
optional autoInitialize?: boolean;
```

Defined in: [client/client.ts:91](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L91)

When true (default), the MCP initialize handshake is performed
automatically inside connect().

***

### cachePartition?

```ts theme={null}
optional cachePartition?: string;
```

Defined in: [client/client.ts:145](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L145)

Opaque per-principal identifier for response-cache writes whose
server-reported `cacheScope` is `'private'`. Set this to a stable identity
of the authorization context (e.g. the auth subject) when one
`responseCacheStore` backs several principals. Passed through verbatim.

***

### defaultCacheTtlMs?

```ts theme={null}
optional defaultCacheTtlMs?: number;
```

Defined in: [client/client.ts:151](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L151)

TTL (ms) applied when a cacheable result arrives without a `ttlMs` field.
Default `0` (never served from cache, but still stored). Passed through
verbatim.

***

### defaultOptions?

```ts theme={null}
optional defaultOptions?: ClientDefaultOptions;
```

Defined in: [client/client.ts:92](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L92)

***

### handlers?

```ts theme={null}
optional handlers?: ClientHandlers;
```

Defined in: [client/client.ts:80](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L80)

***

### inputRequired?

```ts theme={null}
optional inputRequired?: InputRequiredOptions;
```

Defined in: [client/client.ts:131](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L131)

Multi-round-trip auto-fulfilment (protocol revision 2026-07-28). On the
modern era, servers obtain client input (elicitation, sampling, roots) by
answering a request with an `input_required` result instead of a
server→client request. By default the client fulfils these automatically
through the same `handlers.sampling`/`handlers.elicitation` callbacks,
retrying up to `maxRounds` times. Set `autoFulfill: false` for manual mode.
Has no effect on legacy-era connections. Passed through verbatim to the SDK
client.

***

### legacySSE?

```ts theme={null}
optional legacySSE?: boolean;
```

Defined in: [client/client.ts:159](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L159)

Allow the deprecated SSE transport when a target URL's path indicates SSE
(e.g. ends in `/sse`). Default `false` — such URLs throw a clear error
pointing at Streamable HTTP and this flag, rather than silently connecting
over a transport the MCP SDK itself marks `@deprecated`. When enabled, a
one-time deprecation warning is logged via `console.warn`.

***

### prior?

```ts theme={null}
optional prior?: PriorDiscovery;
```

Defined in: [client/client.ts:120](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L120)

A cached era verdict from a previous connection to the same server, so
connect() can skip the `server/discover` probe entirely. Takes precedence
over `versionNegotiation`. `{ kind: 'modern', discover }` adopts a prior
`DiscoverResult` with zero round trips; `{ kind: 'legacy' }` skips the probe
and runs the plain legacy `initialize` handshake. Freshness is the caller's
responsibility — a stale modern verdict fails loudly at the first request; a
stale legacy verdict succeeds silently forever. Reuse only within one
authorization context.

***

### responseCacheStore?

```ts theme={null}
optional responseCacheStore?: ResponseCacheStore;
```

Defined in: [client/client.ts:138](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L138)

The response-cache store backing cacheable results (SEP-2549 `ttlMs`/
`cacheScope` hints on `listTools`/`listResources`/`listResourceTemplates`/
`listPrompts`/`readResource`). Defaults to a fresh in-memory store per
client (the SDK's own default) when omitted. Passed through verbatim.

***

### roots?

```ts theme={null}
optional roots?: RootsValue;
```

Defined in: [client/client.ts:86](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L86)

Filesystem roots to advertise to the server.
Accepts a static array of strings / Root objects, or an async callback
invoked on each roots/list request (useful for dynamic root sets).

***

### versionNegotiation?

```ts theme={null}
optional versionNegotiation?: VersionNegotiationOptions;
```

Defined in: [client/client.ts:109](https://github.com/PrefectHQ/fastmcp-ts/blob/8976c37f79efa6b87809b884f29a1f235a8c4ad1/src/client/client.ts#L109)

Protocol version negotiation (protocol revision 2026-07-28 and later).
The default is `{ mode: 'auto' }`: connect() probes the server once with
`server/discover` and uses the modern (2026-07-28) era on definitive
modern evidence, falling back to the plain legacy `initialize` handshake
on anything else (a method-not-found answer, silence on a local stdio
pipe, a probe child that exits). The probe is stall-safe in the SDK: on
stdio it runs against a short-lived sibling process and a timeout falls
back to legacy, while on HTTP — where silence means an outage — a probe
timeout rejects with a typed error instead of hanging. Pass
`{ mode: 'legacy' }` to opt out: no probe, the 2025 sequence
byte-identical to prior behavior. Pass `{ mode: { pin: '2026-07-28' } }`
to require the modern era outright — connect() throws if the server
cannot speak it. See `getProtocolEra()` to read the negotiated result
after connecting.
