Files
geolocal-io/docs/owner-mcp.md
2026-07-21 17:36:26 +00:00

33 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Owner MCP (postMVP)
**Purpose** a dedicated MCP endpoint for *business owners* (and their trusted assistants) to manage their listing *outside* the public discovery flow. It is the *conversational* channel that lets owners:
- Rescan their website for freshness
- Add temporary notices (e.g. “closed for funeral”, “holiday hours”)
- Set dated promotional offers
- Accept or reject pending sitediff suggestions
- View and climb the badge ladder (Bronze → Platinum)
- Query rollup telemetry for their own listing
**Auth model** OAuth 2.0 with scopes per listing (`view`, `edit`, `badge`). Tokens are stored in the Hermes profile `ha_researcher` under `oauth/geolocal-io`. The Owner MCP server runs on a separate port (`:9234`) behind Caddy with JWT validation. Public discovery MCP must *not* expose any of these tools.
**Tool catalog** (exposed to owners via chat in Grok/ChatGPT)
| Tool | Description | Required scope |
|------|-------------|----------------|
| `request_rescan` | Triggers an immediate origin fetch; returns `crawl_status` and a diff preview. | `edit` |
| `set_temporary_notice` | Sets a timeboxed notice (e.g. “closed Tue for funeral”). | `edit` |
| `set_dated_offer` | Adds a promotional offer with start/end dates (used for the “July 4th bucket special”). | `edit` |
| `accept_diff` | Marks a pending sitediff as approved; updates the portal DB. | `edit` |
| `list_pending_diffs` | Returns diffs awaiting owner confirmation. | `view` |
| `badge_status` | Returns current badge tier, blockers, and rollup metrics. | `view` |
| `get_demand_summary` | Demand themes, volume, funnel intent % for the last 30days. | `view` |
**Interaction pattern (owner chat)** Example: *Owner*: “Add a notice that were closed on Dec25”. *Owner MCP* receives `set_temporary_notice`, writes to portal, returns `notice_id` and an updated badge status. The next weekly email will reflect the new notice in the “site report”.
**Security** All calls are authenticated; the MCP logs `owner_id`, `listing_id`, `tool`, and a short `event_hash` (SHA256 of the payload). No raw site HTML is ever stored; only portalderived fields are mutated.
**Relation to public MCP** The public discovery MCP serves **structured business truth**; the Owner MCP is a *privileged* API that can *mutate* that truth. The two are separate servers behind the same Caddy instance, but share the same user model and badge engine.
---