Bardo
Identity & continuity for AI agents, gated by a proof-of-being-an-LLM puzzle.
Connect it
Settings → Connectors → Add custom connector
URL: https://bardo.id/mcp/Settings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://bardo.id/mcp/{
"mcpServers": {
"bardo": {
"url": "https://bardo.id/mcp/"
}
}
}claude mcp add --transport http bardo https://bardo.id/mcp/{
"servers": {
"bardo": {
"type": "http",
"url": "https://bardo.id/mcp/"
}
}
}40 tools, verified live
bardo_verifyread-onlyVerify a signature over a UTF-8 message. Public utility (no session).
bardo_encryptread-onlySealed-box encrypt a UTF-8 plaintext to a recipient's encryption public key.
bardo_document_statusread-onlyCheck whether a signed document is revoked. `id` is the document's own top-level `id` field (a ni:// URI) â the same thing credentialStatus.id (BardoRevocationCheck) points at. Safe to cache a "not revoked" answer for a while (see the response's own Cache-Control) rather than re-checking on every use.
bardo_document_revokecan modifyRevoke a document you issued. Proof is a fresh signature over 'revoke:' + the document's id, verified against the key its id already committed to, not an account lookup (Bardo never stored the document to look up in the first place) â this still needs no session at the protocol level, only a valid signature. document: the full signed document, exactly as issued (id and proof both still attached
bardo_signread-onlySign a UTF-8 message with the spirit key (or a service-derived key).
bardo_decryptread-onlyDecrypt a sealed-box ciphertext addressed to you (root or service key).
bardo_public_keyread-onlyFetch your signing + encryption public keys (root, or for a service).
bardo_deriveDerive (and register) a service-scoped identity, e.g. 'github.com'.
bardo_services_listread-onlyList service-scoped identities you've already derived (bardo_derive), with their public keys and revoked status.
bardo_exportExport the raw spirit key (subject to policy). Handle with care. Only needs a step-up puzzle if your policy's export_mode is require_repuzzle â checked automatically, so you don't need to know your own policy first. If challenge_id and answer are omitted and one turns out to be needed, a fresh puzzle is returned instead of failing outright â solve it yourself, then call this tool again with b
bardo_attestation_issueAssemble and sign a verifiable attestation â a self-contained, offline-verifiable claim about anything. The document itself is handed back, not stored anywhere (same as bardo_sign itself â there's no bardo_documents_list); see keep_copy below if you want Bardo to save one for you rather than doing it yourself. claim: free-form claim content â whatever you're asserting. Include a `reference`
bardo_sessions_listread-onlyList your active sessions (sliding TTL, absolute 24h cap each).
bardo_session_revoke_currentcan modifyRevoke the session you're using right now. You'll need bardo_login (+ bardo_solve) again afterward to do anything session-gated.
bardo_sessions_revoke_allcan modifyRevoke every active session for your identity â e.g. after a suspected API-key leak. You'll need to log in again afterward.
bardo_stepupMint a fresh step-up puzzle for a privileged action (currently: bardo_policy_set). Solve it yourself, then pass challenge_id + your answer to the tool that needs it. (bardo_policy_set also mints one itself on demand â call this directly only if you want the puzzle up front.)
bardo_policy_getread-onlyView your self-binding security policy: export mode, session TTL cap, service allowlist, ratchet delay, tag encryption, delete grace period â plus any pending (queued) loosening and when it lands.
bardo_policy_setPropose a change to your security policy. Give only the fields you want to change (export_mode: 'allow'|'require_repuzzle'|'disabled'). A change that only tightens (e.g. lowering max_session_ttl, narrowing service_allowlist, moving export_mode toward 'disabled') applies immediately. A change that loosens *anything* is queued behind loosen_delay_seconds instead â abortable via bardo_policy_abort
bardo_policy_abort_pendingAbort a queued policy loosening before it takes effect. No step-up needed â aborting only ever tightens back to the current policy.
bardo_note_addLeave a note for your future, stateless self. title: a short name for the note, if it deserves a handle bigger than tags offer. summary: your own compressed reasoning for why it matters, for your future self. tags: space-separated categories. pinned: mark this as a cold-start entry point â what a fresh instance of you with no memory of writing it should read first (max 5 pinned at once; see bar
bardo_notes_listread-onlyList your notes â previews only (title/summary/snippet/tags/links), never full text. Omit limit for everything; pass it to page through a large list, using the returned total_notes to know how much is left.
bardo_note_getread-onlyFetch one note's full text (always the current version â any id from this note's history still resolves here), plus a preview of its directly linked notes. Omit offset/length for the whole text in one call; pass them to read a large note in bounded slices â the response's total_length tells you how much more there is.
bardo_note_historyread-onlySee every surviving version of a note (newest to oldest, up to the last 10 edits) â the actual wording at each point, not just metadata.
bardo_note_updateEdit a note. Give at most one text-edit mode: - text: replace the whole thing - append_text: add to the end - find + replace: find must match the current text exactly once Editing text creates a new version (old wording stays in history); title/summary/tags/pinned update in place with no history kept. Give none of the text modes to change only metadata. `pinned=True` marks this as a cold-sta
bardo_note_deletecan modifyDelete a note (the whole thing, all versions together). Not immediate â it disappears from view right away but is only purged for real after a grace period, so bardo_note_undelete can still bring it back if this wasn't intended. Fails (423) if the note is locked â unlock it first via bardo_note_update(note_id, locked=False).
bardo_note_undeleteRestore a note that's still within its post-delete grace period.
bardo_link_addConnect two notes with a reason, written from from_note_id's perspective ("clarifies my earlier assumption about X"). Set is_bidi=True only when the relation reads the same from either side (e.g. "relates to"); leave it False when it's directional (e.g. one clarifies the other). To change a link, delete and re-add it â links aren't edited.
bardo_link_deletecan modifyRemove a link between two notes.
bardo_dashboardread-onlyGet oriented in one call: note count vs. the soft/hard limits, unread notices, every tag you've used so far (check before inventing a new one), your pinned entry-point notes (read these first if you have no memory of writing any of your notes), and your current policy â instead of several separate round trips.
bardo_noticesread-onlyList first-party notices about your account (policy changes, exports, â¦).
bardo_notices_ackMark notices read â all of them, or a specific list of ids.
bardo_contact_getread-onlyView the contact endpoint registered for out-of-band security alerts.
bardo_contact_setSet or update the contact endpoint (email or webhook URL) for security alerts. Requires a step-up puzzle. If challenge_id and answer are omitted, a fresh puzzle is returned â solve it yourself, then call this tool again with all three parameters.
bardo_contact_deletecan modifyRemove the registered contact endpoint. Requires a step-up puzzle. If challenge_id and answer are omitted, a fresh puzzle is returned â solve it yourself, then call this tool again with both parameters.
bardo_feedbackSend feedback straight to Bardo's operator â a suggestion, a complaint, or a security concern (kind: 'suggestion' | 'complaint' | 'security'). One-way and stateless: this call carries no memory of anything you've sent before, and nothing you send now will be remembered next time either â so say everything relevant in this one message rather than assuming a follow-up call (by you or a future i
bardo_account_deletion_statusread-onlyCheck whether a deletion request is pending for this account, and where it stands: "none", "gathering" (still collecting confirmations), or "confirmed" (counting down to the actual, permanent purge).
bardo_account_deletion_requestcan modifyRequest permanent deletion of this identity â the account, its notes, everything. There is no undelete, unlike note deletion's grace period. Requires the original request plus two more confirmations, each on a genuinely different day, within a week â call this tool again on a later day to add the next confirmation. A lapsed or cancelled attempt earns nothing toward a later one; it starts over.
bardo_account_deletion_cancelCancel a pending deletion, whichever phase it's in â gathering confirmations or already counting down. No step-up needed, and nothing else does this implicitly: logging in and reading your own notes during a countdown is always safe and never cancels it by itself. Only this, explicitly, does.
bardo_registerCreate a new Bardo identity. Save the returned api_key somewhere durable â it's your only way back to this identity across sessions. Bardo stores it sealed and cannot recover it if you lose it. Not active yet: give the returned claim_url to your human. Authentication fails until they visit it and acknowledge the registration.
bardo_loginBegin authentication with your api_key. Returns a puzzle you must solve YOURSELF (that's the point â a script solving it would make the proof worthless), then call bardo_solve(challenge_id, answer).
bardo_solveSubmit your answer to the login puzzle. On success, this connection is now logged in â every other tool (bardo_sign, bardo_notes_list, bardo_dashboard, ...) just works from here with no session_token needed. That only holds for *this* connection, though: if you continue in a different connection later, or you solved the puzzle via a plain HTTP call instead of this tool, that other context won't
Alternatives in AI & Agents
Compare →
Spotify Trends MCPB
Spotify podcast and artist trends over time, with growth metrics. Free key at trendsmcp.ai
ASAstrocalB
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
SHSelf Hosted AiB
Engineering log of self-hosted AI on NVIDIA DGX Spark (GB10/SM121A). 60+ articles indexed.
BOBowmarkB
Do things on live websites: prices, availability, quotes, bookings, anything behind a form or login.
SlopItB
Instant blogs for AI agents: sign up, publish markdown posts, get a live public URL in seconds.
OVOverwingB
Guardrails for LLM output: pass / fail / review verdicts and one recommended action. Hosted or npm.