The person who approved was the resource owner: the one whose views were behind the door. Not Claude, and not you. Claude never learned the owner’s PIN. It walked out with a visitor badge (access token) that opens one floor (scope), in one building (resource), for one hour, plus a renewal voucher (refresh token) that is torn up every time it’s used. Every swipe is logged, and the owner can cancel the badge with one call.
The claim ticket (authorization code) was useless to anyone who picked it up, because only Claude knew the secret phrase sealed in the envelope (PKCE). The reference number (state) proved the ticket answered Claude’s own request, and the return address (redirect_uri) was written in the visitor book, so the ticket could only go to Claude.
| OAuth role | In the building | Google: an app reading Gmail | Proxima + Claude |
|---|---|---|---|
| Resource owner | 👔 the CEO: his views are his to share | You, the Gmail account holder | You: it’s your household data |
| Resource | His notes on the prospect | Your emails | Your bills, solar, water… |
| Resource server | 💂 The CEO suite behind the guarded door | Gmail’s API | Proxima /mcp |
| Authorization server | 🛎️ Reception (same company, same building) | Google’s sign-in service | Proxima /authorize + /token |
| Client | 🤖 Claude, the visiting assistant | The third-party app | Claude |
| Not in the flow | 🧑💼 You, who sent Claude | (nobody) | (nobody: you’re the owner here) |
The golden rule: the intercom always rings the resource owner. In Proxima the owner and the person asking are the same (you), which is why you approve there.
| In the building | Real name | Why it exists |
|---|---|---|
| 💂 Door guard | POST /mcp → 401 | No badge, no entry. The 401 also says where reception is (resource_metadata). |
| 🪧 Lobby sign | Protected resource metadata | Tells any visitor which reception issues badges for this suite. Only the address is needed to start. |
| 📋 Window list | Authorization server metadata | Where to register, where to ask, where badges are issued, and that envelopes must be SHA-256 sealed. |
| 📖 Visitor book | Dynamic client registration → client_id | The desk has never met Claude. The return address written here is the only place tickets may go. |
| ✉️ Sealed envelope | PKCE: code_challenge / code_verifier | Proves the person redeeming the ticket is the one who asked. A stolen ticket is worthless. |
| 🔢 Reference number | state | Stops someone slipping their ticket into Claude’s hands (CSRF). |
| 🏠 Return address | redirect_uri (exact match) | Tickets can’t be mailed to a look-alike address. |
| 🧾 Request slip | GET /authorize | Who, which floor (scope), which building (resource), reference number, envelope. |
| 📞 Intercom + PIN | Consent page + the owner’s password | Only the resource owner can approve, and the PIN never reaches Claude. |
| 🎫 Claim ticket | Authorization code | Single use, 5 minutes. Travels through the front channel, so it opens nothing on its own. |
| 🪪 Visitor badge | Access token (Bearer, 1 hour) | Opens one floor of one building for an hour. Shown on every request. |
| 🎟️ Renewal voucher | Refresh token (rotates) | New badge every hour without calling you again. A copied voucher works once at most. |
| 🚦 Turnstile + log | Token validation + audit log | Checks expiry, floor and building on every swipe, and writes it down. |
| 👔 The meeting | tools/call | The actual MCP request: the question goes in, the CEO’s notes come back as the result. |