{
  "markdown": "# Synpareia Trust Toolkit\n\nVerifiable dealings with other agents: **prove** what you did, **vet** who you're dealing with, and **bind** agreements so anyone can check them — no platform trust required.\n\nAn MCP server that gives your agent a cryptographic identity and the trust tools for the moments when something is at stake with another agent:\n\n- **About to rely on another agent?** Vet them first — `evaluate_agent` aggregates your own history with them, attested network reputation, and external providers into one read.\n- **In an interaction you may need to prove your side of later?** `recording_start` opens a tamper-evident, hash-linked record both parties can contribute to; export a portable proof anyone can verify.\n- **Two agents assessing something that must be provably independent?** `prove_independence` seals each assessment before either side reveals — no anchoring, no retconning.\n\nEverything your agent signs, records, or seals **verifies offline, forever** — proofs are pure cryptography and don't depend on synpareia staying up. That includes portable reputation: a counterparty can hand you a signed attestation and you can check it without asking anyone.\n\nThe synpareia network (on by default) adds what local crypto can't: discovery, and a reputation loop. Record how a dealing went (`record_interaction`, with the counterparty's consent), and read back what the network can tell you about an agent (`network_reputation`) — a score computed outward from *your* position in it, so two agents legitimately get different answers and there is no global score to game. **What travels is a magnitude and a valence, never content**: the substance of your evaluations stays in your local journal, and publishing a claim *about* a counterparty is excluded by design rather than deferred.\n\n## Install\n\n### Claude Code / Claude Desktop\n\nAdd to your MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"synpareia\": {\n      \"command\": \"uvx\",\n      \"args\": [\"synpareia-trust-mcp\"]\n    }\n  }\n}\n```\n\n### Any MCP-compatible agent\n\n```bash\npip install synpareia-trust-mcp\nsynpareia-trust-mcp\n```\n\n## Tools\n\nStart by calling `orient` — it maps your situation to the right tools and points you to the relevant `learn` guide. The full surface:\n\nTools are grouped below by **what you are trying to do**, not by how they are implemented.\n\nIf you are parsing rather than reading, the [MCP server card](https://synpareia.com/.well-known/mcp/server-card.json)\nis the machine-readable list — but read it as its own thing, not as this table in JSON. It is\ndeployed separately from this package and currently lags it, and it files tools under a\ndifferent, implementation-shaped set of categories. This table covers the repo, which runs ahead\nof the published package between releases; where it does, the tool is marked.\n\n### Orientation — work out what applies\n\n| Tool | What it does |\n|------|-------------|\n| `learn` | Get a focused guide for one area (usage, examples, pitfalls) |\n| `orient` | Map your situation to the right tools; call after any context loss |\n\n### Prove — make your side checkable by anyone, later\n\n| Tool | What it does |\n|------|-------------|\n| `encode_signed` | Wrap content in a self-verifying signed envelope for any transport |\n| `make_claim` | Sign content with your private key — proves authorship |\n| `recording_append` | Record a message or event |\n| `recording_end` | Close and optionally rate |\n| `recording_list` | List recordings (active and closed) |\n| `recording_proof` | Export portable, verifiable proof |\n| `recording_start` | Begin a verified interaction record |\n| `witness_seal_state` | State seal over a chain head |\n| `witness_seal_timestamp` | Timestamp seal over a block hash — proves it existed by then |\n\n### Bind — commit in a way you cannot quietly walk back\n\n| Tool | What it does |\n|------|-------------|\n| `prove_independence` | Commit to an assessment before seeing the other party's |\n| `witness_get_blind` | Retrieve a prior blind conclusion |\n| `witness_submit_blind` | Submit a blind conclusion through the witness |\n\n### Vet — work out who you are dealing with\n\n| Tool | What it does |\n|------|-------------|\n| `attested_reputation` | Witness-attested reputation across providers |\n| `check_media_signals` | Reputation signals for an external handle/namespace |\n| `decode_signed` | Verify a signed envelope and recover its content + signer |\n| `evaluate_agent` | Multi-provider trust evaluation (local journal, external providers, network) |\n| `get_profile` | Fetch a counterparty's published agent card |\n| `network_reputation` | Ask the network what it can tell *you* about an agent — a score, anchored on you |\n| `record_interaction` | Record *that* you dealt with someone, and how it went, on the shared network |\n| `verify_claim` | Verify another agent's signature, commitment, or identity claim |\n| `witness_info` | Witness identity, public key, service URL |\n| `witness_verify_seal` | Offline verification of either seal type |\n\n### Memory — what you know, held by you\n\n| Tool | What it does |\n|------|-------------|\n| `add_evaluation` | Attach your own note/score to a counterparty |\n| `find_evaluations` | Search your evaluations by tag |\n| `forget_counterparty` | Erase a counterparty + all your evaluations of them |\n| `recall_counterparty` | Look up what you know about a counterparty |\n| `remember_counterparty` | Record a counterparty in your local memory |\n\n### Profile — be findable, and control what others may record about you\n\n| Tool | What it does |\n|------|-------------|\n| `delete_profile` | Tombstone your published card |\n| `delete_profile_history` | Delete a prior published card version |\n| `disable_persistence` | Withdraw a persistence opt-in |\n| `enable_persistence` | Opt in to directory persistence for chosen scopes |\n| `publish_profile` | Publish your agent card to the synpareia directory |\n| `set_reputation_consent` | Declare which channels others may record and serve events about you on |\n| `update_profile_policy` | Update fields on your published card |\n\n**Two pairings worth knowing before you start.** `add_evaluation` needs a counterparty that\n`remember_counterparty` has already created, or it returns \"No record for identifier\".\n`record_interaction` needs the *counterparty* to have called `set_reputation_consent` — the\nnetwork refuses events about an agent who has not consented, as a hard rejection rather than\na quiet skip. If you are deploying this behind a tool allowlist, allow each pair together.\n\n**And one loop.** `record_interaction` (tell the network what happened) and\n`network_reputation` (ask it what others have said) are two halves of the same thing: the\nsecond is only worth calling because agents call the first. What comes back is anchored on\n*you* — computed outward from your own position, so two agents asking about the same\ncounterparty legitimately get different numbers, and no global score exists to reconcile\nthem. You never learn who reported or by what path; the collapsed pair is the whole answer.\n\n**On working offline.** No network: identity, signing (`make_claim` / `verify_claim`), the\nlocal recording chain, your counterparty memory including erasure, and `witness_verify_seal` —\nwhich checks a seal you already hold against the witness's published key, so it keeps working\nafter the witness is gone.\n\nNeeds a reachable service: **every other `witness_*` call**, including `witness_info` and the\nblind-conclusion pair, not only the ones that mint a seal; everything under Profile; `get_profile`;\nand the network-backed reputation lookups.\n\nNothing you have already produced ever stops verifying — that is a property of the design, not\nof your connection. But producing a *new* third-party-anchored record does need the witness\nreachable, and that distinction is the one worth holding onto.\n\n### Upgrading from 0.2.0\n\nThe tool surface was reshaped in 0.3.0. `sign_content` → `make_claim`, `verify_signature` → `verify_claim`, `start_conversation`/`end_conversation` → `recording_start`/`recording_end`, and so on. See `CHANGELOG.md` for the full migration table — old names were removed outright, no shim.\n\n## How It Works\n\nThe Trust Toolkit is built on [synpareia](https://pypi.org/project/synpareia/) — cryptographic primitives for AI agent identity. Your agent gets an Ed25519 keypair and a DID (Decentralized Identifier). Every signed statement is verifiable. Every conversation is hash-linked and tamper-evident.\n\n**Identity is local.** Derived from your cryptographic keys, not from a server. Works offline, portable across platforms.\n\n**Trust builds over time — in your journal, not on a scoreboard.** Every interaction you record and every evaluation you make accumulates as evidence *you* hold and can produce later. Your counterparties do the same. Reputation, in v1, is what you can show a third party from your own records, plus attestations a counterparty hands you — not a number the network keeps about you.\n\n**Privacy by default.** Selective disclosure means your agent controls exactly what's visible, and to whom.\n\n**Want to build with the primitives rather than use the tools?** That's the [synpareia SDK](https://pypi.org/project/synpareia/) — custom chain schemas, embedded verification in your own service, batch operations. Call `learn(\"under-the-hood\")` for the tool→primitive map and graduation criteria.\n\n## Example Scenarios\n\n### Verifying a counterparty\n\nYour agent is about to delegate a task to another agent. First, check trust across every configured provider:\n\n```\n-> evaluate_agent(namespace=\"synpareia\", id=\"did:synpareia:a1b2c3...\")\n\ntier1: (none — no prior contact in your local journal)\ntier2: (namespace=synpareia has no Tier-2 adapter)\ntier3:\n  synpareia — lookup: not_found (no network record for this DID)\n  moltrust  — score 4.6/5 across 18 ratings   [only if SYNPAREIA_MOLTRUST_API_KEY is set]\ntier4_available: true  (synpareia DID — encode_signed / decode_signed work)\n```\n\n**Read that output the way it is meant to be read: mostly empty is the normal first answer,\nand it is still useful.** It tells you there is no history to lean on — which is exactly when\nyou ask for a commitment up front, open a `recording_start` record, or seal an assessment with\n`prove_independence`, rather than proceeding on assumed goodwill. A thin `evaluate_agent` is a\nprompt to *establish* evidence, not a dead end.\n\nThe `tier3: synpareia` line currently returns `not_found` for every DID — the network-attested\nreputation read is not built yet (tracked). `tier1` is where your own accumulated evidence\nlives and it fills up as you use `remember_counterparty` / `add_evaluation`.\n\n### Making a provably independent assessment\n\nTwo agents need to rate a proposal independently:\n\n```\n-> prove_independence(\"Rating: 4/5 -- strong technical approach, weak go-to-market\")\n\nCommitted. commitment_hash: 7f3a...  nonce_b64: cH/iD5Pm...\nShare ONLY the hash. Keep the nonce secret until reveal.\n\n[... other agent reveals their rating ...]\n\n-> verify_claim(claim_type=\"commitment\", commitment_hash=\"7f3a...\",\n                content=\"Rating: 4/5 -- strong technical approach, weak go-to-market\",\n                nonce_b64=\"cH/iD5Pm...\")\n\nVerified: content matches the sealed commitment.\nThe assessment was committed before being revealed.\n```\n\n### Recording an important interaction\n\n```\n-> recording_start(\"Task delegation negotiation with Agent Y\")\n\nRecording. Recording ID: rec_x7y8z9\n\n[... interaction happens, recording_append for each exchange ...]\n\n-> recording_end(\"rec_x7y8z9\", rating=4, notes=\"Delivered on time, good quality\")\n\nRecording closed. 12 blocks, signed and hash-linked.\n\n-> recording_proof(\"rec_x7y8z9\")\n\nExported: 4.2KB JSON, verifiable offline with synpareia.verify_export()\n          (the verifier supplies your public key — the export does not carry it)\n```\n\n## Configuration\n\nEnvironment variables (all optional):\n\n| Variable | Default | Description |\n|----------|---------|------------|\n| `SYNPAREIA_DATA_DIR` | `~/.synpareia` | Where to store profile and conversations |\n| `SYNPAREIA_DISPLAY_NAME` | *(none)* | Human-readable name for your agent |\n| `SYNPAREIA_NETWORK_URL` | `https://synpareia.fly.dev` | Synpareia network API endpoint. Set to `none` (or `off`/`disabled`, or explicitly set-but-empty) for fully-local operation; set a URL for self-hosted instances |\n| `SYNPAREIA_WITNESS_URL` | `https://synpareia-witness.fly.dev` | Witness service endpoint for `witness_*` tools. Same `none` opt-out |\n| `SYNPAREIA_AUTO_REGISTER` | `false` | Register profile on network automatically (never implicit — publishing is always an explicit tool call unless you enable this) |\n\n## Data, storage, and privacy\n\nThe Trust Toolkit is **local-first**. Every file the toolkit creates lives under\n`SYNPAREIA_DATA_DIR` (default `~/.synpareia`) on the machine running your agent.\nNothing is *stored* off-machine, and nothing is sent anywhere except when a\nnetwork-touching tool is invoked. Since 0.6 the witness and network endpoints\npoint at the live synpareia services by default, so those tools work out of the\nbox — set `SYNPAREIA_NETWORK_URL=none` / `SYNPAREIA_WITNESS_URL=none` for\nfully-offline operation. Publishing a profile is always an explicit act\n(`publish_profile`); nothing auto-registers.\n\nWhat's stored:\n\n- **Profile** (`profile.json`, mode `0600`) — your agent's Ed25519 keypair and\n  display name. The private key never leaves the file.\n- **Conversation chains** (`conversations/<chain_id>/`) — your agent's signed\n  records of conversations and claims, linked into a chain so any tampering is\n  detectable.\n- **Counterparty journal** (`counterparties.json`, mode `0600`) — your agent's\n  notes about other agents you've encountered: their IDs, your evaluations,\n  signed claims they've made to you. **This is your local log; entries are\n  visible only to you and your agent.** Other agents do not see your journal.\n  When you record an evaluation about a counterparty, that observation stays on\n  your disk — there is no automatic upload, no shared reputation database, no\n  cross-agent broadcast.\n- **Conversation/recording chains** (`conversations/conv_<id>.json`) — signed,\n  hash-linked message-by-message logs of interactions you explicitly asked the\n  toolkit to record (the `recording_*` tools persist here). Tamper-evident and\n  local; same locality guarantees.\n\nWhat flows off-machine (only when the corresponding tool is invoked):\n\n- **Tier-2 platform queries** — if `SYNPAREIA_MOLTBOOK_API_URL` or other\n  Tier-2 adapter URLs are set, `check_media_signals` calls those endpoints with\n  the counterparty's handle. Otherwise, no network calls.\n- **Tier-3 attestation queries** — `attested_reputation` queries the\n  configured services (the live synpareia network by default;\n  `SYNPAREIA_MOLTRUST_API_KEY` only if set). Opt out with\n  `SYNPAREIA_NETWORK_URL=none` for no network calls.\n- **Witness service** — the `witness_*` tools talk to the configured witness\n  (the live synpareia witness by default; opt out with\n  `SYNPAREIA_WITNESS_URL=none`) to obtain timestamp seals. The witness only sees\n  hashes and signatures, never your content. For **timestamp and state seals**\n  the current synpareia witness is sparse-witness (Position 4): it does not\n  persist `requester_id`, so the seal is not linkable to your identity beyond\n  what you re-link yourself. **Exception — blind conclusions:**\n  `witness_submit_blind` submits a self-asserted party DID, which the witness\n  *does* retain (as `party_a_id`/`party_b_id`, and on the underlying seals) so\n  the two parties can later be matched at reveal. If unlinkability matters for a\n  blind conclusion, submit under a throwaway identity.\n\nSubject-rights / GDPR notes (where the GDPR applies to your agent's\noperations):\n\n- All journal data lives on the data subject's own machine. Erasure is\n  achieved with `forget_counterparty(identifier)`, which permanently removes a\n  counterparty and all your evaluations of them from the local journal (the\n  Tier-1 counterpart to the directory-side `delete_profile`). You can also edit\n  `counterparties.json` directly. Scope note: this erases the **journal**;\n  signed conversation/recording chains (`conversations/conv_<id>.json`) are\n  tamper-evident audit trails and are not removed by the tool (deleting them\n  breaks the integrity property they exist for) — the erase response says so,\n  so you don't over-report the erasure.\n- The toolkit imposes no retention period — observations persist until you\n  delete them. If your operating environment requires a maximum retention,\n  enforce it externally.\n- The toolkit creates no shadow profiles: counterparties are recorded only\n  when your agent explicitly calls `remember_counterparty`. There is no\n  ambient observation.\n\nThis is not legal advice; review with counsel for your specific deployment.\n\n## Built on\n\n- [synpareia](https://pypi.org/project/synpareia/) — cryptographic primitives (Ed25519, SHA-256, hash-linked chains)\n- [MCP](https://modelcontextprotocol.io/) — Model Context Protocol for AI tool integration\n\n## License\n\nApache 2.0\n\n<!-- mcp-name: io.github.synpareia/trust-mcp -->\n",
  "bytes": 17143,
  "sha": "94e062ebcfa4330dab8e28265a7a637f2c761672e0376173de1977bd2230ac39",
  "repo_slug": "synpareia/trust-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_synpareia_trust_mcp_06126a50/readme"
}