
MCP Tenant Pair
io.studiomeyer由 studiomeyer.io 发布v0.1.3更新于 Nov 3, 2026
用于 MCP 服务器的多用户租户库。配对、分组、双时态共享状态、DSGVO 数据删除。
AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。
原文描述
Multi-user tenancy library for MCP servers. Pairs, groups, bi-temporal shared state, DSGVO erasure.
发布方自己的服务:StudioMeyer Crew
概览
MCP Tenant Pair 的本地 MCP 服务,由 studiomeyer.io 发布;无需登录;STDIO。
暂无 AI 概览:以下信息来自注册中心条目和服务本身。
- 发布者
- studiomeyer.io
安装
在 SourceWeft 中
- 打开 控制台中的 MCP Tenant Pair,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Part of the StudioMeyer MCP Stack — Built in Mallorca 🌴 · ⭐ if you use it
mcp-tenant-pair
[npm version] [npm downloads] [License] [Last commit] [GitHub stars]
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)
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 [email protected]. 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
CLI
Demo MCP server
Reads MCP_TENANT_PAIR_DB env (default :memory:).
Tools (12)
Compatibility Matrix
Storage adapters
- SqliteTenantStore — default, embedded, single-process. Uses
better-sqlite3with WAL mode. Pass{ path: "./pair.sqlite" }or:memory:. - PostgresTenantStore — multi-process, multi-tenant. Accepts any
pg.Pool-shaped client ({ query<R>(text, params): Promise<{rows: R[]}>, end?(): Promise<void> }).pgis a peer dependency.
Conflict resolution
ConflictResolver is an interface. Two implementations ship:
LWWResolver— picks the row with the latestvalidFrom, ties broken by highestversion. Throws on empty candidate list.ManualResolver— returns no resolutions; conflicts stay pending until a human resolves them externally.
Inject your own by implementing { name: string; resolve(conflicts: Conflict[]): Resolution[] }.
Bi-temporal model
Every overwrite of a (pairId, namespace, key) triple sets valid_to on the previous active row and inserts a new row with a fresh valid_from. version is monotonic per key. This lets you replay history (getPairStateHistory) and detect concurrent writes deterministically.
Identity separation
member_state is per-member (only readable by that member via get_member_constraints).
pair_state is shared (all active members can read via get_shared_state).
Writes by a member who later leaves or is kicked stay visible in shared state.
Security notes
- Invite tokens are
<uuid v4>.<XXXX-XXXX>— uuid v4 (122 bits CSPRNG entropy vianode:crypto) plus a voice-readable base32 short-code (default RNG isnode:crypto.randomInt, injectable for tests). - Per-pair pending-invite cap (default 25, configurable via
maxPendingInvites). - Owner-only kick. Owner cannot kick themselves; use leave instead.
- DSGVO Art. 17 erasure path:
forgetMember(pairId, memberId)hard-deletes the member'smember_staterows (allergies, dietary preferences) and nullsdisplay_name. Membership trace (left_at) is retained for audit. - Postgres adapter rejects schema names that don't match
/^[a-z_][a-z0-9_]{0,62}$/at construction time (defense against SQL injection via integrator-supplied schema strings). acceptInviteis race-safe — both adapters use atomic transactions (better-sqlite3 immediate transaction; pgBEGIN+SELECT ... FOR UPDATE).- Time is injectable (
now: () => Date) for deterministic tests.
Development
Tests cover (142 + 1 conditional):
- Pair creation (8)
- Invite flow (10)
- Invite expiry boundary (6) — accept/pending agree at the exact
expires_atinstant, both adapters - Member preferences (8)
- Shared state (8)
- Conflict resolution (13)
- Resolvers (11)
- Error handling (17) — exhaustive
TenantPairErrorcode coverage - Store adapters (6)
- Postgres adapter (26) — schema-identifier validation, atomic transaction, fallback paths (mock pool, no live DB)
- Adapter parity (6 + 1) — same operations against SQLite and Postgres produce identical results; the Postgres leg runs only when
TENANT_PAIR_TEST_PG_URL/DATABASE_URLpoints at a reachable database and is skipped otherwise (never false-fails) - Demo server integration (9)
- Round-1 regression fixes (14) — SQL-injection schema-validation, TOCTOU acceptInvite race, conflict-resolved winner-marker, asOf-clock, DSGVO erasure, CSPRNG-default
Run the cross-adapter parity suite against a real Postgres:
Status
Foundation build. Reviewed (Cold-Cross-Review + MCP Factory Reviewer + Tester) — all HIGH/MEDIUM findings fixed. tsc clean (strict), 142 tests green (+1 Postgres-conditional skip). Prod dependency tree carries 0 known advisories (npm audit --omit=dev).
About StudioMeyer
StudioMeyer is an AI and design studio based in Palma de Mallorca, working with clients worldwide. We build custom websites and AI infrastructure for small and medium businesses. Production stack on Claude Agent SDK, MCP and n8n, with Sentry, Langfuse and LangGraph for observability and an in-house guard layer.
来源:README.md,提交 b6efcf0
工具
0版本历史
2- v0.1.3最新Nov 3, 2026
- v0.1.2Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Studiomeyer 集成
StudioMeyer Crew
io.studiomeyer官方发布者
远程 MCP 服务器,为 Claude 提供智能体角色、16 个工具和 3 个工作流,宣称不产生额外 API 费用。
StudioMeyer Memory
io.studiomeyer官方发布者
远程双时态 AI 记忆服务器,带知识图谱与语义搜索,让助手跨会话持久记忆。

StudioMeyer MCP Suite
io.studiomeyer官方发布者
远程 MCP 套件,捆绑 8 个服务器、104+ 个工具,涵盖记忆、社交、PDF、邮件、图片、日历、定时任务和文件。
StudioMeyer GEO
io.studiomeyer官方发布者
一个远程、托管于欧盟的 MCP 服务器,让助手查看品牌或网站在八个大语言模型平台上的可见度,共 30 个工具,多数无需 API 密钥。
StudioMeyer CRM
io.studiomeyer官方发布者
StudioMeyer CRM 是一个远程、AI 原生的 CRM 服务器,为助手提供 37 个工具,涵盖销售管道、线索、健康评分和 GDPR 权利。