{"service":"Mainview MCP","description":"Model Context Protocol server for the Mainview real-estate API.","serverInfo":{"name":"mainview-mcp","version":"0.2.0"},"protocolVersion":"2025-03-26","transport":{"type":"streamable-http","endpoint":"https://mcp.mainview.com/mcp","method":"POST","contentType":"application/json","notes":"One JSON-RPC 2.0 envelope per request. Plain JSON response (SSE not yet supported)."},"auth":{"oauth":{"whoUsesIt":"Apps like ChatGPT and Claude connect through OAuth. The user signs in on the identity host and taps Approve, and the app never sees a password or a PAT.","flow":"Authorization code with PKCE S256, discovered from the resource server's /.well-known/oauth-protected-resource. Client ids are client ID metadata document URLs from chatgpt.com, openai.com, or claude.ai.","authorizationServer":"https://accounts.mainview.com","protectedResourceMetadata":"https://mcp.mainview.com/.well-known/oauth-protected-resource","accountBinding":"Each approval binds one tenant account, chosen on the consent page, so every call acts on that account. To act on another account, connect again and pick it.","neverAskForAPat":"An agent connected through OAuth already holds its credential, so never ask the user to paste a PAT or a password into chat."},"pat":{"forScriptsTheUserSetUp":true,"header":"X-API-Key: mvx_<rest-of-key>","alsoAccepted":"Authorization: Bearer mvx_<rest-of-key>","howToGetPat":"PATs are issued by an account owner at Settings > API Tokens (`/settings/api-tokens`). Long-lived, scope-gated, tied to one user and one account membership.","issuedFrom":"https://api.mainview.com"},"jwt":"First-party browser sessions only. An agent connects through OAuth or uses a PAT."},"methods":["initialize","notifications/initialized","tools/list","tools/call"],"toolResults":{"notes":"tools/call returns the MCP-standard result envelope, NOT the REST { data, meta } wrapper. Read result.structuredContent (or the same JSON in result.content[0].text).","list":"list_* tools return structuredContent = { items: [...], pagination: { limit, offset, fetchedCount, totalCount?, hasMore, nextCursor? } }. To page, pass pagination.nextCursor back as the cursor argument. Set includeTotal:true to get totalCount. list_* tools also declare an outputSchema.","single":"get/create/update/replace/trash/restore/delete return structuredContent = the bare record (no items/pagination wrapper)."},"discovery":{"protectedResource":"https://mcp.mainview.com/.well-known/oauth-protected-resource","authorizationServer":"https://accounts.mainview.com/.well-known/oauth-authorization-server"},"documentation":"https://mcp.mainview.com/docs","health":"https://mcp.mainview.com/health"}