naftiko: 1.0.0-alpha2 info: label: Bluesky Social API — Ozone Moderation description: 'Bluesky Social API — Ozone Moderation. 9 operations. Lead operation: Bluesky Take a moderation action on an actor.. Self-contained Naftiko capability covering one Bluesky business surface.' tags: - Bluesky - Ozone Moderation created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: BLUESKY_API_KEY: BLUESKY_API_KEY capability: consumes: - type: http namespace: bluesky-ozone-moderation baseUri: https://bsky.social/xrpc description: Bluesky Social API — Ozone Moderation business capability. Self-contained, no shared references. resources: - name: xrpc-tools.ozone.moderation.emitEvent path: /xrpc/tools.ozone.moderation.emitEvent operations: - name: ozonemoderationemitevent method: POST description: Bluesky Take a moderation action on an actor. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: xrpc-tools.ozone.moderation.getEvent path: /xrpc/tools.ozone.moderation.getEvent operations: - name: ozonemoderationgetevent method: GET description: Bluesky Get details about a moderation event. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: id in: query type: integer required: true - name: xrpc-tools.ozone.moderation.getRecord path: /xrpc/tools.ozone.moderation.getRecord operations: - name: ozonemoderationgetrecord method: GET description: Bluesky Get details about a record. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: uri in: query type: string required: true - name: cid in: query type: string - name: xrpc-tools.ozone.moderation.getRecords path: /xrpc/tools.ozone.moderation.getRecords operations: - name: ozonemoderationgetrecords method: GET description: Bluesky Get details about some records. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: uris in: query type: array required: true - name: xrpc-tools.ozone.moderation.getRepo path: /xrpc/tools.ozone.moderation.getRepo operations: - name: ozonemoderationgetrepo method: GET description: Bluesky Get details about a repository. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: did in: query type: string required: true - name: xrpc-tools.ozone.moderation.getRepos path: /xrpc/tools.ozone.moderation.getRepos operations: - name: ozonemoderationgetrepos method: GET description: Bluesky Get details about some repositories. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: dids in: query type: array required: true - name: xrpc-tools.ozone.moderation.queryEvents path: /xrpc/tools.ozone.moderation.queryEvents operations: - name: ozonemoderationqueryevents method: GET description: Bluesky List moderation events related to a subject. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: types in: query type: array description: The types of events (fully qualified string in the format of tools.ozone.moderation.defs#modEvent) to filter by. If not specified, all events are returned - name: createdBy in: query type: string - name: sortDirection in: query type: string description: Sort direction for the events. Defaults to descending order of created at timestamp. - name: createdAfter in: query type: string description: Retrieve events created after a given timestamp - name: createdBefore in: query type: string description: Retrieve events created before a given timestamp - name: subject in: query type: string - name: collections in: query type: array description: If specified, only events where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored. - name: subjectType in: query type: string description: If specified, only events where the subject is of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter - name: includeAllUserRecords in: query type: boolean description: If true, events on all record types (posts, lists, profile etc.) or records from given 'collections' param, owned by the did are returned. - name: limit in: query type: integer - name: hasComment in: query type: boolean description: If true, only events with comments are returned - name: comment in: query type: string description: If specified, only events with comments containing the keyword are returned - name: addedLabels in: query type: array description: If specified, only events where all of these labels were added are returned - name: removedLabels in: query type: array description: If specified, only events where all of these labels were removed are returned - name: addedTags in: query type: array description: If specified, only events where all of these tags were added are returned - name: removedTags in: query type: array description: If specified, only events where all of these tags were removed are returned - name: reportTypes in: query type: array - name: cursor in: query type: string - name: xrpc-tools.ozone.moderation.queryStatuses path: /xrpc/tools.ozone.moderation.queryStatuses operations: - name: ozonemoderationquerystatuses method: GET description: Bluesky View moderation statuses of subjects (record or repo). outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: includeAllUserRecords in: query type: boolean description: All subjects, or subjects from given 'collections' param, belonging to the account specified in the 'subject' param will be returned. - name: subject in: query type: string description: The subject to get the status for. - name: comment in: query type: string description: Search subjects by keyword from comments - name: reportedAfter in: query type: string description: Search subjects reported after a given timestamp - name: reportedBefore in: query type: string description: Search subjects reported before a given timestamp - name: reviewedAfter in: query type: string description: Search subjects reviewed after a given timestamp - name: hostingDeletedAfter in: query type: string description: Search subjects where the associated record/account was deleted after a given timestamp - name: hostingDeletedBefore in: query type: string description: Search subjects where the associated record/account was deleted before a given timestamp - name: hostingUpdatedAfter in: query type: string description: Search subjects where the associated record/account was updated after a given timestamp - name: hostingUpdatedBefore in: query type: string description: Search subjects where the associated record/account was updated before a given timestamp - name: hostingStatuses in: query type: array description: Search subjects by the status of the associated record/account - name: reviewedBefore in: query type: string description: Search subjects reviewed before a given timestamp - name: includeMuted in: query type: boolean description: By default, we don't include muted subjects in the results. Set this to true to include them. - name: onlyMuted in: query type: boolean description: When set to true, only muted subjects and reporters will be returned. - name: reviewState in: query type: string description: Specify when fetching subjects in a certain state - name: ignoreSubjects in: query type: array - name: lastReviewedBy in: query type: string description: Get all subject statuses that were reviewed by a specific moderator - name: sortField in: query type: string - name: sortDirection in: query type: string - name: takendown in: query type: boolean description: Get subjects that were taken down - name: appealed in: query type: boolean description: Get subjects in unresolved appealed status - name: limit in: query type: integer - name: tags in: query type: array - name: excludeTags in: query type: array - name: cursor in: query type: string - name: collections in: query type: array description: If specified, subjects belonging to the given collections will be returned. When subjectType is set to 'account', this will be ignored. - name: subjectType in: query type: string description: If specified, subjects of the given type (account or record) will be returned. When this is set to 'account' the 'collections' parameter will be ignored. When i - name: xrpc-tools.ozone.moderation.searchRepos path: /xrpc/tools.ozone.moderation.searchRepos operations: - name: ozonemoderationsearchrepos method: GET description: Bluesky Find repositories based on a search term. outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: q in: query type: string - name: limit in: query type: integer - name: cursor in: query type: string authentication: type: bearer token: '{{env.BLUESKY_API_KEY}}' exposes: - type: rest namespace: bluesky-ozone-moderation-rest port: 8080 description: REST adapter for Bluesky Social API — Ozone Moderation. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/xrpc/tools-ozone-moderation-emitevent name: xrpc-tools-ozone-moderation-emitevent description: REST surface for xrpc-tools.ozone.moderation.emitEvent. operations: - method: POST name: ozonemoderationemitevent description: Bluesky Take a moderation action on an actor. call: bluesky-ozone-moderation.ozonemoderationemitevent with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-getevent name: xrpc-tools-ozone-moderation-getevent description: REST surface for xrpc-tools.ozone.moderation.getEvent. operations: - method: GET name: ozonemoderationgetevent description: Bluesky Get details about a moderation event. call: bluesky-ozone-moderation.ozonemoderationgetevent with: id: rest.id outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-getrecord name: xrpc-tools-ozone-moderation-getrecord description: REST surface for xrpc-tools.ozone.moderation.getRecord. operations: - method: GET name: ozonemoderationgetrecord description: Bluesky Get details about a record. call: bluesky-ozone-moderation.ozonemoderationgetrecord with: uri: rest.uri cid: rest.cid outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-getrecords name: xrpc-tools-ozone-moderation-getrecords description: REST surface for xrpc-tools.ozone.moderation.getRecords. operations: - method: GET name: ozonemoderationgetrecords description: Bluesky Get details about some records. call: bluesky-ozone-moderation.ozonemoderationgetrecords with: uris: rest.uris outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-getrepo name: xrpc-tools-ozone-moderation-getrepo description: REST surface for xrpc-tools.ozone.moderation.getRepo. operations: - method: GET name: ozonemoderationgetrepo description: Bluesky Get details about a repository. call: bluesky-ozone-moderation.ozonemoderationgetrepo with: did: rest.did outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-getrepos name: xrpc-tools-ozone-moderation-getrepos description: REST surface for xrpc-tools.ozone.moderation.getRepos. operations: - method: GET name: ozonemoderationgetrepos description: Bluesky Get details about some repositories. call: bluesky-ozone-moderation.ozonemoderationgetrepos with: dids: rest.dids outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-queryevents name: xrpc-tools-ozone-moderation-queryevents description: REST surface for xrpc-tools.ozone.moderation.queryEvents. operations: - method: GET name: ozonemoderationqueryevents description: Bluesky List moderation events related to a subject. call: bluesky-ozone-moderation.ozonemoderationqueryevents with: types: rest.types createdBy: rest.createdBy sortDirection: rest.sortDirection createdAfter: rest.createdAfter createdBefore: rest.createdBefore subject: rest.subject collections: rest.collections subjectType: rest.subjectType includeAllUserRecords: rest.includeAllUserRecords limit: rest.limit hasComment: rest.hasComment comment: rest.comment addedLabels: rest.addedLabels removedLabels: rest.removedLabels addedTags: rest.addedTags removedTags: rest.removedTags reportTypes: rest.reportTypes cursor: rest.cursor outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-querystatuses name: xrpc-tools-ozone-moderation-querystatuses description: REST surface for xrpc-tools.ozone.moderation.queryStatuses. operations: - method: GET name: ozonemoderationquerystatuses description: Bluesky View moderation statuses of subjects (record or repo). call: bluesky-ozone-moderation.ozonemoderationquerystatuses with: includeAllUserRecords: rest.includeAllUserRecords subject: rest.subject comment: rest.comment reportedAfter: rest.reportedAfter reportedBefore: rest.reportedBefore reviewedAfter: rest.reviewedAfter hostingDeletedAfter: rest.hostingDeletedAfter hostingDeletedBefore: rest.hostingDeletedBefore hostingUpdatedAfter: rest.hostingUpdatedAfter hostingUpdatedBefore: rest.hostingUpdatedBefore hostingStatuses: rest.hostingStatuses reviewedBefore: rest.reviewedBefore includeMuted: rest.includeMuted onlyMuted: rest.onlyMuted reviewState: rest.reviewState ignoreSubjects: rest.ignoreSubjects lastReviewedBy: rest.lastReviewedBy sortField: rest.sortField sortDirection: rest.sortDirection takendown: rest.takendown appealed: rest.appealed limit: rest.limit tags: rest.tags excludeTags: rest.excludeTags cursor: rest.cursor collections: rest.collections subjectType: rest.subjectType outputParameters: - type: object mapping: $. - path: /v1/xrpc/tools-ozone-moderation-searchrepos name: xrpc-tools-ozone-moderation-searchrepos description: REST surface for xrpc-tools.ozone.moderation.searchRepos. operations: - method: GET name: ozonemoderationsearchrepos description: Bluesky Find repositories based on a search term. call: bluesky-ozone-moderation.ozonemoderationsearchrepos with: q: rest.q limit: rest.limit cursor: rest.cursor outputParameters: - type: object mapping: $. - type: mcp namespace: bluesky-ozone-moderation-mcp port: 9090 transport: http description: MCP adapter for Bluesky Social API — Ozone Moderation. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: bluesky-take-moderation-action-actor description: Bluesky Take a moderation action on an actor. hints: readOnly: false destructive: false idempotent: false call: bluesky-ozone-moderation.ozonemoderationemitevent with: body: tools.body outputParameters: - type: object mapping: $. - name: bluesky-get-details-about-moderation description: Bluesky Get details about a moderation event. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationgetevent with: id: tools.id outputParameters: - type: object mapping: $. - name: bluesky-get-details-about-record description: Bluesky Get details about a record. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationgetrecord with: uri: tools.uri cid: tools.cid outputParameters: - type: object mapping: $. - name: bluesky-get-details-about-some description: Bluesky Get details about some records. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationgetrecords with: uris: tools.uris outputParameters: - type: object mapping: $. - name: bluesky-get-details-about-repository description: Bluesky Get details about a repository. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationgetrepo with: did: tools.did outputParameters: - type: object mapping: $. - name: bluesky-get-details-about-some-2 description: Bluesky Get details about some repositories. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationgetrepos with: dids: tools.dids outputParameters: - type: object mapping: $. - name: bluesky-list-moderation-events-related description: Bluesky List moderation events related to a subject. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationqueryevents with: types: tools.types createdBy: tools.createdBy sortDirection: tools.sortDirection createdAfter: tools.createdAfter createdBefore: tools.createdBefore subject: tools.subject collections: tools.collections subjectType: tools.subjectType includeAllUserRecords: tools.includeAllUserRecords limit: tools.limit hasComment: tools.hasComment comment: tools.comment addedLabels: tools.addedLabels removedLabels: tools.removedLabels addedTags: tools.addedTags removedTags: tools.removedTags reportTypes: tools.reportTypes cursor: tools.cursor outputParameters: - type: object mapping: $. - name: bluesky-view-moderation-statuses-subjects description: Bluesky View moderation statuses of subjects (record or repo). hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationquerystatuses with: includeAllUserRecords: tools.includeAllUserRecords subject: tools.subject comment: tools.comment reportedAfter: tools.reportedAfter reportedBefore: tools.reportedBefore reviewedAfter: tools.reviewedAfter hostingDeletedAfter: tools.hostingDeletedAfter hostingDeletedBefore: tools.hostingDeletedBefore hostingUpdatedAfter: tools.hostingUpdatedAfter hostingUpdatedBefore: tools.hostingUpdatedBefore hostingStatuses: tools.hostingStatuses reviewedBefore: tools.reviewedBefore includeMuted: tools.includeMuted onlyMuted: tools.onlyMuted reviewState: tools.reviewState ignoreSubjects: tools.ignoreSubjects lastReviewedBy: tools.lastReviewedBy sortField: tools.sortField sortDirection: tools.sortDirection takendown: tools.takendown appealed: tools.appealed limit: tools.limit tags: tools.tags excludeTags: tools.excludeTags cursor: tools.cursor collections: tools.collections subjectType: tools.subjectType outputParameters: - type: object mapping: $. - name: bluesky-find-repositories-based-search description: Bluesky Find repositories based on a search term. hints: readOnly: true destructive: false idempotent: true call: bluesky-ozone-moderation.ozonemoderationsearchrepos with: q: tools.q limit: tools.limit cursor: tools.cursor outputParameters: - type: object mapping: $.