
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 權利。