atprotocrates

Tl.

Command-line tools

Thirty binaries across fourteen crates. Most sit behind the clap feature, which is off by default, so a library never pulls in an argument parser you did not ask for.

§ 01

Building them

Build the whole set once and put them on your path, or run them ad hoc through cargo run. The workspace build produces the SQLite storage profile; see the PDS guide if you need the fjall one.

Everything with CLI supportListing 1
cargo build --features clap --bins

# Or install a single tool from the registry:
cargo install atproto-identity --features clap,hickory-dns

§ 02

Reference

Every binary in the workspace, with the crate it belongs to and the features it needs.

Identity & cryptography — atproto-identity
BinaryFeaturesDoes
atproto-identity-resolveclap, hickory-dnsResolve a handle or DID to its canonical identifier, optionally printing the DID document.
atpdidclap, hickory-dnsShort-form identity resolution, for when you are typing it repeatedly.
atproto-identity-keyclapGenerate a P-256, P-384 or K-256 key.
atproto-identity-signclapSign a JSON file with a private key.
atproto-identity-validateclapVerify a signature against a public key.
atproto-identity-plc-auditclap, hickory-dnsRead a did:plc operation log and audit its history.
atproto-identity-plc-fork-vizclap, hickory-dnsVisualise forks in a PLC operation log.
Content addressing & records — atproto-dasl, atproto-record, atproto-repo
BinaryFeaturesDoes
atpcidclapCompute the DAG-CBOR CID of a JSON value.
atproto-daslclapConvert between JSON and DAG-CBOR hex, both directions.
atproto-record-cidclapRecord CID from JSON on stdin.
atptidclapGenerate TIDs; -n for a batch.
atproto-repo-carclapInspect a CAR v1 archive — roots, blocks, sizes.
atproto-repo-mstclapWalk the Merkle Search Tree inside an archive.
Attestation, lexicons & rich text
BinaryFeaturesDoes
atproto-attestation-signclap, tokioProduce an inline or remote attestation over a record.
atproto-attestation-verifyclap, tokioVerify an attestation, including the repository binding.
atproto-lexicon-resolveclap, hickory-dnsResolve an NSID through DNS and XRPC to its schema.
atproto-extras-parse-facetsclap, cli, hickory-dnsParse mentions, URLs and hashtags out of text into facets.
Clients, auth & services
BinaryFeaturesDoes
atproto-client-authclapCreate and refresh a session from an identifier and password.
atproto-client-app-passwordclapMake an XRPC call with an app-password bearer token.
atproto-client-dpopclapMake an XRPC call with a DPoP-bound token.
atproto-client-put-recordclapWrite a record into a repository.
atpxrpcGeneral XRPC client with persistent sessions.
atproto-oauth-service-tokenclapMint and inspect OAuth service tokens.
atproto-oauth-toolclapDrive a login flow end to end from the terminal.
Events, server & tooling
BinaryFeaturesDoes
atproto-jetstream-consumerclapStream Jetstream events with filtering and optional compression.
atproto-tap-clientclapStream verified TAP events as JSON; manage tracked repositories.
atproto-tap-extrasclapBulk-add a DID’s social graph to TAP tracking.
pdsclap + profileThe Personal Data Server. See the operator guide.
atproto-pds-adminclap + profileInvite codes, account inspection, takedowns.
atpmcpMCP server over stdio exposing create_record_cid.

§ 03

Worked invocations

Copied from the workspace README, which is the version that gets exercised.

IdentityListing 2
cargo run --features clap,hickory-dns \
  --bin atproto-identity-resolve -- alice.bsky.social

cargo run --features clap --bin atproto-identity-key -- generate p256
cargo run --features clap \
  --bin atproto-identity-sign -- did:key:... data.json
cargo run --features clap \
  --bin atproto-identity-validate -- did:key:... data.json signature

cargo run --features clap,hickory-dns \
  --bin atproto-identity-plc-audit -- did:plc:...
cargo run --features clap,hickory-dns \
  --bin atproto-identity-plc-fork-viz -- did:plc:...
Content addressingListing 3
cargo run --package atproto-dasl --features clap \
  --bin atpcid -- '{"text":"hello"}'

# JSON in, DAG-CBOR hex out — and back again.
echo '{"text":"hello","likes":1}' | atproto-dasl encode
echo 'a2656c696b6573016474657874656...' | atproto-dasl decode

cat record.json | cargo run --features clap --bin atproto-record-cid
cargo run --package atproto-record --features clap --bin atptid -- -n 5
RepositoriesListing 4
cargo run --package atproto-repo --features clap \
  --bin atproto-repo-car -- ls repo.car
cargo run --package atproto-repo --features clap \
  --bin atproto-repo-mst -- ls repo.car
Attestation and lexiconsListing 5
cargo run --package atproto-attestation --features clap,tokio \
  --bin atproto-attestation-sign -- \
  inline record.json did:key:... metadata.json

cargo run --package atproto-attestation --features clap,tokio \
  --bin atproto-attestation-verify -- signed_record.json

cargo run --features clap,hickory-dns \
  --bin atproto-lexicon-resolve -- app.bsky.feed.post
Clients and authListing 6
cargo run --features clap \
  --bin atproto-client-auth -- login alice.bsky.social password123

cargo run --features clap --bin atproto-client-app-password -- \
  alice.bsky.social access_token /xrpc/com.atproto.repo.listRecords

cargo run --features clap --bin atproto-client-dpop -- \
  alice.bsky.social did:key:... access_token \
  /xrpc/com.atproto.repo.listRecords

cargo run --package atproto-oauth-axum --features clap \
  --bin atproto-oauth-tool -- login did:key:... alice.bsky.social

cargo run --package atpxrpc --bin atpxrpc -- --help
Event streamsListing 7
cargo run --features clap --bin atproto-jetstream-consumer -- \
  jetstream1.us-east.bsky.network dictionary.zstd

cargo run --package atproto-tap --features clap \
  --bin atproto-tap-client -- --help
cargo run --package atproto-tap --features clap \
  --bin atproto-tap-extras -- --help

§ 04

The MCP server

atpmcp speaks JSON-RPC 2.0 over stdio and exposes one tool, create_record_cid. It exists so an assistant can compute a real DAG-CBOR CID instead of producing something that looks like one.

Register it with an MCP clientListing 8
{
  "mcpServers": {
    "atpmcp": {
      "command": "/path/to/target/release/atpmcp"
    }
  }
}
cargo build -p atpmcp --release