{
  "service": "bluesky",
  "displayName": "Bluesky",
  "categories": [
    "Social",
    "Communication"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "App Password",
      "placeholder": "xxxx-xxxx-xxxx-xxxx",
      "description": "Bluesky app password used to create an AT Protocol session. Create an app password in Bluesky Settings > Privacy and Security > App Passwords: https://bsky.app/settings/app-passwords",
      "extraFields": [
        {
          "key": "handle",
          "label": "Handle",
          "inputType": "text",
          "required": true,
          "secret": false,
          "placeholder": "alice.bsky.social",
          "description": "Bluesky handle or DID used with the app password. Find your handle on your Bluesky profile or account settings: https://bsky.app/settings/account"
        }
      ]
    }
  ],
  "homepageUrl": "https://bsky.social",
  "actions": [
    {
      "id": "bluesky.create_text_post",
      "service": "bluesky",
      "name": "create_text_post",
      "description": "Create a Bluesky text post in the authenticated account's repository.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 3000,
            "description": "The primary post text."
          },
          "createdAt": {
            "type": "string",
            "description": "Client-declared timestamp for the post.",
            "format": "date-time"
          },
          "langs": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "A language code."
            },
            "description": "Human language codes for the post text.",
            "maxItems": 3
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 640,
              "description": "A hashtag value."
            },
            "description": "Additional hashtag values without the hash prefix.",
            "maxItems": 8
          },
          "facets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true,
              "description": "A Bluesky rich text facet object."
            },
            "description": "Rich text facets to attach to the post."
          },
          "reply": {
            "type": "object",
            "properties": {
              "root": {
                "type": "object",
                "properties": {
                  "uri": {
                    "type": "string",
                    "minLength": 1,
                    "description": "A Bluesky AT URI for a post or record."
                  },
                  "cid": {
                    "type": "string",
                    "minLength": 1,
                    "description": "A Bluesky content identifier."
                  }
                },
                "additionalProperties": false,
                "description": "A Bluesky strong reference to a post."
              },
              "parent": {
                "type": "object",
                "properties": {
                  "uri": {
                    "type": "string",
                    "minLength": 1,
                    "description": "A Bluesky AT URI for a post or record."
                  },
                  "cid": {
                    "type": "string",
                    "minLength": 1,
                    "description": "A Bluesky content identifier."
                  }
                },
                "additionalProperties": false,
                "description": "A Bluesky strong reference to a post."
              }
            },
            "additionalProperties": false,
            "description": "Reply references for creating a reply post."
          },
          "labels": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "A Bluesky self-label object."
          }
        },
        "additionalProperties": false,
        "required": [
          "text"
        ],
        "description": "Fields for creating a Bluesky text post."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "uri": {
            "type": "string",
            "minLength": 1,
            "description": "A Bluesky AT URI for a post or record."
          },
          "cid": {
            "type": "string",
            "minLength": 1,
            "description": "A Bluesky content identifier."
          },
          "validationStatus": {
            "anyOf": [
              {
                "type": "string",
                "description": "The validation status returned by Bluesky."
              },
              {
                "type": "null"
              }
            ]
          },
          "commit": {
            "anyOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true,
                "description": "The raw Bluesky object returned by the API."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "The Bluesky record creation response."
      }
    },
    {
      "id": "bluesky.get_profile",
      "service": "bluesky",
      "name": "get_profile",
      "description": "Get the detailed Bluesky profile for a handle or DID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "actor": {
            "type": "string",
            "minLength": 1,
            "description": "A Bluesky handle or DID."
          }
        },
        "additionalProperties": false,
        "description": "Parameters for retrieving a Bluesky profile."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "profile": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The detailed Bluesky profile object returned by the API."
          }
        },
        "additionalProperties": false,
        "description": "The Bluesky profile response."
      }
    },
    {
      "id": "bluesky.search_posts",
      "service": "bluesky",
      "name": "search_posts",
      "description": "Search Bluesky posts with common filters and pagination.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The Bluesky search query string."
          },
          "sort": {
            "type": "string",
            "enum": [
              "top",
              "latest"
            ],
            "description": "The ranking order for matching posts."
          },
          "since": {
            "type": "string",
            "minLength": 1,
            "description": "Return posts after this ISO date or datetime."
          },
          "until": {
            "type": "string",
            "minLength": 1,
            "description": "Return posts before this ISO date or datetime."
          },
          "mentions": {
            "type": "string",
            "minLength": 1,
            "description": "A Bluesky handle or DID."
          },
          "author": {
            "type": "string",
            "minLength": 1,
            "description": "A Bluesky handle or DID."
          },
          "lang": {
            "type": "string",
            "minLength": 1,
            "description": "Filter posts by language code."
          },
          "domain": {
            "type": "string",
            "minLength": 1,
            "description": "Filter posts by linked hostname."
          },
          "url": {
            "type": "string",
            "description": "Filter posts by linked URL.",
            "format": "uri"
          },
          "tag": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 640,
              "description": "A hashtag value."
            },
            "description": "Filter posts by hashtag values without the hash prefix."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The maximum number of posts to return."
          },
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "A cursor returned by Bluesky pagination."
          }
        },
        "additionalProperties": false,
        "required": [
          "q"
        ],
        "description": "Parameters for searching Bluesky posts."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "posts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uri": {
                  "type": "string",
                  "minLength": 1,
                  "description": "A Bluesky AT URI for a post or record."
                },
                "cid": {
                  "type": "string",
                  "minLength": 1,
                  "description": "A Bluesky content identifier."
                },
                "author": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The Bluesky author view for the post."
                },
                "record": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The raw Bluesky object returned by the API."
                },
                "indexedAt": {
                  "type": "string",
                  "description": "The server timestamp when the post was indexed."
                }
              },
              "additionalProperties": true,
              "description": "The raw Bluesky post view returned by search."
            },
            "description": "Posts returned by Bluesky."
          },
          "cursor": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "description": "A cursor returned by Bluesky pagination."
              },
              {
                "type": "null"
              }
            ]
          },
          "hitsTotal": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The total hit count when returned by Bluesky."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "description": "The Bluesky search response."
      }
    }
  ]
}
