---
title: Property Bot agent mode
description: Machine-readable summary for agents - public API, OpenAPI, auth, MCP discovery (product + docs), CLI, GitHub AGENTS.md/plugin.json, capabilities, and privacy constraints.
canonical: https://property.bot/?mode=agent
last-updated: 2026-09-08
---

# Property Bot (agent mode)

Message PropertyBot on WhatsApp to find a place to live, find a roommate, or list a room.
Voice PSTN is secondary (Telnyx Voice + SMS; last-4 …1919). WhatsApp last-4 …0663.
Conversation is the product.
Human-facing ranking: [index.md](https://property.bot/index.md).
Spoken name: PropertyBot. Never say property.bot on the phone.

Prefer `Accept: application/json` for the structured twin at the same URL (`/?mode=agent`) or fetch [agent.json](https://property.bot/agent.json) directly.

## Public channels

- WhatsApp: https://wa.me/13854880663 (canonical contact: https://property.bot/contact)
- Voice/SMS: https://property.bot/contact (Telnyx; last-4 …1919)

## Public API endpoints (keyless, GET-only)

| Method | Path | Purpose |
|--------|------|---------|
| GET | https://property.bot/api/v1/health | Liveness `{"ok":true}` |
| GET | https://property.bot/api/v1/info | Product facts JSON |
| GET | https://property.bot/api/health | Alias of v1 health |
| GET | https://property.bot/api/info | Alias of v1 info |

Markdown twins: `/api/v1/health.md`, `/api/v1/info.md`, `/api/health.md`, `/api/info.md`.

Product facts only. There is no public people-search API. No public POST/PUT/PATCH write surface — therefore no Idempotency-Key, cursor pagination, or async job endpoints on this public API.

HTML developer map (titles include API / OpenAPI / MCP): https://property.bot/developers

## OpenAPI

- Spec: https://property.bot/openapi.json
- Documents the GET-only health/info surface and ErrorResponse shape.

## Auth

- Contract: https://property.bot/auth.md
- Public REST: no API key, no signup.
- Product MCP: WorkOS OAuth sign-in + linked phone (Bearer). Never unauthenticated.
- Operator site session: https://property.bot/login (AuthKit cookie; does not authorize MCP tools).

## MCP discovery (two surfaces — do not collapse)

| Surface | URL | Auth | Scope |
|---------|-----|------|-------|
| Product brain | https://mcp.property.bot/mcp | OAuth Bearer required | First-person matching tools only |
| Docs MCP | https://property.bot/mcp/docs | None | Documentation resources/tools only |

**Multi-surface map (both servers):** https://property.bot/mcp.json · https://property.bot/.well-known/mcp-servers.json · https://property.bot/agent-plugins/mcp.json

Discovery cards:

- Docs (public handshake): https://property.bot/.well-known/mcp/server-card.json · https://property.bot/.well-known/mcp-docs.json
- Docs alias: https://property.bot/.well-known/mcp/docs-server-card.json
- Product (OAuth): https://property.bot/.well-known/mcp/product-server-card.json · https://property.bot/.well-known/mcp.json
- OAuth PRM (product only): https://mcp.property.bot/.well-known/oauth-protected-resource/mcp
- Catalogs: https://property.bot/.well-known/ard.json · https://property.bot/.well-known/ai-catalog.json

### Product MCP capabilities (auth required)

`lookup_person`, `remember_person`, `find_matches`, `send_text`, `start_phone_verification`, `confirm_phone_verification`, `connection_status`, `disconnect_agent`, `list_agent_connections`.

Match cards stay redacted. Do not invent a public REST wrapper.

### Docs MCP capabilities (public)

Tools: `list_docs`, `get_doc`. Resources: llms.txt, auth.md, openapi.json, docs.md, FAQ JSONL, agent.md. No person or messaging tools.

## npm SDK + CLI (`property-bot`)

Package / bin: `property-bot` (SDK exports `getInfo` / `checkHealth` + CLI).
Homepage: https://property.bot · repository (public): https://github.com/fourcolors/property-bot-grok-plugin
Package.json mirror: https://property.bot/packages/property-bot/package.json

```bash
npm i property-bot
npx property-bot info
npx property-bot health
# SDK:
# import { getInfo, checkHealth } from "property-bot"
```

From a local checkout of this application repo (before/without registry publish):

```bash
npm run build --prefix packages/property-bot
node packages/property-bot/dist/cli.js info
```

Commands: `info`, `health`, optional `mcp` (Bearer; tool names only). Live Ora npm-sdk/cli checks need an actual `npm publish` after merge (Sterling). No people-search command.

## GitHub repository (AGENTS.md + Agent Plugins)

Public plugin repo for Ora/agent probes: **https://github.com/fourcolors/property-bot-grok-plugin**

Probe these paths first: **AGENTS.md** and **plugin.json** at the repo root.

| Path | Purpose |
|------|---------|
| https://github.com/fourcolors/property-bot-grok-plugin/blob/main/AGENTS.md | Coding-agent rules (`AGENTS.md`) |
| https://github.com/fourcolors/property-bot-grok-plugin/blob/main/plugin.json | Agent Plugins manifest (agent-plugins.org) |
| https://github.com/fourcolors/property-bot-grok-plugin/blob/main/mcp.json | Agent Plugins MCP component |
| https://github.com/fourcolors/property-bot-grok-plugin/tree/main/skills | Agent Plugins skills |

Site mirrors: https://property.bot/AGENTS.md · https://property.bot/plugin.json · https://property.bot/mcp.json · https://property.bot/agent-plugins/

Application source (`fourcolors/property-bot`) remains private; agents should not require it for discovery.

## Docs and discovery

- Developers: https://property.bot/developers · https://property.bot/developers.md
- Docs: https://property.bot/docs · https://property.bot/docs.md
- llms.txt: https://property.bot/llms.txt
- Docs scope: https://property.bot/docs/llms.txt
- API scope: https://property.bot/api/llms.txt
- Schema map: https://property.bot/schemamap.xml
- Agent skills: https://property.bot/.well-known/agent-skills/index.json
- Register skills (human): `npx skills add https://property.bot/.well-known/agent-skills/index.json`
- Web Bot Auth directory: https://property.bot/.well-known/http-message-signatures-directory
- A2A agent card: https://property.bot/.well-known/agent-card.json

## Returning callers and agent connections

After product MCP authentication, call `connection_status`. Reuse an existing verified phone link; otherwise verify. Setup: https://property.bot/connect.md
