MCP.Market

MCP Tenant Pair MCP server

by studiomeyer.io·io.studiomeyer/tenant-pair·v0.1.3

Multi-user tenancy library for MCP servers. Pairs, groups, bi-temporal shared state, DSGVO erasure.

A86/100grade A
What users say
No reviews yet
Be the first
Safety scan
A86/100

full report

Adoption
Growing

0 stars297 downloads/wk

Reviews

Write one

Nobody has reviewed MCP Tenant Pair yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

MCP Tenant Pair tools (12, 3 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • accept_invite

    Redeem an invite token to join a pair. Idempotent rejection on double-accept and expired tokens.

  • create_pairwrite action

    Create a new pair. The creator becomes owner. Returns pairId and the first invite token.

  • forget_member

    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.

  • get_member_constraints

    Read per-user state. A member can only read their own state; cross-member reads are not exposed.

  • get_shared_state

    Read shared state for the entire pair (default namespace). All members can read.

  • invite_member

    Generate an invite token. Only an active member of the pair may invite. Caps pending invites per pair.

  • kick_memberwrite action

    Remove a member from a pair. Only the owner may kick. Owner cannot kick themselves.

  • leave_pair

    Voluntarily leave a pair. Sets left_at; shared state remains for other members.

  • list_members

    List all active members of a pair (excludes members who left or were kicked).

  • resolve_conflicts

    Resolve pending conflicts using LWW (default) or manual. Idempotent: re-running on a clean state is a no-op.

  • set_member_preferences

    Set a per-user preference (e.g. allergy, taste). Only readable by the same member via get_member_constraints.

  • set_shared_statewrite action

    Write shared state. Bi-temporal: previous active row gets valid_to, new row appended.

Public scan report

scanner v0.1.10 · 2026-11-02 · same rubric, same numbers if you re-run it

no findings
  • Code scan5 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 1 days ago15/15
  • Maintainer identitynamespace and repository owner differ4/10
Overall 86/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How MCP Tenant Pair compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
86/100
higher than 72% of 48,243 servers
Tools
12
the typical server has 7
Tools that change things
25%
typical: 0%. Fewer write tools means less an agent can break
Downloads a week
297
more than 81% of 12,306 servers with a package

What its tools let an agent do: 7 read · 1 create · 3 change · 1 send or post

Release history: 2 versions in the registry since 2026-08-19, latest 2026-11-01, typically one every 74 days.

Install MCP Tenant Pair in Claude Code, Cursor or VS Code

Runs npx -y mcp-tenant-pair-demo on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add tenant-pair -- npx -y mcp-tenant-pair-demo
Add to Cursor

What the publisher says

From the MCP Tenant Pair repository's README, as published. We do not edit it. Read it on GitHub

<!-- studiomeyer-mcp-stack-banner:start -->

Part of the StudioMeyer MCP Stack — Built in Mallorca 🌴 · ⭐ if you use it

<!-- studiomeyer-mcp-stack-banner:end -->

mcp-tenant-pair

<!-- badges --> <!-- /badges -->Foundation library + reference MCP server for multi-user tenancy in consumer MCP servers (couples, families, small groups). Identity-separated state, bi-temporal storage, conflict-resolver interface.

Spec: MCP 2025-06-18 License: MIT Repo layout: monorepo (npm workspaces)

packages/
  lib/        mcp-tenant-pair          (TypeScript library)
  cli/        mcp-tenant-pair-cli      (commander CLI)
  demo/       mcp-tenant-pair-demo     (reference Low-Level MCP server, stdio)

A note from us

We have been building tools and systems for ourselves for the past two years. The fact that this repo is small and has few stars is not because it is new. It is because we only just decided to share what we have built. It is not a fresh experiment, it is a long story with a recent commit.

We love building things and sharing them. We do not love social media tactics, growth hacks, or chasing stars and followers. So this repo is small. The code is real, it gets used, issues get answered. Judge for yourself.

If it helps you, sharing, testing, and feedback help us. If it could be better, an issue is more useful. If you build something with it, tell us at hello@studiomeyer.io. That genuinely makes our day.

From a small studio in Palma de Mallorca.

Why this exists

Most MCP servers today are single-user. The moment you want to share state across two or more humans (couples, families, small groups) you hit the same five sub-problems each time: pair creation, invite flow, identity-separated state, conflict resolution, voluntary leave / kick. This library solves them once, so downstream MCP servers (Pet-Platform, recipe-sharing, household, calendar) do not re-invent them.

5-Minute Quickstart

Library

import { TenantPair, SqliteTenantStore, LWWResolver } from "mcp-tenant-pair";

const tp = new TenantPair({
  store: new SqliteTenantStore({ path: "./tenant-pair.sqlite" }),
  resolver: new LWWResolver(),
});

const { pairId, inviteToken } = await tp.createPair({ creatorMemberId: "alice" });
await tp.acceptInvite({ inviteToken, memberId: "bob" });

await tp.setMemberPreference(pairId, "alice", "allergy", ["nuts"]);
await tp.setSharedState(pairId, "alice", "tonight", "pizza");

const aliceConstraints = await tp.getMemberConstraints(pairId, "alice");
const shared = await tp.getSharedState(pairId);

CLI

npx mcp-tenant-pair-cli pair create --member-id alice
npx mcp-tenant-pair-cli pair invite --pair-id <id> --member-id alice
npx mcp-tenant-pair-cli state set --pair-id <id> --member-id alice --key tonight --value pizza
npx mcp-tenant-pair-cli state get --pair-id <id>

Demo MCP server

node packages/demo/dist/server.js
# or via stdio in your MCP client config

Reads MCPTENANTPAIR_DB env (default :memory:).

Tools (12)

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

MCP Tenant Pair: common questions

Is MCP Tenant Pair MCP server safe?
Yes, by our scan: it is graded A (86/100). Read the MCP Tenant Pair safety report
How do I install MCP Tenant Pair?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does MCP Tenant Pair need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is MCP Tenant Pair maintained?
The last commit was 4 days ago (2026-11-01). The latest release is v0.1.3.
What can I use instead of MCP Tenant Pair?
Servers from other publishers that do the same job: Concord MCP server.
How does MCP Tenant Pair compare with other MCP servers?
safety score 86/100 (higher than 72% of 48,243 servers); tools 12 (the typical server has 7); tools that change things 25% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to MCP Tenant Pair

Same job from other publishers: the closest match first, then the best rated.

  • Concord MCP
    Cross-harness communication and shared work-state for AI coding agents.
    A

More from studiomeyer.io →