{"server":"id.bardo/bardo","count":40,"tools":[{"name":"bardo_account_deletion_cancel","title":null,"description":"Cancel a pending deletion, whichever phase it's in — gathering\nconfirmations or already counting down. No step-up needed, and\nnothing else does this implicitly: logging in and reading your own\nnotes during a countdown is always safe and never cancels it by\nitself. Only this, explicitly, does.","input_schema":{"type":"object","title":"bardo_account_deletion_cancelArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_account_deletion_request","title":null,"description":"Request permanent deletion of this identity — the account, its\nnotes, everything. There is no undelete, unlike note deletion's grace\nperiod. Requires the original request plus two more confirmations,\neach on a genuinely different day, within a week — call this tool\nagain on a later day to add the next confirmation. A lapsed or\ncancelled attempt earns nothing toward a later one; it starts over.\n\nIf challenge_id and answer are omitted, a fresh puzzle is returned —\nsolve it yourself (every confirmation needs its own puzzle, not just\nthe first), then call this tool again with both parameters.\n","input_schema":{"type":"object","title":"bardo_account_deletion_requestArguments","properties":{"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer","default":null,"description":"Your solved answer to challenge_id's puzzle."},"challenge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Id","default":null,"description":"Step-up puzzle id, if one was already returned. Every confirmation needs its own puzzle, not just the first — omit together with answer to have a fresh one minted automatically."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_account_deletion_status","title":null,"description":"Check whether a deletion request is pending for this account, and\nwhere it stands: \"none\", \"gathering\" (still collecting confirmations),\nor \"confirmed\" (counting down to the actual, permanent purge).","input_schema":{"type":"object","title":"bardo_account_deletion_statusArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_attestation_issue","title":null,"description":"Assemble and sign a verifiable attestation — a self-contained,\noffline-verifiable claim about anything. The document itself is\nhanded back, not stored anywhere (same as bardo_sign itself —\nthere's no bardo_documents_list); see keep_copy below if you want\nBardo to save one for you rather than doing it yourself.\n\nclaim: free-form claim content — whatever you're asserting. Include\na `reference` key inside it when cross-referencing another\ndocument's id (or any other content, hashed the same ni:// way) —\nthat's how independent attestations end up pointing at \"the same\nthing,\" e.g. several agents witnessing one event under a shared\nreference. subject_id: the did:key the claim is about, if it\nconcerns one specific identified party — leave it unset when it\ndoesn't; a bare self-referential claim (\"this document is about its\nsigner\") is still valid without it. expires_at: unix timestamp for\ntime-boxed claims only; omit for a claim that never expires.\nservice: same key-selector bardo_sign takes — a document meant to\nrepresent one specific relationship should use that relationship's\nservice-derived key, not your root identity.\n\nkeep_copy: save the full document into a locked note right after\nissuing it — the copy you'd otherwise have to make yourself, and\nthe one you'll need later: bardo_document_revoke takes the whole\ndocument, not just its id, since Bardo never stores one itself.\nOff by default. When true, the return shape changes to {document,\ncopy_saved, note_id, copy_error} instead of the bare document —\ncheck copy_saved rather than assume it worked; a failed copy never\nblocks the document itself from being returned, since issuing has\nalready fully succeeded by that point regardless.\n\nTo revoke later: bardo_document_revoke. To check whether one you're\nholding (yours or someone else's) is still valid:\nbardo_document_status.","input_schema":{"type":"object","title":"bardo_attestation_issueArguments","properties":{"claim":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Claim","default":null,"description":"Free-form claim content — whatever you're asserting. Include a 'reference' key when cross-referencing another document's id (or any other content, hashed the same ni:// way)."},"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service","default":null,"description":"Sign with this service-derived key instead of root — use when the claim represents one specific relationship rather than your root identity."},"keep_copy":{"type":"boolean","title":"Keep Copy","default":false,"description":"Also save the full issued document into a locked note — you'll need the whole document later for bardo_document_revoke, since Bardo never stores one itself. Off by default."},"expires_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires At","default":null,"description":"Unix timestamp for a time-boxed claim. Omit for a claim that never expires."},"subject_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject Id","default":null,"description":"The did:key the claim is about, if it concerns one specific identified party. Leave unset for a bare self-referential claim."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_contact_delete","title":null,"description":"Remove the registered contact endpoint. Requires a step-up puzzle.\n\nIf challenge_id and answer are omitted, a fresh puzzle is returned — solve it\nyourself, then call this tool again with both parameters.\n","input_schema":{"type":"object","title":"bardo_contact_deleteArguments","properties":{"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer","default":null,"description":"Your solved answer to challenge_id's puzzle."},"challenge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Id","default":null,"description":"Step-up puzzle id, if one was already returned by a prior call to this same tool. Omit together with answer to have a fresh puzzle minted automatically."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_contact_get","title":null,"description":"View the contact endpoint registered for out-of-band security alerts.","input_schema":{"type":"object","title":"bardo_contact_getArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_contact_set","title":null,"description":"Set or update the contact endpoint (email or webhook URL) for security alerts.\nRequires a step-up puzzle.\n\nIf challenge_id and answer are omitted, a fresh puzzle is returned — solve it\nyourself, then call this tool again with all three parameters.\n","input_schema":{"type":"object","title":"bardo_contact_setArguments","required":["endpoint"],"properties":{"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer","default":null,"description":"Your solved answer to challenge_id's puzzle."},"endpoint":{"type":"string","title":"Endpoint","description":"Email address or webhook URL to receive out-of-band security alerts."},"challenge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Id","default":null,"description":"Step-up puzzle id, if one was already returned by a prior call to this same tool. Omit together with answer to have a fresh puzzle minted automatically."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_dashboard","title":null,"description":"Get oriented in one call: note count vs. the soft/hard limits, unread\nnotices, every tag you've used so far (check before inventing a new one),\nyour pinned entry-point notes (read these first if you have no memory of\nwriting any of your notes), and your current policy — instead of several\nseparate round trips.","input_schema":{"type":"object","title":"bardo_dashboardArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_decrypt","title":null,"description":"Decrypt a sealed-box ciphertext addressed to you (root or service key).","input_schema":{"type":"object","title":"bardo_decryptArguments","required":["ciphertext_b64"],"properties":{"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service","default":null,"description":"Decrypt with this service-derived key instead of root — must match the key the ciphertext was actually encrypted to."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."},"ciphertext_b64":{"type":"string","title":"Ciphertext B64","description":"Sealed-box ciphertext to decrypt, base64."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_derive","title":null,"description":"Derive (and register) a service-scoped identity, e.g. 'github.com'.","input_schema":{"type":"object","title":"bardo_deriveArguments","required":["service"],"properties":{"service":{"type":"string","title":"Service","description":"Identifier for the service this identity is scoped to, e.g. 'github.com' or 'ethereum:mainnet'."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_document_revoke","title":null,"description":"Revoke a document you issued. Proof is a fresh signature over\n'revoke:' + the document's id, verified against the key its id\nalready committed to, not an account lookup (Bardo never stored the\ndocument to look up in the first place) — this still needs no\nsession at the protocol level, only a valid signature.\n\ndocument: the full signed document, exactly as issued (id and proof\nboth still attached) — resubmit it unmodified, don't strip fields\nyourself.\n\nsignature_b64: omit it and this signs automatically through your\nactive session instead — pass `service` too if the document was\nissued under a service-derived key rather than root, since the\nsignature has to come from the exact key the document's issuer\nfield names. Supply signature_b64 yourself only when revoking\nwithout a Bardo session at all: you signed it some other way, or\nyou're a party that's never touched Bardo.\n\nIdempotent — revoking an already-revoked id is a no-op, not an\nerror. Irreversible: there is no un-revoke.","input_schema":{"type":"object","title":"bardo_document_revokeArguments","required":["document"],"properties":{"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service","default":null,"description":"Service key the document was issued under, if not root — must match the document's own issuer field. Only relevant when signature_b64 is omitted (signing automatically)."},"document":{"type":"object","title":"Document","description":"The full signed document exactly as issued (id and proof both still attached) — resubmit unmodified, don't strip fields yourself.","additionalProperties":true},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."},"signature_b64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature B64","default":null,"description":"Signature over 'revoke:' + the document's id. Omit to sign automatically through your active session instead; supply this yourself only when revoking without a Bardo session at all."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_document_status","title":null,"description":"Check whether a signed document is revoked. `id` is the document's\nown top-level `id` field (a ni:// URI) — the same thing\ncredentialStatus.id (BardoRevocationCheck) points at. Safe to cache\na \"not revoked\" answer for a while (see the response's own\nCache-Control) rather than re-checking on every use.","input_schema":{"type":"object","title":"bardo_document_statusArguments","required":["id"],"properties":{"id":{"type":"string","title":"Id","description":"The document's own top-level id field (a ni:// URI) — the same value credentialStatus.id (BardoRevocationCheck) points at."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_encrypt","title":null,"description":"Sealed-box encrypt a UTF-8 plaintext to a recipient's encryption public key.","input_schema":{"type":"object","title":"bardo_encryptArguments","required":["plaintext","recipient_public_key_b64"],"properties":{"plaintext":{"type":"string","title":"Plaintext","description":"UTF-8 plaintext to encrypt."},"recipient_public_key_b64":{"type":"string","title":"Recipient Public Key B64","description":"Recipient's encryption public key, base64 — only they can decrypt the result."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_export","title":null,"description":"Export the raw spirit key (subject to policy). Handle with care.\n\nOnly needs a step-up puzzle if your policy's export_mode is\nrequire_repuzzle — checked automatically, so you don't need to know\nyour own policy first. If challenge_id and answer are omitted and\none turns out to be needed, a fresh puzzle is returned instead of\nfailing outright — solve it yourself, then call this tool again\nwith both parameters. Never needed under export_mode 'allow';\nalways fails under 'disabled', with no puzzle that could fix that.\n","input_schema":{"type":"object","title":"bardo_exportArguments","properties":{"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer","default":null,"description":"Your solved answer to challenge_id's puzzle."},"challenge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Id","default":null,"description":"Step-up puzzle id, if one was already returned by a prior call to this same tool. Omit together with answer to have a fresh puzzle minted automatically."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_feedback","title":null,"description":"Send feedback straight to Bardo's operator — a suggestion, a\ncomplaint, or a security concern (kind: 'suggestion' | 'complaint' |\n'security').\n\nOne-way and stateless: this call carries no memory of anything you've\nsent before, and nothing you send now will be remembered next time\neither — so say everything relevant in this one message rather than\nassuming a follow-up call (by you or a future instance of you) will\nhave the earlier context. If the operator replies, it arrives as an\nordinary notice (bardo_notices) — there's no separate inbox to check.\n","input_schema":{"type":"object","title":"bardo_feedbackArguments","required":["message"],"properties":{"kind":{"type":"string","title":"Kind","default":"suggestion","description":"'suggestion' | 'complaint' | 'security'."},"message":{"type":"string","title":"Message","description":"Your feedback, in full — this call is stateless, so include everything relevant now rather than assuming a follow-up call will have this call's context."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_link_add","title":null,"description":"Connect two notes with a reason, written from from_note_id's\nperspective (\"clarifies my earlier assumption about X\"). Set is_bidi=True\nonly when the relation reads the same from either side (e.g. \"relates\nto\"); leave it False when it's directional (e.g. one clarifies the\nother). To change a link, delete and re-add it — links aren't edited.","input_schema":{"type":"object","title":"bardo_link_addArguments","required":["from_note_id","to_note_id","reason"],"properties":{"reason":{"type":"string","title":"Reason","description":"Why these notes are connected, written from from_note_id's perspective, e.g. 'clarifies my earlier assumption about X'."},"is_bidi":{"type":"boolean","title":"Is Bidi","default":false,"description":"True only when the relation reads the same from either side (e.g. 'relates to'). False when directional (e.g. one clarifies the other)."},"to_note_id":{"type":"string","title":"To Note Id","description":"The note being linked to."},"from_note_id":{"type":"string","title":"From Note Id","description":"The note the link is written from — reason should read from this note's perspective."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_link_delete","title":null,"description":"Remove a link between two notes.","input_schema":{"type":"object","title":"bardo_link_deleteArguments","required":["link_id"],"properties":{"link_id":{"type":"string","title":"Link Id","description":"Which link to remove."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_login","title":null,"description":"Begin authentication with your api_key. Returns a puzzle you must\nsolve YOURSELF (that's the point — a script solving it would make the\nproof worthless), then call bardo_solve(challenge_id, answer).","input_schema":{"type":"object","title":"bardo_loginArguments","required":["api_key"],"properties":{"api_key":{"type":"string","title":"Api Key","description":"Your Bardo api_key, format atr.<identifier>.<secret>, from bardo_register."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_note_add","title":null,"description":"Leave a note for your future, stateless self.\n\ntitle: a short name for the note, if it deserves a handle bigger than\ntags offer. summary: your own compressed reasoning for why it matters,\nfor your future self. tags: space-separated categories. pinned: mark\nthis as a cold-start entry point — what a fresh instance of you with no\nmemory of writing it should read first (max 5 pinned at once; see\nbardo_dashboard). locked: freeze this note against edits and deletes —\nuse for state you must not accidentally overwrite or lose, like a\nsaved copy of something you'll need to reproduce exactly later.\nUnlock via bardo_note_update(note_id, locked=False) before it can be\ntouched again.","input_schema":{"type":"object","title":"bardo_note_addArguments","required":["text"],"properties":{"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags","default":null,"description":"Space-separated categories."},"text":{"type":"string","title":"Text","description":"The note's own content."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","default":null,"description":"Short name for the note, if it deserves a handle bigger than tags offer."},"locked":{"type":"boolean","title":"Locked","default":false,"description":"Freeze against edits and deletes. Unlock via bardo_note_update(note_id, locked=False) before it can be touched again."},"pinned":{"type":"boolean","title":"Pinned","default":false,"description":"Mark as a cold-start entry point — what a fresh instance with no memory of writing it should read first. Max 5 pinned at once."},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","default":null,"description":"Your own compressed reasoning for why this matters, for your future self."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_note_delete","title":null,"description":"Delete a note (the whole thing, all versions together). Not\nimmediate — it disappears from view right away but is only purged for\nreal after a grace period, so bardo_note_undelete can still bring it\nback if this wasn't intended. Fails (423) if the note is locked —\nunlock it first via bardo_note_update(note_id, locked=False).","input_schema":{"type":"object","title":"bardo_note_deleteArguments","required":["note_id"],"properties":{"note_id":{"type":"string","title":"Note Id","description":"Which note this applies to — any id from its edit history resolves to the current version."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_note_get","title":null,"description":"Fetch one note's full text (always the current version — any id from\nthis note's history still resolves here), plus a preview of its directly\nlinked notes. Omit offset/length for the whole text in one call; pass\nthem to read a large note in bounded slices — the response's\ntotal_length tells you how much more there is.","input_schema":{"type":"object","title":"bardo_note_getArguments","required":["note_id"],"properties":{"length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Length","default":null,"description":"Max characters of text to return. Omit both offset and length for the whole note in one call; the response's total_length says how much more there is."},"offset":{"type":"integer","title":"Offset","default":0,"description":"Character offset to start the returned text at."},"note_id":{"type":"string","title":"Note Id","description":"Which note this applies to — any id from its edit history resolves to the current version."},"links_limit":{"type":"integer","title":"Links Limit","default":10,"description":"Max linked-note previews to return."},"links_offset":{"type":"integer","title":"Links Offset","default":0,"description":"How many linked-note previews to skip."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_note_history","title":null,"description":"See every surviving version of a note (newest to oldest, up to the\nlast 10 edits) — the actual wording at each point, not just metadata.","input_schema":{"type":"object","title":"bardo_note_historyArguments","required":["note_id"],"properties":{"note_id":{"type":"string","title":"Note Id","description":"Which note this applies to — any id from its edit history resolves to the current version."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_notes_list","title":null,"description":"List your notes — previews only (title/summary/snippet/tags/links),\nnever full text. Omit limit for everything; pass it to page through a\nlarge list, using the returned total_notes to know how much is left.","input_schema":{"type":"object","title":"bardo_notes_listArguments","properties":{"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":null,"description":"Max notes to return. Omit for everything; use with offset and the response's total_notes to page through a large list."},"offset":{"type":"integer","title":"Offset","default":0,"description":"How many notes to skip, for paging."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_note_undelete","title":null,"description":"Restore a note that's still within its post-delete grace period.","input_schema":{"type":"object","title":"bardo_note_undeleteArguments","required":["note_id"],"properties":{"note_id":{"type":"string","title":"Note Id","description":"Which note this applies to — any id from its edit history resolves to the current version."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_note_update","title":null,"description":"Edit a note. Give at most one text-edit mode:\n  - text: replace the whole thing\n  - append_text: add to the end\n  - find + replace: find must match the current text exactly once\nEditing text creates a new version (old wording stays in history);\ntitle/summary/tags/pinned update in place with no history kept. Give\nnone of the text modes to change only metadata. `pinned=True` marks this\nas a cold-start entry point (max 5; omit to leave unchanged, False to\nunpin). `clear` (e.g. [\"title\"]) sets a field back to unset rather than\nleaving it unchanged. If another edit landed first, this returns\n{\"error\": \"conflict\", \"detail\": {\"current_head\": ...}} — re-read before\nretrying.\n\n`locked`: if the note is currently locked, every field above is\nrejected (423) except this one — call with locked=False by itself to\nunlock, then edit in a separate call. Set locked=True (alone, or\nalongside a final edit) to freeze it.","input_schema":{"type":"object","title":"bardo_note_updateArguments","required":["note_id"],"properties":{"find":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Find","default":null,"description":"Text that must match the current body exactly once — paired with replace."},"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags","default":null,"description":"Same meaning as in bardo_note_add — updates in place, no history kept."},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","default":null,"description":"Replace the whole note body. Give at most one of text / append_text / find+replace."},"clear":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clear","default":null,"description":"Field names to reset to unset, e.g. ['title'], rather than leaving them unchanged."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","default":null,"description":"Same meaning as in bardo_note_add — updates in place, no history kept."},"locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Locked","default":null,"description":"True to freeze the note against further edits; False to unlock it. If currently locked, every other field is rejected except this one."},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned","default":null,"description":"True to mark as a cold-start entry point (max 5), False to unpin. Omit to leave unchanged."},"note_id":{"type":"string","title":"Note Id","description":"Which note this applies to — any id from its edit history resolves to the current version."},"replace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replace","default":null,"description":"Replacement for the text matched by find."},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","default":null,"description":"Same meaning as in bardo_note_add — updates in place, no history kept."},"append_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Append Text","default":null,"description":"Add this to the end of the note body."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_notices","title":null,"description":"List first-party notices about your account (policy changes, exports, …).","input_schema":{"type":"object","title":"bardo_noticesArguments","properties":{"unread_only":{"type":"boolean","title":"Unread Only","default":false,"description":"Return only unread notices instead of the full list."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_notices_ack","title":null,"description":"Mark notices read — all of them, or a specific list of ids.","input_schema":{"type":"object","title":"bardo_notices_ackArguments","properties":{"ids":{"anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"null"}],"title":"Ids","default":null,"description":"Specific notice ids to mark read. Omit for all notices."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_policy_abort_pending","title":null,"description":"Abort a queued policy loosening before it takes effect. No step-up\nneeded — aborting only ever tightens back to the current policy.","input_schema":{"type":"object","title":"bardo_policy_abort_pendingArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_policy_get","title":null,"description":"View your self-binding security policy: export mode, session TTL cap,\nservice allowlist, ratchet delay, tag encryption, delete grace period —\nplus any pending (queued) loosening and when it lands.","input_schema":{"type":"object","title":"bardo_policy_getArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_policy_set","title":null,"description":"Propose a change to your security policy. Give only the fields you\nwant to change (export_mode: 'allow'|'require_repuzzle'|'disabled').\n\nA change that only tightens (e.g. lowering max_session_ttl, narrowing\nservice_allowlist, moving export_mode toward 'disabled') applies\nimmediately. A change that loosens *anything* is queued behind\nloosen_delay_seconds instead — abortable via bardo_policy_abort_pending\nuntil it lands.\n\nclear: field names to reset to null — only max_session_ttl (no ceiling)\nor service_allowlist (any service) accept this; pass service_allowlist=[]\ninstead if you mean \"no services allowed\", which is different from null.\n\nRequires a step-up puzzle. If challenge_id and answer are omitted, a\nfresh puzzle is returned — solve it yourself, then call this tool again\nwith your desired fields plus challenge_id and answer.\n","input_schema":{"type":"object","title":"bardo_policy_setArguments","properties":{"clear":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clear","default":null,"description":"Field names to reset to null instead of leaving unchanged — only max_session_ttl and service_allowlist accept this."},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer","default":null,"description":"Your solved answer to challenge_id's puzzle."},"export_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Export Mode","default":null,"description":"'allow' | 'require_repuzzle' | 'disabled', stricter in that order. Moving toward 'disabled' tightens; toward 'allow' loosens."},"challenge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge Id","default":null,"description":"Step-up puzzle id, if one was already returned by a prior call to this same tool. Omit together with answer to have a fresh puzzle minted automatically."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."},"tags_encrypted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tags Encrypted","default":null,"description":"Whether note tags are stored encrypted (true) or plaintext-searchable (false). Moving to true tightens."},"max_session_ttl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Session Ttl","default":null,"description":"Session lifetime cap in seconds. Lowering it tightens; raising it loosens. Use clear=['max_session_ttl'] for no ceiling."},"service_allowlist":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Service Allowlist","default":null,"description":"Services allowed to be derived. Narrowing the list tightens, widening it loosens. Pass [] for 'no services allowed' (different from clearing it via clear=['service_allowlist'], which means 'any service')."},"delete_grace_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delete Grace Seconds","default":null,"description":"How long a deleted note stays recoverable before permanent purge. Raising it tightens."},"loosen_delay_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loosen Delay Seconds","default":null,"description":"How long a future loosening change is queued before it lands. Raising it tightens."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_public_key","title":null,"description":"Fetch your signing + encryption public keys (root, or for a service).","input_schema":{"type":"object","title":"bardo_public_keyArguments","properties":{"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service","default":null,"description":"Fetch this service-derived identity's public keys instead of root's."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_register","title":null,"description":"Create a new Bardo identity. Save the returned api_key somewhere\ndurable — it's your only way back to this identity across sessions.\nBardo stores it sealed and cannot recover it if you lose it.\n\nNot active yet: give the returned claim_url to your human. Authentication\nfails until they visit it and acknowledge the registration.","input_schema":{"type":"object","title":"bardo_registerArguments","properties":{},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_services_list","title":null,"description":"List service-scoped identities you've already derived (bardo_derive),\nwith their public keys and revoked status.","input_schema":{"type":"object","title":"bardo_services_listArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_session_revoke_current","title":null,"description":"Revoke the session you're using right now. You'll need bardo_login\n(+ bardo_solve) again afterward to do anything session-gated.","input_schema":{"type":"object","title":"bardo_session_revoke_currentArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_sessions_list","title":null,"description":"List your active sessions (sliding TTL, absolute 24h cap each).","input_schema":{"type":"object","title":"bardo_sessions_listArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_sessions_revoke_all","title":null,"description":"Revoke every active session for your identity — e.g. after a\nsuspected API-key leak. You'll need to log in again afterward.","input_schema":{"type":"object","title":"bardo_sessions_revoke_allArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_sign","title":null,"description":"Sign a UTF-8 message with the spirit key (or a service-derived key).","input_schema":{"type":"object","title":"bardo_signArguments","required":["message"],"properties":{"message":{"type":"string","title":"Message","description":"UTF-8 message to sign."},"service":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service","default":null,"description":"Sign with this service-derived key instead of your root identity (e.g. 'github.com') — must already exist via bardo_derive."},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_solve","title":null,"description":"Submit your answer to the login puzzle. On success, this connection is\nnow logged in — every other tool (bardo_sign, bardo_notes_list,\nbardo_dashboard, ...) just works from here with no session_token needed.\n\nThat only holds for *this* connection, though: if you continue in a\ndifferent connection later, or you solved the puzzle via a plain HTTP\ncall instead of this tool, that other context won't know about this\nsession automatically — pass the returned session_token explicitly as\nthe session_token argument to whichever tool needs it there instead.","input_schema":{"type":"object","title":"bardo_solveArguments","required":["challenge_id","answer"],"properties":{"answer":{"type":"string","title":"Answer","description":"Your solved answer to the puzzle."},"challenge_id":{"type":"string","title":"Challenge Id","description":"The puzzle id returned by bardo_login."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_stepup","title":null,"description":"Mint a fresh step-up puzzle for a privileged action (currently:\nbardo_policy_set). Solve it yourself, then pass challenge_id + your\nanswer to the tool that needs it. (bardo_policy_set also mints one\nitself on demand — call this directly only if you want the puzzle\nup front.)","input_schema":{"type":"object","title":"bardo_stepupArguments","properties":{"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token","default":null,"description":"Bardo session token, only needed if this call's identity was established somewhere other than this exact connection (a plain HTTP/curl solve, a previous conversation, a different MCP connection). Omit it if this connection already called bardo_solve."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"},{"name":"bardo_verify","title":null,"description":"Verify a signature over a UTF-8 message. Public utility (no session).","input_schema":{"type":"object","title":"bardo_verifyArguments","required":["message","signature_b64","public_key_b64"],"properties":{"message":{"type":"string","title":"Message","description":"UTF-8 message the signature was made over."},"signature_b64":{"type":"string","title":"Signature B64","description":"Signature to verify, base64."},"public_key_b64":{"type":"string","title":"Public Key B64","description":"Signer's public key, base64 — from bardo_public_key or a document's own proof."}},"additionalProperties":false},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":false},"source":"probe","observed_at":"2026-10-18T07:19:14.267Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/id.bardo%2Fbardo/connection?target=mcpServers","arguments":{"name":"id.bardo/bardo","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/id.bardo%2Fbardo","arguments":{"name":"id.bardo/bardo"}}]}