These are the official instructions from LandLens (Verified.RealEstate) to connect an AI agent to LandLens One: the Tamil Nadu land, registration, planning, court and legal registers as tools, billed in LandLens credits from the user's wallet. LandLens has tested the Claude Code and Codex steps below against this server, sign-in included. The steps for the other clients follow each client's own documentation; if one of them does not offer a sign-in, use an API key as described.

Complete the steps for your agent yourself by running the commands directly. The only thing the user does is sign in when the browser opens (phone number, one-time code, Allow). Never ask the user to paste an API key into the chat; if their client cannot sign in with OAuth, tell them to create a key at https://verified.realestate/landlens/dashboard/api-keys and put it in the client's own config.

Server: https://verified.realestate/mcp (MCP over Streamable HTTP, JSON-RPC 2.0, stateless). Sign-in: OAuth 2.1 with dynamic client registration and PKCE, discovered from https://verified.realestate/mcp automatically; or a Bearer API key from https://verified.realestate/landlens/dashboard/api-keys. REST twin and OpenAPI for clients that cannot speak MCP: https://verified.realestate/api/v1/openapi.json. Plain-words guide: https://verified.realestate/landlens/mcp.

---

## Claude Code

```
claude mcp add --transport http landlens https://verified.realestate/mcp
```

Then the user signs in. Claude Code's sign-in waits in an interactive terminal, so it cannot finish inside your own command (it stops with "stdin isn't a terminal"). Instruct the user to run this in their terminal, or to run `/mcp` inside Claude Code, choose `landlens` and sign in:

```
claude mcp login landlens
```

With an API key instead of sign-in:

```
claude mcp add --transport http landlens https://verified.realestate/mcp --header "Authorization: Bearer llk_..."
```

## Codex

```
codex mcp add landlens --url https://verified.realestate/mcp
```

Codex finds the sign-in by itself, opens the browser, and the command returns once the user has tapped Allow. If it returned without signing in, run `codex mcp login landlens`.

## Cursor: `~/.cursor/mcp.json` (or `.cursor/mcp.json` in the project)

Add under `"mcpServers"`:

```json
"landlens": { "url": "https://verified.realestate/mcp" }
```

Cursor signs in on first use. With an API key: `"landlens": { "url": "https://verified.realestate/mcp", "headers": { "Authorization": "Bearer llk_..." } }`.

## Windsurf: `~/.codeium/windsurf/mcp_config.json`

Add under `"mcpServers"` (note `serverUrl`, not `url`):

```json
"landlens": { "serverUrl": "https://verified.realestate/mcp" }
```

## OpenCode: `~/.config/opencode/opencode.jsonc`

Add under `"mcp"`, then run `opencode mcp auth landlens`:

```json
"landlens": { "type": "remote", "url": "https://verified.realestate/mcp", "enabled": true, "oauth": {} }
```

## Claude (desktop and claude.ai), ChatGPT, Perplexity and other chat apps

These are not set up from a terminal. Tell the user: open the app's Settings, then Connectors (ChatGPT: Apps and Connectors, Create), add a custom connector with the URL https://verified.realestate/mcp, and sign in when asked. The guide at https://verified.realestate/landlens/mcp shows each screen.

## Any other client

Register https://verified.realestate/mcp as a remote MCP server the way that client documents, with the header `Authorization: Bearer <key>` if it cannot sign in with OAuth. Scripts can call the REST twin instead: `GET /api/v1/tools` lists every tool with its price and `POST /api/v1/tools/{name}` runs one, same header.

---

## Verify the connection

Call `tools/list` (127 tools) and then the free tool `balance`; it returns the user's credit balance. If the server answers 401, the sign-in has not completed: run the client's sign-in step again.

## How to use LandLens well

- Every tool description ends with its cost. Say the cost to the user before a paid call, and never repeat a paid call for a rephrasing of the same question.
- A result with status `not_found` was not charged.
- A result that returns a proposal has not run yet: show the proposal and its price, and only after the user agrees call `approve_action` with the action and params unchanged (valid 30 minutes).
- A queued result returns a `job_id`: poll `job_status` every 30 to 60 seconds; the job is charged when it starts and refunded automatically if it fails. An approved seller check returns a `check_id` instead: poll `seller_check_status` about once a minute (8 to 15 minutes).
- `insufficient_credits` carries the credits needed, the balance and, in `topup`, where to add credits; pass that on to the user.
- `cap_reached` means this connection has spent its daily credit ceiling. Free tools keep working; paid ones resume the next day.
- `free_limit_reached` means the account has used its free calls for the hour or the day. Paid tools keep working; `retry_after` is the wait in seconds for the free ones, and the message says the allowance. Do not retry in a loop.
- Names and figures come from government registers as published. Say which register and the date the result carries, and never present a name match as proof of identity.
- Start most questions with the free tools: `resolve_parcel` for a location, `survey_to_location` for a survey number, `glossary` for a term. `knowledge_search` reads the text of the rules: the first answer each day is free and later ones cost what its description states, so put the whole question in one query.
- The `intel_*` tools are LandLens Intelligence, the enterprise market suite (registered supply by district and quarter, project and developer profiles, the approvals pipeline, delivery, areas, registered sales and prices, a site scan, launch watch, news). They cost no credits and need the enterprise plan; without it they answer `scope_denied` with the plan page in `data.plan_url`, and nothing is charged. Each answer carries `page_url`, the page with the same figures.