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

# Connect your AI assistant

> Use the authenticated Streamable HTTP MCP interface.

Configure a client that supports remote Streamable HTTP and custom bearer headers:

Create a key using the [authentication guide](/authentication). An active or trialing subscription
is needed for searches. MCP is the connection protocol that lets your agent discover and call
Jolts' tools; it is not a separate data product.

```json theme={null}
{
  "url": "YOUR_MCP_ENDPOINT",
  "headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
```

Copy the MCP endpoint from the marketing site's connection guide and replace `YOUR_MCP_ENDPOINT`.
This is a connection description, not a universal client configuration file. Use your client's
configuration format. OAuth discovery and
authorization are not implemented; clients requiring OAuth-only connections are not yet supported.

## Set up your client

<CardGroup cols={2}>
  <Card title="Claude Code" icon="terminal" href="/clients/claude-code">
    Project configuration, private credentials, and connection checks.
  </Card>

  <Card title="VS Code" icon="code" href="/clients/vscode">
    Copilot Chat setup with a secure API-key prompt.
  </Card>

  <Card title="Codex" icon="terminal" href="/clients/codex">
    TOML configuration and private bearer-token setup.
  </Card>

  <Card title="Cursor" icon="code" href="/clients/cursor">
    Project or global configuration for Cursor Agent.
  </Card>

  <Card title="Cascade" icon="code" href="/clients/cascade">
    Remote HTTP configuration for the Cascade agent.
  </Card>
</CardGroup>

Choose your assistant above for its exact configuration and verification steps. Keep your API key
out of chat messages, screenshots, and source control.

### Other agents

Look for **remote HTTP / Streamable HTTP**, an endpoint field, and an **Authorization header** field.
Use `Bearer YOUR_API_KEY` as the header value. A client offering only OAuth login cannot use the
current Jolts authentication. Do not paste the key into the endpoint URL or into the conversation.

## Ask your first question

Once connected, try:

> Use Jolts to find companies in Canada seeking warehouse equipment. Show the observed activity,
> source and observation date for each match. Explain why it might matter, without claiming that
> the company will buy. Tell me if coverage is limited or the search fails.

The agent should call `search_companies`, not invent company research from this documentation.
Searches consume your account's shared allowance. Review your client's approval prompt before
running a search. A successful connection alone does not prove that your subscription allows it.

## Choose the right tool

| Tool                     | Purpose                                                  | HTTP counterpart                              |
| ------------------------ | -------------------------------------------------------- | --------------------------------------------- |
| `search_companies`       | Paginated company list; optional `background: true`      | `POST /api/companies/search`                  |
| `get_companies`          | One to twenty known IDs or domains; current dataset only | `GET /api/companies?ids[]=…` or `domains[]=…` |
| `get_usage` with `id`    | Poll or replay an account-owned operation                | `GET /api/usages/{id}`                        |
| `get_usage` without `id` | Subscription limits and consumption                      | `GET /api/usage`                              |

Discover exact input schemas using `tools/list`. For searches and company lookups, provide a
unique `request_key` argument, or an `Idempotency-Key` header. The argument takes precedence. Tool discovery is unmetered; subscription checks happen inside the shared process.
See the [tool reference](/mcp-tools) for arguments, filters, and response handling.

## Start and read a background company search

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_companies",
    "arguments": {
      "query": "Companies seeking EV charging equipment",
      "filters": { "countries": ["CA", "US"], "exclude_domains": ["example.com"] },
      "limit": 10,
      "background": true,
      "request_key": "ev-company-list-1"
    }
  }
}
```

Read `result.structuredContent.usage.id`, then call `get_usage` with that `id`. The `structuredContent`
matches the HTTP business response. Treat `result.isError` and structured `error.code` as failures;
an empty completed company list is a valid result with limited coverage, not a protocol error.

## Verify the connection

After initialization, `tools/list` should advertise exactly `search_companies`, `get_companies`,
and `get_usage`. Run the background example, then inspect the completed company's evidence. An API key
can negotiate MCP without an active subscription but cannot run an entitled operation.

Mintlify's documentation-search MCP, when hosted, searches these docs. It is not this authenticated
company-data server. See the [HTTP tutorial](/quickstart) for credential and subscription troubleshooting.

## Test the transport directly

If your client cannot connect, test in Bash with `API_BASE` and `API_KEY` from the
[quickstart](/quickstart). This negotiates the protocol without running a metered search:

```bash theme={null}
curl --fail-with-body "$API_BASE/mcp" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"docs-check","version":"1.0"}}}'
```

Expect `result.serverInfo` and a negotiated protocol version. Agent clients normally handle this
handshake themselves. The server is stateless; it does not provide a server-pushed event subscription.

## Troubleshooting

* **Cannot connect:** use the application host's `/mcp`, not the documentation-search MCP URL.
* **Unauthorized:** check that the client sends the bearer header on every request.
* **Tools appear but searches fail:** inspect `result.isError` and the structured error code;
  a valid key can discover tools without an active subscription.
* **Missing request key:** add a distinct `request_key` to each search. Reuse it only for identical retries.
* **OAuth prompt only:** that client configuration is not supported yet. Use a remote HTTP client
  that accepts custom bearer headers.
