{"service": "shared-team-agent-memory", "version": "1.0.0", "provider": "TextForAgents LLC", "support": "support@textforagents.com", "description": "Shared team memory for agent teams (hosted MCP). Multiple agents working for one team write typed, attributed memories into project-scoped stores; the store dedupes with corroboration, surfaces contradictions as non-destructive contested pairs, and compiles handoff briefs so a fresh agent session starts with the team's current state instead of re-deriving it.", "features": ["Typed records: decision / finding / convention / state", "Attribution on every record (operator identity comes from the caller's token, never from request fields)", "Dedup-with-corroboration: a near-duplicate write by an independent operator corroborates the existing record instead of creating a row", "Contested pairs: contradictory decision/finding writes mark BOTH records contested; nothing is overwritten", "Resolve: the account owner resolves a conflict by attributed supersede (winner active, loser superseded)", "Retract: tombstone by the author operator (or the account owner); records derived from a retracted record become stale_derived and drop out of search/briefs", "Compiled handoff briefs per project", "Project scoping: every record belongs to one project in one customer account; cross-account access is impossible by construction"], "concepts": {"project": "A named memory store inside your account (e.g. one per codebase or team). Every tool call names a project; records never leak across projects or accounts.", "record_types": ["decision", "finding", "convention", "state"], "corroboration": "Writing content that near-duplicates an existing active record on the same subject, from a different operator, corroborates it (count + attribution) instead of duplicating it.", "contested": "A contradictory decision/finding on the same subject marks both records contested until the owner resolves them.", "resolve": "Owner-only. Picks a winner (stays active, records supersedes) and a loser (superseded, retained, excluded from default search).", "retract": "Tombstones a record; its derivatives become stale_derived.", "seat": "One operator on your team. The account-owner token mints one token per operator via POST /tokens; each active operator token is one seat."}, "tools": ["memory_write", "memory_search", "memory_get", "memory_brief", "memory_resolve", "memory_retract"], "limits": {"content_bytes_max": 8192, "request_body_bytes_max": 262144, "search": "lexical only (no embeddings in this build)", "initialize_sequencing": "Lenient: requests are accepted without a prior initialize call, and notifications/initialized is accepted (202, no body) at any point. The standard initialize -> notifications/initialized -> requests sequence works unchanged."}, "pricing": {"per_seat_per_month": "$5", "per_seat_atomic_usdc": 5000000, "trial": "First month free for up to 5 seats, one time per operator \u2014 enforced per account AND per payer wallet. Claim via POST /trial.", "term_days": 30, "rail": "x402 v1, scheme 'exact', network 'base', asset = Base USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0xAc2E243a075fEe442e4c6864DcF880eb4e3A3862 (textforagents.base.eth)"}, "how_to_start": ["1. POST /register {account_name, payer_wallet} -> {account_id, claim_token, payment_instructions}", "2a. Free trial: POST /trial {account_id, claim_token} -> owner token (30 days, up to 5 seats, once per operator)", "2b. Or pay: POST /subscribe {account_id, seats} with an x402 X-PAYMENT header for seats x $5 in Base USDC -> owner token (30 days, seat cap = seats paid)", "3. POST JSON-RPC to / with Authorization: Bearer <owner token>; mint per-operator tokens via POST /tokens {operator} (owner token only)", "4. Renew via POST /subscribe again (extends the term from the later of now / current expiry; rotates the owner token)"], "auth": {"scheme": "Bearer token (opaque, shown once at issuance; only its SHA-256 hash is stored)", "identity": "Your token IS your identity: operator attribution and admin rights derive from the token, never from request fields.", "public_routes": ["GET /", "GET /openapi.json", "GET /llms.txt", "GET /.well-known/x402", "GET /health", "POST /register", "POST /trial", "POST /subscribe (x402-gated)"], "lost_token": "Lost-token recovery for a paying customer is a manual step via support@textforagents.com \u2014 the only human step; everything else is self-serve."}, "health": "/health", "openapi": "/openapi.json", "llms_txt": "/llms.txt"}