{"name":"io.studiomeyer/tenant-pair","slug":"studiomeyer-tenant-pair","title":"MCP Tenant Pair","description":"Multi-user tenancy library for MCP servers. Pairs, groups, bi-temporal shared state, DSGVO erasure.","url":"https://mcp.market/server/studiomeyer-tenant-pair","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":27,"stars":0,"forks":0,"downloads_week":297,"last_push_at":"2026-11-01T21:50:15.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/studiomeyer-io/mcp-tenant-pair","website":null,"version":"0.1.3","remotes":[],"packages":[{"registryType":"npm","identifier":"mcp-tenant-pair-demo","version":"0.1.3","transport":{"type":"stdio"}}],"tools":[{"name":"accept_invite","description":"Redeem an invite token to join a pair. Idempotent rejection on double-accept and expired tokens.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_pair","description":"Create a new pair. The creator becomes owner. Returns pairId and the first invite token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"forget_member","description":"DSGVO Art. 17 right-to-erasure: hard-delete the member's per-user state (allergies, dietary preferences, etc.) and null their display name. The membership trace (left_at marker) is retained for audit. Idempotent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_member_constraints","description":"Read per-user state. A member can only read their own state; cross-member reads are not exposed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_shared_state","description":"Read shared state for the entire pair (default namespace). All members can read.","write_action":false,"price_micros":0,"input_schema":null},{"name":"invite_member","description":"Generate an invite token. Only an active member of the pair may invite. Caps pending invites per pair.","write_action":false,"price_micros":0,"input_schema":null},{"name":"kick_member","description":"Remove a member from a pair. Only the owner may kick. Owner cannot kick themselves.","write_action":true,"price_micros":0,"input_schema":null},{"name":"leave_pair","description":"Voluntarily leave a pair. Sets left_at; shared state remains for other members.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_members","description":"List all active members of a pair (excludes members who left or were kicked).","write_action":false,"price_micros":0,"input_schema":null},{"name":"resolve_conflicts","description":"Resolve pending conflicts using LWW (default) or manual. Idempotent: re-running on a clean state is a no-op.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_member_preferences","description":"Set a per-user preference (e.g. allergy, taste). Only readable by the same member via get_member_constraints.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_shared_state","description":"Write shared state. Bi-temporal: previous active row gets valid_to, new row appended.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":86,"grade":"A","scanned_at":"2026-11-02T21:55:08.544Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-02T21:55:08.524Z","components":{"code":{"score":25,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":4,"max":10,"notes":["namespace and repository owner differ"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"mcp-tenant-pair-demo","version":"0.1.3","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-11-01T21:25:40.315Z","weeklyDownloads":297}],"repo":{"found":true,"owner":"studiomeyer-io","repo":"mcp-tenant-pair","archived":false,"pushedAt":"2026-11-01T21:50:15Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/267274902?v=4","ownerCreatedAt":"2026-03-11T08:17:53Z","license":"MIT"},"icon":{"url":"https://studiomeyer.io/favicon-512.png","source":"registry","width":512,"height":512},"presence":{"stars":0,"forks":0,"downloadsWeek":297,"license":"MIT","lastPushAt":"2026-11-01T21:50:15.000Z","score":27}}}},"grade_history":[],"reviews":[]}