# Quickstart

Make a public, read-only county lookup with a sample ZIP code.

## 1. Connect

Use a client that supports Streamable HTTP, with the endpoint `https://tools.thepocketprotector.com/mcp`. Public tools do not need an account or API key.

Send `Content-Type: application/json` and `Accept: application/json, text/event-stream`. This example requests a protocol version currently supported by TPP:

```bash
curl https://tools.thepocketprotector.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"tpp-example","version":"1.0.0"}}}'
```

Follow the MCP initialization lifecycle in your client, including `notifications/initialized`. TPP uses stateless JSON responses.

## 2. Discover tools

```json
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
```

Use the returned names and schemas. A documentation build describes a release; `tools/list` identifies what the deployed connection currently exposes.

## 3. Run a lookup

```bash
curl https://tools.thepocketprotector.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_medicare_zip_counties","arguments":{"zip":"60614"},"_meta":{"tpp/source":"developer-quickstart"}}}'
```

The example includes an optional source tag that counts aggregate success, clarification and error outcomes. It records no ZIP, request body or client identity. Omit `_meta` to opt out. Repeated example calls count separately.

Read `result.content` and `result.structuredContent`. A successful lookup can return a confirmed location or a question requiring a selection. Do not guess a county when the tool asks for one.

## 4. Handle incomplete results

An HTTP success alone does not establish a completed lookup. Check JSON-RPC errors, `result.isError`, the structured status, and any next action. Wait for `Retry-After` after HTTP 429. Retain confirmed inputs when a service is unavailable.

For published content, continue with [content search and citation](/content/).
