naftiko: 1.0.0-alpha2 info: label: Zulip REST API — channels description: 'Zulip REST API — channels. 30 operations. Lead operation: Create BigBlueButton video call. Self-contained Naftiko capability covering one Zulip business surface.' tags: - Zulip - channels created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: ZULIP_API_KEY: ZULIP_API_KEY capability: consumes: - type: http namespace: zulip-channels baseUri: https://{subdomain}.zulipchat.com/api/v1 description: Zulip REST API — channels business capability. Self-contained, no shared references. resources: - name: calls-bigbluebutton-create path: /calls/bigbluebutton/create operations: - name: createbigbluebuttonvideocall method: GET description: Create BigBlueButton video call outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: meeting_name in: query type: string description: Meeting name for the BigBlueButton video call. required: true - name: voice_only in: query type: boolean description: Configures whether the call is voice-only; if true, - name: calls-constructorgroups-create path: /calls/constructorgroups/create operations: - name: createconstructorgroupsvideocall method: POST description: Create Constructor Groups video call outputRawFormat: json outputParameters: - name: result type: object value: $. - name: calls-nextcloud_talk-create path: /calls/nextcloud_talk/create operations: - name: createnextcloudtalkvideocall method: POST description: Create Nextcloud Talk video call outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: calls-webex-create path: /calls/webex/create operations: - name: createwebexvideocall method: POST description: Create Webex video call outputRawFormat: json outputParameters: - name: result type: object value: $. - name: channel_folders path: /channel_folders operations: - name: getchannelfolders method: GET description: Get channel folders outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: false - name: patchchannelfolders method: PATCH description: Reorder channel folders outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: channel_folders-create path: /channel_folders/create operations: - name: createchannelfolder method: POST description: Create a channel folder outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: channel_folders-channel_folder_id path: /channel_folders/{channel_folder_id} operations: - name: updatechannelfolder method: PATCH description: Update a channel folder outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: false - name: channels-create path: /channels/create operations: - name: createchannel method: POST description: Create a channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: default_streams path: /default_streams operations: - name: adddefaultstream method: POST description: Add a default channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: removedefaultstream method: DELETE description: Remove a default channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: get_stream_id path: /get_stream_id operations: - name: getstreamid method: GET description: Get channel ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: stream in: query type: string description: The name of the channel to access. required: true - name: streams path: /streams operations: - name: getstreams method: GET description: Get all channels outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: include_public in: query type: boolean description: Include all public channels. - name: include_web_public in: query type: boolean description: Include all web-public channels. - name: include_subscribed in: query type: boolean description: Include all channels that the user is subscribed to. - name: exclude_archived in: query type: boolean description: Whether to exclude archived streams from the results. - name: include_all_active in: query type: boolean description: Deprecated parameter to include all channels. The user must - name: include_all in: query type: boolean description: Include all channels that the user has metadata access to. - name: include_default in: query type: boolean description: Include all default channels for the user's realm. - name: include_owner_subscribed in: query type: boolean description: If the user is a bot, include all channels that the bot's owner is - name: include_can_access_content in: query type: boolean description: Include all the channels that the user has content access to. - name: streams-stream_id path: /streams/{stream_id} operations: - name: getstreambyid method: GET description: Get a channel by ID outputRawFormat: json outputParameters: - name: result type: object value: $. - name: archivestream method: DELETE description: Archive a channel outputRawFormat: json outputParameters: - name: result type: object value: $. - name: updatestream method: PATCH description: Update a channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: false - name: streams-stream_id-delete_topic path: /streams/{stream_id}/delete_topic operations: - name: deletetopic method: POST description: Delete a topic outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: streams-stream_id-email_address path: /streams/{stream_id}/email_address operations: - name: getstreamemailaddress method: GET description: Get channel's email address outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sender_id in: query type: integer description: The ID of a user or bot which should appear as the sender when messages - name: streams-stream_id-members path: /streams/{stream_id}/members operations: - name: getsubscribers method: GET description: Get channel subscribers outputRawFormat: json outputParameters: - name: result type: object value: $. - name: user_topics path: /user_topics operations: - name: updateusertopic method: POST description: Update personal preferences for a topic outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: users-me-subscriptions path: /users/me/subscriptions operations: - name: getsubscriptions method: GET description: Get subscribed channels outputRawFormat: json outputParameters: - name: result type: object value: $. - name: subscribe method: POST description: Subscribe to a channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: updatesubscriptions method: PATCH description: Update subscriptions outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: false - name: unsubscribe method: DELETE description: Unsubscribe from a channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: users-me-subscriptions-muted_topics path: /users/me/subscriptions/muted_topics operations: - name: mutetopic method: PATCH description: Topic muting outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: users-me-subscriptions-properties path: /users/me/subscriptions/properties operations: - name: updatesubscriptionsettings method: POST description: Bulk update subscription settings outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: users-me-subscriptions-stream_id path: /users/me/subscriptions/{stream_id} operations: - name: updatesubscriptionproperty method: PATCH description: Update a subscription setting outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: users-me-stream_id-topics path: /users/me/{stream_id}/topics operations: - name: getstreamtopics method: GET description: Get topics in a channel outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: allow_empty_topic_name in: query type: boolean description: Whether the client supports processing the empty string as - name: users-user_id-channels path: /users/{user_id}/channels operations: - name: getuserchannels method: GET description: Get a user's subscribed channels outputRawFormat: json outputParameters: - name: result type: object value: $. - name: users-user_id-subscriptions-stream_id path: /users/{user_id}/subscriptions/{stream_id} operations: - name: getsubscriptionstatus method: GET description: Get subscription status outputRawFormat: json outputParameters: - name: result type: object value: $. authentication: type: basic username: '{{env.ZULIP_USER}}' password: '{{env.ZULIP_PASS}}' exposes: - type: rest namespace: zulip-channels-rest port: 8080 description: REST adapter for Zulip REST API — channels. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/calls/bigbluebutton/create name: calls-bigbluebutton-create description: REST surface for calls-bigbluebutton-create. operations: - method: GET name: createbigbluebuttonvideocall description: Create BigBlueButton video call call: zulip-channels.createbigbluebuttonvideocall with: meeting_name: rest.meeting_name voice_only: rest.voice_only outputParameters: - type: object mapping: $. - path: /v1/calls/constructorgroups/create name: calls-constructorgroups-create description: REST surface for calls-constructorgroups-create. operations: - method: POST name: createconstructorgroupsvideocall description: Create Constructor Groups video call call: zulip-channels.createconstructorgroupsvideocall outputParameters: - type: object mapping: $. - path: /v1/calls/nextcloud-talk/create name: calls-nextcloud-talk-create description: REST surface for calls-nextcloud_talk-create. operations: - method: POST name: createnextcloudtalkvideocall description: Create Nextcloud Talk video call call: zulip-channels.createnextcloudtalkvideocall with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/calls/webex/create name: calls-webex-create description: REST surface for calls-webex-create. operations: - method: POST name: createwebexvideocall description: Create Webex video call call: zulip-channels.createwebexvideocall outputParameters: - type: object mapping: $. - path: /v1/channel-folders name: channel-folders description: REST surface for channel_folders. operations: - method: GET name: getchannelfolders description: Get channel folders call: zulip-channels.getchannelfolders with: body: rest.body outputParameters: - type: object mapping: $. - method: PATCH name: patchchannelfolders description: Reorder channel folders call: zulip-channels.patchchannelfolders with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/channel-folders/create name: channel-folders-create description: REST surface for channel_folders-create. operations: - method: POST name: createchannelfolder description: Create a channel folder call: zulip-channels.createchannelfolder with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/channel-folders/{channel-folder-id} name: channel-folders-channel-folder-id description: REST surface for channel_folders-channel_folder_id. operations: - method: PATCH name: updatechannelfolder description: Update a channel folder call: zulip-channels.updatechannelfolder with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/channels/create name: channels-create description: REST surface for channels-create. operations: - method: POST name: createchannel description: Create a channel call: zulip-channels.createchannel with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/default-streams name: default-streams description: REST surface for default_streams. operations: - method: POST name: adddefaultstream description: Add a default channel call: zulip-channels.adddefaultstream with: body: rest.body outputParameters: - type: object mapping: $. - method: DELETE name: removedefaultstream description: Remove a default channel call: zulip-channels.removedefaultstream with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/get-stream-id name: get-stream-id description: REST surface for get_stream_id. operations: - method: GET name: getstreamid description: Get channel ID call: zulip-channels.getstreamid with: stream: rest.stream outputParameters: - type: object mapping: $. - path: /v1/streams name: streams description: REST surface for streams. operations: - method: GET name: getstreams description: Get all channels call: zulip-channels.getstreams with: include_public: rest.include_public include_web_public: rest.include_web_public include_subscribed: rest.include_subscribed exclude_archived: rest.exclude_archived include_all_active: rest.include_all_active include_all: rest.include_all include_default: rest.include_default include_owner_subscribed: rest.include_owner_subscribed include_can_access_content: rest.include_can_access_content outputParameters: - type: object mapping: $. - path: /v1/streams/{stream-id} name: streams-stream-id description: REST surface for streams-stream_id. operations: - method: GET name: getstreambyid description: Get a channel by ID call: zulip-channels.getstreambyid outputParameters: - type: object mapping: $. - method: DELETE name: archivestream description: Archive a channel call: zulip-channels.archivestream outputParameters: - type: object mapping: $. - method: PATCH name: updatestream description: Update a channel call: zulip-channels.updatestream with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/streams/{stream-id}/delete-topic name: streams-stream-id-delete-topic description: REST surface for streams-stream_id-delete_topic. operations: - method: POST name: deletetopic description: Delete a topic call: zulip-channels.deletetopic with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/streams/{stream-id}/email-address name: streams-stream-id-email-address description: REST surface for streams-stream_id-email_address. operations: - method: GET name: getstreamemailaddress description: Get channel's email address call: zulip-channels.getstreamemailaddress with: sender_id: rest.sender_id outputParameters: - type: object mapping: $. - path: /v1/streams/{stream-id}/members name: streams-stream-id-members description: REST surface for streams-stream_id-members. operations: - method: GET name: getsubscribers description: Get channel subscribers call: zulip-channels.getsubscribers outputParameters: - type: object mapping: $. - path: /v1/user-topics name: user-topics description: REST surface for user_topics. operations: - method: POST name: updateusertopic description: Update personal preferences for a topic call: zulip-channels.updateusertopic with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/users/me/subscriptions name: users-me-subscriptions description: REST surface for users-me-subscriptions. operations: - method: GET name: getsubscriptions description: Get subscribed channels call: zulip-channels.getsubscriptions outputParameters: - type: object mapping: $. - method: POST name: subscribe description: Subscribe to a channel call: zulip-channels.subscribe with: body: rest.body outputParameters: - type: object mapping: $. - method: PATCH name: updatesubscriptions description: Update subscriptions call: zulip-channels.updatesubscriptions with: body: rest.body outputParameters: - type: object mapping: $. - method: DELETE name: unsubscribe description: Unsubscribe from a channel call: zulip-channels.unsubscribe with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/users/me/subscriptions/muted-topics name: users-me-subscriptions-muted-topics description: REST surface for users-me-subscriptions-muted_topics. operations: - method: PATCH name: mutetopic description: Topic muting call: zulip-channels.mutetopic with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/users/me/subscriptions/properties name: users-me-subscriptions-properties description: REST surface for users-me-subscriptions-properties. operations: - method: POST name: updatesubscriptionsettings description: Bulk update subscription settings call: zulip-channels.updatesubscriptionsettings with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/users/me/subscriptions/{stream-id} name: users-me-subscriptions-stream-id description: REST surface for users-me-subscriptions-stream_id. operations: - method: PATCH name: updatesubscriptionproperty description: Update a subscription setting call: zulip-channels.updatesubscriptionproperty with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/users/me/{stream-id}/topics name: users-me-stream-id-topics description: REST surface for users-me-stream_id-topics. operations: - method: GET name: getstreamtopics description: Get topics in a channel call: zulip-channels.getstreamtopics with: allow_empty_topic_name: rest.allow_empty_topic_name outputParameters: - type: object mapping: $. - path: /v1/users/{user-id}/channels name: users-user-id-channels description: REST surface for users-user_id-channels. operations: - method: GET name: getuserchannels description: Get a user's subscribed channels call: zulip-channels.getuserchannels outputParameters: - type: object mapping: $. - path: /v1/users/{user-id}/subscriptions/{stream-id} name: users-user-id-subscriptions-stream-id description: REST surface for users-user_id-subscriptions-stream_id. operations: - method: GET name: getsubscriptionstatus description: Get subscription status call: zulip-channels.getsubscriptionstatus outputParameters: - type: object mapping: $. - type: mcp namespace: zulip-channels-mcp port: 9090 transport: http description: MCP adapter for Zulip REST API — channels. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: create-bigbluebutton-video-call description: Create BigBlueButton video call hints: readOnly: true destructive: false idempotent: true call: zulip-channels.createbigbluebuttonvideocall with: meeting_name: tools.meeting_name voice_only: tools.voice_only outputParameters: - type: object mapping: $. - name: create-constructor-groups-video-call description: Create Constructor Groups video call hints: readOnly: false destructive: false idempotent: false call: zulip-channels.createconstructorgroupsvideocall outputParameters: - type: object mapping: $. - name: create-nextcloud-talk-video-call description: Create Nextcloud Talk video call hints: readOnly: false destructive: false idempotent: false call: zulip-channels.createnextcloudtalkvideocall with: body: tools.body outputParameters: - type: object mapping: $. - name: create-webex-video-call description: Create Webex video call hints: readOnly: false destructive: false idempotent: false call: zulip-channels.createwebexvideocall outputParameters: - type: object mapping: $. - name: get-channel-folders description: Get channel folders hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getchannelfolders with: body: tools.body outputParameters: - type: object mapping: $. - name: reorder-channel-folders description: Reorder channel folders hints: readOnly: false destructive: false idempotent: true call: zulip-channels.patchchannelfolders with: body: tools.body outputParameters: - type: object mapping: $. - name: create-channel-folder description: Create a channel folder hints: readOnly: false destructive: false idempotent: false call: zulip-channels.createchannelfolder with: body: tools.body outputParameters: - type: object mapping: $. - name: update-channel-folder description: Update a channel folder hints: readOnly: false destructive: false idempotent: true call: zulip-channels.updatechannelfolder with: body: tools.body outputParameters: - type: object mapping: $. - name: create-channel description: Create a channel hints: readOnly: false destructive: false idempotent: false call: zulip-channels.createchannel with: body: tools.body outputParameters: - type: object mapping: $. - name: add-default-channel description: Add a default channel hints: readOnly: false destructive: false idempotent: false call: zulip-channels.adddefaultstream with: body: tools.body outputParameters: - type: object mapping: $. - name: remove-default-channel description: Remove a default channel hints: readOnly: false destructive: true idempotent: true call: zulip-channels.removedefaultstream with: body: tools.body outputParameters: - type: object mapping: $. - name: get-channel-id description: Get channel ID hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getstreamid with: stream: tools.stream outputParameters: - type: object mapping: $. - name: get-all-channels description: Get all channels hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getstreams with: include_public: tools.include_public include_web_public: tools.include_web_public include_subscribed: tools.include_subscribed exclude_archived: tools.exclude_archived include_all_active: tools.include_all_active include_all: tools.include_all include_default: tools.include_default include_owner_subscribed: tools.include_owner_subscribed include_can_access_content: tools.include_can_access_content outputParameters: - type: object mapping: $. - name: get-channel-id-2 description: Get a channel by ID hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getstreambyid outputParameters: - type: object mapping: $. - name: archive-channel description: Archive a channel hints: readOnly: false destructive: true idempotent: true call: zulip-channels.archivestream outputParameters: - type: object mapping: $. - name: update-channel description: Update a channel hints: readOnly: false destructive: false idempotent: true call: zulip-channels.updatestream with: body: tools.body outputParameters: - type: object mapping: $. - name: delete-topic description: Delete a topic hints: readOnly: false destructive: false idempotent: false call: zulip-channels.deletetopic with: body: tools.body outputParameters: - type: object mapping: $. - name: get-channel-s-email-address description: Get channel's email address hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getstreamemailaddress with: sender_id: tools.sender_id outputParameters: - type: object mapping: $. - name: get-channel-subscribers description: Get channel subscribers hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getsubscribers outputParameters: - type: object mapping: $. - name: update-personal-preferences-topic description: Update personal preferences for a topic hints: readOnly: false destructive: false idempotent: false call: zulip-channels.updateusertopic with: body: tools.body outputParameters: - type: object mapping: $. - name: get-subscribed-channels description: Get subscribed channels hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getsubscriptions outputParameters: - type: object mapping: $. - name: subscribe-channel description: Subscribe to a channel hints: readOnly: false destructive: false idempotent: false call: zulip-channels.subscribe with: body: tools.body outputParameters: - type: object mapping: $. - name: update-subscriptions description: Update subscriptions hints: readOnly: false destructive: false idempotent: true call: zulip-channels.updatesubscriptions with: body: tools.body outputParameters: - type: object mapping: $. - name: unsubscribe-channel description: Unsubscribe from a channel hints: readOnly: false destructive: true idempotent: true call: zulip-channels.unsubscribe with: body: tools.body outputParameters: - type: object mapping: $. - name: topic-muting description: Topic muting hints: readOnly: false destructive: false idempotent: true call: zulip-channels.mutetopic with: body: tools.body outputParameters: - type: object mapping: $. - name: bulk-update-subscription-settings description: Bulk update subscription settings hints: readOnly: false destructive: false idempotent: false call: zulip-channels.updatesubscriptionsettings with: body: tools.body outputParameters: - type: object mapping: $. - name: update-subscription-setting description: Update a subscription setting hints: readOnly: false destructive: false idempotent: true call: zulip-channels.updatesubscriptionproperty with: body: tools.body outputParameters: - type: object mapping: $. - name: get-topics-channel description: Get topics in a channel hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getstreamtopics with: allow_empty_topic_name: tools.allow_empty_topic_name outputParameters: - type: object mapping: $. - name: get-user-s-subscribed-channels description: Get a user's subscribed channels hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getuserchannels outputParameters: - type: object mapping: $. - name: get-subscription-status description: Get subscription status hints: readOnly: true destructive: false idempotent: true call: zulip-channels.getsubscriptionstatus outputParameters: - type: object mapping: $.