Agent Skills: BlueSky with pdsx

Use this when working with BlueSky - fetching threads, reading posts, creating content. Shows you how to use pdsx MCP tools for the task.

blueskysocial-mediarest-apicli
integrationID: zzstoatzz/pdsx/bsky

Skill Files

Browse the full folder contents for bsky.

Download Skill

Loading file tree…

skills/bsky/SKILL.md

Skill Metadata

Name
bsky
Description
Use this when working with BlueSky - fetching threads, reading posts, creating content. Shows you how to use pdsx MCP tools for the task.

BlueSky with pdsx

Use the pdsx MCP tools (list_records, get_record, create_record, etc.) for BlueSky tasks.

Quick Reference

| Task | Tool | Example | |------|------|---------| | get a post | get_record | get_record(uri="at://did:plc:xxx/app.bsky.feed.post/abc123") | | list someone's posts | list_records | list_records("app.bsky.feed.post", repo="handle.bsky.social") | | get a profile | get_record | get_record(uri="app.bsky.actor.profile/self", repo="handle.bsky.social") | | create a post | create_record | create_record("app.bsky.feed.post", {"text": "hello"}) |

Following Threads

Threads span multiple users. Pattern:

  1. Get the root post to see its content and who posted it:

    get_record(uri="at://did:plc:xxx/app.bsky.feed.post/abc123")
    
  2. List the OP's posts to find replies:

    list_records("app.bsky.feed.post", repo="did:plc:xxx")
    

    Look for posts with reply fields pointing back to the thread.

  3. Extract DIDs from the URIs (format: at://DID/collection/rkey)

  4. Query each participant's posts for their contributions to the thread:

    list_records("app.bsky.feed.post", repo="did:plc:other")
    

    Filter the results locally to find posts where reply.root.uri matches the thread root.

Collections

| Collection | Purpose | |------------|---------| | app.bsky.feed.post | posts | | app.bsky.actor.profile | profile (rkey is always self) | | app.bsky.feed.like | likes | | app.bsky.feed.repost | reposts | | app.bsky.graph.follow | follows |

Post Structure

Posts reference other posts via reply:

{
  "text": "reply text",
  "reply": {
    "root": {"uri": "at://did/collection/rkey", "cid": "bafyrei..."},
    "parent": {"uri": "at://did/collection/rkey", "cid": "bafyrei..."}
  }
}
  • reply.root - thread's original post
  • reply.parent - immediate parent being replied to

Creating Posts

Simple:

create_record("app.bsky.feed.post", {"text": "hello world"})

Reply (requires both uri AND cid from the parent/root posts):

create_record("app.bsky.feed.post", {
    "text": "my reply",
    "reply": {
        "root": {"uri": "at://...", "cid": "..."},
        "parent": {"uri": "at://...", "cid": "..."}
    }
})

Gotchas

  1. strongRef needs uri AND cid - when creating replies, you need both from the parent post
  2. profile rkey is always self - use app.bsky.actor.profile/self
  3. byte indices for facets - links/mentions use UTF-8 byte positions, not character positions